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.