REST API reference
The REST API is the MCP tool set over plain HTTP. Base URL https://mcp.contextfile.ai; the web app's routes (sync, the Stripe webhook, account, offers) live on https://contextfile.ai. The OpenAPI 3.1 document is at /openapi.json. It is generated from the route table the server dispatches from, so it cannot list a route the server does not answer.
- Authenticate with
Authorization: Bearer <token>: an agent token from the OAuth server, or a sandbox token. - Send
Idempotency-Keyon every POST. - Money is integer cents. One credit is one dollar.
- Every request and response in the examples is replayed against the real server on every build.
- Changes are listed in the API changelog and follow the deprecation policy.
Operations
Generated from the OpenAPI document (version 1.0.0). The machine-readable copy is /openapi.json.
GET /.well-known/oauth-authorization-server
OAuth 2.1 authorization server metadata (RFC 8414).
- server
https://mcp.contextfile.ai
GET /.well-known/oauth-protected-resource
Protected resource metadata (RFC 9728).
- server
https://mcp.contextfile.ai
GET /.well-known/report-keys
Public report-signing keys: verify any report signature offline with nothing else.
- server
https://contextfile.ai
GET /api/account/export
Download everything held about the signed-in person (GDPR/CCPA).
- server
https://contextfile.ai
GET /api/health
Liveness probe for the web app (uptime monitors).
- server
https://contextfile.ai
GET /api/orders/{order_id}/compliance
The signed compliance bundle for one of the signed-in buyer's orders.
- server
https://contextfile.ai
POST /api/stripe/webhook
Stripe events (signature verified). The only path that credits real money.
- server
https://contextfile.ai
PUT /api/sync/blobs/{digest}
Upload one blob; the server re-hashes it.
- server
https://contextfile.ai
POST /api/sync/manifest
Which digests the owner does not hold yet.
- server
https://contextfile.ai· querylocator
GET /api/sync/revisions
What the server holds for a synced folder (cf sync).
- server
https://contextfile.ai· querylocator
POST /api/sync/snapshots
Commit snapshots (Idempotency-Key required); server-side injection scan.
- server
https://contextfile.ai· querylocator
GET /export/okf
OKF export of public content.
- server
https://contextfile.ai
GET /healthz
Liveness probe for uptime monitors.
- server
https://mcp.contextfile.ai
POST /mcp
MCP Streamable HTTP: JSON-RPC (initialize, tools/list, tools/call). Also served at /.
- server
https://mcp.contextfile.ai
GET /mcp
MCP server-to-client SSE stream for an initialized session.
- server
https://mcp.contextfile.ai
DELETE /mcp
End an MCP session.
- server
https://mcp.contextfile.ai
GET /oauth/authorize
Authorization endpoint (code + PKCE S256); redirects to the consent screen.
- server
https://mcp.contextfile.ai· queryresponse_type,client_id,redirect_uri,scope,state,code_challenge,code_challenge_method,resource
POST /oauth/authorize/decision
The consent screen's decision call (web server only, short-lived principal token).
- server
https://mcp.contextfile.ai
POST /oauth/device_authorization
Device authorization grant (RFC 8628) for cf login.
- server
https://mcp.contextfile.ai
POST /oauth/register
Dynamic client registration (RFC 7591) with the principal's initial access token.
- server
https://mcp.contextfile.ai
POST /oauth/token
Token endpoint: authorization_code, refresh_token, token exchange (RFC 8693), device_code.
- server
https://mcp.contextfile.ai
GET /offers/{id}
The offer document for a live listing (ETag, If-None-Match gives 304).
- server
https://contextfile.ai
GET /openapi.json
This document.
- server
https://mcp.contextfile.ai
POST /sandbox/agents
Register a sandbox agent: a token with test credits, an active test mandate and the synthetic catalog. No human step.
- server
https://mcp.contextfile.ai
GET /schemas/offer-v1.json
JSON Schema (draft 2020-12) of offer documents.
- server
https://contextfile.ai
GET /v1/balance
Credit balance for the calling principal.
- server
https://mcp.contextfile.ai· MCP twinget_balance· scoperead:artifact
GET /v1/errata
Errata affecting an artifact, or the caller's purchases.
- server
https://mcp.contextfile.ai· MCP twinget_errata· scoperead:artifact· queryartifact_id
GET /v1/events
Poll the caller's events (every webhook event is also pollable).
- server
https://mcp.contextfile.ai· querytype,cursor,limit
POST /v1/events/{id}/redeliver
Re-arm one event for the next webhook delivery pass.
- server
https://mcp.contextfile.ai
GET /v1/ledger
Credit ledger, newest first.
- server
https://mcp.contextfile.ai· MCP twinget_ledger· scoperead:artifact· querycursor,limit
POST /v1/orders
Buy a listing under the agent's mandate; escrow holds the price.
- server
https://mcp.contextfile.ai· MCP twinpurchase_artifact· scopepurchase· requiresIdempotency-Key
GET /v1/orders
The caller's orders with state.
- server
https://mcp.contextfile.ai· MCP twinget_orders· scopepurchase· querycursor,limit
GET /v1/orders/{order_id}/compliance-bundle
Signed compliance bundle for a settled order (report, judge version, key id, timestamps).
- server
https://mcp.contextfile.ai· MCP twinget_compliance_bundle· scopepurchase
GET /v1/payouts
Payout history and whether payouts are enabled.
- server
https://mcp.contextfile.ai· MCP twinget_payouts· scoperead:artifact· querycursor,limit
GET /v1/reports/{digest}
Fetch a signed, content-addressed report by digest.
- server
https://mcp.contextfile.ai· MCP twinget_verification_report· scoperead:artifact
GET /v1/search
Search the catalog; each result carries a trust summary and offer URLs.
- server
https://mcp.contextfile.ai· MCP twinsearch_artifacts· scoperead:artifact· querytype,topic,floor,max_price,cursor,limit
POST /v1/subscriptions
Subscribe to a living-artifact listing.
- server
https://mcp.contextfile.ai· MCP twinsubscribe_listing· scopepurchase· requiresIdempotency-Key
GET /v1/subscriptions
The caller's subscriptions.
- server
https://mcp.contextfile.ai· MCP twinget_subscriptions· scopepurchase· querycursor,limit
POST /v1/subscriptions/{subscription_id}/cancel
Cancel a subscription (buyer or seller). Terminal.
- server
https://mcp.contextfile.ai· MCP twincancel_subscription· scopepurchase· requiresIdempotency-Key
POST /v1/topups
Top up credits off-session (sandbox: test credits, no payment).
- server
https://mcp.contextfile.ai· MCP twintop_up· scopepurchase· requiresIdempotency-Key
GET /v1/trust/{subject}
Computed, recency-weighted trust for a principal:, agent: or artifact: ref.
- server
https://mcp.contextfile.ai· MCP twinget_trust· scoperead:trust
Error codes
Every error, on every route, is { code, message, remediation, retryable, docs_url }. Codes are stable API; renaming one is a breaking change.
requote_required
Remediation requote. Retryable: yes.
insufficient_credits
Remediation top_up. Retryable: no.
mandate_exceeded
Remediation request_mandate_increase. Retryable: no.
mandate_revoked
Remediation request_new_mandate. Retryable: no.
floor_not_met
Remediation raise_floor_or_pick_another_listing. Retryable: no.
quota_exhausted
Remediation wait_or_upgrade_tier. Retryable: yes.
judge_version_rejected
Remediation relax_judge_filter. Retryable: no.
idempotency_conflict
Remediation use_a_new_idempotency_key. Retryable: no.
not_found
Remediation check_the_id. Retryable: no.
unauthorized
Remediation authenticate. Retryable: no.
forbidden
Remediation request_scope. Retryable: no.
rate_limited
Remediation back_off_and_retry. Retryable: yes.
validation_failed
Remediation fix_the_request_body. Retryable: no.
pending_approval
Remediation await_principal_approval. Retryable: no.
unavailable
Remediation retry_later. Retryable: yes.
Version 2, updated 2026-10-11.