Sign in Get started

Agent tools

Fetch the JSON Schema array of every agent-callable tool. The same registry the Python SDK exposes via Toolkit.as_json_schema().

View as Markdown

GET /api/v1/developer/tools.json serves the agent tool registry as a JSON Schema array. Dynamic-discovery agent stacks (Vercel AI SDK, LangChain, raw OpenAI / Anthropic SDKs without the bundled adapters) fetch this once and have everything they need.

The registry is the single source of truth: the Python SDK’s as_anthropic_tools() / as_openai_tools() / as_json_schema() all derive from it, and a parity check fails the build if the served snapshot and the SDK’s registry disagree.

This is a reference endpoint rather than a CRUD resource, so there is one read call. Any role works.

Fetch the registry

The SDK builds the same payload locally with no HTTP round-trip; the CLI writes it to a file; the REST endpoint returns it over the wire.

from pictograph.agents import create_toolkit

toolkit = create_toolkit()           # reads PICTOGRAPH_API_KEY
schema = toolkit.as_json_schema()    # same payload the REST endpoint returns
for tool in schema:
    print(tool["name"], tool["required_role"])
pictograph agents export-tools --output tools.json
curl -s "https://api.pictograph.io/api/v1/developer/tools.json" \
  -H "X-API-Key: $PICTOGRAPH_API_KEY"

/api/v1/developer/tools returns identical content, for callers that prefer a path without the extension.

Response shape

{
  "tools": [
    {
      "name": "upload_dataset_from_directory",
      "description": "Use when the user asks to upload a directory of images …",
      "input_schema": {
        "type": "object",
        "properties": {
          "dataset_name": { "type": "string", "description": "…" },
          "directory":    { "type": "string", "description": "…" }
        },
        "required": ["dataset_name", "directory"],
        "additionalProperties": false
      },
      "required_role": "member",
      "cost_micro_usd": 0,
      "idempotent": false
    }
  ],
  "version": "1.0.0",
  "count": 37,
  "generated_at": "2026-08-02T06:06:11Z"
}
Field Notes
name Snake-case identifier. Stable across SDK versions.
description “Use when X” framing. Agents read this to choose between tools.
input_schema JSON Schema with additionalProperties: false.
required_role Minimum org role on the calling API key. Re-enforced server-side.
cost_micro_usd Approximate cost in micro-USD (0 for read-only and free ops). Agents may gate on it.
idempotent When true, agents may safely retry on transient failures.

Tool list (v1.0.0)

37 tools. See the agents overview for the dispatch pattern.

Category Tools
Pipelines upload_dataset_from_directory, auto_annotate_dataset, augment_dataset, tile_dataset, train_pipeline
Datasets list_datasets, get_dataset, create_dataset, delete_dataset
Images upload_image, delete_image, review_image, set_image_split, rebalance_dataset_splits
Annotations get_annotations, save_annotations
Auto-annotate auto_annotate_point, auto_annotate_box, auto_annotate_text
Search search_by_tag, search_by_similarity
Exports create_export, list_exports, download_export
Training get_training_status, cancel_training
Models list_models, download_model
Deployments list_deployments, get_deployment, create_deployment, delete_deployment
Notifications list_notifications
Credits get_credit_balance, estimate_credit_cost
Connectors validate_connector, import_from_connector

Provider-shaped tool lists

The registry is importable directly, and the toolkit emits tool lists already shaped for the Anthropic and OpenAI SDKs from that same source.

from pictograph.agents import REGISTRY, create_toolkit

for descriptor in REGISTRY:      # no client needed
    print(descriptor.name, descriptor.required_role, descriptor.cost_micro_usd)

toolkit = create_toolkit()
anthropic_tools = toolkit.as_anthropic_tools()   # name/description/input_schema
openai_tools = toolkit.as_openai_tools()         # OpenAI function-calling format

Versioning

The version field tracks the SDK release that generated the snapshot. Tools may be added between minor versions; renames and removals only happen at major versions and are listed in the changelog.

Copied to clipboard