{"object":"api_capabilities","api_version":"2026-04-28","base_urls":{"production":"https://rivendell.health","api":"https://rivendell.health/api","current_origin":"https://rivendell.health","current_api":"https://rivendell.health/api"},"capabilities_url":"https://rivendell.health/api/capabilities","openapi_url":"https://rivendell.health/openapi.json","llms_url":"https://rivendell.health/llms.txt","llms_full_url":"https://rivendell.health/llms-full.txt","mcp_url":"https://rivendell.health/mcp","auth":{"modes":[{"type":"bearer_token","header":"Authorization: Bearer <token>","use_when":"Mobile, native, or server clients have a Rivendell session token."},{"type":"session_cookie","header":"Cookie: <Better Auth session cookie>","use_when":"Browser clients are signed in through the Rivendell web app."},{"type":"sandbox_key","header":"Authorization: Bearer sk_sandbox_PUBLIC","use_when":"Agents need to learn or test under /api/sandbox/** only."}],"sandbox_key":{"value":"sk_sandbox_PUBLIC","allowed_path_prefix":"/api/sandbox/","rejected_elsewhere":true}},"idempotency":{"header":"Idempotency-Key","methods":["POST","PATCH","DELETE"],"ttl_hours":24,"replay_header":"Idempotent-Replayed: true","rules":["Use a fresh opaque key for each new mutation.","Retry the same method, path, JSON body, and key to replay the first stored JSON response.","Reusing a key with different request parameters returns 409 idempotency_key_already_used_error.","Do not send Idempotency-Key on multipart, form, or binary uploads.","Sandbox idempotency is public and globally scoped; generate a fresh key for each new sandbox mutation to avoid collisions with other agents."]},"lists":{"envelope":{"object":"list","data":"array of resources","has_more":"boolean","url":"request path without query string","next_cursor":"optional string or null for cursor-paginated endpoints"}},"errors":{"envelope":{"type":"machine-readable error type","title":"short human-readable summary","status":"HTTP status as a string","detail":"nullable diagnostic detail","param":"optional field, query parameter, path parameter, or header name","code":"optional granular subcode","doc_url":"optional documentation URL","recovery_hint":"one of RETRY_LATER, CHECK_INPUT, TRY_ALTERNATIVE, REQUIRES_USER_ACTION, UNRECOVERABLE"},"validation_error":{"status":400,"type":"validation_error","recovery_hint":"CHECK_INPUT"},"idempotency_conflict":{"status":409,"type":"idempotency_key_already_used_error","recovery_hint":"CHECK_INPUT"}},"ids":{"pattern":"^{prefix}_[A-Za-z0-9]{24,32}$","new_id_body":"[a-z2-7]{24}","description":"Rivendell-owned IDs are prefixed typed IDs such as claim_a3kfp2ze8mqwv7rxt94yhc6n. Provider-owned IDs keep their native provider format.","malformed_id_error":{"status":400,"type":"validation_error","recovery_hint":"CHECK_INPUT"}},"sandbox":{"supported":true,"livemode":false,"key":"sk_sandbox_PUBLIC","base_path":"/api/sandbox","stateless_except_idempotency":true,"endpoints":["/api/sandbox/claims","/api/sandbox/benefits","/api/sandbox/medications/search","/api/sandbox/errors"]},"resources":[{"name":"claims","object":"claim","summary":"Reimbursement and card-transaction claim status, substantiation, and adjudication workflows.","endpoints":["/api/claims","/api/claims/{id}","/api/claims/reimbursement"],"sandbox_endpoints":["/api/sandbox/claims"]},{"name":"benefits","object":"benefit_accumulator","summary":"Current plan year deductible, out-of-pocket, stipend, and coverage information.","endpoints":["/api/plan","/api/benefits/assistant"],"sandbox_endpoints":["/api/sandbox/benefits"]},{"name":"cards","object":"card","summary":"Member card listing, card details, card status, Apple Pay provisioning, and card activity.","endpoints":["/api/cards","/api/cards/{cardId}","/api/cards/{cardId}/status","/api/card-activity"],"sandbox_endpoints":[]},{"name":"medications","object":"medication_search","summary":"Medication catalog search with Cost Plus Drugs handoff information.","endpoints":["/api/medications/search"],"sandbox_endpoints":["/api/sandbox/medications/search"]},{"name":"providers","object":"doctor","summary":"Provider search, care options, cash-pay estimates, and provider details.","endpoints":["/api/doctors/search","/api/doctors/suggest"],"sandbox_endpoints":[]},{"name":"appointments","object":"appointment","summary":"Appointment request creation, listing, cancellation, and booking workflow status.","endpoints":["/api/doctors/appointments","/api/doctors/schedule"],"sandbox_endpoints":[]},{"name":"wearables","object":"wearable_summary","summary":"The caller's own Oura and WHOOP data, normalized to shared units: nightly sleep, daily recovery and readiness, daily activity and training load, individual workouts, body metrics, and which devices are linked. Read-only, member-scoped, and gated on the wearables:read scope.","endpoints":["/api/wearables/connections","/api/wearables/sleep","/api/wearables/recovery","/api/wearables/activity","/api/wearables/workouts","/api/wearables/profile"],"sandbox_endpoints":[]}]}