{"openapi":"3.1.0","info":{"title":"Xyranik API","version":"1","description":"Version 1. Authenticate with a workspace API token as a bearer token; each endpoint names the scope it needs. Each token may make 600 requests an hour. Figures are this workspace's own records: money in minor units, per currency, never converted. A test token (xyr_test_) reads the same records and never writes: a write is checked as a live one would be and answered with simulated: true."},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"}},"responses":{"Error":{"description":"A refusal, with a stable code.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"]}}}}}}}},"paths":{"/api/v1/decisions":{"get":{"summary":"The decision ledger: each decision with its prediction and, once measured, what happened. Newest first.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[{"name":"missionId","in":"query","required":false,"description":"Only the decisions serving this mission.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, at most 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"The `meta.nextCursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/missions":{"get":{"summary":"Growth missions, each with its measured progress and the automations working on it.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/signals":{"get":{"summary":"What the product noticed in the business, and which opportunity each notice speaks for.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[{"name":"status","in":"query","required":false,"description":"open (default), resolved or dismissed.","schema":{"type":"string","enum":["open","resolved","dismissed"]}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/opportunities":{"get":{"summary":"Things worth doing, in the order they are worth doing them, with the measured impact where there is one.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[{"name":"status","in":"query","required":false,"description":"open (default), actioned, dismissed or expired.","schema":{"type":"string","enum":["open","actioned","dismissed","expired"]}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/experiments":{"get":{"summary":"Hypotheses written down before their tests were decided, and what each test said.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Write down a hypothesis against an email A/B test or a send with a held-back group, before it is decided.","security":[{"bearerAuth":[]}],"x-required-scope":"write:experiments","x-authenticates":"workspace token","description":"Needs a token with the `write:experiments` scope: Write down hypotheses against tests before they are decided.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"The hypothesis, the test it rides on, and what it expects.","content":{"application/json":{"schema":{"type":"object","properties":{"hypothesis":{"type":"string","description":"What is expected, and why. At least ten characters."},"kind":{"type":"string","enum":["email_ab_test","email_holdout","sms_holdout"]},"subjectId":{"type":"string","description":"The A/B test id, or the email send id for a hold-back."},"expectation":{"type":"string","enum":["a_better","b_better","no_difference","send_adds"]},"decisionId":{"type":"string","description":"The decision whose argument this tests. Optional."}},"required":["hypothesis","kind","subjectId","expectation"]}}}}}},"/api/v1/outcomes":{"get":{"summary":"How the predictions have held up — by author, measure and stated confidence — why findings were turned down, and what the tests showed.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/approvals":{"get":{"summary":"Sends waiting for, or given, a person’s approval.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[{"name":"status","in":"query","required":false,"description":"pending, approved or rejected. All when left out.","schema":{"type":"string","enum":["pending","approved","rejected"]}},{"name":"limit","in":"query","required":false,"description":"How many to return, at most 100.","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/actions":{"get":{"summary":"Proposed changes, newest first: what each would do, whether the workspace’s limits allowed it, who proposed it, and what became of it.","security":[{"bearerAuth":[]}],"x-required-scope":"read:growth","x-authenticates":"workspace token","description":"Needs a token with the `read:growth` scope: Read missions, decisions, signals, opportunities, experiments, outcomes, approvals and proposed changes.","parameters":[{"name":"status","in":"query","required":false,"description":"Only changes in this state. All when left out.","schema":{"type":"string","enum":["proposed","approved","applying","applied","rejected","refused","failed"]}},{"name":"limit","in":"query","required":false,"description":"How many to return, at most 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"The `meta.nextCursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"post":{"summary":"Propose a change. It is planned and checked against the workspace’s limits exactly as an agent’s proposal is, then waits for a person in Proposed changes. Nothing here approves it or carries it out.","security":[{"bearerAuth":[]}],"x-required-scope":"write:actions","x-authenticates":"workspace token","description":"Needs a token with the `write:actions` scope: Propose changes for a person to approve; nothing is carried out without one.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"The kind of change and its arguments. A proposal the limits refuse is recorded as refused, with the reason.","content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","description":"The kind of change, such as pause_campaign. An unknown kind is answered with the list."},"args":{"type":"object","description":"Its arguments, as the kind declares them."}},"required":["kind","args"]}}}}}},"/api/v1/contacts":{"post":{"summary":"Add or update up to 100 contacts, the way an import does: an address on the do-not-contact list is skipped, tags are merged, and the plan’s contact allowance applies.","security":[{"bearerAuth":[]}],"x-required-scope":"write:contacts","x-authenticates":"workspace token","description":"Needs a token with the `write:contacts` scope: Create and update contacts.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"Only people who agreed to hear from the business: they can be emailed as soon as they are added.","content":{"application/json":{"schema":{"type":"object","properties":{"contacts":{"type":"array","description":"Each an object with an email, and optionally name, firstName, lastName, company, phone and tags."},"listId":{"type":"string","description":"A list in this workspace to put them on. Optional."}},"required":["contacts"]}}}}}},"/api/v1/track":{"post":{"summary":"Report that one of your contacts did something in your own systems, such as trial_started. It starts the active workflows listening for that event, and says how many it started.","security":[{"bearerAuth":[]}],"x-required-scope":"write:events","x-authenticates":"workspace token","description":"Needs a token with the `write:events` scope: Report what contacts did in your own systems, which can start workflows that message them.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"The event by name, and the contact by email. An event no workflow listens for goes no further.","content":{"application/json":{"schema":{"type":"object","properties":{"event":{"type":"string","description":"Up to 64 letters, numbers, dots, dashes and underscores. Capitals are ignored."},"email":{"type":"string","description":"The address of a contact in this workspace."},"properties":{"type":"object","description":"Up to 20 plain values kept with the run it starts, such as plan or seats. Optional."}},"required":["event","email"]}}}}}},"/api/v1/customers":{"get":{"summary":"The customer base in aggregate, and the people in one stage of it, with what each has spent per currency.","security":[{"bearerAuth":[]}],"x-required-scope":"read:contacts","x-authenticates":"workspace token","description":"Needs a token with the `read:contacts` scope: Read contacts and segments.","parameters":[{"name":"stage","in":"query","required":false,"description":"prospect, first_time, repeat or lapsed. Buyers of every stage when left out.","schema":{"type":"string","enum":["prospect","first_time","repeat","lapsed"]}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/revenue":{"get":{"summary":"Revenue from the order ledger, per currency and never added across currencies, with how much of it is traced to marketing.","security":[{"bearerAuth":[]}],"x-required-scope":"read:analytics","x-authenticates":"workspace token","description":"Needs a token with the `read:analytics` scope: Read campaign and revenue reporting.","parameters":[{"name":"from","in":"query","required":false,"description":"ISO 8601. Defaults to 30 days ago.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"ISO 8601. Defaults to now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/usage":{"get":{"summary":"What this workspace has used of each monthly allowance, and what remains.","security":[{"bearerAuth":[]}],"x-required-scope":"read:analytics","x-authenticates":"workspace token","description":"Needs a token with the `read:analytics` scope: Read campaign and revenue reporting.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/connections":{"get":{"summary":"Each connected store, ad account, email platform and social account, and whether it is still delivering.","security":[{"bearerAuth":[]}],"x-required-scope":"read:analytics","x-authenticates":"workspace token","description":"Needs a token with the `read:analytics` scope: Read campaign and revenue reporting.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/events":{"get":{"summary":"The events a webhook can subscribe to, oldest first from a cursor, for a caller that would rather poll.","security":[{"bearerAuth":[]}],"x-required-scope":"read:events","x-authenticates":"workspace token","description":"Needs a token with the `read:events` scope: Read the events a webhook can subscribe to.","parameters":[{"name":"type","in":"query","required":false,"description":"Only this event type.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, at most 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"after","in":"query","required":false,"description":"The `meta.nextCursor` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/agents":{"get":{"summary":"Every agent in this workspace, Xyranik’s own and your own, with what each may do, the most it may ask for, and when it last acted. Read only: registering an agent or giving it a credential stays with a person.","security":[{"bearerAuth":[]}],"x-required-scope":"read:agents","x-authenticates":"workspace token","description":"Needs a token with the `read:agents` scope: Read this workspace’s agents, the tools they may use, and the rules that govern them.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/agents/tools":{"get":{"summary":"The tools an agent can be permitted here and every action each one has — its risk, the data it uses, whether it can be undone. These keys are what an authorize call names.","security":[{"bearerAuth":[]}],"x-required-scope":"read:agents","x-authenticates":"workspace token","description":"Needs a token with the `read:agents` scope: Read this workspace’s agents, the tools they may use, and the rules that govern them.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/agents/rules":{"get":{"summary":"The rules in force for agents in this workspace, each as a sentence built from its structure rather than stored prose.","security":[{"bearerAuth":[]}],"x-required-scope":"read:agents","x-authenticates":"workspace token","description":"Needs a token with the `read:agents` scope: Read this workspace’s agents, the tools they may use, and the rules that govern them.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/agents/requests":{"get":{"summary":"Every decision the gateway has made, newest first: what was asked, what was decided, which checks passed, which rules bit, and what became of it. Refusals included — how often the rules bite is the evidence that they work.","security":[{"bearerAuth":[]}],"x-required-scope":"read:agents","x-authenticates":"workspace token","description":"Needs a token with the `read:agents` scope: Read this workspace’s agents, the tools they may use, and the rules that govern them.","parameters":[{"name":"status","in":"query","required":false,"description":"Only decisions in this state.","schema":{"type":"string"}},{"name":"agentId","in":"query","required":false,"description":"Only this agent’s.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"How many to return, at most 100.","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"before","in":"query","required":false,"description":"The `meta.nextBefore` of the previous page.","schema":{"type":"string"}}],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}},"/api/v1/agent/authorize":{"post":{"summary":"May this agent do this, here, now? Judged by the same gateway that judges Xyranik’s own agents. `requires_approval` is not a yes — `mayProceed` says plainly whether to go ahead.","security":[{"bearerAuth":[]}],"x-required-scope":null,"x-authenticates":"agent credential","description":"Opened with one agent’s own credential (xyr_agt_…), which carries no scopes: what the agent may do is decided for each request by the gateway.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"What you want to do, and what it would do. Facts you state are what the risk and the workspace’s rules are judged against.","content":{"application/json":{"schema":{"type":"object","properties":{"tool":{"type":"string","description":"The tool’s key, as /api/v1/agents/tools lists it."},"action":{"type":"string","description":"The action’s key within that tool."},"resource":{"type":"string","description":"What it would act on, in your own terms. Optional."},"summary":{"type":"string","description":"One line a person can read when this waits for them. Optional."},"facts":{"type":"object","description":"amountMinor, currency, amountPercent, increase, recipients, records. A name this API does not know is refused rather than ignored, so a mistyped fact cannot quietly make a request look harmless."},"params":{"type":"object","description":"The parameters, kept only as a digest: enough to recognise a repeat, never enough to reconstruct. Optional."}},"required":["tool","action"]}}}}}},"/api/v1/agent/result":{"post":{"summary":"What became of something this agent was allowed to do. Recorded against that decision, and only for one belonging to this workspace and this agent. Kept as unverified: a report of success is a claim, not a check.","security":[{"bearerAuth":[]}],"x-required-scope":null,"x-authenticates":"agent credential","description":"Opened with one agent’s own credential (xyr_agt_…), which carries no scopes: what the agent may do is decided for each request by the gateway.","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"A new value for each new request. The same request again with the same key, within 24 hours, gets the first answer back (Idempotent-Replayed: true) and writes nothing twice.","schema":{"type":"string","maxLength":255}}],"responses":{"200":{"description":"Answered to a test token (X-Xyranik-Mode: test): every check a live write meets was made, and nothing was recorded. `{ data: { simulated: true } }`."},"201":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"409":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}},"requestBody":{"required":true,"description":"The decision, and what happened.","content":{"application/json":{"schema":{"type":"object","properties":{"authorizationId":{"type":"string","description":"The `authorizationId` the authorize call returned."},"status":{"type":"string","enum":["completed","failed","cancelled"]},"summary":{"type":"string","description":"One line on what happened. Optional."},"error":{"type":"string","description":"What went wrong, when it did. Optional."}},"required":["authorizationId","status"]}}}}}},"/api/v1/agent/me":{"get":{"summary":"What this agent is and what it may ask for: its permissions in words, the most it may ask for, its own limits, and whether the workspace has stopped its agents.","security":[{"bearerAuth":[]}],"x-required-scope":null,"x-authenticates":"agent credential","description":"Opened with one agent’s own credential (xyr_agt_…), which carries no scopes: what the agent may do is decided for each request by the gateway.","parameters":[],"responses":{"200":{"description":"The result, as `{ data, meta? }`."},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}}}}}