Skip to content

Hosted API — Getting started

TrustTyped offers two ways to run the same extraction engine:

Hosted API (this section) Self-hosted engine
Base URL https://api.trusttyped.com your own typed-serve deployment
Endpoint POST /v1/extract POST /v1/typed
Auth API key (Authorization: Bearer) none / your own
Try it console.trusttyped.com local /ui/

This section covers the hosted service. The rest of this site documents the underlying engine (schemas, fields, rules, tool calls), which applies to both.

You can make your first call in under five minutes.

1. Get access

TrustTyped is in closed beta. Sign in at platform.trusttyped.com/login — Google sign-in only. If your email is on the beta list you go straight in; otherwise you are added to the waitlist.

2. Create an API key

In the platform, open API keys and create a key for a project. Two kinds:

  • tt_live_… — production traffic.
  • tt_test_… — testing.

The key is shown once. Copy it somewhere safe; only a hash is stored. If it leaks, revoke it in the platform and create a new one — revocation takes effect within about a second. See Authentication.

A key belongs to one project

A key only ever reads and writes its own project. There is no parameter to reach another project, even by mistake.

3. Your first call

POST /v1/extract takes a schema (the fields you want) and an input (text, messages, or an image). It returns typed values with confidence.

curl https://api.trusttyped.com/v1/extract \
  -H "Authorization: Bearer tt_live_EXAMPLE0000000000000000000000000000000000" \
  -H "Content-Type: application/json" \
  -d '{
    "schema": {
      "merchant": {"type": "string", "instruction": "Store name"},
      "total":    {"type": "number", "integer": true, "instruction": "Final total"},
      "paid":     {"type": "bool", "instruction": "Was it paid?"}
    },
    "input": {
      "text": "Sunrise Cafe. Fried Rice 25000, Iced Tea 8000. Total 33000. Paid in cash."
    }
  }'

A real response (trimmed):

{
  "id": "req_01J9Z3K5T7W2Q8M4N6P0R1S2V3",
  "object": "extraction",
  "model": "typed-small-1",
  "schema": {"id": null, "version": null, "hash": "sha256:ed33…"},
  "result": {"merchant": "Sunrise Cafe", "total": 33000, "paid": true},
  "fields": {
    "merchant": {"confidence": 1.0, "needs_review": false},
    "total":    {"confidence": 1.0, "needs_review": false},
    "paid":     {"confidence": 0.9998, "needs_review": false}
  },
  "rejected": null,
  "ended": null,
  "provenance": {
    "engine_version": "0.3.2",
    "model_revision": "7479749d…",
    "backend": "cpu",
    "schema_hash": "sha256:ed33…",
    "input_hash": "sha256:d8a5…",
    "system_hash": null,
    "messages_hash": null
  },
  "usage": {"input_tokens": 41, "output_tokens": 12, "fields": 3, "images": 0},
  "timing": {"queue_ms": 3, "inference_ms": 4120, "total_ms": 4161}
}

The response header X-Request-Id carries the same id, so you can quote it in a support request. The server also echoes a client-supplied X-Request-Id when it matches the documented pattern.

The engine is CPU-only today

Responses usually take a few seconds and can take tens of seconds on large schemas. Use a client timeout of at least 120 seconds, and prefer streaming for progress.

4. Next steps

  • :material-key: Authentication — keys, headers, revocation.
  • :material-file-document-outline: Extract — the request and response in full.
  • :material-progress-upload: Streaming — show results as they decode.
  • :material-refresh: Idempotency — safe retries.
  • :material-speedometer: Rate limits — limits and backoff.
  • :material-alert-circle-outline: Errors — every code and what to do.
  • :material-chart-line: Usage — programmatic usage summaries.