{"ok":true,"protocol":"mandate-agent-tools/v1","service":"MANDATE","description":"Self-describing agent-native API for mandate authorization and credential-broker operations.","tools":[{"name":"mandate.discover","title":"Discover MANDATE agent tools","method":"GET","path":"/api/v1/discover","description":"Returns this self-describing tool manifest.","input_schema":{"type":"object","additionalProperties":false,"properties":{}},"output_schema":{"type":"object","required":["tools"]},"errors":["internal_error"],"scopes":[]},{"name":"mandate.mint","title":"Mint root mandate","method":"POST","path":"/api/v1/mandates","description":"Creates an active human-granted mandate for an agent and records it to the hash-chained ledger.","input_schema":{"type":"object","required":["organization_id","agent_id","grantor_principal_id","budget_currency","budget_total","per_action_limit","expires_at","scopes"]},"output_schema":{"type":"object","required":["ok","mandate","ledger_entry"]},"errors":["validation_error","not_found","conflict","bad_request","internal_error"],"scopes":["mandate:mint"]},{"name":"mandate.delegate","title":"Delegate mandate","method":"POST","path":"/api/v1/delegations","description":"Creates a child mandate only when it is a no-escalation subset of the parent mandate.","input_schema":{"type":"object","required":["parent_mandate_id","delegator_agent_id","delegate_agent_id","budget_total","per_action_limit","starts_at","expires_at","scopes"]},"output_schema":{"type":"object","required":["ok","delegation","mandate","ledger_entry"]},"errors":["validation_error","not_found","no_privilege_escalation","bad_request","internal_error"],"scopes":["mandate:delegate"]},{"name":"mandate.authorize-action","title":"Authorize gateway action","method":"POST","path":"/api/v1/gateway/actions","description":"Submits an action through the Gateway and canonical Policy Engine; returns ALLOW, DENY, or REQUIRE_APPROVAL with ledger proof.","input_schema":{"type":"object","required":["acting_agent_id","action_type","amount_minor","counterparty"]},"output_schema":{"type":"object","required":["ok","decision","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["gateway:authorize-action"]},{"name":"mandate.verify-proof","title":"Record or verify proof","method":"POST","path":"/api/v1/proofs","description":"Records a proof payload hash and appends proof evidence to the hash-chained ledger.","input_schema":{"type":"object","required":["organization_id","subject_type","subject_id","proof_type","payload"]},"output_schema":{"type":"object","required":["ok","proof","ledger_entry"]},"errors":["validation_error","not_found","conflict","bad_request","internal_error"],"scopes":["proof:record"]},{"name":"mandate.revoke","title":"Revoke mandate","method":"POST","path":"/api/v1/mandates/{id}/revoke","description":"Revokes a mandate subtree and records the revocation to the hash-chained ledger.","input_schema":{"type":"object","required":["revoked_by_principal_id","reason"]},"output_schema":{"type":"object","required":["ok","mandate","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["mandate:revoke"]},{"name":"broker.register-credential","title":"Register credential handle","method":"POST","path":"/api/v1/broker/credentials","description":"Registers an opaque vault handle/reference only; plaintext secret fields are rejected and never ledgered.","input_schema":{"type":"object","required":["organization_id","registered_by_agent_id","label","credential_type","vault_handle","allowed_action_type"],"properties":{"vault_handle":{"type":"string","description":"Opaque vault reference such as vault://provider/path; never a plaintext secret."},"metadata":{"type":"object"}}},"output_schema":{"type":"object","required":["ok","credential","ledger_entry"]},"errors":["validation_error","not_found","conflict","bad_request","internal_error"],"scopes":["broker:register-credential"]},{"name":"broker.request-access","title":"Request short-lived credential grant","method":"POST","path":"/api/v1/broker/grants","description":"Asks the canonical Policy Engine for an ALLOW decision before issuing a short-lived HMAC-sealed grant bound to credential, mandate, agent, scope, and expiry.","input_schema":{"type":"object","required":["credential_id","acting_agent_id","mandate_id","action"]},"output_schema":{"type":"object","required":["ok","decision","grant","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["broker:request-access"]},{"name":"broker.use","title":"Use credential grant","method":"POST","path":"/api/v1/broker/use","description":"Redeems a sealed grant for the bound acting agent and executes the bound action through the Gateway and Policy Engine; does not expose plaintext secrets.","input_schema":{"type":"object","required":["grant_token","acting_agent_id"]},"output_schema":{"type":"object","required":["ok","decision","grant","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["broker:use"]},{"name":"broker.revoke-grant","title":"Revoke credential grant","method":"POST","path":"/api/v1/broker/grants/{id}/revoke","description":"Revokes a broker grant by id and records the revocation to the ledger.","input_schema":{"type":"object","required":["revoked_by_agent_id","reason"]},"output_schema":{"type":"object","required":["ok","grant","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["broker:revoke-grant"]},{"name":"broker.introspect-grant","title":"Introspect credential grant","method":"POST","path":"/api/v1/broker/grants/introspect","description":"Validates a grant token seal, reports active/revoked/expired state, and records introspection to the ledger.","input_schema":{"type":"object","required":["grant_token"]},"output_schema":{"type":"object","required":["ok","grant","active","ledger_entry"]},"errors":["validation_error","not_found","bad_request","internal_error"],"scopes":["broker:introspect-grant"]}]}