Base URL: https://usearken.com. These public endpoints require no API key. Download the OpenAPI specification.
Official ARKEN CLI and JavaScript / Python SDKs: installation, examples and checksums.
GET /api lists the API version and available endpoints. GET /api/health reports service availability.
GET /api/v1/deal-types returns the public deal catalog. Use ?q=breakup to search. Responses contain data and total. The optional query has a 120-character limit.
POST /api/v1/deal-types/batch with JSON {"queries":["founder","lease"]} runs 1 to 10 read-only searches in one request. Results stay in the same order.
POST /api/v1/case-drafts with Content-Type: application/json. Both fields are optional: context accepts up to 20,000 characters and deal_type up to 160.
curl https://usearken.com/api/v1/case-drafts \
-H 'Content-Type: application/json' \
--data '{"context":"Two founders are dividing responsibilities.","deal_type":"Founder breakup"}'
The returned draft has status: "ready" and requires_review: true. Draft content is not saved and no analysis is run. Workspace case creation requires private-pilot access.
Send an optional Idempotency-Key header with a fresh UUID for each logical request. Reuse the key and the same fields on retries. Keys accept 1-128 letters, digits, periods, underscores, colons, or hyphens. JSON whitespace and field order do not matter. Keys are retained for 24 hours across service restarts; only key and request hashes are stored, never draft text.
The catalog, health, API index, reference and OpenAPI routes share 600 reads per minute per server instance. Draft preparation shares 60 writes per minute. These are service-wide quotas, not per-user allowances. Responses include X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset (Unix seconds). Exhausted quotas return JSON 429 RATE_LIMITED and Retry-After in seconds. Pilot requests have a separate quota shown in their response headers. Authenticated agent routes have separate access controls.
Successful keyed requests return Idempotency-Replayed: false, or true on a matching retry. Reusing a key with different fields returns 409 IDEMPOTENCY_CONFLICT. Invalid requests do not reserve keys. If the bounded ledger is full, the server returns 503 and Retry-After; retry with the same key. Unkeyed requests remain supported and are stateless.
Errors use an error object with code, message, and hint. Validation errors also list field issues. Invalid JSON returns 400; invalid fields 422; oversized bodies 413; unsupported media types 415; unknown routes 404; unsupported methods 405.
{"error":{"code":"INVALID_JSON","message":"The request body is not valid JSON.","hint":"Send a JSON object."}}