Quickstart

The three verbs, with real requests that match what the API actually accepts today.

Every request needs an API key. There is no public sign-up yet — this page documents what the API does, not a product you can register for today.

Authorization: Bearer sk_live_…

discover — which capability

curl -s https://sealyx.ai/v1/discover \
  -H "authorization: Bearer $SEAL_KEY" \
  -H 'content-type: application/json' \
  -d '{"query":"scrape a web page as markdown","limit":5}'

Returns candidates with an id, a description and a price. It answers which one, and deliberately does not return call schemas — those are two orders of magnitude larger, and returning five of them to answer a search would bury the answer.

inspect — how to call it

curl -s https://sealyx.ai/v1/inspect \
  -H "authorization: Bearer $SEAL_KEY" \
  -H 'content-type: application/json' \
  -d '{"id":"monid:context.dev/web/scrape/markdown"}'

Returns the input schema plus guidance — prose rules that JSON Schema cannot express, like “register the asset first” or “duration must be 5–12s for this model”. A schema alone is enough to build a request that type-checks and is guaranteed to fail.

run — spend money

curl -s https://sealyx.ai/v1/run \
  -H "authorization: Bearer $SEAL_KEY" \
  -H "idempotency-key: $(uuidgen)" \
  -H 'content-type: application/json' \
  -d '{
    "capabilityId": "monid:context.dev/web/scrape/markdown",
    "input": { "queryParams": { "url": "https://example.com" } },
    "maxCostMicros": 5000
  }'

Three things about this request are not optional:

idempotency-key is a required header, 8–255 characters. The upstream has no idempotency mechanism of its own — two identical POSTs produce two runs and two charges — so sealyx guarantees at-most-once entirely from its own state, and that guarantee is keyed on this header. Reusing a key with a different body returns 409.

maxCostMicros is required, and must be at least the capability’s known floor (900 for the example above). Without a server-known floor, declaring maxCostMicros: 1 against a 900-micro capability would defeat admission control by 900×.

input mirrors what inspect returned, exactly. The upstream body schema is strict and rejects unknown keys.

What you are charged

maxCostMicros is a ceiling, not an estimate. sealyx reserves it before contacting anyone, and settles the real cost afterwards. If the vendor charges more than you declared, you are billed your ceiling and the overage is ours.

If sealyx cannot determine whether a vendor actually ran your job, the hold stays and the run is marked UNKNOWN rather than released — an over-held hold is visible and recoverable, a wrongly-released one is not. A background sweeper resolves these; runs that can never be resolved are closed as ABANDONED, and charged zero when there is no evidence the vendor accepted the work.

Check on a run

curl -s https://sealyx.ai/v1/runs/run_… -H "authorization: Bearer $SEAL_KEY"
curl -s https://sealyx.ai/v1/runs      -H "authorization: Bearer $SEAL_KEY"

GET /v1/health is the one route that needs no key — a liveness probe that needs a credential is not a liveness probe.