{"openapi":"3.1.0","info":{"title":"ScrubMyText + Agent Infrastructure API","version":"7.5.0","description":"49 deterministic tools for text integrity, AI-agent controls, and contextual service-quality evidence. TrustMyChoice provides free public lookup and comparison plus free, identity-verified structured contributions without publishing a universal trust score or selling ranking position. Selected premium stateless text tools include a 3-call trial and optional x402 pay-per-call."},"servers":[{"url":"https://api.scrubmytext.com"}],"paths":{"/openapi.json":{"get":{"operationId":"getOpenApiSpecification","summary":"Get the OpenAPI contract","description":"Public, cacheable OpenAPI 3.1 contract served directly from the API domain for agent and client discovery.","responses":{"200":{"description":"OpenAPI 3.1 document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/agents.json":{"get":{"operationId":"getAgentManifest","summary":"Get agent discovery metadata","description":"Public capability, protocol, authentication, workflow, and discovery pointers for AI agents.","responses":{"200":{"description":"Agent discovery document","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/.well-known/x402":{"get":{"operationId":"getX402Manifest","summary":"Get the x402 resource manifest","description":"Public list of dedicated pay-per-call resource URLs and the currently configured x402 v2 payment rail.","responses":{"200":{"description":"x402 discovery manifest","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmsText","summary":"Get concise agent-readable documentation","responses":{"200":{"description":"Plain-text agent documentation","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/v1/scrub":{"post":{"operationId":"scrubText","summary":"Scrub text","description":"Normalize hidden/control characters and formatting artifacts.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["standard","strict","unicode"]}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/inspect":{"post":{"operationId":"inspectText","summary":"Inspect text","description":"Inspect exact Unicode and invisible-character anomalies.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/scan":{"post":{"operationId":"scanUntrustedText","summary":"Scan untrusted text","description":"Return structural and heuristic risk signals. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/redact":{"post":{"operationId":"redactSensitiveText","summary":"Redact sensitive text","description":"Pattern-based redaction of common credentials and identifiers. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/compare":{"post":{"operationId":"compareText","summary":"Compare text","description":"Exact comparison and scrub-equivalence analysis. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"original":{"type":"string","maxLength":1000000},"modified":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["original","modified"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/detect-secrets":{"post":{"operationId":"detectSecrets","summary":"Detect secrets","description":"Find likely credentials without echoing secret values. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/validate-output":{"post":{"operationId":"validateOutput","summary":"Validate AI output","description":"Parse JSON and validate common JSON Schema rules. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"output":{},"schema":{"type":"object"}},"additionalProperties":false,"required":["output"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/sanitize-context":{"post":{"operationId":"sanitizeAgentContext","summary":"Sanitize agent context","description":"Normalize untrusted context and optionally redact sensitive patterns. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["standard","strict","unicode"]},"redact_sensitive":{"type":"boolean"}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/prepare-for-agent":{"post":{"operationId":"prepareForAgent","summary":"Prepare for agent","description":"One-call deterministic preprocessing pipeline. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["standard","strict","unicode"]},"redact_sensitive":{"type":"boolean"}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/actions/fingerprint":{"post":{"operationId":"fingerprintAction","summary":"Fingerprint a structured action intent","description":"Derive a stable SHA-256 action fingerprint and idempotency key from a named action, JSON arguments, and optional scope. Object-key order does not affect the result. The operation stores nothing and does not echo the supplied arguments.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","minLength":1,"maxLength":120,"description":"Stable action name, such as refund_order or send_email."},"arguments":{"type":"object","description":"JSON object containing the action inputs. Object keys are sorted during canonicalization; array order remains significant."},"scope":{"type":"string","minLength":1,"maxLength":120,"default":"default","description":"Optional namespace used to separate otherwise identical action intents."}},"additionalProperties":false,"required":["action","arguments"]}}}},"responses":{"200":{"description":"Stable fingerprint and ready-to-use idempotency key","content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","const":"LockMyAction"},"action_fingerprint":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"},"idempotency_key":{"type":"string","pattern":"^smt_action_[0-9a-f]{64}$"},"algorithm":{"type":"string","const":"sha256"},"canonicalization":{"type":"string"},"canonical_bytes":{"type":"integer","minimum":1,"maximum":100000},"notice":{"type":"string"}},"required":["brand","action_fingerprint","idempotency_key","algorithm","canonicalization","canonical_bytes","notice"]}}}},"400":{"description":"Malformed JSON request"},"422":{"description":"Invalid or unsupported action intent"},"429":{"description":"Monthly free usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/v1/actions/lock":{"post":{"operationId":"lockAction","summary":"Lock action","description":"LockMyAction: atomically claim an idempotency key before execution.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200},"lock_ttl_seconds":{"type":"integer","minimum":30,"maximum":86400},"completion_ttl_seconds":{"type":"integer","minimum":3600,"maximum":31536000}},"additionalProperties":false,"required":["key"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/actions/lock-intent":{"post":{"operationId":"lockActionIntent","summary":"Fingerprint and atomically lock an action intent","description":"LockMyAction: derive a stable idempotency key from a structured action and atomically claim it in one call. Execute the external action only when safe_to_execute is true. Reordered JSON object keys resolve to the same lock.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"string","minLength":1,"maxLength":120,"description":"Stable action name, such as refund_order or send_email."},"arguments":{"type":"object","description":"JSON object containing the action inputs. Object keys are sorted during canonicalization; array order remains significant."},"scope":{"type":"string","minLength":1,"maxLength":120,"default":"default","description":"Optional namespace used to separate otherwise identical action intents."},"lock_ttl_seconds":{"type":"integer","minimum":30,"maximum":86400},"completion_ttl_seconds":{"type":"integer","minimum":3600,"maximum":31536000}},"additionalProperties":false,"required":["action","arguments"]}}}},"responses":{"200":{"description":"Action intent fingerprinted and lock result returned","content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","const":"LockMyAction"},"status":{"type":"string"},"safe_to_execute":{"type":"boolean"},"key":{"type":"string"},"lock_id":{"type":"string"},"action_fingerprint":{"type":"string","pattern":"^sha256:[0-9a-f]{64}$"},"idempotency_key":{"type":"string","pattern":"^smt_action_[0-9a-f]{64}$"},"algorithm":{"type":"string","const":"sha256"},"canonicalization":{"type":"string"},"canonical_bytes":{"type":"integer","minimum":1,"maximum":100000}},"required":["brand","status","safe_to_execute","key","action_fingerprint","idempotency_key","algorithm","canonicalization","canonical_bytes"]}}}},"400":{"description":"Malformed JSON request"},"401":{"description":"API key required or invalid"},"422":{"description":"Invalid or unsupported action intent"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/actions/check":{"post":{"operationId":"checkAction","summary":"Check action","description":"LockMyAction: inspect action-key state without reserving it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200}},"additionalProperties":false,"required":["key"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/actions/complete":{"post":{"operationId":"completeAction","summary":"Complete action","description":"LockMyAction: mark the current lock completed.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200},"lock_id":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false,"required":["key","lock_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/actions/release":{"post":{"operationId":"releaseAction","summary":"Release action","description":"LockMyAction: release an uncompleted current lock.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":"string","minLength":1,"maxLength":200},"lock_id":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false,"required":["key","lock_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/signals/create":{"post":{"operationId":"createSignal","summary":"Create signal inbox","description":"CatchMySignal: create a temporary webhook inbox.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string","maxLength":120},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":604800},"max_events":{"type":"integer","minimum":1,"maximum":100}},"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/signals/events":{"post":{"operationId":"getSignalEvents","summary":"Get signal events","description":"CatchMySignal: retrieve stored events.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"inbox_id":{"type":"string","maxLength":80},"limit":{"type":"integer","minimum":1,"maximum":100},"after_ms":{"type":"integer","minimum":0}},"additionalProperties":false,"required":["inbox_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/signals/delete":{"post":{"operationId":"deleteSignal","summary":"Delete signal inbox","description":"CatchMySignal: delete an inbox and stored event bodies.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"inbox_id":{"type":"string","maxLength":80}},"additionalProperties":false,"required":["inbox_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/approvals/request":{"post":{"operationId":"requestApproval","summary":"Request approval","description":"ApproveMyAction: create a secure human approval link.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","maxLength":2000},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":604800}},"additionalProperties":false,"required":["title"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/approvals/check":{"post":{"operationId":"checkApproval","summary":"Check approval","description":"ApproveMyAction: inspect approval status.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approval_id":{"type":"string","maxLength":80}},"additionalProperties":false,"required":["approval_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/v1/approvals/cancel":{"post":{"operationId":"cancelApproval","summary":"Cancel approval","description":"ApproveMyAction: cancel a pending approval request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approval_id":{"type":"string","maxLength":80}},"additionalProperties":false,"required":["approval_id"]}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"429":{"description":"Monthly usage limit reached"}},"security":[{"bearerAuth":[]}]}},"/signal/{token}":{"post":{"operationId":"receiveSignal","summary":"Deliver signal event","description":"Public CatchMySignal webhook delivery endpoint generated dynamically by create_signal.","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{}},"text/plain":{"schema":{"type":"string"}}}},"responses":{"202":{"description":"Event accepted"},"410":{"description":"Inbox expired or unavailable"},"413":{"description":"Payload exceeds 64 KB"},"429":{"description":"Inbox or owner usage limit reached"}},"security":[]}},"/v1/approvals/public/get":{"post":{"operationId":"getPublicApproval","summary":"Load public approval","description":"Used by the noindex approval review page.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approval_id":{"type":"string"},"token":{"type":"string"}},"required":["approval_id","token"]}}}},"responses":{"200":{"description":"Approval request"},"403":{"description":"Invalid token"},"404":{"description":"Not found"}},"security":[]}},"/v1/approvals/public/decide":{"post":{"operationId":"decidePublicApproval","summary":"Decide public approval","description":"Approve or reject a pending ApproveMyAction request.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"approval_id":{"type":"string"},"token":{"type":"string"},"decision":{"type":"string","enum":["approved","rejected"]},"note":{"type":"string","maxLength":500}},"required":["approval_id","token","decision"]}}}},"responses":{"200":{"description":"Decision result"},"403":{"description":"Invalid token"},"404":{"description":"Not found"}},"security":[]}},"/v1/rework":{"post":{"operationId":"reworkText","summary":"ReworkMyText — rework text","description":"Paid deterministic rewriting. Changes common wording and selected sentence structures without an LLM, then returns change and protected-item checks. Does not verify authorship or watermark status. Includes a 3-call unauthenticated monthly trial per public IP. After the trial, use a subscription bearer key or x402 pay-per-call when enabled.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["light","standard","deep"],"default":"standard"}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","const":"ReworkMyText"},"engine_version":{"type":"string"},"reworked_text":{"type":"string"},"mode":{"type":"string","enum":["light","standard","deep"]},"characters_in":{"type":"integer"},"characters_out":{"type":"integer"},"wording_change_percent":{"type":"integer","minimum":0,"maximum":100},"structural_change_percent":{"type":"integer","minimum":0,"maximum":100},"transformations":{"type":"object"},"protected":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"notice":{"type":"string"}},"required":["brand","engine_version","reworked_text","mode","characters_in","characters_out","transformations","protected","warnings","notice"]}}}},"400":{"description":"Invalid input"},"401":{"description":"Paid API key required or invalid"},"402":{"description":"Trial exhausted / x402 Payment Required when pay-per-call is enabled","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"security":[{},{"bearerAuth":[]}]}},"/x402/v1/scan":{"post":{"operationId":"scanUntrustedTextX402","summary":"x402 pay-per-call — Scan untrusted text","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/redact":{"post":{"operationId":"redactSensitiveTextX402","summary":"x402 pay-per-call — Redact sensitive text","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/compare":{"post":{"operationId":"compareTextX402","summary":"x402 pay-per-call — Compare text","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"original":{"type":"string","maxLength":1000000},"modified":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["original","modified"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/detect-secrets":{"post":{"operationId":"detectSecretsX402","summary":"x402 pay-per-call — Detect secrets","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/validate-output":{"post":{"operationId":"validateOutputX402","summary":"x402 pay-per-call — Validate AI output","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"output":{},"schema":{"type":"object"}},"additionalProperties":false,"required":["output"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/sanitize-context":{"post":{"operationId":"sanitizeAgentContextX402","summary":"x402 pay-per-call — Sanitize agent context","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["standard","strict","unicode"]},"redact_sensitive":{"type":"boolean"}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/prepare-for-agent":{"post":{"operationId":"prepareForAgentX402","summary":"x402 pay-per-call — Prepare for agent","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["standard","strict","unicode"]},"redact_sensitive":{"type":"boolean"}},"additionalProperties":false,"required":["text"]}}}},"responses":{"200":{"description":"Successful result","headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/x402/v1/rework":{"post":{"operationId":"reworkTextX402","summary":"x402 pay-per-call — ReworkMyText — rework text","description":"Dedicated x402 pay-per-call route. The first request returns HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE. This route does not consume the free trial.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","maxLength":1000000},"mode":{"type":"string","enum":["light","standard","deep"],"default":"standard"}},"required":["text"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","const":"ReworkMyText"},"engine_version":{"type":"string"},"reworked_text":{"type":"string"},"mode":{"type":"string","enum":["light","standard","deep"]},"characters_in":{"type":"integer"},"characters_out":{"type":"integer"},"wording_change_percent":{"type":"integer","minimum":0,"maximum":100},"structural_change_percent":{"type":"integer","minimum":0,"maximum":100},"transformations":{"type":"object"},"protected":{"type":"object"},"warnings":{"type":"array","items":{"type":"string"}},"notice":{"type":"string"}},"required":["brand","engine_version","reworked_text","mode","characters_in","characters_out","transformations","protected","warnings","notice"]}}},"headers":{"PAYMENT-RESPONSE":{"description":"Base64-encoded x402 settlement response after a successful paid request","schema":{"type":"string"}}}},"400":{"description":"Invalid input"},"401":{"description":"Paid API key required or invalid"},"402":{"description":"Payment Required","headers":{"PAYMENT-REQUIRED":{"description":"Base64-encoded x402 v2 PaymentRequired object","schema":{"type":"string"}}}},"429":{"description":"Monthly usage limit reached"}},"parameters":[{"in":"header","name":"PAYMENT-SIGNATURE","required":false,"schema":{"type":"string"},"description":"Base64-encoded x402 v2 payment payload supplied on the paid retry."}]}},"/v1/challenges/manage":{"post":{"operationId":"manageActionChallenge","summary":"ChallengeMyAction — create, inspect, consume, or cancel a veto window","description":"Creates a digest-bound cooling-off period during which a bearer challenger can veto. After the deadline, the paid owner may atomically consume one execution right within the bounded execution window. This is exception handling, not affirmative consent, legal approval, or proof that notice was delivered.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","check","consume","cancel"]},"control_id":{"type":"string","maxLength":100},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"veto_window_seconds":{"type":"integer","minimum":60,"maximum":604800},"execution_window_seconds":{"type":"integer","minimum":60,"maximum":86400}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Challenge state or one-time execution-right decision"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/challenges/public/get":{"post":{"operationId":"getPublicActionChallenge","summary":"ChallengeMyAction — inspect a challenge using its bearer token","description":"Returns the current challenge state to the intended challenger. The token is a bearer secret and is never stored in plaintext.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"challenge_id":{"type":"string","maxLength":100},"token":{"type":"string","minLength":16,"maxLength":128}},"required":["challenge_id","token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Challenge state"},"400":{"description":"Invalid input"},"403":{"description":"Invalid bearer token"},"404":{"description":"Challenge not found"}}}},"/v1/challenges/public/veto":{"post":{"operationId":"vetoPublicActionChallenge","summary":"ChallengeMyAction — veto a pending challenge using its bearer token","description":"Atomically vetoes a pending challenge before its veto deadline. A late or repeated request cannot alter an executable, consumed, cancelled, vetoed, or expired challenge.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"challenge_id":{"type":"string","maxLength":100},"token":{"type":"string","minLength":16,"maxLength":128}},"required":["challenge_id","token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Final or current challenge state"},"400":{"description":"Invalid input"},"403":{"description":"Invalid bearer token"},"404":{"description":"Challenge not found"}}}},"/v1/budgets/reserve":{"post":{"operationId":"reserveActionBudget","summary":"BudgetMyAction — reserve or inspect a budget","description":"Atomically reserves integer units under a named, period-scoped ceiling. Stable reservation keys make retries idempotent. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["reserve","check"]},"budget_key":{"type":"string","maxLength":160},"period_key":{"type":"string","maxLength":80},"reservation_key":{"type":"string","maxLength":160},"amount":{"type":"integer","minimum":1,"maximum":1000000000000},"limit":{"type":"integer","minimum":1,"maximum":1000000000000},"retention_seconds":{"type":"integer","minimum":3600,"maximum":31536000}},"required":["operation","budget_key","period_key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Reservation decision or budget status"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/receipts/record":{"post":{"operationId":"recordActionReceipt","summary":"ReceiptMyAction — record or inspect an action receipt","description":"Records an immutable digest for a caller-asserted action outcome without storing the action or outcome payload. It is not legal or payment proof. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["record","check"]},"receipt_id":{"type":"string","maxLength":100},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"outcome_digest":{"$ref":"#/components/schemas/Sha256Digest"},"outcome_status":{"type":"string","enum":["succeeded","failed","partial"]}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Receipt record or lookup"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/signals/verify":{"post":{"operationId":"verifySignedSignal","summary":"VerifyMySignal — verify a signed signal","description":"Verifies HMAC-SHA256 over timestamp + dot + nonce + dot + message, enforces freshness, and rejects replayed nonces. Message and shared secret are not stored. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","maxLength":100000},"shared_secret":{"type":"string","minLength":16,"maxLength":512},"signature":{"type":"string","pattern":"^[a-fA-F0-9]{64}$"},"timestamp":{"type":"integer","minimum":0},"nonce":{"type":"string","maxLength":200},"max_age_seconds":{"type":"integer","minimum":30,"maximum":86400}},"required":["message","shared_secret","signature","timestamp","nonce"],"additionalProperties":false}}}},"responses":{"200":{"description":"Authenticity, freshness, replay, and acceptance result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid input"}}}},"/v1/leases/manage":{"post":{"operationId":"manageResourceLease","summary":"LeaseMyResource — acquire, inspect, or release a lease","description":"Manages an exclusive short-lived lease using a hashed resource key and one-time bearer release token. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["acquire","check","release"]},"resource_key":{"type":"string","maxLength":200},"lease_token":{"type":"string","maxLength":256},"ttl_seconds":{"type":"integer","minimum":30,"maximum":86400}},"required":["operation","resource_key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Lease state or transition result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/delegations/manage":{"post":{"operationId":"manageAuthorityDelegation","summary":"DelegateMyAuthority — issue, consume, inspect, or revoke a capability","description":"Manages a narrow bearer capability bound to one action fingerprint, expiration, and maximum use count. It is not identity proof or legal delegation. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["issue","use","check","revoke"]},"control_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":256},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"max_uses":{"type":"integer","minimum":1,"maximum":10000},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":2592000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Delegation state or authorization decision"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/stops/manage":{"post":{"operationId":"manageAgentStop","summary":"StopMyAgent — set, inspect, or clear a stop signal","description":"Maintains durable fail-closed stop state for a hashed agent or workflow key. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["stop","check","clear"]},"subject_key":{"type":"string","maxLength":200},"reason_code":{"type":"string","enum":["operator","policy","incident","budget","maintenance","other"]}},"required":["operation","subject_key"],"additionalProperties":false}}}},"responses":{"200":{"description":"Stop state or transition result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid input"}}}},"/v1/handoffs/manage":{"post":{"operationId":"manageTaskHandoff","summary":"HandoffMyTask — create, claim, inspect, complete, or cancel a handoff","description":"Coordinates a one-time task-fingerprint handoff between paid API identities using a bearer claim token. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","claim","check","complete","cancel"]},"control_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":256},"task_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":604800}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Handoff state or transition result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/reconciliations/manage":{"post":{"operationId":"manageActionReconciliation","summary":"ReconcileMyAction — manage an outcome discrepancy","description":"Tracks expected and observed outcome digests, digest-only evidence, and resolution state without storing external payloads. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["open","append","check","resolve"]},"control_id":{"type":"string","maxLength":100},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"expected_digest":{"$ref":"#/components/schemas/Sha256Digest"},"observed_digest":{"$ref":"#/components/schemas/Sha256Digest"},"evidence_digest":{"$ref":"#/components/schemas/Sha256Digest"},"resolution":{"type":"string","enum":["reconciled","dismissed"]}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Reconciliation state or transition result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/context-traces/anchor":{"post":{"operationId":"anchorContextTrace","summary":"TraceMyContext — anchor or inspect provenance","description":"Anchors context and parent digests with a processing stage. No context content is stored, and the anchor does not prove source truth or authorship. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["anchor","check"]},"control_id":{"type":"string","maxLength":100},"context_digest":{"$ref":"#/components/schemas/Sha256Digest"},"parent_digests":{"type":"array","maxItems":20,"items":{"$ref":"#/components/schemas/Sha256Digest"}},"stage":{"type":"string","maxLength":80}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Provenance anchor or lookup"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/task-contracts/manage":{"post":{"operationId":"manageTaskContract","summary":"ContractMyTask — manage a technical task commitment","description":"Offers, accepts, inspects, completes, or cancels a digest-bound technical service-state record. It is not a legal contract, payment, escrow, or identity verification. Production.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["offer","accept","check","complete","cancel"]},"control_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":256},"task_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"terms_digest":{"$ref":"#/components/schemas/Sha256Digest"},"expires_in_seconds":{"type":"integer","minimum":60,"maximum":2592000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Task commitment state or transition result"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/readiness/check":{"post":{"operationId":"checkAgentReadiness","summary":"ReadyMyAgent — check supplied MCP metadata","description":"Deterministically checks a supplied MCP server card against a narrow integration contract. The API does not fetch arbitrary URLs or certify security, reliability, or behavior.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"server_card":{"type":"object"},"expected_version":{"type":"string","maxLength":80},"required_tools":{"type":"array","maxItems":100,"items":{"type":"string","maxLength":120}},"require_streamable_http":{"type":"boolean"}},"required":["server_card"],"additionalProperties":false}}}},"responses":{"200":{"description":"Deterministic readiness report"},"422":{"description":"Invalid or oversized metadata"}}}},"/v1/quorums/manage":{"post":{"operationId":"manageActionQuorum","summary":"QuorumMyAction — manage N-of-M authorization","description":"Creates, checks, consumes, or cancels a digest-bound N-of-M bearer authorization quorum. Only one successful consume grants an execution right.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","check","consume","cancel"]},"control_id":{"type":"string","maxLength":100},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"required_votes":{"type":"integer","minimum":2,"maximum":10},"member_count":{"type":"integer","minimum":2,"maximum":20},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":604800}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Quorum state or one-time execution decision"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/quorums/public/get":{"post":{"operationId":"getQuorumMemberState","summary":"QuorumMyAction — view a member decision","description":"Private no-store bearer member endpoint.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quorum_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":128}},"required":["quorum_id","token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Quorum and member state"},"403":{"description":"Invalid bearer token"}}}},"/v1/quorums/public/decide":{"post":{"operationId":"decideQuorumMember","summary":"QuorumMyAction — cast one member decision","description":"Records one approved or rejected decision for a distinct bearer member token before expiry.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"quorum_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":128},"decision":{"type":"string","enum":["approved","rejected"]}},"required":["quorum_id","token","decision"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated quorum and member state"},"403":{"description":"Invalid bearer token"}}}},"/v1/deadlines/manage":{"post":{"operationId":"manageTaskDeadline","summary":"DeadlineMyTask — manage a durable task deadline","description":"Creates, checks, completes, or cancels a digest-only task deadline using the server clock.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","check","complete","cancel"]},"control_id":{"type":"string","maxLength":100},"task_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"due_in_seconds":{"type":"integer","minimum":60,"maximum":2592000},"escalation_grace_seconds":{"type":"integer","minimum":0,"maximum":604800}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Deadline state"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/attention-budgets/manage":{"post":{"operationId":"manageAttentionBudget","summary":"BudgetMyAttention — manage finite review capacity","description":"Creates, checks, reserves, releases, or closes a review-capacity pool with per-subject limits and protected priority capacity.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","reserve","check","release","close"]},"control_id":{"type":"string","maxLength":100},"total_units":{"type":"integer","minimum":1,"maximum":1000000},"max_units_per_subject":{"type":"integer","minimum":1,"maximum":1000000},"protected_priority_units":{"type":"integer","minimum":0,"maximum":1000000},"period_seconds":{"type":"integer","minimum":300,"maximum":2592000},"reservation_key":{"type":"string","maxLength":160},"subject_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"units":{"type":"integer","minimum":1,"maximum":1000000},"priority":{"type":"string","enum":["standard","priority"]}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Capacity state or reservation decision"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/escalations/manage":{"post":{"operationId":"manageAgentEscalation","summary":"EscalateMyAgent — manage an operator escalation","description":"Creates, checks, or cancels a digest-only incident with a private bearer operator link and deterministic SLA state. Link delivery is caller-managed.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","check","cancel"]},"control_id":{"type":"string","maxLength":100},"incident_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"severity":{"type":"string","enum":["low","medium","high","critical"]},"response_sla_seconds":{"type":"integer","minimum":60,"maximum":604800},"resolution_sla_seconds":{"type":"integer","minimum":300,"maximum":2592000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Escalation state and private operator link on create"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/escalations/public/get":{"post":{"operationId":"getAgentEscalation","summary":"EscalateMyAgent — view a private operator incident","description":"Private no-store bearer endpoint.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"escalation_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":128}},"required":["escalation_id","token"],"additionalProperties":false}}}},"responses":{"200":{"description":"Escalation state"},"403":{"description":"Invalid bearer token"}}}},"/v1/escalations/public/act":{"post":{"operationId":"actOnAgentEscalation","summary":"EscalateMyAgent — acknowledge or resolve an incident","description":"Records a bearer operator acknowledgement or resolution without storing notes or contact information.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"escalation_id":{"type":"string","maxLength":100},"token":{"type":"string","maxLength":128},"operation":{"type":"string","enum":["acknowledge","resolve"]}},"required":["escalation_id","token","operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Updated escalation state"},"403":{"description":"Invalid bearer token"}}}},"/v1/terms/manage":{"post":{"operationId":"manageTermsPin","summary":"PinMyTerms — pin, inspect, or revoke observed terms","description":"Stores immutable terms and interface digests with bounded version and price metadata. It is technical evidence, not a legal agreement.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["pin","check","revoke"]},"control_id":{"type":"string","maxLength":100},"terms_digest":{"$ref":"#/components/schemas/Sha256Digest"},"interface_digest":{"$ref":"#/components/schemas/Sha256Digest"},"counterparty_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"version_label":{"type":"string","maxLength":80},"price_minor":{"type":"integer","minimum":0,"maximum":1000000000000},"currency":{"type":"string","pattern":"^[A-Z]{3}$"},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":31536000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Terms pin state"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/policies/match":{"post":{"operationId":"matchPolicyRequirements","summary":"MatchMyPolicy — compare bounded policy tokens","description":"Checks required-token inclusion and forbidden-token exclusion without interpreting or storing policy prose.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"provider_capabilities":{"type":"array","minItems":1,"maxItems":64,"items":{"type":"string","maxLength":80}},"consumer_required":{"type":"array","maxItems":64,"items":{"type":"string","maxLength":80}},"consumer_forbidden":{"type":"array","maxItems":64,"items":{"type":"string","maxLength":80}}},"required":["provider_capabilities","consumer_required","consumer_forbidden"],"additionalProperties":false}}}},"responses":{"200":{"description":"Deterministic match and mismatch lists"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid bounded policy input"}}}},"/v1/compensations/manage":{"post":{"operationId":"manageActionCompensation","summary":"CompensateMyAction — bind and track compensation","description":"Binds a compensating-action digest before execution and records the primary and compensating lifecycle without performing either action.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["bind","check","mark_executed","compensate","cancel"]},"control_id":{"type":"string","maxLength":100},"action_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"compensation_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":2592000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Compensation lifecycle state"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/contexts/status":{"post":{"operationId":"manageContextStatus","summary":"RevokeMyContext — publish and inspect context status","description":"Publishes digest-only active, superseded, disputed, revoked, or expired context state for downstream checks.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["publish","check","supersede","dispute","revoke"]},"control_id":{"type":"string","maxLength":100},"context_digest":{"$ref":"#/components/schemas/Sha256Digest"},"successor_digest":{"$ref":"#/components/schemas/Sha256Digest"},"reason_code":{"type":"string","enum":["source_update","consent_withdrawn","error","policy","expiry","dispute","other"]},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":31536000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Context status"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/contexts/rights":{"post":{"operationId":"manageContextRights","summary":"LicenseMyContext — issue and evaluate context rights","description":"Manages a digest-bound technical rights envelope and evaluates one declared right without making legal conclusions.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["issue","check","evaluate","revoke"]},"control_id":{"type":"string","maxLength":100},"context_digest":{"$ref":"#/components/schemas/Sha256Digest"},"policy_digest":{"$ref":"#/components/schemas/Sha256Digest"},"rights":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","enum":["read","summarize","derive","redistribute","train","commercial"]}},"requested_right":{"type":"string","enum":["read","summarize","derive","redistribute","train","commercial"]},"expires_in_seconds":{"type":"integer","minimum":300,"maximum":31536000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Context-rights state or evaluation"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/disclosures/manage":{"post":{"operationId":"manageDisclosureBudget","summary":"MeterMyDisclosure — enforce cumulative disclosure limits","description":"Creates a counter-only disclosure meter and records retry-safe units under total, per-recipient, and per-category limits.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"operation":{"type":"string","enum":["create","record","check","close"]},"control_id":{"type":"string","maxLength":100},"total_units":{"type":"integer","minimum":1,"maximum":1000000000},"per_recipient_limit":{"type":"integer","minimum":1,"maximum":1000000000},"per_category_limit":{"type":"integer","minimum":1,"maximum":1000000000},"period_seconds":{"type":"integer","minimum":300,"maximum":31536000},"event_key":{"type":"string","maxLength":160},"recipient_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"category_fingerprint":{"$ref":"#/components/schemas/Sha256Digest"},"units":{"type":"integer","minimum":1,"maximum":1000000000}},"required":["operation"],"additionalProperties":false}}}},"responses":{"200":{"description":"Disclosure meter state or recording decision"},"401":{"description":"Paid API key required"},"422":{"description":"Invalid operation-specific input"}}}},"/v1/quality/cards/list":{"post":{"operationId":"listQualityCards","summary":"TrustMyChoice — list public contextual quality cards","description":"Returns exact target/version/task cards that meet the public threshold of at least three observations from three distinct verified contributor identities. Results are ordered by evidence recency, never by quality, payment, or sponsorship.","requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityCardListQuery"}}}},"responses":{"200":{"description":"Unranked public quality-card directory"},"422":{"description":"Invalid directory filter"}}}},"/v1/quality/cards/get":{"post":{"operationId":"getQualityCard","summary":"TrustMyChoice — get a contextual quality card","description":"Returns opt-in structured evidence, dimension status, sample size, recency, independent verified-contributor count, uncertainty, and pending correction state for one exact target/version/task. It is not a safety guarantee or universal reputation score.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityCardQuery"}}}},"responses":{"200":{"description":"Quality card, including insufficient-evidence state"},"422":{"description":"Invalid target or task identity"}}}},"/v1/quality/cards/compare":{"post":{"operationId":"compareQualityTargets","summary":"TrustMyChoice — compare exact quality targets","description":"Returns two to ten contextual cards in caller-provided order without selecting or selling a universal winner. This public comparison is free.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"targets":{"type":"array","minItems":2,"maxItems":10,"items":{"$ref":"#/components/schemas/QualityTargetQuery"}},"task_category":{"type":"string","maxLength":120},"region":{"type":"string","maxLength":40},"max_latency_ms":{"type":"integer","minimum":0,"maximum":86400000},"max_price_micros":{"type":"integer","minimum":0,"maximum":1000000000000},"minimum_evidence_class":{"type":"string","enum":["E0","E1"]}},"required":["targets","task_category"],"additionalProperties":false}}}},"responses":{"200":{"description":"Unranked contextual cards"},"422":{"description":"Invalid target or task identity"}}}},"/v1/quality/observations/record":{"post":{"operationId":"recordQualityObservation","summary":"TrustMyChoice — record a structured observation","description":"Stores opt-in structured metrics for one exact target/version/task. Receipt-linked observations are E1; other observations are E0. No prompt, response, credential, email, or free-form review is accepted. A Founding Access, legacy verified-contributor, or subscription key may be used.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityObservation"}}}},"responses":{"200":{"description":"Observation result and evidence class"},"401":{"description":"Founding Access, verified-contributor, or subscription key required"},"422":{"description":"Invalid structured observation"}}}},"/v1/quality/corrections/request":{"post":{"operationId":"requestQualityCorrection","summary":"TrustMyChoice — request a correction or appeal","description":"Attaches a digest-only pending correction or appeal request. It does not prove provider identity, erase evidence, or guarantee an outcome. A Founding Access, legacy verified-contributor, or subscription key may be used.","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"card_id":{"type":"string","pattern":"^tmc_[a-f0-9]{40}$"},"request_key":{"type":"string","maxLength":160},"request_kind":{"type":"string","enum":["correction","appeal"]},"reason_code":{"type":"string","enum":["inaccurate_target","outdated_version","methodology","evidence","error","other"]},"correction_digest":{"$ref":"#/components/schemas/Sha256Digest"}},"required":["card_id","request_key","request_kind","reason_code","correction_digest"],"additionalProperties":false}}}},"responses":{"200":{"description":"Pending correction or appeal state"},"401":{"description":"Founding Access, verified-contributor, or subscription key required"},"422":{"description":"Invalid request"}}}}},"components":{"schemas":{"Sha256Digest":{"type":"string","pattern":"^(?:sha256:)?[a-f0-9]{64}$","description":"A lowercase SHA-256 digest, with an optional sha256: prefix."},"QualityTargetQuery":{"type":"object","properties":{"target_type":{"type":"string","enum":["mcp_server","rest_api"]},"provider_domain":{"type":"string","maxLength":253},"canonical_endpoint":{"type":"string","format":"uri","maxLength":2048},"version":{"type":"string","maxLength":120},"interface_digest":{"$ref":"#/components/schemas/Sha256Digest"}},"required":["target_type","provider_domain","canonical_endpoint","version"],"additionalProperties":false},"QualityCardListQuery":{"type":"object","properties":{"target_type":{"type":"string","enum":["mcp_server","rest_api"]},"task_category":{"type":"string","maxLength":120,"pattern":"^[a-z0-9][a-z0-9._:-]{0,119}$"},"limit":{"type":"integer","minimum":1,"maximum":50,"default":24}},"additionalProperties":false},"QualityCardQuery":{"type":"object","properties":{"target_type":{"type":"string","enum":["mcp_server","rest_api"]},"provider_domain":{"type":"string","maxLength":253},"canonical_endpoint":{"type":"string","format":"uri","maxLength":2048},"version":{"type":"string","maxLength":120},"interface_digest":{"$ref":"#/components/schemas/Sha256Digest"},"task_category":{"type":"string","maxLength":120},"region":{"type":"string","maxLength":40},"max_latency_ms":{"type":"integer","minimum":0,"maximum":86400000},"max_price_micros":{"type":"integer","minimum":0,"maximum":1000000000000},"minimum_evidence_class":{"type":"string","enum":["E0","E1"]}},"required":["target_type","provider_domain","canonical_endpoint","version","task_category"],"additionalProperties":false},"QualityObservation":{"type":"object","properties":{"target_type":{"type":"string","enum":["mcp_server","rest_api"]},"provider_domain":{"type":"string","maxLength":253},"canonical_endpoint":{"type":"string","format":"uri","maxLength":2048},"version":{"type":"string","maxLength":120},"interface_digest":{"$ref":"#/components/schemas/Sha256Digest"},"task_category":{"type":"string","maxLength":120},"region":{"type":"string","maxLength":40},"max_latency_ms":{"type":"integer","minimum":0,"maximum":86400000},"max_price_micros":{"type":"integer","minimum":0,"maximum":1000000000000},"minimum_evidence_class":{"type":"string","enum":["E0","E1"]},"observation_key":{"type":"string","maxLength":160},"receipt_id":{"type":"string","maxLength":100},"outcome_success":{"type":"boolean"},"reliability":{"type":"boolean"},"latency_ms":{"type":"integer","minimum":0,"maximum":86400000},"quoted_price_micros":{"type":"integer","minimum":0,"maximum":1000000000000},"final_price_micros":{"type":"integer","minimum":0,"maximum":1000000000000},"observed_at":{"type":"string","format":"date-time"}},"required":["target_type","provider_domain","canonical_endpoint","version","task_category","observation_key","outcome_success","reliability"],"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"smt_founder_..., smt_live_..., or legacy smt_tmc_...","description":"smt_founder_ keys provide all-tool access for 30 days or 1,000 total calls with no overages, then remain limited to TrustMyChoice evidence writes. Paid smt_live_ keys access subscription tools. Legacy smt_tmc_ keys are limited to TrustMyChoice observation and correction writes."}}}}