API by router
Approvals
GET
instance_id*Instance IdFormat
uuidcustomer_id*Customer IdFormat
uuidSuccessful Response
response?unknownapplication/jsoncurl -X GET 'https://example.com/internal/v1/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08/approvals/pending?customer_id=497f6eca-6276-4993-bfeb-53cbbbba6f08'Example Response
nullPOST
instance_id*Instance IdFormat
uuidapplication/json- body
action*ActionLength
length <= 100approver_person_id?|nullapprover_role?Approver RoleMust be 'owner' or 'customer'
Match
^(owner|customer)$Default
"customer"customer_id*Customer IdFormat
uuidexpires_in_hours?Expires In HoursRange
1 <= value <= 168Default
24idempotency_key?|Caller-provided idempotency key for safe retries
notify_channel?|nullrule_id?|nullserialized_intent*Full params to replay on approval
skill_slug*Skill SlugLength
length <= 100Successful Response
response?unknownapplication/jsoncurl -X POST 'https://example.com/internal/v1/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08/approvals/request' \ -H 'Content-Type: application/json' \ -d '{ "action": "string", "customer_id": "160c0c4b-9966-4dc1-a916-8407eb10d74e", "serialized_intent": {}, "skill_slug": "string"}'Example Response
nullPOST
instance_id*Instance IdFormat
uuidapplication/json- body
action*ActionMust be 'approve' or 'reject'
Match
^(approve|reject)$approval_ref*Approval RefAPR-xxxx reference
pin_verified*Pin VerifiedWhether PIN was verified by caller — required, no default
resolution_channel?|nullresolved_by?|nullresolver_person_id?|Person ID if approval targets a specific person
resolver_role*Resolver RoleRole of resolver
Match
^(owner|customer)$Successful Response
response?unknownapplication/jsoncurl -X POST 'https://example.com/internal/v1/instances/497f6eca-6276-4993-bfeb-53cbbbba6f08/approvals/resolve' \ -H 'Content-Type: application/json' \ -d '{ "action": "string", "approval_ref": "string", "pin_verified": true, "resolver_role": "string"}'Example Response
nullGET
HTTPBearerheader
AuthorizationBearer <token>customer_id?|nullstatus?string|nulllimit?LimitRange
1 <= value <= 200Default
50offset?OffsetRange
0 <= valueDefault
0Successful Response
response?unknownapplication/jsoncurl -X GET 'https://example.com/v1/approvals'Example Response
null