{
"error": {
"code": "validation.failed",
"message": "The request failed schema validation. See `error.details` for per-field issues.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/validation-failed"
}
}
{
"error": {
"code": "auth.unauthorized",
"message": "Credential is missing or malformed.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/auth-unauthorized"
}
}
{
"error": {
"code": "auth.forbidden",
"message": "Credential is valid but does not have access to the requested resource or action.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/auth-forbidden"
}
}
{
"error": {
"code": "internal.error",
"message": "An unexpected server error occurred. Retry with exponential backoff and include `request_id` in any support request.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/internal-error"
}
}
{
"error": {
"code": "tap_intent.busy",
"message": "The tap intent is being changed by another request. Retry.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/tap-intent-busy"
}
}
Tap intents
List a unit's live tap intents
Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.
{
"error": {
"code": "validation.failed",
"message": "The request failed schema validation. See `error.details` for per-field issues.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/validation-failed"
}
}
{
"error": {
"code": "auth.unauthorized",
"message": "Credential is missing or malformed.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/auth-unauthorized"
}
}
{
"error": {
"code": "auth.forbidden",
"message": "Credential is valid but does not have access to the requested resource or action.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/auth-forbidden"
}
}
{
"error": {
"code": "internal.error",
"message": "An unexpected server error occurred. Retry with exponential backoff and include `request_id` in any support request.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/internal-error"
}
}
{
"error": {
"code": "tap_intent.busy",
"message": "The tap intent is being changed by another request. Retry.",
"request_id": "req_8e1a7f50-90ab-4cde-f012-3456789abcde",
"doc_url": "https://docs.endstate.io/errors/tap-intent-busy"
}
}
The unit's tap intents that you opened and can still act on: pending ones, and approved ones you have not consumed and whose use_by has not passed. Oldest first, each with its status.
Show child attributes
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Endstate API","colors":{"primary":"#0D9373","light":"#07C983","dark":"#0D9373"},"logo":{"light":"https://mintcdn.com/endstate/7r-sSPorwOnbb4QJ/logo/light.png?fit=max\u0026auto=format\u0026n=7r-sSPorwOnbb4QJ\u0026q=85\u0026s=565266775e787378280a8d9fc438da1c","dark":"https://mintcdn.com/endstate/7r-sSPorwOnbb4QJ/logo/dark.png?fit=max\u0026auto=format\u0026n=7r-sSPorwOnbb4QJ\u0026q=85\u0026s=05c5d28cb884129713cb966e0773b3f9"},"favicon":"https://mintcdn.com/endstate/-o0caas8YOAvZHeK/favicon.png?fit=max\u0026auto=format\u0026n=-o0caas8YOAvZHeK\u0026q=85\u0026s=63980c55cef5eefd51957777c8cb7630","icons":{"library":"lucide"},"contextual":{"options":["copy","view","claude","chatgpt","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"endstate","hasAudioNarration":false,"actualSubdomain":"endstate","customDomains":["docs.endstate.io"],"gitSource":{"type":"github","owner":"end-state","repo":"endstate","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"feedback":{"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af495db3e956335301cb1d2","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"SDKs","count":162},{"language":"default","tag":"Reference","count":146},{"language":"default","tag":"Core SDK","count":93},{"language":"default","tag":"API Reference","count":60},{"language":"default","tag":"Endpoints","count":59},{"language":"default","tag":"Web SDK","count":37},{"language":"default","tag":"Reader SDK","count":31},{"language":"default","tag":"Documentation","count":24},{"language":"default","tag":"Session","count":18},{"language":"default","tag":"Webhooks","count":17}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/tap-intents/list-a-units-live-tap-intents","slug":"/api-reference/tap-intents/list-a-units-live-tap-intents","pageMetadata":{"title":"List a unit's live tap intents","description":"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its `status` and in the same shape as a read: the `pending` ones, and the `approved` ones you have not consumed and whose `use_by` has not passed. `unit_id` is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers `tap_intent.busy`: send it again.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tap-intents","href":"/api-reference/tap-intents/list-a-units-live-tap-intents","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its \", _jsx(_components.code, {\n children: \"status\"\n }), \" and in the same shape as a read: the \", _jsx(_components.code, {\n children: \"pending\"\n }), \" ones, and the \", _jsx(_components.code, {\n children: \"approved\"\n }), \" ones you have not consumed and whose \", _jsx(_components.code, {\n children: \"use_by\"\n }), \" has not passed. \", _jsx(_components.code, {\n children: \"unit_id\"\n }), \" is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers \", _jsx(_components.code, {\n children: \"tap_intent.busy\"\n }), \": send it again.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"List a unit's live tap intents","description":"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its `status` and in the same shape as a read: the `pending` ones, and the `approved` ones you have not consumed and whose `use_by` has not passed. `unit_id` is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers `tap_intent.busy`: send it again.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tap-intents","href":"/api-reference/tap-intents/list-a-units-live-tap-intents","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"listTapIntents","summary":"List a unit's live tap intents","description":"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its `status` and in the same shape as a read: the `pending` ones, and the `approved` ones you have not consumed and whose `use_by` has not passed. `unit_id` is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers `tap_intent.busy`: send it again.","tags":["Tap intents"],"security":["17c24112-19de-459b-87cc-4ca7f30550d4"],"parameters":["b755ffc2-2fe6-44b6-95a6-fa48c6dec214"],"responses":{"200":"3a778d58-f110-4634-ab4d-1b0c9fe4389b","400":"d11e87c5-d74a-4926-8b6f-14d39f25ed2e","401":"2681385d-e7f5-45d3-82ba-7760890ced3c","403":"7cb3afdd-68e8-4b43-b397-2e8efa66359c","429":"a2fc1eb4-223a-4735-8651-2a06ba2f2412","500":"801e6326-fa47-4b79-875e-d1868bba9ba6","503":"20a7a4ec-d4de-4406-9562-d16416a3396f"},"method":"get","type":"path","servers":["e8073586-a82f-4fbe-a0db-848fea43ee71","23d66df2-51b0-4bbf-ac7c-b5ac3efa3ae8"],"path":"/v1/tap-intents","baseUrlOptions":["https://api2.endstate.io","https://api-staging.endstate.io"],"title":"List a unit's live tap intents","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b755ffc2-2fe6-44b6-95a6-fa48c6dec214":{"schema":{"type":"string","format":"uuid","description":"The unit whose tap intents to list.","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"},"required":true,"description":"The unit whose tap intents to list.","name":"unit_id","in":"query"}},"responses":{"3a778d58-f110-4634-ab4d-1b0c9fe4389b":{"description":"The unit's pending and approved tap intents.","content":{"application/json":{"example":{"tap_intents":[{"id":"tapi_3f9c1b7a2d4e4f60a1b2c3d4e5f60718","status":"approved","rule":"own","unit_id":"6f1d2c3b-4a59-4e68-9f70-8a1b2c3d4e5f","action":{"type":"listing.confirm","reference":"listing_8271"},"redirect_url":"https://app.example.com/listings/8271/confirm","display":{"title":"Confirm your listing"},"code_required":true,"scan":{"id":"0b8e6a54-93c2-4d17-8f5e-2a1b3c4d5e6f","scanned_at":"2026-11-10T17:03:40.000Z"},"created_at":"2026-11-10T17:02:11.000Z","expires_at":"2026-11-10T17:07:11.000Z","approved_at":"2026-11-10T17:04:02.000Z","use_by":"2026-11-10T17:09:02.000Z","consumed_at":null,"canceled_at":null},{"id":"tapi_3f9c1b7a2d4e4f60a1b2c3d4e5f60718","status":"pending","rule":"own","unit_id":"6f1d2c3b-4a59-4e68-9f70-8a1b2c3d4e5f","action":{"type":"listing.confirm","reference":"listing_8271"},"redirect_url":"https://app.example.com/listings/8271/confirm","display":{"title":"Confirm your listing"},"code_required":true,"scan":null,"created_at":"2026-11-10T17:02:11.000Z","expires_at":"2026-11-10T17:07:11.000Z","approved_at":null,"use_by":null,"consumed_at":null,"canceled_at":null}]},"schema":{"type":"object","properties":{"tap_intents":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].id","typeLabel":"string"},"status":{"type":"string","enum":["pending","approved","consumed","canceled","expired"],"description":"`pending` until the person confirms. `approved` once they have: consume it by `use_by`. `consumed` once you have used the approval; it is used once. `canceled` ended without an approval. `expired` means nobody approved in time, or the approval was not consumed by `use_by`. `consumed` and `canceled` are final. Approving, canceling and consuming each send a webhook; expiring sends none.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"rule":{"type":"string","enum":["own"],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].rule","typeLabel":"enum\u003cstring>"},"unit_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].unit_id","typeLabel":"string\u003cuuid>"},"action":{"type":"object","properties":{"type":{"type":"string","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].action.type","typeLabel":"string"},"reference":{"type":"string","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].action.reference","typeLabel":"string"}},"required":["type","reference"],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].action","typeLabel":"object"},"redirect_url":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].redirect_url.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].redirect_url.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].redirect_url","typeLabel":"string | null"},"display":{"type":"object","properties":{"title":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].display.title.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].display.title.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].display.title","typeLabel":"string | null"}},"required":["title"],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].display","typeLabel":"object"},"code_required":{"type":"boolean","description":"Whether the person must enter the code to confirm.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].code_required","typeLabel":"boolean"},"scan":{"oneOf":[{"type":"object","properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].scan.oneOf.0.id","typeLabel":"string\u003cuuid>"},"scanned_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].scan.oneOf.0.scanned_at","typeLabel":"string\u003cdate-time>"}},"required":["id","scanned_at"],"description":"The tap the intent was approved with. Null until it is approved.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].scan.oneOf.0","typeLabel":"object"},{"type":"null","properties":{"id":{"type":"string","format":"uuid"},"scanned_at":{"type":"string","format":"date-time"}},"required":["id","scanned_at"],"description":"The tap the intent was approved with. Null until it is approved.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].scan.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].scan","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].created_at","typeLabel":"string\u003cdate-time>"},"expires_at":{"type":"string","format":"date-time","description":"A tap must arrive by this time. The person can confirm for 10 minutes after their tap.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time>"},"approved_at":{"oneOf":[{"type":"string","format":"date-time","description":"When the person approved. Kept on an approval that expired unused.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].approved_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When the person approved. Kept on an approval that expired unused.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].approved_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].approved_at","typeLabel":"string\u003cdate-time> | null"},"use_by":{"oneOf":[{"type":"string","format":"date-time","description":"The approval can be consumed until this time: `approved_at` plus the `use_within` set at create. Null until approved.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].use_by.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"The approval can be consumed until this time: `approved_at` plus the `use_within` set at create. Null until approved.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].use_by.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].use_by","typeLabel":"string\u003cdate-time> | null"},"consumed_at":{"oneOf":[{"type":"string","format":"date-time","description":"When you consumed the approval. Null until then.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].consumed_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","description":"When you consumed the approval. Null until then.","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].consumed_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].consumed_at","typeLabel":"string\u003cdate-time> | null"},"canceled_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].canceled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].canceled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"tap_intents.items.[INDEX].canceled_at","typeLabel":"string\u003cdate-time> | null"}},"required":["id","status","rule","unit_id","action","redirect_url","display","code_required","scan","created_at","expires_at","approved_at","use_by","consumed_at","canceled_at"],"uniqueKey":"tap_intents.items.[INDEX]","typeLabel":"object"},"description":"The unit's tap intents that you opened and can still act on: `pending` ones, and `approved` ones you have not consumed and whose `use_by` has not passed. Oldest first, each with its `status`.","isRequired":true,"uniqueKey":"tap_intents","typeLabel":"object[]"}},"required":["tap_intents"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"tap_intents":[{"id":"tapi_3f9c1b7a2d4e4f60a1b2c3d4e5f60718","status":"approved","rule":"own","unit_id":"6f1d2c3b-4a59-4e68-9f70-8a1b2c3d4e5f","action":{"type":"listing.confirm","reference":"listing_8271"},"redirect_url":"https://app.example.com/listings/8271/confirm","display":{"title":"Confirm your listing"},"code_required":true,"scan":{"id":"0b8e6a54-93c2-4d17-8f5e-2a1b3c4d5e6f","scanned_at":"2026-11-10T17:03:40.000Z"},"created_at":"2026-11-10T17:02:11.000Z","expires_at":"2026-11-10T17:07:11.000Z","approved_at":"2026-11-10T17:04:02.000Z","use_by":"2026-11-10T17:09:02.000Z","consumed_at":null,"canceled_at":null},{"id":"tapi_3f9c1b7a2d4e4f60a1b2c3d4e5f60718","status":"pending","rule":"own","unit_id":"6f1d2c3b-4a59-4e68-9f70-8a1b2c3d4e5f","action":{"type":"listing.confirm","reference":"listing_8271"},"redirect_url":"https://app.example.com/listings/8271/confirm","display":{"title":"Confirm your listing"},"code_required":true,"scan":null,"created_at":"2026-11-10T17:02:11.000Z","expires_at":"2026-11-10T17:07:11.000Z","approved_at":null,"use_by":null,"consumed_at":null,"canceled_at":null}]}}},"exampleType":"examples"}},"exampleType":"examples"},"d11e87c5-d74a-4926-8b6f-14d39f25ed2e":{"description":"The request was malformed or failed validation.\n\n| Error code | When |\n| --- | --- |\n| `validation.failed` | The request failed schema validation. See `error.details` for per-field issues. |","x-error-codes":["validation.failed"],"content":{"application/json":{"examples":{"validation.failed":{"title":"validation.failed","value":{"error":{"code":"validation.failed","message":"The request failed schema validation. See `error.details` for per-field issues.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/validation-failed"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"2681385d-e7f5-45d3-82ba-7760890ced3c":{"description":"Authentication failed.\n\n| Error code | When |\n| --- | --- |\n| `auth.unauthorized` | Credential is missing or malformed. |","x-error-codes":["auth.unauthorized"],"content":{"application/json":{"examples":{"auth.unauthorized":{"title":"auth.unauthorized","value":{"error":{"code":"auth.unauthorized","message":"Credential is missing or malformed.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/auth-unauthorized"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"7cb3afdd-68e8-4b43-b397-2e8efa66359c":{"description":"Authenticated, but not permitted.\n\n| Error code | When |\n| --- | --- |\n| `auth.forbidden` | Credential is valid but does not have access to the requested resource or action. |","x-error-codes":["auth.forbidden"],"content":{"application/json":{"examples":{"auth.forbidden":{"title":"auth.forbidden","value":{"error":{"code":"auth.forbidden","message":"Credential is valid but does not have access to the requested resource or action.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/auth-forbidden"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"a2fc1eb4-223a-4735-8651-2a06ba2f2412":{"description":"Too many requests.\n\n| Error code | When |\n| --- | --- |\n| `rate_limit.exceeded` | Per-key rate limit exceeded. |","x-error-codes":["rate_limit.exceeded"],"content":{"application/json":{"examples":{"rate_limit.exceeded":{"title":"rate_limit.exceeded","value":{"error":{"code":"rate_limit.exceeded","message":"Per-key rate limit exceeded.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/rate-limit-exceeded"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"801e6326-fa47-4b79-875e-d1868bba9ba6":{"description":"Something went wrong on our end.\n\n| Error code | When |\n| --- | --- |\n| `internal.error` | An unexpected server error occurred. Retry with exponential backoff and include `request_id` in any support request. |","x-error-codes":["internal.error"],"content":{"application/json":{"examples":{"internal.error":{"title":"internal.error","value":{"error":{"code":"internal.error","message":"An unexpected server error occurred. Retry with exponential backoff and include `request_id` in any support request.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/internal-error"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"},"20a7a4ec-d4de-4406-9562-d16416a3396f":{"description":"The service cannot do this right now. See the error code.\n\n| Error code | When |\n| --- | --- |\n| `tap_intent.busy` | The tap intent is being changed by another request. Retry. |","x-error-codes":["tap_intent.busy"],"content":{"application/json":{"examples":{"tap_intent.busy":{"title":"tap_intent.busy","value":{"error":{"code":"tap_intent.busy","message":"The tap intent is being changed by another request. Retry.","request_id":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","doc_url":"https://docs.endstate.io/errors/tap-intent-busy"}}}},"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"oneOf":[{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","enum":["environment.conflict","environment.invalid_configuration","organization.changed","validation.failed","auth.unauthorized","auth.forbidden","session_token.invalid_or_expired","session_token.wrong_chip","wallet_session.invalid_or_expired","not_found.resource","rate_limit.exceeded","chip.not_found","chip.invalid_e_value","chip.already_scanned","quota.exceeded","chip.not_a_test_chip","unit.not_found","unit.already_exists","unit.not_minted","collection.not_found","collection.already_exists","collection.not_active","collection_backfill.blocked","organization.not_found","chip.already_paired","chip.key_unusable","chip.mac_required","chip.bulk_mixed_collections","chip.bulk_pending","unit.issuance_pending","claim.owner_unknown","claim.already_to_recipient","claim.in_progress","claim.locked","claim.unit_vaulted","claim.unit_held","claim.tap_required","claim.not_found","chip_replacement.locked","chip_replacement.in_progress","chip_replacement.not_found","transfer.owner_unknown","transfer.already_to_recipient","transfer.in_progress","transfer.not_found","submission.not_executable","vault.not_found","vault.already_exists","vault.provisioning_failed","vault.not_permitted","vault.unavailable","vault.challenge_invalid","vault.address_in_use","vault.key_conflict","vault.signer_unauthorized","vault_connection.not_found","vault_connection.not_active","vault_connection.already_exists","vault_connection.conflict","vault.in_progress","vault.owner_changed","vault.request_not_found","vault.request_not_pending","vault.consent_invalid","vault.consent_used","vault.consent_outdated","vault.request_rejected","vault.request_expired","vault.reference_taken","tap_intent.not_found","tap_intent.disabled","tap_intent.too_many_open","tap_intent.unit_vaulted","tap_intent.redirect_origin_not_allowed","tap_intent.expired","tap_intent.canceled","tap_intent.already_approved","tap_intent.already_consumed","tap_intent.not_approved","tap_intent.action_mismatch","tap_intent.tap_not_matched","tap_intent.code_required","tap_intent.code_incorrect","tap_intent.code_attempts_exhausted","tap_intent.code_unavailable","tap_intent.busy","idempotency.key_conflict","idempotency.in_progress","internal.error","webhook_endpoint.not_found","webhook_endpoint.deleted","webhook_endpoint.limit_reached","webhook_endpoint.url_refused","webhook_endpoint.signing_unavailable","webhook_event_type.unknown","webhook_event.not_found","webhook_endpoint.disabled","webhook_delivery.in_progress","webhook_endpoint.not_subscribed"],"example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"string","description":"Stable, namespaced error code. The `ErrorCode` catalogue lists every code defined today; handle an unrecognized value as a generic failure rather than throwing, since codes are added over time.","example":"chip.not_found","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"string"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring> | string"},"message":{"type":"string","description":"Human-readable description, for logs and debugging. Wording may change without notice - never parse or match against it.","example":"Chip not found","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","description":"Identifier for this request, matching the `X-Request-Id` response header. Log it and include it in any support request.","example":"req_8e1a7f50-90ab-4cde-f012-3456789abcde","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"doc_url":{"type":"string","description":"Documentation page for this error code.","example":"https://docs.endstate.io/errors/chip-not-found","isRequired":true,"uniqueKey":"error.doc_url","typeLabel":"string"},"details":{"type":"object","properties":{"formErrors":{"type":"array","items":{"type":"string","uniqueKey":"error.details.formErrors.items.[INDEX]","typeLabel":"string"},"description":"Issues that apply to the request as a whole rather than one field.","example":[],"isRequired":true,"uniqueKey":"error.details.formErrors","typeLabel":"string[]"},"fieldErrors":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string","uniqueKey":"error.details.fieldErrors.additionalProperties.items.[INDEX]","typeLabel":"string"},"uniqueKey":"error.details.fieldErrors.additionalProperties","typeLabel":"string[]"},"description":"Validation issues keyed by the field that failed.","example":{"name":["Invalid input: expected string, received undefined"]},"isRequired":true,"uniqueKey":"error.details.fieldErrors","typeLabel":"object"}},"required":["formErrors","fieldErrors"],"description":"Per-field validation detail. Present only on `validation.failed`.","uniqueKey":"error.details","typeLabel":"object"}},"required":["code","message","request_id","doc_url"],"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"required":["error"],"description":"Every error response, regardless of endpoint or HTTP status, uses this envelope.","uniqueKey":"","typeLabel":"object"},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"17c24112-19de-459b-87cc-4ca7f30550d4":{"ApiKeyBearer":{"type":"http","scheme":"bearer","bearerFormat":"end_sk","description":"Use `Authorization: Bearer end_sk_*` for partner API keys (e.g. `end_sk_AbCd_example_api_key`).","scopes":[],"schemeName":"ApiKeyBearer"}}},"servers":{"e8073586-a82f-4fbe-a0db-848fea43ee71":{"url":"https://api2.endstate.io","description":"Production"},"23d66df2-51b0-4bbf-ac7c-b5ac3efa3ae8":{"url":"https://api-staging.endstate.io","description":"Staging"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"end_sk","description":"Use `Authorization: Bearer end_sk_*` for partner API keys (e.g. `end_sk_AbCd_example_api_key`).","scopes":[],"schemeName":"ApiKeyBearer"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Use `Authorization: Bearer end_sk_*` for partner API keys (e.g. `end_sk_AbCd_example_api_key`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"ApiKeyBearer","name":"Authorization"}],"title":"ApiKeyBearer"}]},"originalFileLocation":"openapi.json"},"subdomain":"endstate","siteName":"Endstate API","title":"List a unit's live tap intents - Endstate API","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T16:20:49.819Z","originalFileLocation":"api-reference/tap-intents/list-a-units-live-tap-intents.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Endstate API\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"List a unit\u0026#x27;s live tap intents - Endstate API\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Endstate API\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://endstate.mintlify.site/_mintlify/api/og/v2?division=Tap+intents\u0026amp;title=List+a+unit%27s+live+tap+intents\u0026amp;description=Returns+the+tap+intents+you+opened+on+one+unit+that+you+can+still+act+on%2C+oldest+first%2C+each+with+its+%60status%60+and+in+the+same+shape+as+a+read%3A+the+%60pending%60+on\u0026amp;theme=4343e1cd5b2063e2d2418b05\u0026amp;signature=4de0e7eb7da578f1c21825d52aa21fe967547211cbab729a678d71a31fc4f766\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"List a unit\u0026#x27;s live tap intents - Endstate API\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://endstate.mintlify.site/_mintlify/api/og/v2?division=Tap+intents\u0026amp;title=List+a+unit%27s+live+tap+intents\u0026amp;description=Returns+the+tap+intents+you+opened+on+one+unit+that+you+can+still+act+on%2C+oldest+first%2C+each+with+its+%60status%60+and+in+the+same+shape+as+a+read%3A+the+%60pending%60+on\u0026amp;theme=4343e1cd5b2063e2d2418b05\u0026amp;signature=4de0e7eb7da578f1c21825d52aa21fe967547211cbab729a678d71a31fc4f766\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/endstate/BhrYECvbn-kli8W2/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Endstate API\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0D9373\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/tap-intents/list-a-units-live-tap-intents.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.endstate.io/#organization\",\"name\":\"Endstate API\",\"url\":\"https://docs.endstate.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/endstate/7r-sSPorwOnbb4QJ/logo/light.png?fit=max\u0026auto=format\u0026n=7r-sSPorwOnbb4QJ\u0026q=85\u0026s=565266775e787378280a8d9fc438da1c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.endstate.io#website\",\"name\":\"Endstate API\",\"url\":\"https://docs.endstate.io\",\"publisher\":{\"@id\":\"https://docs.endstate.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents#webpage\",\"url\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents\",\"name\":\"List a unit's live tap intents\",\"description\":\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.\",\"dateModified\":\"2026-11-11T16:20:49.819Z\",\"isPartOf\":{\"@id\":\"https://docs.endstate.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.endstate.io/api-reference/service/service-health-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tap intents\",\"item\":\"https://docs.endstate.io/api-reference/tap-intents/cancel-a-tap-intent\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"List a unit's live tap intents\",\"item\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents#apireference\",\"headline\":\"List a unit's live tap intents\",\"name\":\"List a unit's live tap intents\",\"description\":\"Returns the tap intents you opened on one unit that you can still act on, oldest first, each with its status and in the same shape as a read: the pending ones, and the approved ones you have not consumed and whose use_by has not passed. unit_id is required. Use it after a crash or a lost response to find an approval you have not consumed. The list holds only tap intents opened in the environment of the key you call with. Consumed, canceled and expired tap intents are left out, and a unit you cannot see gives an empty list. It never carries a code, and it is not paged. If an approval is being written at that moment the call answers tap_intent.busy: send it again.\",\"url\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents\",\"mainEntityOfPage\":{\"@id\":\"https://docs.endstate.io/api-reference/tap-intents/list-a-units-live-tap-intents#webpage\"},\"dateModified\":\"2026-11-11T16:20:49.819Z\",\"publisher\":{\"@id\":\"https://docs.endstate.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.endstate.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Endstate API\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Endstate API\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/tap-intents/list-a-units-live-tap-intents.md","siteName":"Endstate API","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/set-up-catalog"}]},{"tab":"SDKs","pages":[{"title":"SDKs","href":"/sdks/overview"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]},{"group":"Endpoints","pages":[{"group":"Service","pages":[{"title":"Service health check","deprecated":null,"version":null,"openapi":"/openapi.json get /health","href":"/api-reference/service/service-health-check"},{"title":"Service welcome","deprecated":null,"version":null,"openapi":"/openapi.json get /","href":"/api-reference/service/service-welcome"}]},{"group":"Chips","pages":[{"title":"Fetch a chip","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/chips/{chip_id}","href":"/api-reference/chips/fetch-a-chip"},{"title":"Pair chips in bulk","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/chips/bulk","href":"/api-reference/chips/pair-chips-in-bulk"},{"title":"List chips","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/chips","href":"/api-reference/chips/list-chips"},{"title":"Pair a chip","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/chips","href":"/api-reference/chips/pair-a-chip"},{"title":"Get a chip replacement","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}/chip-replacements/{replacement_id}","href":"/api-reference/chips/get-a-chip-replacement"},{"title":"Replace a unit's chip","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/chip-replacements","href":"/api-reference/chips/replace-a-units-chip"}]},{"group":"Collections","pages":[{"title":"Fetch a collection","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections/{collection_id}","href":"/api-reference/collections/fetch-a-collection"},{"title":"Update a collection","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/collections/{collection_id}","href":"/api-reference/collections/update-a-collection"},{"title":"List collections","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/collections","href":"/api-reference/collections/list-collections"},{"title":"Create a collection","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/collections","href":"/api-reference/collections/create-a-collection"}]},{"group":"Publishable keys","pages":[{"title":"List publishable keys","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/publishable-keys","href":"/api-reference/publishable-keys/list-publishable-keys"}]},{"group":"Session Tokens","pages":[{"title":"Introspect the bearer session token","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/session-tokens/current","href":"/api-reference/session-tokens/introspect-the-bearer-session-token"},{"title":"Revoke the bearer session token","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/session-tokens/current","href":"/api-reference/session-tokens/revoke-the-bearer-session-token"}]},{"group":"Settings","pages":[{"title":"Get external auth settings","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/settings/auth","href":"/api-reference/settings/get-external-auth-settings"},{"title":"Register your own token issuer","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/settings/auth","href":"/api-reference/settings/register-your-own-token-issuer"},{"title":"Return to Endstate-managed identity","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/settings/auth","href":"/api-reference/settings/return-to-endstate-managed-identity"},{"title":"List CORS origins","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/settings/cors-origins","href":"/api-reference/settings/list-cors-origins"},{"title":"Replace CORS origins","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/settings/cors-origins","href":"/api-reference/settings/replace-cors-origins"},{"title":"Get org settings","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/settings","href":"/api-reference/settings/get-org-settings"},{"title":"Update org settings","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/settings","href":"/api-reference/settings/update-org-settings"}]},{"group":"Tap intents","pages":[{"title":"Cancel a tap intent","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tap-intents/{tap_intent_id}/cancel","href":"/api-reference/tap-intents/cancel-a-tap-intent"},{"title":"Consume a tap intent","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tap-intents/{tap_intent_id}/consume","href":"/api-reference/tap-intents/consume-a-tap-intent"},{"title":"Retrieve a tap intent","description":"Returns a tap intent and its current status. Read it when the person returns to your app, or poll it about once a second while they are confirming, and consume the tap intent once the status is `approved`. An approval that is not consumed by `use_by` reads as `expired`, with `approved_at` and `scan` kept.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tap-intents/{tap_intent_id}","href":"/api-reference/tap-intents/retrieve-a-tap-intent"},{"title":"List a unit's live tap intents","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tap-intents","href":"/api-reference/tap-intents/list-a-units-live-tap-intents"},{"title":"Open a tap intent","description":"Opens a tap intent for one unit, so a person can confirm a step in your app by tapping the item with any phone. The response carries `tap_code` to show the person. They tap the item, the page the tap opens lists the unit's open tap intents, and they confirm this one there with the code. The tap intent is then `approved` and Endstate sends `tap_intent.approved`. Consume it within `use_within` seconds of the approval, then perform your own action. A unit can have up to 10 open tap intents. Tap intents must be enabled for the environment.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tap-intents","href":"/api-reference/tap-intents/open-a-tap-intent"},{"title":"Approve a tap intent with this tap","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/tap-intents/{tap_intent_id}/approve","href":"/api-reference/tap-intents/approve-a-tap-intent-with-this-tap"},{"title":"Cancel a tap intent with this tap","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/tap-intents/{tap_intent_id}/cancel","href":"/api-reference/tap-intents/cancel-a-tap-intent-with-this-tap"},{"title":"List the tap intents this tap can confirm","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}/tap-intents","href":"/api-reference/tap-intents/list-the-tap-intents-this-tap-can-confirm"}]},{"group":"Taps","pages":[{"title":"List taps","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taps","href":"/api-reference/taps/list-taps"},{"title":"Record a tap and issue a session token","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taps","href":"/api-reference/taps/record-a-tap-and-issue-a-session-token"}]},{"group":"Test helpers","pages":[{"title":"Generate an e/c pair for a test chip","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/test-helpers/taps","href":"/api-reference/test-helpers/generate-an-ec-pair-for-a-test-chip"}]},{"group":"Claims","pages":[{"title":"Get a claim","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}/claims/{claim_id}","href":"/api-reference/claims/get-a-claim"},{"title":"Claim a unit","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/claims","href":"/api-reference/claims/claim-a-unit"}]},{"group":"Units","pages":[{"title":"Fetch a unit","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}","href":"/api-reference/units/fetch-a-unit"},{"title":"Update a unit","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/units/{unit_id}","href":"/api-reference/units/update-a-unit"},{"title":"List units","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units","href":"/api-reference/units/list-units"},{"title":"Create a unit","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units","href":"/api-reference/units/create-a-unit"}]},{"group":"Transfers","pages":[{"title":"Get a transfer","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}/transfers/{transfer_id}","href":"/api-reference/transfers/get-a-transfer"},{"title":"Transfer a unit","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/transfers","href":"/api-reference/transfers/transfer-a-unit"}]},{"group":"Vaults","pages":[{"title":"Check whether a unit can be vaulted","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/units/{unit_id}/vault-eligibility","href":"/api-reference/vaults/check-whether-a-unit-can-be-vaulted"},{"title":"Request to vault a unit","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/units/{unit_id}/vault-requests","href":"/api-reference/vaults/request-to-vault-a-unit"}]},{"group":"Webhooks","pages":[{"title":"Count a webhook endpoint's deliveries by outcome","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints/{endpoint_id}/health","href":"/api-reference/webhooks/count-a-webhook-endpoints-deliveries-by-outcome"},{"title":"Recover events a webhook endpoint missed","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{endpoint_id}/recover","href":"/api-reference/webhooks/recover-events-a-webhook-endpoint-missed"},{"title":"Rotate a webhook endpoint's signing secret","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{endpoint_id}/rotate-secret","href":"/api-reference/webhooks/rotate-a-webhook-endpoints-signing-secret"},{"title":"Fetch a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/fetch-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Update a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/webhooks/endpoints/{endpoint_id}","href":"/api-reference/webhooks/update-a-webhook-endpoint"},{"title":"Read a webhook endpoint's signing secret","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints/{endpoint_id}/secret","href":"/api-reference/webhooks/read-a-webhook-endpoints-signing-secret"},{"title":"Send a test event to a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints/{endpoint_id}/test","href":"/api-reference/webhooks/send-a-test-event-to-a-webhook-endpoint"},{"title":"List webhook endpoints","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/endpoints","href":"/api-reference/webhooks/list-webhook-endpoints"},{"title":"Create a webhook endpoint","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/endpoints","href":"/api-reference/webhooks/create-a-webhook-endpoint"},{"title":"List webhook event types","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/event-types","href":"/api-reference/webhooks/list-webhook-event-types"},{"title":"List delivery attempts for a webhook event","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/events/{event_id}/attempts","href":"/api-reference/webhooks/list-delivery-attempts-for-a-webhook-event"},{"title":"Deliver a webhook event to an endpoint again","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/webhooks/events/{event_id}/redeliver","href":"/api-reference/webhooks/deliver-a-webhook-event-to-an-endpoint-again"},{"title":"Fetch a webhook event","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/events/{event_id}","href":"/api-reference/webhooks/fetch-a-webhook-event"},{"title":"List webhook events","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/webhooks/events","href":"/api-reference/webhooks/list-webhook-events"}]}]}]}]},"basePath":"","title":"List a unit's live tap intents - Endstate API","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}