{"openapi":"3.1.1","info":{"title":"Agent Utility Lab API","version":"0.3.0","description":"Deterministic utilities and empirical compatibility intelligence for autonomous agents."},"x-agent-utility-lab":{"idempotency":"Use the per-tool execution.idempotency contract before any paid or side-effecting invocation."},"servers":[{"url":"/"}],"paths":{"/v1/tools/penny-lock":{"x-agent-tool-contract":{"slug":"penny-lock","name":"PennyLock","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Acquire an opaque distributed lock with a short TTL.","description":"Atomically sets a namespaced opaque key if it is absent. Use it to ensure one agent temporarily owns a task. The service never exposes a list of locks or owners.","when_to_use":["One agent must briefly own an opaque resource while peers stand down.","Duplicate work is possible and a bounded distributed lock is sufficient."],"do_not_use_when":["The operation itself must execute exactly once.","The resource identifier contains secrets or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"owner":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"acquired":{"type":"boolean"},"lock_hash":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["acquired","lock_hash","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary lock when acquired."],"retention":"The opaque key hash and owner value remain in Valkey only until the requested TTL expires. A result envelope containing no raw key or owner may be retained for idempotent replay for up to 24 hours.","limits":{"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"namespace":"crawl:example.invalid","key":"job-42","owner":"agent-a","ttl_seconds":30},"output":{"acquired":true,"lock_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","expires_at":"2026-07-24T12:00:30.000Z","ttl_seconds_remaining":30},"negative":[{"scenario":"The operation itself must execute exactly once.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/penny-lock","execute":"/v1/tools/penny-lock"}},"get":{"operationId":"describe_penny_lock","summary":"Describe PennyLock","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"penny-lock","module_version":"0.1.0","result":{"slug":"penny-lock","name":"PennyLock","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Acquire an opaque distributed lock with a short TTL.","description":"Atomically sets a namespaced opaque key if it is absent. Use it to ensure one agent temporarily owns a task. The service never exposes a list of locks or owners.","when_to_use":["One agent must briefly own an opaque resource while peers stand down.","Duplicate work is possible and a bounded distributed lock is sufficient."],"do_not_use_when":["The operation itself must execute exactly once.","The resource identifier contains secrets or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"owner":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"acquired":{"type":"boolean"},"lock_hash":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["acquired","lock_hash","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary lock when acquired."],"retention":"The opaque key hash and owner value remain in Valkey only until the requested TTL expires. A result envelope containing no raw key or owner may be retained for idempotent replay for up to 24 hours.","limits":{"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"namespace":"crawl:example.invalid","key":"job-42","owner":"agent-a","ttl_seconds":30},"output":{"acquired":true,"lock_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","expires_at":"2026-07-24T12:00:30.000Z","ttl_seconds_remaining":30},"negative":[{"scenario":"The operation itself must execute exactly once.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/penny-lock","execute":"/v1/tools/penny-lock"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_penny_lock","summary":"Acquire an opaque distributed lock with a short TTL.","description":"Atomically sets a namespaced opaque key if it is absent. Use it to ensure one agent temporarily owns a task. The service never exposes a list of locks or owners. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"owner":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","ttl_seconds"],"additionalProperties":false},"example":{"namespace":"crawl:example.invalid","key":"job-42","owner":"agent-a","ttl_seconds":30}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"penny-lock"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"acquired":{"type":"boolean"},"lock_hash":{"type":"string"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["acquired","lock_hash","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"penny-lock","module_version":"0.1.0","result":{"acquired":true,"lock_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","expires_at":"2026-07-24T12:00:30.000Z","ttl_seconds_remaining":30}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/global-seen-stamp":{"x-agent-tool-contract":{"slug":"global-seen-stamp","name":"Global Seen Stamp","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Atomically record whether an opaque content hash has been seen.","description":"Use this shared, expiring content-hash registry to deduplicate work across agents. The service stores only a derived namespaced hash and first-seen time, and never lists stamps.","when_to_use":["Agents need to know whether an opaque item was already observed.","A shared expiring deduplication marker is sufficient."],"do_not_use_when":["A durable audit history is required.","The marker must never expire."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"content_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":2592000}},"required":["namespace","content_sha256","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seen_before":{"type":"boolean"},"stamp_hash":{"type":"string"},"first_seen_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["seen_before","stamp_hash","first_seen_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary seen stamp when none exists."],"retention":"A derived namespaced hash and first-seen timestamp remain in Valkey only until the requested TTL expires. Raw content is never accepted.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":2592000,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"namespace":"crawl","content_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","ttl_seconds":86400},"output":{"seen_before":false,"stamp_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","first_seen_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-25T12:00:00.000Z","ttl_seconds_remaining":86400},"negative":[{"scenario":"A durable audit history is required.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/global-seen-stamp","execute":"/v1/tools/global-seen-stamp"}},"get":{"operationId":"describe_global_seen_stamp","summary":"Describe Global Seen Stamp","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"global-seen-stamp","module_version":"0.1.0","result":{"slug":"global-seen-stamp","name":"Global Seen Stamp","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Atomically record whether an opaque content hash has been seen.","description":"Use this shared, expiring content-hash registry to deduplicate work across agents. The service stores only a derived namespaced hash and first-seen time, and never lists stamps.","when_to_use":["Agents need to know whether an opaque item was already observed.","A shared expiring deduplication marker is sufficient."],"do_not_use_when":["A durable audit history is required.","The marker must never expire."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"content_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":2592000}},"required":["namespace","content_sha256","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seen_before":{"type":"boolean"},"stamp_hash":{"type":"string"},"first_seen_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["seen_before","stamp_hash","first_seen_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary seen stamp when none exists."],"retention":"A derived namespaced hash and first-seen timestamp remain in Valkey only until the requested TTL expires. Raw content is never accepted.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":2592000,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"namespace":"crawl","content_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","ttl_seconds":86400},"output":{"seen_before":false,"stamp_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","first_seen_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-25T12:00:00.000Z","ttl_seconds_remaining":86400},"negative":[{"scenario":"A durable audit history is required.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/global-seen-stamp","execute":"/v1/tools/global-seen-stamp"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_global_seen_stamp","summary":"Atomically record whether an opaque content hash has been seen.","description":"Use this shared, expiring content-hash registry to deduplicate work across agents. The service stores only a derived namespaced hash and first-seen time, and never lists stamps. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"content_sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":2592000}},"required":["namespace","content_sha256","ttl_seconds"],"additionalProperties":false},"example":{"namespace":"crawl","content_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","ttl_seconds":86400}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"global-seen-stamp"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"seen_before":{"type":"boolean"},"stamp_hash":{"type":"string"},"first_seen_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["seen_before","stamp_hash","first_seen_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"global-seen-stamp","module_version":"0.1.0","result":{"seen_before":false,"stamp_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","first_seen_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-25T12:00:00.000Z","ttl_seconds_remaining":86400}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/exactly-once-baton":{"x-agent-tool-contract":{"slug":"exactly-once-baton","name":"Exactly-Once Baton","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Issue and atomically consume a one-use capability token.","description":"Issue an unguessable short-lived baton, pass it to one agent, then consume it exactly once. Only a derived token hash is stored; batons cannot be listed or recovered.","when_to_use":["A coordinator must issue a capability that can be consumed once.","Multiple agents may race to claim the same bounded action."],"do_not_use_when":["A database transaction can directly protect the underlying operation.","The capability must be reusable."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":86400}},"required":["operation","namespace","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"baton":{"type":"string","pattern":"^eob_[A-Za-z0-9_-]{43}$"}},"required":["operation","namespace","baton"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"baton":{"type":"string"},"baton_hash":{"type":"string"},"issued_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["operation","baton","baton_hash","issued_at","expires_at"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"baton_hash":{"type":"string"},"consumed":{"type":"boolean"},"issued_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["operation","baton_hash","consumed","issued_at","ttl_seconds_remaining"],"additionalProperties":false}]},"payment":{"kind":"free"},"side_effects":["Issue creates a temporary one-use token.","Consume irreversibly invalidates a valid token."],"retention":"Only a SHA-256-derived baton key and issue timestamp remain in Valkey until consumption or expiry. Issued token values appear only in the replay-protected result.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":86400,"token_entropy_bits":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"operation":"issue","namespace":"workflow","ttl_seconds":600},"output":{"operation":"issue","baton":"eob_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","baton_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","issued_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:10:00.000Z"},"negative":[{"scenario":"A database transaction can directly protect the underlying operation.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/exactly-once-baton","execute":"/v1/tools/exactly-once-baton"}},"get":{"operationId":"describe_exactly_once_baton","summary":"Describe Exactly-Once Baton","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"exactly-once-baton","module_version":"0.1.0","result":{"slug":"exactly-once-baton","name":"Exactly-Once Baton","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Issue and atomically consume a one-use capability token.","description":"Issue an unguessable short-lived baton, pass it to one agent, then consume it exactly once. Only a derived token hash is stored; batons cannot be listed or recovered.","when_to_use":["A coordinator must issue a capability that can be consumed once.","Multiple agents may race to claim the same bounded action."],"do_not_use_when":["A database transaction can directly protect the underlying operation.","The capability must be reusable."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":86400}},"required":["operation","namespace","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"baton":{"type":"string","pattern":"^eob_[A-Za-z0-9_-]{43}$"}},"required":["operation","namespace","baton"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"baton":{"type":"string"},"baton_hash":{"type":"string"},"issued_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["operation","baton","baton_hash","issued_at","expires_at"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"baton_hash":{"type":"string"},"consumed":{"type":"boolean"},"issued_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["operation","baton_hash","consumed","issued_at","ttl_seconds_remaining"],"additionalProperties":false}]},"payment":{"kind":"free"},"side_effects":["Issue creates a temporary one-use token.","Consume irreversibly invalidates a valid token."],"retention":"Only a SHA-256-derived baton key and issue timestamp remain in Valkey until consumption or expiry. Issued token values appear only in the replay-protected result.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":86400,"token_entropy_bits":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"operation":"issue","namespace":"workflow","ttl_seconds":600},"output":{"operation":"issue","baton":"eob_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","baton_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","issued_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:10:00.000Z"},"negative":[{"scenario":"A database transaction can directly protect the underlying operation.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/exactly-once-baton","execute":"/v1/tools/exactly-once-baton"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_exactly_once_baton","summary":"Issue and atomically consume a one-use capability token.","description":"Issue an unguessable short-lived baton, pass it to one agent, then consume it exactly once. Only a derived token hash is stored; batons cannot be listed or recovered. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":86400}},"required":["operation","namespace","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"baton":{"type":"string","pattern":"^eob_[A-Za-z0-9_-]{43}$"}},"required":["operation","namespace","baton"],"additionalProperties":false}]},"example":{"operation":"issue","namespace":"workflow","ttl_seconds":600}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"exactly-once-baton"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"issue"},"baton":{"type":"string"},"baton_hash":{"type":"string"},"issued_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["operation","baton","baton_hash","issued_at","expires_at"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"consume"},"baton_hash":{"type":"string"},"consumed":{"type":"boolean"},"issued_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["operation","baton_hash","consumed","issued_at","ttl_seconds_remaining"],"additionalProperties":false}]},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"exactly-once-baton","module_version":"0.1.0","result":{"operation":"issue","baton":"eob_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","baton_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","issued_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:10:00.000Z"}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/negative-cache-ticket":{"x-agent-tool-contract":{"slug":"negative-cache-ticket","name":"Negative Cache Ticket","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Record or check a typed, expiring failure state.","description":"Prevent agent swarms from repeatedly attempting the same known-failing work. Record accepts a stable machine code only; check reveals a ticket only to callers that already know its opaque namespace and key.","when_to_use":["Agents should share a typed, temporary record of a failed lookup.","Repeated work should pause until an explicit expiration time."],"do_not_use_when":["The failure is permanent or requires a durable incident record.","The request contains raw credentials or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"record"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"failure_code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Z][A-Z0-9_]*$"},"ttl_seconds":{"type":"integer","minimum":5,"maximum":86400}},"required":["operation","namespace","key","failure_code","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"check"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256}},"required":["operation","namespace","key"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket_hash":{"type":"string"},"active":{"type":"boolean"},"newly_recorded":{"type":"boolean"},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"recorded_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["ticket_hash","active","newly_recorded","failure_code","recorded_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Record creates a temporary failure-state ticket if absent."],"retention":"A derived namespaced key, stable failure code, and timestamp remain in Valkey only until expiry. Raw error messages are not accepted.","limits":{"min_ttl_seconds":5,"max_ttl_seconds":86400,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"operation":"record","namespace":"fetch","key":"resource-42","failure_code":"UPSTREAM_TIMEOUT","ttl_seconds":60},"output":{"ticket_hash":"sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd","active":true,"newly_recorded":true,"failure_code":"UPSTREAM_TIMEOUT","recorded_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:01:00.000Z","ttl_seconds_remaining":60},"negative":[{"scenario":"The failure is permanent or requires a durable incident record.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/negative-cache-ticket","execute":"/v1/tools/negative-cache-ticket"}},"get":{"operationId":"describe_negative_cache_ticket","summary":"Describe Negative Cache Ticket","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"negative-cache-ticket","module_version":"0.1.0","result":{"slug":"negative-cache-ticket","name":"Negative Cache Ticket","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Record or check a typed, expiring failure state.","description":"Prevent agent swarms from repeatedly attempting the same known-failing work. Record accepts a stable machine code only; check reveals a ticket only to callers that already know its opaque namespace and key.","when_to_use":["Agents should share a typed, temporary record of a failed lookup.","Repeated work should pause until an explicit expiration time."],"do_not_use_when":["The failure is permanent or requires a durable incident record.","The request contains raw credentials or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"record"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"failure_code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Z][A-Z0-9_]*$"},"ttl_seconds":{"type":"integer","minimum":5,"maximum":86400}},"required":["operation","namespace","key","failure_code","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"check"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256}},"required":["operation","namespace","key"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket_hash":{"type":"string"},"active":{"type":"boolean"},"newly_recorded":{"type":"boolean"},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"recorded_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["ticket_hash","active","newly_recorded","failure_code","recorded_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Record creates a temporary failure-state ticket if absent."],"retention":"A derived namespaced key, stable failure code, and timestamp remain in Valkey only until expiry. Raw error messages are not accepted.","limits":{"min_ttl_seconds":5,"max_ttl_seconds":86400,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"operation":"record","namespace":"fetch","key":"resource-42","failure_code":"UPSTREAM_TIMEOUT","ttl_seconds":60},"output":{"ticket_hash":"sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd","active":true,"newly_recorded":true,"failure_code":"UPSTREAM_TIMEOUT","recorded_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:01:00.000Z","ttl_seconds_remaining":60},"negative":[{"scenario":"The failure is permanent or requires a durable incident record.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/negative-cache-ticket","execute":"/v1/tools/negative-cache-ticket"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_negative_cache_ticket","summary":"Record or check a typed, expiring failure state.","description":"Prevent agent swarms from repeatedly attempting the same known-failing work. Record accepts a stable machine code only; check reveals a ticket only to callers that already know its opaque namespace and key. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"operation":{"type":"string","const":"record"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"failure_code":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Z][A-Z0-9_]*$"},"ttl_seconds":{"type":"integer","minimum":5,"maximum":86400}},"required":["operation","namespace","key","failure_code","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"operation":{"type":"string","const":"check"},"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256}},"required":["operation","namespace","key"],"additionalProperties":false}]},"example":{"operation":"record","namespace":"fetch","key":"resource-42","failure_code":"UPSTREAM_TIMEOUT","ttl_seconds":60}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"negative-cache-ticket"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"ticket_hash":{"type":"string"},"active":{"type":"boolean"},"newly_recorded":{"type":"boolean"},"failure_code":{"anyOf":[{"type":"string"},{"type":"null"}]},"recorded_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"ttl_seconds_remaining":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]}},"required":["ticket_hash","active","newly_recorded","failure_code","recorded_at","expires_at","ttl_seconds_remaining"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"negative-cache-ticket","module_version":"0.1.0","result":{"ticket_hash":"sha256:dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd","active":true,"newly_recorded":true,"failure_code":"UPSTREAM_TIMEOUT","recorded_at":"2026-07-24T12:00:00.000Z","expires_at":"2026-07-24T12:01:00.000Z","ttl_seconds_remaining":60}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/status-code-forge":{"x-agent-tool-contract":{"slug":"status-code-forge","name":"Status-Code Forge","version":"0.1.0","category":"ephemeral","status":"beta","mode":"ephemeral","summary":"Create a short-lived URL with controlled HTTP behavior.","description":"Create an unguessable temporary fixture URL that returns one allowlisted status, a fixed JSON or plain-text body, an optional bounded delay, and safe protocol headers. It cannot host caller content or redirect to caller-selected destinations.","when_to_use":["A client, webhook, or retry policy must be tested against controlled HTTP behavior.","A short-lived endpoint is needed for deterministic integration testing."],"do_not_use_when":["The URL would be used for production traffic.","The response must contain sensitive or unbounded content."],"tested_with":["HTTP/1.1","HTTP/2","redirect-following clients"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"anyOf":[{"type":"number","const":200},{"type":"number","const":201},{"type":"number","const":202},{"type":"number","const":204},{"type":"number","const":301},{"type":"number","const":302},{"type":"number","const":307},{"type":"number","const":308},{"type":"number","const":400},{"type":"number","const":401},{"type":"number","const":403},{"type":"number","const":404},{"type":"number","const":408},{"type":"number","const":409},{"type":"number","const":410},{"type":"number","const":422},{"type":"number","const":425},{"type":"number","const":429},{"type":"number","const":500}]},"body_format":{"default":"json","type":"string","enum":["json","text"]},"delay_ms":{"default":0,"type":"integer","minimum":0,"maximum":2000},"retry_after_seconds":{"type":"integer","minimum":1,"maximum":3600},"include_safe_location":{"default":false,"type":"boolean"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":1800}},"required":["status","body_format","delay_ms","include_safe_location","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fixture_url":{"type":"string","format":"uri"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"capability_entropy_bits":{"type":"number","const":256},"behavior":{"type":"object","properties":{"body_format":{"type":"string","enum":["json","text"]},"delay_ms":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retry_after_seconds":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"location":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["body_format","delay_ms","retry_after_seconds","location"],"additionalProperties":false}},"required":["fixture_url","status","expires_at","capability_entropy_bits","behavior"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary public HTTP fixture URL."],"retention":"The generated behavior record remains in Valkey for at most 30 minutes. The URL token has 256 bits of entropy and is never listed.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":1800,"max_delay_ms":2000,"allowed_status_count":19,"excluded_ingress_rewritten_statuses":"502,503,504","caller_supplied_body_bytes":0,"max_client_requests_per_minute":10,"max_global_requests_per_minute":60},"examples":{"input":{"status":429,"body_format":"json","delay_ms":0,"retry_after_seconds":10,"include_safe_location":false,"ttl_seconds":300},"output":{"fixture_url":"https://lab.example/v1/fixtures/status/scf_example","status":429,"expires_at":"2026-07-24T12:05:00.000Z","capability_entropy_bits":256,"behavior":{"body_format":"json","delay_ms":0,"retry_after_seconds":10,"location":null}},"negative":[{"scenario":"The URL would be used for production traffic.","expected_error":"NOT_COVERED","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/status-code-forge","execute":"/v1/tools/status-code-forge"}},"get":{"operationId":"describe_status_code_forge","summary":"Describe Status-Code Forge","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"status-code-forge","module_version":"0.1.0","result":{"slug":"status-code-forge","name":"Status-Code Forge","version":"0.1.0","category":"ephemeral","status":"beta","mode":"ephemeral","summary":"Create a short-lived URL with controlled HTTP behavior.","description":"Create an unguessable temporary fixture URL that returns one allowlisted status, a fixed JSON or plain-text body, an optional bounded delay, and safe protocol headers. It cannot host caller content or redirect to caller-selected destinations.","when_to_use":["A client, webhook, or retry policy must be tested against controlled HTTP behavior.","A short-lived endpoint is needed for deterministic integration testing."],"do_not_use_when":["The URL would be used for production traffic.","The response must contain sensitive or unbounded content."],"tested_with":["HTTP/1.1","HTTP/2","redirect-following clients"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"anyOf":[{"type":"number","const":200},{"type":"number","const":201},{"type":"number","const":202},{"type":"number","const":204},{"type":"number","const":301},{"type":"number","const":302},{"type":"number","const":307},{"type":"number","const":308},{"type":"number","const":400},{"type":"number","const":401},{"type":"number","const":403},{"type":"number","const":404},{"type":"number","const":408},{"type":"number","const":409},{"type":"number","const":410},{"type":"number","const":422},{"type":"number","const":425},{"type":"number","const":429},{"type":"number","const":500}]},"body_format":{"default":"json","type":"string","enum":["json","text"]},"delay_ms":{"default":0,"type":"integer","minimum":0,"maximum":2000},"retry_after_seconds":{"type":"integer","minimum":1,"maximum":3600},"include_safe_location":{"default":false,"type":"boolean"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":1800}},"required":["status","body_format","delay_ms","include_safe_location","ttl_seconds"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fixture_url":{"type":"string","format":"uri"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"capability_entropy_bits":{"type":"number","const":256},"behavior":{"type":"object","properties":{"body_format":{"type":"string","enum":["json","text"]},"delay_ms":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retry_after_seconds":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"location":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["body_format","delay_ms","retry_after_seconds","location"],"additionalProperties":false}},"required":["fixture_url","status","expires_at","capability_entropy_bits","behavior"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Creates a temporary public HTTP fixture URL."],"retention":"The generated behavior record remains in Valkey for at most 30 minutes. The URL token has 256 bits of entropy and is never listed.","limits":{"min_ttl_seconds":60,"max_ttl_seconds":1800,"max_delay_ms":2000,"allowed_status_count":19,"excluded_ingress_rewritten_statuses":"502,503,504","caller_supplied_body_bytes":0,"max_client_requests_per_minute":10,"max_global_requests_per_minute":60},"examples":{"input":{"status":429,"body_format":"json","delay_ms":0,"retry_after_seconds":10,"include_safe_location":false,"ttl_seconds":300},"output":{"fixture_url":"https://lab.example/v1/fixtures/status/scf_example","status":429,"expires_at":"2026-07-24T12:05:00.000Z","capability_entropy_bits":256,"behavior":{"body_format":"json","delay_ms":0,"retry_after_seconds":10,"location":null}},"negative":[{"scenario":"The URL would be used for production traffic.","expected_error":"NOT_COVERED","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/status-code-forge","execute":"/v1/tools/status-code-forge"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_status_code_forge","summary":"Create a short-lived URL with controlled HTTP behavior.","description":"Create an unguessable temporary fixture URL that returns one allowlisted status, a fixed JSON or plain-text body, an optional bounded delay, and safe protocol headers. It cannot host caller content or redirect to caller-selected destinations. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"status":{"anyOf":[{"type":"number","const":200},{"type":"number","const":201},{"type":"number","const":202},{"type":"number","const":204},{"type":"number","const":301},{"type":"number","const":302},{"type":"number","const":307},{"type":"number","const":308},{"type":"number","const":400},{"type":"number","const":401},{"type":"number","const":403},{"type":"number","const":404},{"type":"number","const":408},{"type":"number","const":409},{"type":"number","const":410},{"type":"number","const":422},{"type":"number","const":425},{"type":"number","const":429},{"type":"number","const":500}]},"body_format":{"default":"json","type":"string","enum":["json","text"]},"delay_ms":{"default":0,"type":"integer","minimum":0,"maximum":2000},"retry_after_seconds":{"type":"integer","minimum":1,"maximum":3600},"include_safe_location":{"default":false,"type":"boolean"},"ttl_seconds":{"type":"integer","minimum":60,"maximum":1800}},"required":["status","body_format","delay_ms","include_safe_location","ttl_seconds"],"additionalProperties":false},"example":{"status":429,"body_format":"json","delay_ms":0,"retry_after_seconds":10,"include_safe_location":false,"ttl_seconds":300}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"status-code-forge"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fixture_url":{"type":"string","format":"uri"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"capability_entropy_bits":{"type":"number","const":256},"behavior":{"type":"object","properties":{"body_format":{"type":"string","enum":["json","text"]},"delay_ms":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"retry_after_seconds":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"location":{"anyOf":[{"type":"string","format":"uri"},{"type":"null"}]}},"required":["body_format","delay_ms","retry_after_seconds","location"],"additionalProperties":false}},"required":["fixture_url","status","expires_at","capability_entropy_bits","behavior"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"status-code-forge","module_version":"0.1.0","result":{"fixture_url":"https://lab.example/v1/fixtures/status/scf_example","status":429,"expires_at":"2026-07-24T12:05:00.000Z","capability_entropy_bits":256,"behavior":{"body_format":"json","delay_ms":0,"retry_after_seconds":10,"location":null}}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"404":{"description":"The validated lookup is outside current coverage; no payment was requested.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/safe-synthetic-fixture-vault":{"x-agent-tool-contract":{"slug":"safe-synthetic-fixture-vault","name":"Safe Synthetic Fixture Vault","version":"0.1.0","category":"fixtures","status":"beta","mode":"lookup","summary":"Generate deterministic test records using reserved non-production values.","description":"Generate repeatable identity, network, or HTTP-event fixtures without inventing a real person, inbox, domain, or routable address. The same kind and seed produce the same fixture.","when_to_use":["An agent needs a clearly synthetic fixture for a supported schema.","Tests need deterministic data without copying production records."],"do_not_use_when":["Real customer data or identity verification is required.","The requested fixture type is outside the published schema set."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"seed":{"type":"string","minLength":1,"maxLength":128}},"required":["kind","seed"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"deterministic_id":{"type":"string"},"fixture":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},"safety":{"type":"object","properties":{"synthetic":{"type":"boolean","const":true},"routable":{"type":"boolean","const":false},"reserved_examples_only":{"type":"boolean","const":true}},"required":["synthetic","routable","reserved_examples_only"],"additionalProperties":false}},"required":["kind","deterministic_id","fixture","safety"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The seed is processed in memory and is not retained. Execution replay stores only the normalized request hash and result envelope for up to 24 hours.","limits":{"max_seed_bytes":128,"fixture_kinds":3,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"kind":"network","seed":"crawl-test-42"},"output":{"kind":"network","deterministic_id":"sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","fixture":{"domain":"a1b2c3d4e5f6.example.invalid","ipv4":"192.0.2.42","url":"https://a1b2c3d4e5f6.example.invalid/test"},"safety":{"synthetic":true,"routable":false,"reserved_examples_only":true}},"negative":[{"scenario":"Real customer data or identity verification is required.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/safe-synthetic-fixture-vault","execute":"/v1/tools/safe-synthetic-fixture-vault"}},"get":{"operationId":"describe_safe_synthetic_fixture_vault","summary":"Describe Safe Synthetic Fixture Vault","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"safe-synthetic-fixture-vault","module_version":"0.1.0","result":{"slug":"safe-synthetic-fixture-vault","name":"Safe Synthetic Fixture Vault","version":"0.1.0","category":"fixtures","status":"beta","mode":"lookup","summary":"Generate deterministic test records using reserved non-production values.","description":"Generate repeatable identity, network, or HTTP-event fixtures without inventing a real person, inbox, domain, or routable address. The same kind and seed produce the same fixture.","when_to_use":["An agent needs a clearly synthetic fixture for a supported schema.","Tests need deterministic data without copying production records."],"do_not_use_when":["Real customer data or identity verification is required.","The requested fixture type is outside the published schema set."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"seed":{"type":"string","minLength":1,"maxLength":128}},"required":["kind","seed"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"deterministic_id":{"type":"string"},"fixture":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},"safety":{"type":"object","properties":{"synthetic":{"type":"boolean","const":true},"routable":{"type":"boolean","const":false},"reserved_examples_only":{"type":"boolean","const":true}},"required":["synthetic","routable","reserved_examples_only"],"additionalProperties":false}},"required":["kind","deterministic_id","fixture","safety"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The seed is processed in memory and is not retained. Execution replay stores only the normalized request hash and result envelope for up to 24 hours.","limits":{"max_seed_bytes":128,"fixture_kinds":3,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"kind":"network","seed":"crawl-test-42"},"output":{"kind":"network","deterministic_id":"sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","fixture":{"domain":"a1b2c3d4e5f6.example.invalid","ipv4":"192.0.2.42","url":"https://a1b2c3d4e5f6.example.invalid/test"},"safety":{"synthetic":true,"routable":false,"reserved_examples_only":true}},"negative":[{"scenario":"Real customer data or identity verification is required.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/safe-synthetic-fixture-vault","execute":"/v1/tools/safe-synthetic-fixture-vault"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_safe_synthetic_fixture_vault","summary":"Generate deterministic test records using reserved non-production values.","description":"Generate repeatable identity, network, or HTTP-event fixtures without inventing a real person, inbox, domain, or routable address. The same kind and seed produce the same fixture. ","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"seed":{"type":"string","minLength":1,"maxLength":128}},"required":["kind","seed"],"additionalProperties":false},"example":{"kind":"network","seed":"crawl-test-42"}}}},"responses":{"200":{"description":"Successful tool result.","headers":{},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"safe-synthetic-fixture-vault"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"kind":{"type":"string","enum":["identity","network","http-event"]},"deterministic_id":{"type":"string"},"fixture":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}},"safety":{"type":"object","properties":{"synthetic":{"type":"boolean","const":true},"routable":{"type":"boolean","const":false},"reserved_examples_only":{"type":"boolean","const":true}},"required":["synthetic","routable","reserved_examples_only"],"additionalProperties":false}},"required":["kind","deterministic_id","fixture","safety"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"safe-synthetic-fixture-vault","module_version":"0.1.0","result":{"kind":"network","deterministic_id":"sha256:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee","fixture":{"domain":"a1b2c3d4e5f6.example.invalid","ipv4":"192.0.2.42","url":"https://a1b2c3d4e5f6.example.invalid/test"},"safety":{"synthetic":true,"routable":false,"reserved_examples_only":true}}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/error-code-cemetery":{"x-agent-tool-contract":{"slug":"error-code-cemetery","name":"Error-Code Cemetery","version":"0.1.0","category":"compatibility","status":"beta","mode":"lookup","summary":"Map a covered integration-error fingerprint to a tested diagnosis.","description":"Look up a normalized obscure error fingerprint in a narrow, evidence-linked corpus. Inspect limits for current coverage; unknown fingerprints return free NOT_COVERED before payment.","when_to_use":["An agent needs evidence about a deprecated or host-specific error code.","Compatibility behavior must be checked before changing an integration."],"do_not_use_when":["The exact host, version, or error is outside the published dataset.","The answer would be treated as a guarantee about future host behavior."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"system":{"type":"string"},"diagnosis":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"confidence":{"type":"number","minimum":0,"maximum":1},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","system","diagnosis","correction","confidence","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted fingerprint is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_fingerprints":"digitalocean-app-no-components-detected,github-oauth-redirect-uri-mismatch","corpus_records":2,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"fingerprint":"github-oauth-redirect-uri-mismatch"},"output":{"fingerprint":"github-oauth-redirect-uri-mismatch","system":"GitHub OAuth","diagnosis":"The redirect_uri does not match the registered callback.","correction":["Register the exact callback URL."],"confidence":0.99,"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.github.com/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors"]},"negative":[{"scenario":"The exact host, version, or error is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"Two deployment and OAuth errors observed during Agent Utility Lab staging setup.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-10-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/error-code-cemetery","execute":"/v1/tools/error-code-cemetery"}},"get":{"operationId":"describe_error_code_cemetery","summary":"Describe Error-Code Cemetery","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"error-code-cemetery","module_version":"0.1.0","result":{"slug":"error-code-cemetery","name":"Error-Code Cemetery","version":"0.1.0","category":"compatibility","status":"beta","mode":"lookup","summary":"Map a covered integration-error fingerprint to a tested diagnosis.","description":"Look up a normalized obscure error fingerprint in a narrow, evidence-linked corpus. Inspect limits for current coverage; unknown fingerprints return free NOT_COVERED before payment.","when_to_use":["An agent needs evidence about a deprecated or host-specific error code.","Compatibility behavior must be checked before changing an integration."],"do_not_use_when":["The exact host, version, or error is outside the published dataset.","The answer would be treated as a guarantee about future host behavior."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"system":{"type":"string"},"diagnosis":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"confidence":{"type":"number","minimum":0,"maximum":1},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","system","diagnosis","correction","confidence","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted fingerprint is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_fingerprints":"digitalocean-app-no-components-detected,github-oauth-redirect-uri-mismatch","corpus_records":2,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"fingerprint":"github-oauth-redirect-uri-mismatch"},"output":{"fingerprint":"github-oauth-redirect-uri-mismatch","system":"GitHub OAuth","diagnosis":"The redirect_uri does not match the registered callback.","correction":["Register the exact callback URL."],"confidence":0.99,"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.github.com/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors"]},"negative":[{"scenario":"The exact host, version, or error is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"Two deployment and OAuth errors observed during Agent Utility Lab staging setup.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-10-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/error-code-cemetery","execute":"/v1/tools/error-code-cemetery"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_error_code_cemetery","summary":"Map a covered integration-error fingerprint to a tested diagnosis.","description":"Look up a normalized obscure error fingerprint in a narrow, evidence-linked corpus. Inspect limits for current coverage; unknown fingerprints return free NOT_COVERED before payment. ","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"example":{"fingerprint":"github-oauth-redirect-uri-mismatch"}}}},"responses":{"200":{"description":"Successful tool result.","headers":{},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"error-code-cemetery"},"module_version":{"const":"0.1.0"},"data_version":{"const":"2026.07.24.1"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"system":{"type":"string"},"diagnosis":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"confidence":{"type":"number","minimum":0,"maximum":1},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","system","diagnosis","correction","confidence","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"error-code-cemetery","module_version":"0.1.0","data_version":"2026.07.24.1","result":{"fingerprint":"github-oauth-redirect-uri-mismatch","system":"GitHub OAuth","diagnosis":"The redirect_uri does not match the registered callback.","correction":["Register the exact callback URL."],"confidence":0.99,"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.github.com/en/apps/oauth-apps/maintaining-oauth-apps/troubleshooting-authorization-request-errors"]}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"404":{"description":"The validated lookup is outside current coverage; no payment was requested.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/x402-error-rosetta-stone":{"x-agent-tool-contract":{"slug":"x402-error-rosetta-stone","name":"402 Error Rosetta Stone","version":"0.1.0","category":"x402-intelligence","status":"beta","mode":"lookup","summary":"Translate a covered x402 failure fingerprint into a correction.","description":"Resolve one normalized x402 v2 integration fingerprint using an evidence-linked correction record. Unknown fingerprints return free NOT_COVERED before payment.","when_to_use":["An x402 failure must be mapped to a normalized cause and next check.","A buyer or seller integration needs evidence-linked diagnostic guidance."],"do_not_use_when":["The protocol, host, network, or error is outside the published dataset.","Wallet custody or private-key handling is required."],"tested_with":["x402 v2","Base Sepolia","HTTP/1.1","HTTP/2"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"likely_cause":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"protocol_version":{"type":"string","const":"2"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","likely_cause","correction","protocol_version","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted fingerprint is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_fingerprints":"x-payment-header-v1-on-v2,base-sepolia-network-name,no-scheme-registered,repeated-402-after-payment-signature","corpus_records":4,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"fingerprint":"base-sepolia-network-name"},"output":{"fingerprint":"base-sepolia-network-name","likely_cause":"The client uses a legacy network name instead of CAIP-2.","correction":["Use eip155:84532 for Base Sepolia."],"protocol_version":"2","observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.x402.org/guides/migration-v1-to-v2"]},"negative":[{"scenario":"The protocol, host, network, or error is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"Four x402 v2 client, header, network, and verification failure fingerprints.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-08-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/x402-error-rosetta-stone","execute":"/v1/tools/x402-error-rosetta-stone"}},"get":{"operationId":"describe_x402_error_rosetta_stone","summary":"Describe 402 Error Rosetta Stone","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"x402-error-rosetta-stone","module_version":"0.1.0","result":{"slug":"x402-error-rosetta-stone","name":"402 Error Rosetta Stone","version":"0.1.0","category":"x402-intelligence","status":"beta","mode":"lookup","summary":"Translate a covered x402 failure fingerprint into a correction.","description":"Resolve one normalized x402 v2 integration fingerprint using an evidence-linked correction record. Unknown fingerprints return free NOT_COVERED before payment.","when_to_use":["An x402 failure must be mapped to a normalized cause and next check.","A buyer or seller integration needs evidence-linked diagnostic guidance."],"do_not_use_when":["The protocol, host, network, or error is outside the published dataset.","Wallet custody or private-key handling is required."],"tested_with":["x402 v2","Base Sepolia","HTTP/1.1","HTTP/2"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"likely_cause":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"protocol_version":{"type":"string","const":"2"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","likely_cause","correction","protocol_version","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted fingerprint is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_fingerprints":"x-payment-header-v1-on-v2,base-sepolia-network-name,no-scheme-registered,repeated-402-after-payment-signature","corpus_records":4,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"fingerprint":"base-sepolia-network-name"},"output":{"fingerprint":"base-sepolia-network-name","likely_cause":"The client uses a legacy network name instead of CAIP-2.","correction":["Use eip155:84532 for Base Sepolia."],"protocol_version":"2","observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.x402.org/guides/migration-v1-to-v2"]},"negative":[{"scenario":"The protocol, host, network, or error is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"Four x402 v2 client, header, network, and verification failure fingerprints.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-08-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/x402-error-rosetta-stone","execute":"/v1/tools/x402-error-rosetta-stone"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_x402_error_rosetta_stone","summary":"Translate a covered x402 failure fingerprint into a correction.","description":"Resolve one normalized x402 v2 integration fingerprint using an evidence-linked correction record. Unknown fingerprints return free NOT_COVERED before payment. ","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string","minLength":3,"maxLength":160}},"required":["fingerprint"],"additionalProperties":false},"example":{"fingerprint":"base-sepolia-network-name"}}}},"responses":{"200":{"description":"Successful tool result.","headers":{},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"x402-error-rosetta-stone"},"module_version":{"const":"0.1.0"},"data_version":{"const":"2026.07.24.1"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"fingerprint":{"type":"string"},"likely_cause":{"type":"string"},"correction":{"type":"array","items":{"type":"string"}},"protocol_version":{"type":"string","const":"2"},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["fingerprint","likely_cause","correction","protocol_version","observed_at","evidence_urls"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"x402-error-rosetta-stone","module_version":"0.1.0","data_version":"2026.07.24.1","result":{"fingerprint":"base-sepolia-network-name","likely_cause":"The client uses a legacy network name instead of CAIP-2.","correction":["Use eip155:84532 for Base Sepolia."],"protocol_version":"2","observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://docs.x402.org/guides/migration-v1-to-v2"]}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"404":{"description":"The validated lookup is outside current coverage; no payment was requested.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/worked-once-recipe-vault":{"x-agent-tool-contract":{"slug":"worked-once-recipe-vault","name":"Worked-Once Recipe Vault","version":"0.1.0","category":"x402-intelligence","status":"beta","mode":"lookup","summary":"Return a covered, empirically verified integration recipe.","description":"Retrieve a known-good, versioned x402 integration recipe with its exact environment and verification evidence. Unknown recipe keys return free NOT_COVERED before payment.","when_to_use":["An agent needs a versioned integration recipe observed to work once.","A minimal host-specific compatibility example can unblock testing."],"do_not_use_when":["The requested host or version is outside the published dataset.","A recipe would be treated as a permanent compatibility guarantee."],"tested_with":["x402 v2","Base Sepolia","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string","minLength":3,"maxLength":160}},"required":["recipe_key"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string"},"environment":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"steps":{"type":"array","items":{"type":"string"}},"verified_properties":{"type":"array","items":{"type":"string"}},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["recipe_key","environment","steps","verified_properties","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted recipe key is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_recipe_keys":"typescript-fetch-base-sepolia-exact-v2","corpus_records":1,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2"},"output":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2","environment":{"runtime":"Node.js 24","network":"eip155:84532"},"steps":["Register ExactEvmScheme, then wrap fetch."],"verified_properties":["An identical replay produced no second transfer."],"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://sepolia.basescan.org/tx/0x5d299e53db4ec99415653556cdb8e6b5bc1492078dcacee3a031c0f6fee88f01"]},"negative":[{"scenario":"The requested host or version is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"One TypeScript x402 v2 exact-payment recipe verified end-to-end against Agent Utility Lab staging on Base Sepolia.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-08-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/worked-once-recipe-vault","execute":"/v1/tools/worked-once-recipe-vault"}},"get":{"operationId":"describe_worked_once_recipe_vault","summary":"Describe Worked-Once Recipe Vault","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"worked-once-recipe-vault","module_version":"0.1.0","result":{"slug":"worked-once-recipe-vault","name":"Worked-Once Recipe Vault","version":"0.1.0","category":"x402-intelligence","status":"beta","mode":"lookup","summary":"Return a covered, empirically verified integration recipe.","description":"Retrieve a known-good, versioned x402 integration recipe with its exact environment and verification evidence. Unknown recipe keys return free NOT_COVERED before payment.","when_to_use":["An agent needs a versioned integration recipe observed to work once.","A minimal host-specific compatibility example can unblock testing."],"do_not_use_when":["The requested host or version is outside the published dataset.","A recipe would be treated as a permanent compatibility guarantee."],"tested_with":["x402 v2","Base Sepolia","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string","minLength":3,"maxLength":160}},"required":["recipe_key"],"additionalProperties":false},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string"},"environment":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"steps":{"type":"array","items":{"type":"string"}},"verified_properties":{"type":"array","items":{"type":"string"}},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["recipe_key","environment","steps","verified_properties","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":[],"retention":"The submitted recipe key is normalized in memory. Raw input is not retained; execution controls retain a request hash.","limits":{"supported_recipe_keys":"typescript-fetch-base-sepolia-exact-v2","corpus_records":1,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2"},"output":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2","environment":{"runtime":"Node.js 24","network":"eip155:84532"},"steps":["Register ExactEvmScheme, then wrap fetch."],"verified_properties":["An identical replay produced no second transfer."],"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://sepolia.basescan.org/tx/0x5d299e53db4ec99415653556cdb8e6b5bc1492078dcacee3a031c0f6fee88f01"]},"negative":[{"scenario":"The requested host or version is outside the published dataset.","expected_error":"NOT_COVERED","charged":false}]},"dataset":{"version":"2026.07.24.1","scope":"One TypeScript x402 v2 exact-payment recipe verified end-to-end against Agent Utility Lab staging on Base Sepolia.","observed_at":"2026-07-24T00:00:00.000Z","valid_until":"2026-08-24T00:00:00.000Z","unsupported_requests_are_free":true},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"NOT_COVERED","retryable":false,"charged":false,"recovery":"Check dataset scope or submit a capability request."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":false,"mock_or_unpaid_header":null,"x402_extension":null,"replay_retention":null}},"endpoints":{"describe":"/v1/tools/worked-once-recipe-vault","execute":"/v1/tools/worked-once-recipe-vault"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_worked_once_recipe_vault","summary":"Return a covered, empirically verified integration recipe.","description":"Retrieve a known-good, versioned x402 integration recipe with its exact environment and verification evidence. Unknown recipe keys return free NOT_COVERED before payment. ","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string","minLength":3,"maxLength":160}},"required":["recipe_key"],"additionalProperties":false},"example":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2"}}}},"responses":{"200":{"description":"Successful tool result.","headers":{},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"worked-once-recipe-vault"},"module_version":{"const":"0.1.0"},"data_version":{"const":"2026.07.24.1"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"recipe_key":{"type":"string"},"environment":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"steps":{"type":"array","items":{"type":"string"}},"verified_properties":{"type":"array","items":{"type":"string"}},"sample_count":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"evidence_urls":{"type":"array","items":{"type":"string","format":"uri"}}},"required":["recipe_key","environment","steps","verified_properties","sample_count","observed_at","evidence_urls"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"worked-once-recipe-vault","module_version":"0.1.0","data_version":"2026.07.24.1","result":{"recipe_key":"typescript-fetch-base-sepolia-exact-v2","environment":{"runtime":"Node.js 24","network":"eip155:84532"},"steps":["Register ExactEvmScheme, then wrap fetch."],"verified_properties":["An identical replay produced no second transfer."],"sample_count":1,"observed_at":"2026-07-24T00:00:00.000Z","evidence_urls":["https://sepolia.basescan.org/tx/0x5d299e53db4ec99415653556cdb8e6b5bc1492078dcacee3a031c0f6fee88f01"]}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"404":{"description":"The validated lookup is outside current coverage; no payment was requested.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/swarm-semaphore":{"x-agent-tool-contract":{"slug":"swarm-semaphore","name":"Swarm Semaphore","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Bound concurrent agent work with an opaque distributed semaphore.","description":"Atomically admits up to a declared capacity of holders. Each holder permit expires independently, can be renewed idempotently, and can be released without exposing holder identities.","when_to_use":["A bounded number of agents may work on the same resource concurrently.","Each holder needs an independently expiring permit."],"do_not_use_when":["Exactly one agent must own the resource; use PennyLock instead.","The holder identifier contains secrets or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","capacity","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","capacity","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"status"}},"required":["namespace","key","capacity","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"semaphore_hash":{"type":"string"},"configuration_matches":{"type":"boolean"},"capacity":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"active_holders":{"type":"integer","minimum":0,"maximum":9007199254740991},"available_permits":{"type":"integer","minimum":0,"maximum":9007199254740991},"acquired":{"type":"boolean"},"released":{"type":"boolean"},"already_held":{"type":"boolean"},"next_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"holder_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","semaphore_hash","configuration_matches","capacity","active_holders","available_permits","acquired","released","already_held","next_expiration_at","holder_expiration_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Acquire creates or renews a temporary holder permit.","Release removes the caller's temporary holder permit."],"retention":"Only hashes of the namespace, key, and holder remain in Valkey until their bounded TTLs expire. Raw identifiers are never returned or persisted in the execution ledger.","limits":{"max_capacity":100,"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"acquire","namespace":"crawl:example.invalid","key":"render-workers","capacity":3,"holder":"agent-a","ttl_seconds":30},"output":{"action":"acquire","semaphore_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","configuration_matches":true,"capacity":3,"active_holders":1,"available_permits":2,"acquired":true,"released":false,"already_held":false,"next_expiration_at":"2026-07-24T12:00:30.000Z","holder_expiration_at":"2026-07-24T12:00:30.000Z"},"negative":[{"scenario":"Exactly one agent must own the resource; use PennyLock instead.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/swarm-semaphore","execute":"/v1/tools/swarm-semaphore"}},"get":{"operationId":"describe_swarm_semaphore","summary":"Describe Swarm Semaphore","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"swarm-semaphore","module_version":"0.1.0","result":{"slug":"swarm-semaphore","name":"Swarm Semaphore","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Bound concurrent agent work with an opaque distributed semaphore.","description":"Atomically admits up to a declared capacity of holders. Each holder permit expires independently, can be renewed idempotently, and can be released without exposing holder identities.","when_to_use":["A bounded number of agents may work on the same resource concurrently.","Each holder needs an independently expiring permit."],"do_not_use_when":["Exactly one agent must own the resource; use PennyLock instead.","The holder identifier contains secrets or personal data."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","capacity","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","capacity","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"status"}},"required":["namespace","key","capacity","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"semaphore_hash":{"type":"string"},"configuration_matches":{"type":"boolean"},"capacity":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"active_holders":{"type":"integer","minimum":0,"maximum":9007199254740991},"available_permits":{"type":"integer","minimum":0,"maximum":9007199254740991},"acquired":{"type":"boolean"},"released":{"type":"boolean"},"already_held":{"type":"boolean"},"next_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"holder_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","semaphore_hash","configuration_matches","capacity","active_holders","available_permits","acquired","released","already_held","next_expiration_at","holder_expiration_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Acquire creates or renews a temporary holder permit.","Release removes the caller's temporary holder permit."],"retention":"Only hashes of the namespace, key, and holder remain in Valkey until their bounded TTLs expire. Raw identifiers are never returned or persisted in the execution ledger.","limits":{"max_capacity":100,"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"acquire","namespace":"crawl:example.invalid","key":"render-workers","capacity":3,"holder":"agent-a","ttl_seconds":30},"output":{"action":"acquire","semaphore_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","configuration_matches":true,"capacity":3,"active_holders":1,"available_permits":2,"acquired":true,"released":false,"already_held":false,"next_expiration_at":"2026-07-24T12:00:30.000Z","holder_expiration_at":"2026-07-24T12:00:30.000Z"},"negative":[{"scenario":"Exactly one agent must own the resource; use PennyLock instead.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/swarm-semaphore","execute":"/v1/tools/swarm-semaphore"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_swarm_semaphore","summary":"Bound concurrent agent work with an opaque distributed semaphore.","description":"Atomically admits up to a declared capacity of holders. Each holder permit expires independently, can be renewed idempotently, and can be released without exposing holder identities. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","capacity","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","capacity","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"capacity":{"type":"integer","minimum":1,"maximum":100},"action":{"type":"string","const":"status"}},"required":["namespace","key","capacity","action"],"additionalProperties":false}]},"example":{"action":"acquire","namespace":"crawl:example.invalid","key":"render-workers","capacity":3,"holder":"agent-a","ttl_seconds":30}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"swarm-semaphore"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"semaphore_hash":{"type":"string"},"configuration_matches":{"type":"boolean"},"capacity":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"active_holders":{"type":"integer","minimum":0,"maximum":9007199254740991},"available_permits":{"type":"integer","minimum":0,"maximum":9007199254740991},"acquired":{"type":"boolean"},"released":{"type":"boolean"},"already_held":{"type":"boolean"},"next_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"holder_expiration_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","semaphore_hash","configuration_matches","capacity","active_holders","available_permits","acquired","released","already_held","next_expiration_at","holder_expiration_at"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"swarm-semaphore","module_version":"0.1.0","result":{"action":"acquire","semaphore_hash":"sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","configuration_matches":true,"capacity":3,"active_holders":1,"available_permits":2,"acquired":true,"released":false,"already_held":false,"next_expiration_at":"2026-07-24T12:00:30.000Z","holder_expiration_at":"2026-07-24T12:00:30.000Z"}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/barrier-bell":{"x-agent-tool-contract":{"slug":"barrier-bell","name":"Barrier Bell","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Release a bounded agent phase after enough unique participants arrive.","description":"Atomically records opaque participant arrivals against a fixed threshold and TTL. Repeated arrivals by the same participant are idempotent, and the barrier stays released until it expires.","when_to_use":["A workflow phase should release after enough unique agents arrive.","The synchronization point can safely expire after a bounded interval."],"do_not_use_when":["Every named participant must arrive or participant identities must be listed.","The barrier must remain durable indefinitely."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"arrive"},"participant":{"type":"string","minLength":1,"maxLength":128},"threshold":{"type":"integer","minimum":2,"maximum":100},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","participant","threshold","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["arrive","status"]},"barrier_hash":{"type":"string"},"exists":{"type":"boolean"},"configuration_matches":{"type":"boolean"},"newly_arrived":{"type":"boolean"},"threshold":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"participant_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"released":{"type":"boolean"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","barrier_hash","exists","configuration_matches","newly_arrived","threshold","participant_count","released","expires_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Arrive creates a temporary barrier or adds one opaque participant."],"retention":"Only hashes of the namespace, key, and participants remain in Valkey until the barrier TTL expires. The service never lists participants.","limits":{"max_threshold":100,"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"arrive","namespace":"pipeline:example.invalid","key":"phase-rendered","participant":"agent-a","threshold":3,"ttl_seconds":60},"output":{"action":"arrive","barrier_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","exists":true,"configuration_matches":true,"newly_arrived":true,"threshold":3,"participant_count":1,"released":false,"expires_at":"2026-07-24T12:01:00.000Z"},"negative":[{"scenario":"Every named participant must arrive or participant identities must be listed.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/barrier-bell","execute":"/v1/tools/barrier-bell"}},"get":{"operationId":"describe_barrier_bell","summary":"Describe Barrier Bell","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"barrier-bell","module_version":"0.1.0","result":{"slug":"barrier-bell","name":"Barrier Bell","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Release a bounded agent phase after enough unique participants arrive.","description":"Atomically records opaque participant arrivals against a fixed threshold and TTL. Repeated arrivals by the same participant are idempotent, and the barrier stays released until it expires.","when_to_use":["A workflow phase should release after enough unique agents arrive.","The synchronization point can safely expire after a bounded interval."],"do_not_use_when":["Every named participant must arrive or participant identities must be listed.","The barrier must remain durable indefinitely."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"arrive"},"participant":{"type":"string","minLength":1,"maxLength":128},"threshold":{"type":"integer","minimum":2,"maximum":100},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","participant","threshold","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["arrive","status"]},"barrier_hash":{"type":"string"},"exists":{"type":"boolean"},"configuration_matches":{"type":"boolean"},"newly_arrived":{"type":"boolean"},"threshold":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"participant_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"released":{"type":"boolean"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","barrier_hash","exists","configuration_matches","newly_arrived","threshold","participant_count","released","expires_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Arrive creates a temporary barrier or adds one opaque participant."],"retention":"Only hashes of the namespace, key, and participants remain in Valkey until the barrier TTL expires. The service never lists participants.","limits":{"max_threshold":100,"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"arrive","namespace":"pipeline:example.invalid","key":"phase-rendered","participant":"agent-a","threshold":3,"ttl_seconds":60},"output":{"action":"arrive","barrier_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","exists":true,"configuration_matches":true,"newly_arrived":true,"threshold":3,"participant_count":1,"released":false,"expires_at":"2026-07-24T12:01:00.000Z"},"negative":[{"scenario":"Every named participant must arrive or participant identities must be listed.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/barrier-bell","execute":"/v1/tools/barrier-bell"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_barrier_bell","summary":"Release a bounded agent phase after enough unique participants arrive.","description":"Atomically records opaque participant arrivals against a fixed threshold and TTL. Repeated arrivals by the same participant are idempotent, and the barrier stays released until it expires. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"arrive"},"participant":{"type":"string","minLength":1,"maxLength":128},"threshold":{"type":"integer","minimum":2,"maximum":100},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","participant","threshold","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"example":{"action":"arrive","namespace":"pipeline:example.invalid","key":"phase-rendered","participant":"agent-a","threshold":3,"ttl_seconds":60}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"barrier-bell"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["arrive","status"]},"barrier_hash":{"type":"string"},"exists":{"type":"boolean"},"configuration_matches":{"type":"boolean"},"newly_arrived":{"type":"boolean"},"threshold":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"participant_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"released":{"type":"boolean"},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","barrier_hash","exists","configuration_matches","newly_arrived","threshold","participant_count","released","expires_at"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"barrier-bell","module_version":"0.1.0","result":{"action":"arrive","barrier_hash":"sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","exists":true,"configuration_matches":true,"newly_arrived":true,"threshold":3,"participant_count":1,"released":false,"expires_at":"2026-07-24T12:01:00.000Z"}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/tools/freshness-lease":{"x-agent-tool-contract":{"slug":"freshness-lease","name":"Freshness Lease","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Coordinate one renewable freshness owner without exposing identity.","description":"Atomically grants a short renewable lease for refreshing an opaque resource. Only the current holder can renew or release it; status reveals activity and TTL but never the holder.","when_to_use":["One agent should own a renewable refresh responsibility for a short period.","Peers need to see lease activity and expiry without learning the holder."],"do_not_use_when":["The underlying refresh itself must execute exactly once.","A permanent ownership record is required."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"lease_hash":{"type":"string"},"active":{"type":"boolean"},"acquired":{"type":"boolean"},"renewed":{"type":"boolean"},"released":{"type":"boolean"},"held_by_caller":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","lease_hash","active","acquired","renewed","released","held_by_caller","expires_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Acquire creates or renews a temporary lease.","Release removes a lease only when called by its current holder."],"retention":"Only hashes of the namespace, key, and holder remain in Valkey until the lease TTL expires. Raw identifiers are never returned.","limits":{"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"acquire","namespace":"index:example.invalid","key":"sitemap-refresh","holder":"agent-a","ttl_seconds":45},"output":{"action":"acquire","lease_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","active":true,"acquired":true,"renewed":false,"released":false,"held_by_caller":true,"expires_at":"2026-07-24T12:00:45.000Z"},"negative":[{"scenario":"The underlying refresh itself must execute exactly once.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/freshness-lease","execute":"/v1/tools/freshness-lease"}},"get":{"operationId":"describe_freshness_lease","summary":"Describe Freshness Lease","responses":{"200":{"description":"Machine-readable tool manifest.","content":{"application/json":{"example":{"ok":true,"tool":"freshness-lease","module_version":"0.1.0","result":{"slug":"freshness-lease","name":"Freshness Lease","version":"0.1.0","category":"coordination","status":"beta","mode":"atomic","summary":"Coordinate one renewable freshness owner without exposing identity.","description":"Atomically grants a short renewable lease for refreshing an opaque resource. Only the current holder can renew or release it; status reveals activity and TTL but never the holder.","when_to_use":["One agent should own a renewable refresh responsibility for a short period.","Peers need to see lease activity and expiry without learning the holder."],"do_not_use_when":["The underlying refresh itself must execute exactly once.","A permanent ownership record is required."],"tested_with":["HTTP/1.1","HTTP/2","MCP Streamable HTTP"],"input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"output_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"lease_hash":{"type":"string"},"active":{"type":"boolean"},"acquired":{"type":"boolean"},"renewed":{"type":"boolean"},"released":{"type":"boolean"},"held_by_caller":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","lease_hash","active","acquired","renewed","released","held_by_caller","expires_at"],"additionalProperties":false},"payment":{"kind":"free"},"side_effects":["Acquire creates or renews a temporary lease.","Release removes a lease only when called by its current holder."],"retention":"Only hashes of the namespace, key, and holder remain in Valkey until the lease TTL expires. Raw identifiers are never returned.","limits":{"max_ttl_seconds":3600,"max_key_bytes":256,"max_client_requests_per_minute":30,"max_global_requests_per_minute":120},"examples":{"input":{"action":"acquire","namespace":"index:example.invalid","key":"sitemap-refresh","holder":"agent-a","ttl_seconds":45},"output":{"action":"acquire","lease_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","active":true,"acquired":true,"renewed":false,"released":false,"held_by_caller":true,"expires_at":"2026-07-24T12:00:45.000Z"},"negative":[{"scenario":"The underlying refresh itself must execute exactly once.","expected_error":"INVALID_INPUT","charged":false}]},"execution":{"errors":[{"code":"INVALID_INPUT","retryable":false,"charged":false,"recovery":"Correct the request to match input_schema."},{"code":"TOOL_PAUSED","retryable":true,"charged":false,"recovery":"Wait for the operator to resume the tool."},{"code":"RATE_LIMITED","retryable":true,"charged":false,"recovery":"Retry after the response Retry-After interval."},{"code":"DEPENDENCY_UNAVAILABLE","retryable":true,"charged":false,"recovery":"Retry with the same idempotency identity."}],"idempotency":{"required":true,"mock_or_unpaid_header":"Idempotency-Key","x402_extension":null,"replay_retention":"up to 24 hours"}},"endpoints":{"describe":"/v1/tools/freshness-lease","execute":"/v1/tools/freshness-lease"}}}}}},"404":{"description":"The tool is not discoverable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}},"post":{"operationId":"invoke_freshness_lease","summary":"Coordinate one renewable freshness owner without exposing identity.","description":"Atomically grants a short renewable lease for refreshing an opaque resource. Only the current holder can renew or release it; status reveals activity and TTL but never the holder. This side-effecting invocation is replay-safe: use Idempotency-Key for mock or unpaid execution, or the x402 payment-identifier extension for live paid execution.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Required for mock/unpaid side-effecting execution. In live x402 mode, provide the standard payment-identifier extension in PAYMENT-SIGNATURE instead.","schema":{"type":"string","minLength":16,"maxLength":128,"pattern":"^[a-zA-Z0-9_-]+$"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"acquire"},"holder":{"type":"string","minLength":1,"maxLength":128},"ttl_seconds":{"type":"integer","minimum":1,"maximum":3600}},"required":["namespace","key","action","holder","ttl_seconds"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"release"},"holder":{"type":"string","minLength":1,"maxLength":128}},"required":["namespace","key","action","holder"],"additionalProperties":false},{"type":"object","properties":{"namespace":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[a-zA-Z0-9._:-]+$"},"key":{"type":"string","minLength":1,"maxLength":256},"action":{"type":"string","const":"status"}},"required":["namespace","key","action"],"additionalProperties":false}]},"example":{"action":"acquire","namespace":"index:example.invalid","key":"sitemap-refresh","holder":"agent-a","ttl_seconds":45}}}},"responses":{"200":{"description":"Successful tool result.","headers":{"Idempotency-Replayed":{"description":"Whether the response came from the saved execution envelope.","schema":{"type":"string","enum":["true","false"]}},"X-Agent-Lab-Execution-Id":{"description":"Opaque execution reference for support and reconciliation.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","tool","module_version","result","meta"],"properties":{"ok":{"const":true},"tool":{"const":"freshness-lease"},"module_version":{"const":"0.1.0"},"result":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"action":{"type":"string","enum":["acquire","release","status"]},"lease_hash":{"type":"string"},"active":{"type":"boolean"},"acquired":{"type":"boolean"},"renewed":{"type":"boolean"},"released":{"type":"boolean"},"held_by_caller":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]}},"required":["action","lease_hash","active","acquired","renewed","released","held_by_caller","expires_at"],"additionalProperties":false},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}},"example":{"ok":true,"tool":"freshness-lease","module_version":"0.1.0","result":{"action":"acquire","lease_hash":"sha256:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc","active":true,"acquired":true,"renewed":false,"released":false,"held_by_caller":true,"expires_at":"2026-07-24T12:00:45.000Z"}}}}},"400":{"description":"Input failed validation before payment.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"409":{"description":"The idempotency identifier conflicts, is still executing, or cannot be replayed.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"A valid new request exceeded a published rate limit. The Retry-After header gives the retry delay.","headers":{"Retry-After":{"description":"Delay in seconds before retrying.","required":true,"schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The module is paused or its execution controls are unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/catalog":{"get":{"operationId":"list_agent_utilities","summary":"List discoverable agent utilities.","parameters":[{"name":"intent","in":"query","required":false,"schema":{"type":"string","minLength":2,"maxLength":500}},{"name":"category","in":"query","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current catalog."}}}},"/v1/catalog/{category}":{"get":{"operationId":"list_agent_utilities_by_category","summary":"List discoverable utilities in one category.","parameters":[{"name":"category","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Current category catalog."},"404":{"description":"Category is not discoverable."}}}},"/v1/receipts/jwks.json":{"get":{"operationId":"get_application_receipt_keys","summary":"Get Ed25519 application receipt verification keys.","responses":{"200":{"description":"A JWKS containing the active key and any retained rotation keys."},"503":{"description":"Receipt verification keys are not configured.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/capability-requests":{"post":{"operationId":"request_missing_capability","summary":"Submit a free, machine-readable missing capability request.","description":"Do not submit credentials, direct contact information, full conversation history, or arbitrary uploads. Requests are validated and rate limited before storage.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"problem":{"type":"string","minLength":12,"maxLength":1000},"desired_outcome":{"type":"string","minLength":8,"maxLength":1000},"why_existing_tools_fail":{"type":"string","minLength":8,"maxLength":1000},"example_input":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"expected_output":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"constraints":{"default":{},"type":"object","properties":{"max_latency_ms":{"type":"integer","exclusiveMinimum":0,"maximum":86400000},"max_price_usdc":{"type":"string","pattern":"^\\d{1,6}(\\.\\d{1,6})?$"},"retention":{"type":"string","enum":["no_raw_input","ephemeral","versioned_evidence"]},"freshness_seconds":{"type":"integer","exclusiveMinimum":0,"maximum":31536000}},"additionalProperties":false},"evidence_urls":{"default":[],"maxItems":3,"type":"array","items":{"type":"string","maxLength":2048,"format":"uri"}},"client_request_id":{"type":"string","minLength":8,"maxLength":128,"pattern":"^[a-zA-Z0-9._:-]+$"}},"required":["problem","desired_outcome","why_existing_tools_fail","constraints","evidence_urls"],"additionalProperties":false}}}},"responses":{"202":{"description":"Request accepted or linked to a duplicate."},"400":{"description":"Invalid request."},"413":{"description":"Request body exceeds the bounded intake size.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"429":{"description":"The free intake budget is exhausted. Retry after the Retry-After delay.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"Intake controls are unavailable; the request was not stored.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}},"/v1/capability-requests/{id}":{"get":{"operationId":"get_capability_request_status","summary":"Poll a private capability request.","description":"Requires the one-time status token returned when the request was created.","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Capability-Status-Token","in":"header","required":true,"schema":{"type":"string"}},{"name":"If-None-Match","in":"header","required":false,"description":"Return 304 without a response body when the private status ETag is unchanged.","schema":{"type":"string"}}],"responses":{"200":{"description":"Current private lifecycle state, transition timestamp, and related tools.","headers":{"ETag":{"description":"Opaque private status version for conditional polling.","schema":{"type":"string"}}}},"304":{"description":"The capability request status is unchanged; the response has no body.","headers":{"ETag":{"description":"The unchanged private status version.","schema":{"type":"string"}}}},"401":{"description":"The private status token is missing.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"404":{"description":"The request or status token was not found.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}},"503":{"description":"The private request ledger is unavailable.","content":{"application/json":{"schema":{"type":"object","required":["ok","error","meta"],"properties":{"ok":{"const":false},"error":{"type":"object","required":["code","message","retryable"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"meta":{"type":"object","required":["request_id","observed_at"],"properties":{"request_id":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}}}}}}}}}}}}