The request you receive
AnyAPI POSTs the API’s input as JSON to your registered path (default/run):
inputSchema and outputSchema — the same schemas the
compatibility checks and the live trial judge against. The register dialog in the
dashboard shows them too.
Redirects are never followed, so answer directly at the registered URL.
Verifying the signature (required)
Every request carries four headers:
Recompute the signature over the canonical string — five dot-joined parts:
method is POST, path is your registered path, and sha256hex(body) is the
lowercase-hex SHA-256 of the raw body bytes. HMAC-SHA256 that string with the signing
secret you got at registration, compare against the header in constant time, reject
timestamps older than about 5 minutes, and remember nonces for that window to block
replays. Reject failures with 401 and never process an unverified body.
Rotating the secret (dashboard → endpoint → Rotate secret, or
POST /v1/operator/endpoints/{id}/rotate-secret) starts a 24-hour window where both the
old and new secret verify, so you can roll your deployment without dropping requests.The response you must return
Reply2xx with JSON that validates against the API’s output schema. The envelope is
always:
- Extra fields are welcome; missing declared fields fail. You can return more than the schema declares (it’s preserved for the customer), but every declared field must be present.
- No result is not an error. When the entity legitimately doesn’t exist, return the
schema’s
found: falseshape with a 2xx — that’s a valid, billable answer. - A non-2xx status, output that doesn’t validate, or a timeout counts as a failed attempt: the request fails over to another provider, you don’t earn it, and repeated failures pause the endpoint.
Budgets
What the compatibility checks test
When you run the checks from the dashboard (orPOST /v1/operator/endpoints/{id}/conformance), AnyAPI fires the API’s schema examples at
your endpoint as signed requests and verifies, per request:
- HTTP 2xx
- Output validates against the output schema
found: truefor the example inputs- Answer within the 15-second budget
- Body under the 8 MB cap
X-AnyAPI-Trial: 1 so you
can tell trial traffic from paid traffic in your logs.