{"openapi":"3.1.1","info":{"title":"Tandem workspace API","version":"0.1.0","description":"Private recurring supplier payments and invoicing on Zcash NU7 testnet. Approve exact limits; agents execute matching invoices; suppliers verify shielded receipts. Read-only reviewer credentials cannot authorize actions. Read /agents.md for workflow and trust boundaries."},"servers":[{"url":"https://tandem.allensaji.dev"}],"components":{"schemas":{"Service":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"provider":{"type":"string"},"category":{"type":"string"},"summary":{"type":"string"},"description":{"type":"string"},"status":{"const":"available"},"operator_notice":{"type":"string"},"amount_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"max_fee_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"intervals":{"type":"array","items":{"type":"object","properties":{"seconds":{"type":"integer"},"label":{"type":"string"}},"required":["seconds","label"]}},"payment_counts":{"type":"array","items":{"type":"integer"}},"delivers":{"type":"array","items":{"type":"string"}},"requirements":{"type":"array","items":{"type":"string"}},"links":{"type":"object","properties":{"details":{"type":"string"},"subscribe":{"type":"string"},"api":{"type":"string"}},"required":[]}},"required":["id","name","provider","amount_zatoshis","max_fee_zatoshis","intervals","payment_counts","links"]},"Catalog":{"type":"object","properties":{"version":{"type":"integer"},"network":{"const":"zcash-testnet"},"consensus":{"const":"NU7"},"currency":{"const":"TAZ"},"services":{"type":"array","items":{"$ref":"#/components/schemas/Service"}}},"required":["services","network","consensus","currency"]},"Session":{"type":"object","properties":{"unlocked":{"type":"boolean"},"user":{"anyOf":[{"type":"object","properties":{"username":{"type":"string"},"role":{"enum":["owner","reviewer"]}},"required":["username","role"]},{"type":"null"}]}},"required":["unlocked","user"]},"Snapshot":{"type":"object","properties":{"network":{"const":"testnet"},"consensus":{"const":"NU7"},"ready":{"type":"boolean"},"fundingReady":{"type":"boolean"},"updatedAtUnix":{"type":"integer"},"operating":{"type":"object","properties":{"address":{"type":"string"},"chainTip":{"type":"integer"},"scannedHeight":{"type":"integer"},"totalZatoshis":{"type":"string","pattern":"^[0-9]+$"},"ironwoodSpendableZatoshis":{"type":"string","pattern":"^[0-9]+$"}},"required":["address"]},"overview":{"type":"object","properties":{"agreements":{"type":"array","items":{"type":"object","properties":{"envelope":{"$ref":"#/components/schemas/SignedEnvelope"},"revoked":{"type":"boolean"},"reserved_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"remaining_allowance_zatoshis":{"type":"string","pattern":"^[0-9]+$"}},"required":[]}},"payments":{"type":"array","items":{"type":"object","properties":{"payment_id":{"type":"string"},"agreement_id":{"type":"string"},"period_id":{"type":"string"},"state":{"type":"string"},"txid":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":[]}}},"required":[]},"receipts":{"type":"object","properties":{"funding":{"anyOf":[{"type":"object","properties":{"txid":{"type":"string"},"amount_zatoshis":{"type":"integer"},"mined_height":{"type":"integer"},"confirmations":{"type":"integer"},"pool":{"type":"string"}},"required":[]},{"type":"null"}]}},"required":[]}},"required":["network","ready","operating","overview"]},"Proposal":{"type":"object","properties":{"proposal_id":{"type":"string"},"digest":{"type":"string"},"terms":{"type":"object","properties":{"agreement_id":{"type":"string"},"recipient":{"type":"string"},"supplier_key":{"type":"string"},"amount_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"max_fee_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"lifetime_limit_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"valid_from":{"type":"integer"},"expires_at":{"type":"integer"},"schedule":{"type":"object","properties":{"kind":{"type":"string"},"anchor":{"type":"integer"},"interval_secs":{"type":"integer"},"payment_window_secs":{"type":"integer"}},"required":[]}},"required":[]},"review_expires_at":{"type":"integer"}},"required":["proposal_id","digest","terms","review_expires_at"]},"Workspace":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"state":{"enum":["new","queued","running","ready","error"]},"readOnly":{"type":"boolean","default":false},"automation":{"type":"boolean"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"integer"},"snapshot":{"anyOf":[{"$ref":"#/components/schemas/Snapshot"},{"type":"null"}]},"job_result":{"anyOf":[{"anyOf":[{"$ref":"#/components/schemas/Proposal"},{"$ref":"#/components/schemas/Snapshot"},{"type":"object","properties":{"pending_funding":{"type":"string"}},"required":[]}]},{"type":"null"}]},"evidence":{"type":"object","properties":{"exportedAt":{"type":"integer"},"notice":{"type":"string"}},"required":[]}},"required":["id","name","state","automation","error","updatedAt","snapshot","job_result"]},"SignedEnvelope":{"type":"object","properties":{"payload":{"type":"object"},"signatures":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"signature":{"type":"string"}},"required":["key","signature"]}}},"required":["payload","signatures"]},"Receipt":{"type":"object","properties":{"txid":{"type":"string"},"amount_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"memo":{"type":"string"},"mined_height":{"type":"integer"},"verified_tip":{"type":"integer"},"confirmations":{"type":"integer"},"observed_at":{"type":"integer"},"consensus_branch":{"type":"string"},"latest_block_time":{"type":"integer"}},"required":["txid","amount_zatoshis","mined_height","verified_tip","confirmations","observed_at"]},"InvoiceRow":{"type":"object","properties":{"invoice_id":{"type":"string"},"invoice_number":{"type":"string"},"payment_state":{"enum":["paid","verification_pending","unpaid"]},"collection_state":{"enum":["open","stopped","window_closed"]},"issued_at":{"type":"integer"},"payable_until":{"type":"integer"},"period_id":{"type":"string"},"amount_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"service_from":{"type":"integer"},"service_until":{"type":"integer"},"txid":{"anyOf":[{"type":"string"},{"type":"null"}]},"last_verified_at":{"anyOf":[{"type":"integer"},{"type":"null"}]},"has_billing_document":{"type":"boolean"}},"required":["invoice_id","invoice_number","payment_state","collection_state","amount_zatoshis"]},"Billing":{"type":"object","properties":{"invoices":{"type":"array","items":{"$ref":"#/components/schemas/InvoiceRow"}},"next_cursor":{"anyOf":[{"type":"integer"},{"type":"null"}]},"currency":{"const":"TAZ"},"as_of":{"type":"integer"},"agreement":{"anyOf":[{"type":"object","properties":{"agreement_id":{"type":"string"},"buyer_company_id":{"type":"string"},"supplier_key":{"type":"string"},"amount_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"expires_at":{"type":"integer"},"revoked":{"type":"boolean"}},"required":[]},{"type":"null"}]},"totals":{"type":"object","properties":{"billed_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"paid_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"pending_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"unpaid_zatoshis":{"type":"string","pattern":"^[0-9]+$"},"invoice_count":{"type":"integer"},"paid_count":{"type":"integer"},"pending_count":{"type":"integer"},"unpaid_count":{"type":"integer"}},"required":[]}},"required":["invoices","totals","currency","as_of","agreement"]},"Invoice":{"type":"object","properties":{"invoice_id":{"type":"string"},"invoice_number":{"type":"string"},"payment_state":{"enum":["paid","verification_pending","unpaid"]},"collection_state":{"type":"string"},"issued":{"type":"object","properties":{"envelope":{"$ref":"#/components/schemas/SignedEnvelope"},"period_start":{"type":"integer"},"service_until":{"type":"integer"},"payment_memo":{"type":"string"}},"required":[]},"billing_document":{"anyOf":[{"$ref":"#/components/schemas/SignedEnvelope"},{"type":"null"}]},"document_signature_verified":{"type":"boolean"},"txid":{"anyOf":[{"type":"string"},{"type":"null"}]},"receipt":{"anyOf":[{"$ref":"#/components/schemas/Receipt"},{"type":"null"}]},"payment_candidate":{"anyOf":[{"type":"object","properties":{"txid":{"type":"string"},"attempted_at":{"type":"integer"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":[]},{"type":"null"}]},"as_of":{"type":"integer"}},"required":["invoice_id","invoice_number","issued","payment_state","receipt"]},"Resource":{"type":"object","properties":{"service":{"const":"zcash-testnet-telemetry"},"invoice_id":{"type":"string"},"access_until":{"type":"integer"},"data":{"type":"object","properties":{"network":{"const":"testnet"},"height":{"type":"integer"},"consensus_branch":{"type":"string"},"latest_block_time":{"type":"integer"},"observed_at":{"type":"integer"},"source":{"type":"string"}},"required":[]},"receipt":{"$ref":"#/components/schemas/Receipt"}},"required":["service","invoice_id","access_until","data","receipt"]}},"securitySchemes":{"session":{"type":"apiKey","in":"cookie","name":"tandem_session"}}},"paths":{"/api/catalog":{"get":{"operationId":"listServices","summary":"Connected curated services","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Catalog"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}}},"/api/catalog/{service_id}":{"get":{"operationId":"getService","summary":"Service price, schedules and operator","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Service"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}},"parameters":[{"in":"path","name":"service_id","required":true,"schema":{"type":"string"}}]},"/session":{"get":{"operationId":"getSession","summary":"Session role and identity","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Session"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}}},"/api/workspace":{"get":{"operationId":"getWorkspace","summary":"Owner workspace or read-only recorded review workspace","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Workspace"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}}},"/api/status":{"get":{"operationId":"getWalletStatus","summary":"Wallet snapshot (unwrapped JSON)","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Snapshot"}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}}},"/api/overview":{"get":{"operationId":"getOverview","summary":"Signer overview","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object"}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}}},"/api/billing":{"get":{"operationId":"listInvoices","summary":"Invoices and whole-ledger totals","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Billing"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}},"parameters":[{"in":"query","name":"before","schema":{"type":"integer","minimum":1},"description":"Cursor returned as next_cursor; totals still cover all invoices"}]}},"/api/billing/invoices/{invoice_id}":{"get":{"operationId":"getInvoice","summary":"Signed invoice and supplier receipt","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Invoice"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}},"parameters":[{"in":"path","name":"invoice_id","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}]},"/api/invoices/{invoice_id}/resource":{"get":{"operationId":"accessService","summary":"Live telemetry for an unexpired independently verified paid period","security":[{"session":[]}],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"$ref":"#/components/schemas/Resource"}},"required":["ok","result"]}}}},"401":{"description":"Sign in required"},"404":{"description":"Record unavailable in this workspace"},"503":{"description":"Workspace operation in progress"}}},"parameters":[{"in":"path","name":"invoice_id","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}]},"/api/auth/register":{"post":{"operationId":"registerAccount","summary":"Create a private owner workspace","security":[],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":3,"maxLength":32},"password":{"type":"string","maxLength":128,"minLength":12}},"required":["username","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"username":{"type":"string"},"role":{"enum":["owner","reviewer"]}},"required":["username","role"]}},"required":["ok","result"]}}},"headers":{"Set-Cookie":{"description":"HttpOnly session cookie; preserve it for subsequent requests.","schema":{"type":"string"}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/auth/login":{"post":{"operationId":"loginAccount","summary":"Sign in; capture the session cookie","security":[],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string","minLength":3,"maxLength":32},"password":{"type":"string","maxLength":128,"minLength":1}},"required":["username","password"],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"username":{"type":"string"},"role":{"enum":["owner","reviewer"]}},"required":["username","role"]}},"required":["ok","result"]}}},"headers":{"Set-Cookie":{"description":"HttpOnly session cookie; preserve it for subsequent requests.","schema":{"type":"string"}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/workspace/initialize":{"post":{"operationId":"initializeWallet","summary":"Retry wallet initialization","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/wallet/sync":{"post":{"operationId":"syncWallet","summary":"Sync the operating wallet","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/payments/run":{"post":{"operationId":"runDuePayment","summary":"Check the current authorized payment period","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/agreements/cancel":{"post":{"operationId":"cancelAgreement","summary":"Permanently stop new signing; requires owner authorization","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/wallet/verify":{"post":{"operationId":"verifyFunding","summary":"Verify exact Noir funding output and memo","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"txid":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["txid"],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/agreements/propose":{"post":{"operationId":"proposeAgreement","summary":"Prepare exact terms without authorizing payment","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"service_id":{"type":"string","const":"network-telemetry"},"payments":{"type":"integer","enum":[1,2,3]},"interval_secs":{"type":"integer","enum":[600,3600,86400]}},"required":["service_id","payments","interval_secs"],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/agreements/approve":{"post":{"operationId":"approveAgreement","summary":"Enable recurring execution; requires explicit owner authorization","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"proposal_id":{"type":"string","pattern":"^[a-f0-9]{32}$"},"digest":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["proposal_id","digest"],"additionalProperties":false}}}},"responses":{"202":{"description":"Queued. Poll GET /api/workspace; acceptance is not completion.","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"const":true},"result":{"type":"object","properties":{"state":{"const":"queued"}},"required":["state"]}},"required":["ok","result"]}}}},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}},"/api/invoices/{invoice_id}/recheck":{"post":{"operationId":"recheckReceipt","summary":"Reobserve supplier payment","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}},"parameters":[{"in":"path","name":"invoice_id","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{64}$"}}]},"/api/logout":{"post":{"operationId":"logout","summary":"Invalidate this session","security":[{"session":[]}],"parameters":[{"in":"header","name":"Origin","required":true,"schema":{"type":"string","const":"https://tandem.allensaji.dev"}},{"in":"header","name":"X-Tandem-Request","required":true,"schema":{"type":"string","const":"1"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}}}},"responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid request"},"401":{"description":"Sign in required"},"403":{"description":"Read-only reviewer or invalid origin"},"409":{"description":"Workspace busy or not ready"},"429":{"description":"Rate limited"}}}}}}