Files
cli/spec/cloud.json

1 line
1.0 MiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"components":{"schemas":{"Arm":{"properties":{"control":{"description":"true on the baseline arm every other arm is compared to","type":"boolean"},"key":{"description":"the arm's slug, unique within the experiment","type":"string"},"payload":{"description":"opaque JSON the arm carries, which the consumer interprets"},"weight":{"description":"its share of the rollout; the arms sum to 100","type":"number"}},"type":"object"},"AskRequest":{"properties":{"from":{"description":"From is the RFC3339 start of the metric window. Empty means all time, treated as a\nsingle reporting period (see monthsBetween).","type":"string"},"question":{"description":"Question is the plain-language question about the org's books, e.g. \"what is my\nMRR?\". Longer than 2000 characters is truncated, never refused.","type":"string"},"to":{"description":"To is the RFC3339 end of the metric window. Empty means up to now.","type":"string"}},"type":"object"},"Attempt":{"properties":{"answer":{"type":"string"},"benchmark":{"type":"string"},"correct":{"type":"boolean"},"gold":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"response":{"type":"string"},"revision":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"ts":{"type":"integer"}},"type":"object"},"Audience":{"properties":{"createdAt":{"description":"CreatedAt and UpdatedAt are unix seconds, both server-assigned.","type":"integer"},"event":{"description":"Event is the analytics event a member must have fired. EMPTY MEANS NO\nFILTER: the audience is then every mailable customer in the org, and no\nwarehouse is consulted.","type":"string"},"id":{"description":"ID is the server-assigned audience id (\"aud_\" + 128 random bits).","type":"string"},"name":{"description":"Name is the audience's label. Required, trimmed, capped at 1024 bytes.","type":"string"},"updatedAt":{"type":"integer"},"windowDays":{"description":"WindowDays is how far back the event counts, ending now. 0 means 30 and\nnothing above 3650 is honoured. Ignored when Event is empty.","type":"integer"}},"type":"object"},"Backend":{"properties":{"url":{"description":"URL is the upstream server, http(s)://host[:port].","type":"string"},"weight":{"description":"Weight is this member's share of the round-robin; must be >= 0.","type":"integer"}},"type":"object"},"BackfillIn":{"properties":{"org":{"description":"Org is the tenant to migrate. Required — there is no fleet-wide form of this\ncutover, because each org must be reconciled on its own.","type":"string"}},"type":"object"},"BookRequest":{"properties":{"override":{"description":"Override books this bill even when one of the SAME economic identity\n(vendor, total, issue date) already posted — the explicit human confirmation that a\nsame-looking bill is a genuine second spend, not the same receipt re-scanned.","type":"boolean"},"scanId":{"description":"ScanID is the scanned document's file hash, as GET /v1/books/inbox and the scan\ndraft report it. It is the idempotency key: re-booking the same scan writes nothing.","type":"string"},"voucher":{"$ref":"#/components/schemas/Voucher","description":"Voucher is the reviewed voucher to post. Its source is FORCED to (scan, scanId)\nserver-side, so it can never be booked under another source's key."}},"type":"object"},"CalendarPost":{"properties":{"body":{"description":"Body is the post text. Required.","type":"string"},"channel":{"description":"Channel is the target network: x, facebook, instagram, linkedin, tiktok,\nyoutube or threads. Required — a post must name where it goes.","type":"string"},"createdAt":{"description":"CreatedAt and UpdatedAt are unix seconds, both server-assigned.","type":"integer"},"error":{"description":"Error is the exact reason the last publish attempt failed — the honest\nrecord behind a \"failed\" status, never a faked success.","type":"string"},"id":{"description":"ID is the server-assigned post id (\"cal_\" + 128 random bits).","type":"string"},"publishedAt":{"description":"PublishedAt is when the publish succeeded; 0 until it does.","type":"integer"},"scheduledAt":{"description":"ScheduledAt is the unix publish time; 0 leaves the post a draft, and any\nvalue makes it \"scheduled\" for the durable sweep to pick up.","type":"integer"},"status":{"description":"Status is draft, scheduled, published, failed or canceled. Server-owned.","type":"string"},"title":{"description":"Title is the post's internal label, capped at 1024 bytes.","type":"string"},"updatedAt":{"type":"integer"}},"type":"object"},"Campaign":{"properties":{"budget":{"description":"Budget and Spend are minor units (USD cents), clamped to >= 0.","type":"integer"},"channel":{"description":"Channel is the delivery surface: email, sms, social, meta, google or\ntiktok. Empty means email.","type":"string"},"createdAt":{"description":"CreatedAt and UpdatedAt are unix seconds, both server-assigned.","type":"integer"},"id":{"description":"ID is the server-assigned campaign id (\"camp_\" + 128 random bits).","type":"string"},"name":{"description":"Name is the campaign's label. Required, trimmed, capped at 1024 bytes.","type":"string"},"objective":{"description":"Objective is the free-text goal (\"signups\"), capped at 1024 bytes.","type":"string"},"scheduledAt":{"description":"ScheduledAt is the unix send time; 0 means unscheduled. Setting it on a\ncampaign with no explicit status makes that status \"scheduled\".","type":"integer"},"spend":{"type":"integer"},"status":{"description":"Status is the lifecycle: draft, scheduled, active, paused or completed.\nEmpty means draft.","type":"string"},"updatedAt":{"type":"integer"}},"type":"object"},"CaptureBatch":{"properties":{"batch":{"items":{"$ref":"#/components/schemas/CaptureEvent"},"type":"array"},"events":{"items":{"$ref":"#/components/schemas/CaptureEvent"},"type":"array"}},"type":"object"},"CaptureEvent":{"properties":{"anonymousId":{"type":"string"},"channel":{"type":"string"},"clip":{"$ref":"#/components/schemas/ClipBody"},"currency":{"type":"string"},"distinctId":{"type":"string"},"environment":{"type":"string"},"error":{"$ref":"#/components/schemas/Exception"},"event":{"type":"string"},"groupId":{"type":"string"},"groupType":{"type":"string"},"kind":{"type":"string"},"level":{"type":"string"},"library":{"type":"string"},"libraryVersion":{"type":"string"},"log":{"$ref":"#/components/schemas/LogBody"},"messageId":{"type":"string"},"metric":{"$ref":"#/components/schemas/MetricBody"},"path":{"type":"string"},"personId":{"type":"string"},"product":{"type":"string"},"productId":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"quantity":{"type":"integer"},"refCode":{"type":"string"},"referrer":{"type":"string"},"release":{"type":"string"},"resource":{"type":"string"},"revenue":{"type":"number"},"service":{"type":"string"},"sessionId":{"type":"string"},"signupWeek":{"type":"string"},"site":{"type":"string"},"span":{"$ref":"#/components/schemas/SpanBody"},"spanId":{"type":"string"},"timestamp":{"type":"string"},"traceId":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"},"utm":{"$ref":"#/components/schemas/UTM"}},"type":"object"},"CartItemSet":{"properties":{"id":{"description":"ID is the cart to amend, from the path.","type":"string"},"product":{"description":"Product names the catalog product to set, by its id or its URL slug. Give\nthis or Variant, never both; a request naming neither is refused.","type":"string"},"quantity":{"description":"Quantity is how many of that item the cart should hold AFTER this call — it\nis the resulting count, not a delta, so sending 3 twice leaves 3 and not 6.\nZERO REMOVES the line, which is the only way to take an item out.","type":"integer"},"variant":{"description":"Variant names the specific sellable variant to set, by its id or its SKU.\nPrefer it over Product for anything sold in sizes, colours or tiers — the\nprice and the stock are the variant's, not the product's.","type":"string"}},"type":"object"},"CartOpen":{"properties":{"currency":{"description":"Currency is the ISO 4217 code the cart is priced in, lower-cased. Empty\nmeans usd.","type":"string"},"email":{"description":"Email is the shopper's address, for a cart that belongs to someone who has\nnot signed in. It is what a guest checkout and an abandoned-cart follow-up\nkey on. Empty is fine.","type":"string"},"store":{"description":"Store is the storefront this cart is being filled on. Empty uses the org's\ndefault store, which is what a single-storefront merchant always wants.","type":"string"},"user":{"description":"User is the id of the signed-in shopper this cart belongs to, when there is\none. Empty means a guest cart identified only by its own id.","type":"string"}},"type":"object"},"ChannelSpec":{"properties":{"account":{"description":"Account is the provider account this channel runs under: an ad-account, a page\nor a mailing-list id. An executor may replace it at launch with the account it\nactually used.","type":"string"},"detail":{"description":"Detail is the last outcome in one secret-free line — the failure reason, or\nwhat the executor reported. Absent when there is nothing to explain.","type":"string"},"externalId":{"description":"ExternalID is the provider-side id of the running execution, recorded by the\norchestrator at launch and handed back verbatim to read spend or to pause.\nServer-owned and absent until this channel has launched; anything a caller\nsends for it is dropped.","type":"string"},"kind":{"description":"Kind is the channel and the identity a campaign holds at most one of: paid,\norganic or email. It picks the executor the launch fans out to.","type":"string"},"platform":{"description":"Platform is the provider within the kind — meta, google, x, instagram, or the\nemail provider.","type":"string"},"status":{"description":"Status is this channel's own launch outcome, not the campaign's: pending (added,\nnever launched), live, paused, failed (Detail says why) or unavailable (no\nexecutor wired on this deployment). Server-owned — a caller can never assert it.","type":"string"}},"type":"object"},"ClipBody":{"properties":{"bytes":{"type":"integer"},"duration":{"type":"integer"},"object":{"type":"string"}},"type":"object"},"CodeFile":{"properties":{"id":{"description":"ID is the file's path RELATIVE to its session's artifact directory, which is\nalso how it is fetched: GET /v1/download/{session}/{id}.","type":"string"},"name":{"description":"Name is the display name. On an ANSWER it carries the `{session}/{id}`\nidentifier whole, because the client matches on that prefix.","type":"string"},"session_id":{"description":"SessionID is the other accepted spelling of the same fact on the way IN. Both\nare read; whichever is set wins.","type":"string"},"storage_session_id":{"description":"StorageSessionID names the session holding the bytes, and is the spelling the\nanswer always uses.","type":"string"}},"type":"object"},"CodeRun":{"properties":{"args":{"description":"Args become the PROGRAM's argv, never the compiler's. For the compiled\nlanguages the toolchain builds first and these are passed to the binary it\nproduced.","items":{"type":"string"},"type":"array"},"code":{"description":"Code is the WHOLE program, not a fragment: it is written to a single file and\nthat file is what runs, so a compiled language needs its entry point and an\ninterpreted one runs top to bottom.","type":"string"},"files":{"description":"Files are inputs the host already put in some session. Each names the session\nits bytes live in, which is usually — and ideally — the session this run wants.","items":{"$ref":"#/components/schemas/CodeFile"},"type":"array"},"lang":{"description":"Lang selects the toolchain, and with it the filename the code is written to\nand the line that runs it: py, js, ts, bash, r, php, go, rs, c, cpp, java, d,\nf90. Anything else is refused rather than guessed at — a run in the wrong\nlanguage fails somewhere deep in a compiler, which reads as an outage.","type":"string"},"runtime_session_hint":{"description":"RuntimeSessionHint is the stateful-session hint. It is carried so a client\nthat sends it is not silently misread, and it selects nothing here: every\nsession in this implementation is already a warm sandbox, so there is no\nsecond kind of runtime for a hint to choose between.","type":"string"},"session_id":{"description":"SessionID continues an EXISTING sandbox, which is what makes runs stateful:\nthe same filesystem, so one run's output file is the next run's input. Empty\nleases a fresh sandbox and the id it got comes back on the result.","type":"string"},"user_id":{"description":"UserID attributes the run inside the caller's org. It is a label, never a\ntenant: the org is resolved from the validated principal and a value here\ncannot widen what the run may reach.","type":"string"}},"required":["lang","code"],"type":"object"},"CodingStartIn":{"properties":{"after":{"description":"After names a previous run's session, and starts this one from where that\none stopped instead of from the repository's default. It is how a follow-up\ninstruction — \"now add tests for it\" — builds on work already done rather\nthan beginning again on a fresh clone.\n\nIt sets the base and nothing else, so this run still writes its OWN branch.\nOne run, one branch: a run that wrote back onto an earlier run's branch\nwould break the rule the forge's ref policy is built on, and would leave\ntwo turns of work with one name to review.\n\nA caller who already knows the branch may pass Base directly; this exists\nbecause the branch is derived from a session id and nobody should have to\nknow how. Base wins if both are given.","type":"string"},"agentRef":{"description":"AgentRef names a configured agent to run as, which is how an org pins a\nharness, a model and a prompt to a name. Empty runs the default agent.","type":"string"},"base":{"description":"Base is the branch to start from. Empty takes the repository's default. The\nrun never writes here — it writes the agent branch it answers with.","type":"string"},"desktop":{"description":"Desktop asks for a run with a SCREEN — an image carrying an X server — for a\ntask that has to drive a browser or another windowed program. False, the\ndefault, is a headless checkout, which is what writing code needs.","type":"boolean"},"project":{"description":"Project scopes the run to one board's work when the org keeps more than one.\nEmpty is the org's default.","type":"string"},"prompt":{"description":"Prompt is the task, in the words you would use with a colleague who has the\ncheckout open. It is the whole instruction: there is no second field for\ncontext, and a prompt that names files and the outcome it wants gets a run\nthat does not have to guess either.","type":"string"},"replyChannel":{"description":"ReplyChannel / ReplyThread are WHERE THE RUN NARRATES ITSELF, when the door\nthat started it has somewhere for it to talk. Empty means nobody is\nlistening and the run simply does not narrate — which is the app door's\ncase, because /v1/coding hands back a session id and the session stream is\na better progress feed than any message could be.\n\nIt is an ADDRESS and not a token: the engine says \"put this text there\",\nand the process that owns the workspace's bot credential is the one that\nactually posts. So a run reports into a Slack thread without the engine\never holding the token that could post anywhere else in that workspace.","type":"string"},"replyThread":{"type":"string"},"repo":{"description":"Repo is what to work on, as `owner/name` in the caller's own org. The engine\nresolves the clone URL and the push credential from the org itself, so this\nsays WHICH repository and never how to reach it.","type":"string"},"targetId":{"description":"TargetID routes the run to a registered machine the org has claimed instead\nof to a sandbox in our cluster. Empty runs it here, which is the usual case.","type":"string"},"timeoutSeconds":{"description":"TimeoutSeconds bounds the whole run. Unset takes the default budget; a run\nthat hits the bound is stopped and reports what it had done by then.","type":"integer"},"tool":{"description":"Tool is which harness runs the prompt — dev | claude | codex | python |\nnode — and Desktop is whether the run needs a screen. Both are empty by\ndefault, which is `dev` with no screen, and that default is what every\ncaller gets until it says otherwise.\n\nThey are two fields because they are two questions. The harness decides\nwhat argv starts; the screen decides which image carries an X server. A\ncaller may want claude WITH a browser it can see, and a single enum would\nhave made that combination unsayable.","type":"string"}},"type":"object"},"Config":{"properties":{"max_age":{"description":"MaxAge caps message age, e.g. \"24h\" or \"7d\"; \"0\" (default) is unlimited.","type":"string"},"max_bytes":{"description":"MaxBytes caps the stream's total stored bytes; -1 (default) is unlimited.","type":"integer"},"max_msg_size":{"description":"MaxMsgSize caps one message's size in bytes; -1 (default) is the broker's limit.","type":"integer"},"max_msgs":{"description":"MaxMsgs caps the number of stored messages; -1 (default) is unlimited.","type":"integer"},"name":{"description":"Name is the stream name, unique within the org (alphanumeric, hyphens, underscores).","type":"string"},"num_replicas":{"description":"Replicas is the number of stream replicas (1–5); this plane runs 1.","type":"integer"},"retention":{"description":"Retention is the retention policy: limits (default), interest, or workqueue.","type":"string"},"storage":{"description":"Storage is the storage backend: file (default) or memory.","type":"string"},"subjects":{"description":"Subjects are the org-relative subjects bound to this stream (wildcards supported). Default: the stream name.","items":{"type":"string"},"type":"array"}},"type":"object"},"Contacts":{"properties":{"admin":{"$ref":"#/components/schemas/Registrant","description":"who administers it"},"billing":{"$ref":"#/components/schemas/Registrant","description":"who is reached about payment"},"registrant":{"$ref":"#/components/schemas/Registrant","description":"who owns the domain"},"tech":{"$ref":"#/components/schemas/Registrant","description":"who is reached about technical matters"}},"type":"object"},"CordonIn":{"properties":{"cordon":{"description":"Cordon true marks the node unschedulable; false restores it.","type":"boolean"},"drain":{"description":"Drain additionally evicts the pods already running there.","type":"boolean"},"id":{"description":"ID is the node's droplet id, from the path.","type":"string"}},"type":"object"},"D1Query":{"properties":{"params":{"items":{},"type":"array"},"sql":{"type":"string"}},"type":"object"},"DocField":{"properties":{"default":{"type":"string"},"fetchFrom":{"type":"string"},"fieldname":{"type":"string"},"fieldtype":{"type":"string"},"hidden":{"type":"boolean"},"inListView":{"type":"boolean"},"label":{"type":"string"},"options":{"type":"string"},"readOnly":{"type":"boolean"},"reqd":{"type":"boolean"},"unique":{"type":"boolean"}},"type":"object"},"DocPerm":{"properties":{"cancel":{"type":"boolean"},"create":{"type":"boolean"},"delete":{"type":"boolean"},"read":{"type":"boolean"},"role":{"type":"string"},"submit":{"type":"boolean"},"write":{"type":"boolean"}},"type":"object"},"DocType":{"properties":{"autoname":{"type":"string"},"createdAt":{"type":"integer"},"fields":{"items":{"$ref":"#/components/schemas/DocField"},"type":"array"},"isSingle":{"type":"boolean"},"isSubmittable":{"type":"boolean"},"module":{"type":"string"},"name":{"type":"string"},"permissions":{"items":{"$ref":"#/components/schemas/DocPerm"},"type":"array"},"titleField":{"type":"string"},"updatedAt":{"type":"integer"}},"type":"object"},"DropletIn":{"properties":{"disk":{"description":"Disk requests a PERMANENT resize that grows the disk. DO can never resize such a\ndroplet down again, so it defaults false — a CPU/RAM-only change, reversible.","type":"boolean"},"id":{"description":"ID is the DO droplet id, from the path. Numeric.","type":"string"},"size":{"description":"Size is the target DigitalOcean size slug on resize, e.g. \"s-4vcpu-8gb\".","type":"string"}},"type":"object"},"EndIn":{"properties":{"id":{"description":"ID is the sandbox whose lease ends, from an earlier lease.","type":"string"},"purge":{"description":"Purge deletes the project's DISK as well. It is opt-in because the disk holds\nthe only copy of the checkout: ending a lease is cheap and reversible,\ndeleting someone's uncommitted work is neither.","type":"boolean"}},"type":"object"},"EnrollInput":{"properties":{"address":{"description":"Address is a single recipient, normalized (lower-cased, trimmed) before\nuse. Give this OR audienceId, never both and never neither.","type":"string"},"audienceId":{"description":"AudienceID fans the sequence out over a saved audience, resolved live to\nthe org's mailable customers. Email only.","type":"string"},"channel":{"description":"Channel is the delivery surface; empty means email. An audience resolves\nmailboxes, so an audience enroll must be email.","type":"string"},"id":{"description":"ID is the sequence id from the path.","type":"string"}},"type":"object"},"EnvVarJSON":{"properties":{"key":{"type":"string"},"secret":{"type":"boolean"},"value":{"type":"string"}},"type":"object"},"Event":{"properties":{"distinctId":{"type":"string"},"event":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"time":{"type":"string"},"type":{"type":"string"}},"type":"object"},"Exception":{"properties":{"frames":{"items":{"$ref":"#/components/schemas/Frame"},"type":"array"},"handled":{"type":"boolean"},"message":{"type":"string"},"stack":{"type":"string"},"type":{"type":"string"}},"type":"object"},"Experiment":{"properties":{"canonical":{"type":"boolean"},"cost_usd":{"type":"number"},"endpoint":{"type":"string"},"git_branch":{"type":"string"},"git_dirty":{"type":"boolean"},"git_sha":{"type":"string"},"id":{"type":"string"},"kind":{"type":"string"},"lib_versions":{},"meta":{},"metric":{"type":"string"},"n":{"type":"integer"},"n_total":{"type":"integer"},"project":{"type":"string"},"publishable":{"type":"boolean"},"revision":{"description":"original | corrected | retracted","type":"string"},"status":{"description":"planning | running | complete | faulted","type":"string"},"subject":{"type":"string"},"task":{"type":"string"},"trainable":{"type":"boolean"},"ts":{"type":"integer"},"value":{"type":"number"},"visibility":{"type":"string"}},"type":"object"},"Field":{"properties":{"key":{"type":"string"},"label":{"type":"string"}},"type":"object"},"Filters":{"properties":{"keywords":{"description":"Keywords keeps only items whose TITLE contains one of these,\ncase-insensitively. They are also the GDELT queries the feed fans out to,\none per keyword of three characters or more — so a keyword both widens what\nis fetched and narrows what is kept.","items":{"type":"string"},"type":"array"},"regions":{"description":"Regions keeps only items whose TITLE contains one of these, matched\ncase-insensitively as a substring. Empty keeps every region.","items":{"type":"string"},"type":"array"},"sources":{"description":"Sources keeps only items whose outlet name contains one of these,\ncase-insensitively. Empty keeps every outlet.","items":{"type":"string"},"type":"array"}},"type":"object"},"FlowAction":{"properties":{"displayName":{"type":"string"},"name":{"type":"string"},"nextAction":{"$ref":"#/components/schemas/FlowAction"},"settings":{"$ref":"#/components/schemas/StepSettings"},"skip":{"type":"boolean"},"type":{"description":"PIECE | CODE | ROUTER | LOOP_ON_ITEMS","type":"string"},"valid":{"type":"boolean"}},"type":"object"},"FlowTrigger":{"properties":{"displayName":{"type":"string"},"name":{"type":"string"},"nextAction":{"$ref":"#/components/schemas/FlowAction"},"settings":{"$ref":"#/components/schemas/StepSettings"},"strategy":{"type":"string"},"type":{"description":"PIECE_TRIGGER | EMPTY","type":"string"},"valid":{"type":"boolean"}},"type":"object"},"Founder":{"properties":{"decidedBy":{"description":"DecidedBy is who settled a terminal KYC status: the provider name, or a\nreviewer's user id.","type":"string"},"email":{"description":"Email is the founder's email, and the key a KYC decision addresses a founder\nby — POST /v1/company/kyc/decision matches on it.","type":"string"},"equityBps":{"description":"EquityBps is the founder's ownership in basis points, 0–10000 (1% == 100 bps,\nso 10000 is the whole company). The founders' shares seed the cap-table genesis.","type":"integer"},"kycRef":{"description":"KYCRef is the idv provider's session reference for this founder.","type":"string"},"kycStatus":{"description":"KYCStatus is the founder's identity-verification state: pending, verified (a\nreal idv provider reported a pass), reviewer_confirmed (a privileged reviewer\nconfirmed out-of-band) or failed. The payment stage is unreachable until every\nfounder passes.","type":"string"},"name":{"description":"Name is the founder's full legal name, as it appears on the formation documents.","type":"string"}},"type":"object"},"Frame":{"properties":{"column":{"type":"integer"},"file":{"type":"string"},"function":{"type":"string"},"line":{"type":"integer"}},"type":"object"},"GPU":{"properties":{"memory":{"description":"VRAM bytes, 0 = unknown","type":"integer"},"model":{"description":"\"GB10\", \"8060S\", \"RTX 4090\"","type":"string"},"vendor":{"description":"nvidia | amd | apple | intel | ...","type":"string"}},"type":"object"},"GenerateInput":{"properties":{"brief":{"description":"the brief/goal driving copy generation","type":"string"},"channels":{"description":"target channels (SocialPost)","type":"string"},"design":{"description":"studio design slug (asset source)","type":"string"},"doctype":{"description":"Campaign | SocialPost | Asset","type":"string"},"kind":{"description":"asset kind: ecom|product|lifestyle|hover|hero","type":"string"},"model":{"description":"optional zen model override (copy)","type":"string"},"product":{"description":"commerce product handle (copy context)","type":"string"},"project":{"description":"brand/site sub-scope (billing + tenancy axis)","type":"string"},"source_media":{"description":"asset source image (design CAD/photo)","type":"string"},"title":{"description":"optional explicit title","type":"string"},"tone":{"description":"tone override for a single draft","type":"string"},"voice":{"description":"brand-voice guidance for the copy director","type":"string"}},"type":"object"},"GrantIn":{"properties":{"amountCents":{"description":"AmountCents is the credit, in whole cents. Must be positive and within the\nper-grant cap.","type":"integer"},"currency":{"description":"Currency is the ISO code, lower-cased. Empty means usd.","type":"string"},"org":{"description":"Org is the tenant to credit. Required.","type":"string"},"reason":{"description":"Reason is the operator's justification, recorded on the audit row.","type":"string"},"source":{"description":"Source is the money bucket: \"trial\" (default) for a non-cash comp that is never\nrefundable, or \"prepaid\" for real money. Anything unknown falls back to trial.","type":"string"},"user":{"description":"User optionally names a MEMBER to credit, by bare IAM username. Empty credits\nthe org. Which of the two the money actually lands on is decided by\naccount.Payer, not here: a pooled org keeps one balance whatever is named.","type":"string"}},"type":"object"},"GrantRequest":{"properties":{"id":{"description":"an experiment (run) stable id","type":"string"},"project":{"type":"string"},"publishable":{"type":"boolean"},"sha256":{"description":"OR an artifact content hash","type":"string"},"trainable":{"type":"boolean"},"visibility":{"type":"string"}},"type":"object"},"IngestRequest":{"properties":{"attempts":{"items":{"$ref":"#/components/schemas/Attempt"},"type":"array"},"experiments":{"items":{"$ref":"#/components/schemas/Experiment"},"type":"array"}},"type":"object"},"InvoiceLineIn":{"properties":{"amount":{"description":"Amount is the line total in whole cents (250000 is $2,500.00).","type":"integer"},"description":{"description":"Description is the human-readable line, e.g. \"Advisory retainer — August\".","type":"string"},"quantity":{"description":"Quantity is the number of units, when the line is metered. Optional.","type":"integer"},"unitPrice":{"description":"UnitPrice is the per-unit price in cents, when the line is metered. Optional.","type":"integer"}},"type":"object"},"LeaseIn":{"properties":{"class":{"description":"Class is what KIND of computer to lease, and the set is closed:\n\n\texec a throwaway one that keeps nothing. Seconds to minutes.\n\tdev a coding one, with the project's own disk attached. Hours.\n\tdesktop a dev one that also has a screen.\n\tandroid a desktop with a phone running on that screen.\n\nEmpty leases an `exec`, which is the right answer for running a program and\nthe wrong one for working on a repository, because it keeps nothing.\n\nAn `android` needs a node that can virtualise a CPU, so it is the one class\na deployment may not be able to place. Where the fleet has none, the lease\nsucceeds and the pod stays Pending naming the device it is waiting for —\nwhich is the honest answer, because the alternative is an emulator running\non an interpreted CPU and never finishing its boot.","type":"string"},"id":{"description":"ID names a sandbox to RESUME, and is the id an earlier lease answered with.\nEmpty asks for a new one. A caller that holds an id and omits it does not get\na second view of the same computer, it gets a second computer.","type":"string"},"project":{"description":"Project names the disk to attach, and is REQUIRED for every class but `exec`.\n\nOne live sandbox per project: the disk attaches to one computer at a time, so\na second lease over a project that already has one is refused by name rather\nthan handed a silently empty disk.","type":"string"},"runtime":{"description":"Runtime is the isolation boundary asked for: `gvisor` shares a filesystem\nand holds a project volume, `kata-fc` is a microVM that boots slower and\nreads files faster but has no shared filesystem at all. Empty asks for the\nfleet's default, which is the right answer unless you are measuring.\n\nIt is a REQUEST. The owner decides, and refuses a combination it cannot\nhonour — a volume under a runtime with no shared filesystem would write\ninto a tmpfs and lose the bytes at exit. Read Leased.Runtime for what the\nsandbox actually got.","type":"string"},"ttlSec":{"description":"TTLSec bounds the lease in seconds. Unset takes the class default. Nothing\nruns forever, because a sandbox is somebody else's code on our nodes.","type":"integer"}},"type":"object"},"Leg":{"properties":{"account":{"description":"Account is the chart-of-accounts number this side posts to, e.g. \"5300\".","type":"string"},"credit":{"description":"Credit is the leg's credit in exact cents. Set this or Debit, not both.","type":"integer"},"debit":{"description":"Debit is the leg's debit in exact cents. Set this or Credit, not both.","type":"integer"}},"type":"object"},"LogBody":{"properties":{"body":{"type":"string"},"number":{"type":"integer"},"severity":{"type":"string"}},"type":"object"},"MetricBody":{"properties":{"labels":{"additionalProperties":{},"type":"object"},"name":{"type":"string"},"value":{"type":"number"}},"type":"object"},"Metrics":{"properties":{"at":{"description":"unix seconds, server-stamped","type":"integer"},"gpuUtil":{"description":"0..1 aggregate utilization","type":"number"},"load1":{"type":"number"},"load15":{"type":"number"},"load5":{"type":"number"},"memFree":{"description":"bytes","type":"integer"},"memUsed":{"description":"bytes","type":"integer"}},"type":"object"},"Middleware":{"properties":{"config":{"additionalProperties":{"type":"string"},"description":"Config is the transform's parameters: redirectScheme takes scheme (default\nhttps) and permanent (\"true\" ⇒ 301, else 302); stripPrefix REQUIRES\nprefixes (comma-separated, first match wins); addPrefix REQUIRES prefix;\nheaders is a header→value map set on the response.","type":"object"},"id":{"description":"ID identifies the transform within the org: [A-Za-z0-9-_.], at most 128\nchars. A create that omits it gets a generated one. Routes reference it by\nthis id.","type":"string"},"type":{"description":"Type is the transform: redirectScheme, stripPrefix, addPrefix or headers.","type":"string"}},"type":"object"},"NameIn":{"properties":{"name":{"description":"Name is the app, from the path.","type":"string"},"scope":{"description":"Scope \"host\" applies here only; default \"fleet\" applies everywhere.","type":"string"}},"type":"object"},"PagesBuildConfig":{"properties":{"build_command":{"type":"string"},"destination_dir":{"type":"string"},"root_dir":{"type":"string"}},"type":"object"},"PagesD1Binding":{"properties":{"id":{"type":"string"}},"type":"object"},"PagesDeploy":{"properties":{"branch":{"type":"string"}},"type":"object"},"PagesDeploymentConfig":{"properties":{"compatibility_date":{"type":"string"},"compatibility_flags":{"items":{"type":"string"},"type":"array"},"d1_databases":{"additionalProperties":{"$ref":"#/components/schemas/PagesD1Binding"},"type":"object"},"env_vars":{"additionalProperties":{"$ref":"#/components/schemas/PagesEnvVar"},"type":"object"},"kv_namespaces":{"additionalProperties":{"$ref":"#/components/schemas/PagesKVBinding"},"type":"object"},"r2_buckets":{"additionalProperties":{"$ref":"#/components/schemas/PagesR2Binding"},"type":"object"}},"type":"object"},"PagesDeploymentConfigs":{"properties":{"preview":{"$ref":"#/components/schemas/PagesDeploymentConfig"},"production":{"$ref":"#/components/schemas/PagesDeploymentConfig"}},"type":"object"},"PagesEnvVar":{"properties":{"type":{"type":"string"},"value":{"type":"string"}},"type":"object"},"PagesKVBinding":{"properties":{"namespace_id":{"type":"string"}},"type":"object"},"PagesProjectCreate":{"properties":{"build_config":{"$ref":"#/components/schemas/PagesBuildConfig"},"deployment_configs":{"$ref":"#/components/schemas/PagesDeploymentConfigs"},"name":{"type":"string"},"production_branch":{"type":"string"}},"type":"object"},"PagesR2Binding":{"properties":{"name":{"type":"string"}},"type":"object"},"PathIn":{"properties":{"id":{"description":"ID is the sandbox to read from, from an earlier lease.","type":"string"},"path":{"description":"Path is read relative to the sandbox's working directory unless it is\nabsolute, and a path that climbs out of it is refused rather than rewritten.\nEmpty names the working directory itself, which lists it.","type":"string"}},"type":"object"},"PaymentIn":{"properties":{"amountCents":{"description":"AmountCents is the amount to charge, in whole cents (5000 is $50.00).\nServer-side bounds apply and are authoritative — the default floor is $1\nand the ceiling $5,000, so a fat-fingered or hostile amount is refused\nbefore any money moves.","type":"integer"},"currency":{"description":"Currency is the ISO 4217 code, lower-cased. Empty means usd.","type":"string"},"idempotencyKey":{"description":"IdempotencyKey makes a retry safe: the same key never charges twice, it\nreplays the first result. Sending one is strongly recommended for an agent,\nwhich retries by construction. Empty falls back to a windowed key derived\nfrom the amount and currency, so a double-submit inside 15 minutes still\ncollapses onto one charge.","type":"string"},"sourceId":{"description":"SourceID is the single-use payment token that stands in for the card: a\nSquare Web Payments SDK nonce minted in the browser, or a Square sandbox\ntest nonce when the org's credentials are sandbox ones. The card number\nitself never reaches this process, which is what keeps it out of PCI scope.","type":"string"}},"type":"object"},"Policy":{"properties":{"cache_paths":{"additionalProperties":{"type":"integer"},"description":"CachePaths overrides CacheTTLSec per path PREFIX (key \"/v1/models\" → seconds).\nThe longest matching prefix wins.","type":"object"},"cache_ttl_sec":{"description":"CacheTTLSec is the org's default edge-cache TTL for its responses, in seconds;\n0 means no caching. Unset inherits the platform default.","type":"integer"},"cors_origins":{"description":"CORSOrigins is the PLATFORM-scope CORS allowlist EdgeCORS admits: an exact\norigin, a bare host, or a \"*.host\" wildcard. Writable only by a SuperAdmin —\nCORS is evaluated before identity, so it has no tenant to scope to.","items":{"type":"string"},"type":"array"},"methods":{"description":"Methods is the allowlist of HTTP methods the edge accepts for this org. Empty\nmeans all are accepted.","items":{"type":"string"},"type":"array"},"mode":{"description":"Mode is the abuse gate's posture for THIS scope: \"shadow\" scores traffic and\nrecords the verdict without acting on it, \"live\" enforces it. Unset means\nshadow.\n\nIt is the one per-org field that does NOT inherit. Every other field here\nlayers a platform default under the org's own value, which is right for a\ndefault: a tenant that sets no rate ceiling should get the platform's. Mode\nis not a default, it is an ARMING DECISION — it is what makes a statistical\njudgement start refusing real traffic — and inheriting it means arming one\nscope arms every tenant that never asked for it, without a write to their\nrow and without anything in their config changing. So a tenant is live only\nif that tenant's OWN row says live, and the platform row's mode governs\nexactly one scope: the anonymous lane, which has no tenant of its own.\n\nIt is also not self-service. Writing it requires SuperAdmin (see the\n/v1/gateway config op): the subject of an abuse control does not get to\nswitch the control off.","type":"string"},"org_rpm":{"description":"OrgRPM is the org's OWN authenticated rate ceiling, requests per minute, as\nScopeRateLimit enforces it. Unset inherits the platform default, then the\nstatic boot default.","type":"integer"},"per_ip_rpm":{"description":"PerIPRPM is the PLATFORM-scope pre-auth flood cap: requests EdgeRateLimit\nadmits per WindowSec from one client IP. SuperAdmin-only, same reason.","type":"integer"},"updated_at":{"description":"UpdatedAt is the unix second this policy row was last written. Server-stamped;\na client-supplied value is ignored.","type":"integer"},"updated_by":{"description":"UpdatedBy is the validated user id that wrote this policy row. Server-stamped;\na client-supplied value is ignored.","type":"string"},"window_sec":{"description":"WindowSec is the window PerIPRPM is counted over, in seconds. SuperAdmin-only.","type":"integer"}},"type":"object"},"Preset":{"properties":{"arms":{"description":"the blend — model ids from the arena","items":{"type":"string"},"type":"array"},"name":{"description":"served as enso-<name>","type":"string"},"note":{"description":"why this blend (audit)","type":"string"},"owner":{"description":"scoping org (never cross-tenant)","type":"string"},"panel":{"description":"fan-out width (>=1)","type":"integer"},"rank":{"description":"escalation order over arms","items":{"type":"string"},"type":"array"}},"type":"object"},"PublishInput":{"properties":{"doctype":{"type":"string"},"name":{"type":"string"},"scheduleAt":{"description":"\"\" = now","type":"string"}},"type":"object"},"Purge":{"properties":{"filter":{"description":"Filter purges only messages on this org-relative subject (wildcards supported).","type":"string"},"keep":{"description":"Keep retains that many newest messages.","type":"integer"},"name":{"description":"Name is the stream name, from the path.","type":"string"}},"type":"object"},"Query":{"properties":{"character":{"description":"Character is a 0-based UTF-16 code-unit offset within Line, per the LSP\nspecification — not a byte offset and not a rune index.","type":"integer"},"line":{"description":"Line is 0-based, per the LSP specification.","type":"integer"},"path":{"description":"Path is the repo-relative file, e.g. \"apps/lsp/lsp.go\".","type":"string"},"relation":{"description":"Relation refines locate: definition, reference, type or implementation.\nEmpty means definition. Every other op ignores it.","type":"string"},"repo":{"description":"Repo is the repository NAME within the caller's own org, e.g. \"cloud\".\nNot a URL and not an owner/name pair: the owner is the validated\nprincipal's org, so this names a repository the caller already owns.","type":"string"},"rev":{"description":"Rev is a branch, tag or commit sha. Empty means the default branch. It is\nresolved to a commit before anything else happens, so an answer is always\nabout one immutable tree.","type":"string"}},"type":"object"},"RaiseInvoiceIn":{"properties":{"currency":{"description":"Currency is the ISO 4217 code, lower-cased. Empty means usd.","type":"string"},"customerEmail":{"description":"CustomerEmail is where the invoice is sent. Optional.","type":"string"},"lines":{"description":"Lines are the charges. The invoice subtotal and amount due are COMPUTED\nfrom these — there is no total field to send, because a total that\ndisagreed with its own lines would bill a number nobody could derive.","items":{"$ref":"#/components/schemas/InvoiceLineIn"},"type":"array"},"userId":{"description":"UserID identifies the customer being billed, within the caller's own org.\nRequired — an invoice with no addressee is not an invoice.","type":"string"}},"type":"object"},"RedeemInput":{"properties":{"code":{"description":"Code is the promo code from the path.","type":"string"},"instrument":{"description":"Instrument identifies the payment method. It is the anti-farming key: one\nredemption per instrument, fleet-wide, and it is REQUIRED — an absent\ninstrument is refused, never waved through.","type":"string"}},"type":"object"},"ReferenceOverrideIn":{"properties":{"key":{"description":"Key is the member: a domain, a CIDR or address, an issuer prefix, a\ndevice digest. It is matched the same way the baseline is, so a deny on\ntempbox.example also covers mail.tempbox.example.","type":"string"},"note":{"description":"Note is why, in your own words. Optional, bounded to 512 bytes.","type":"string"},"verdict":{"description":"Verdict is allow or deny, and nothing else. An override is a decision —\nunlike a baseline entry, which states facts and leaves the decision to your\npolicy — because your organisation is the only party entitled to say \"for\nus, this one is fine\".","type":"string"}},"type":"object"},"ReferenceReceipt":{"properties":{"asOf":{"description":"AsOf is when the load happened, RFC 3339. Absent is dated on arrival, which\ncan only make the list look older than it is.","type":"string"},"keys":{"description":"Keys is how many designations that load carried. Zero from a publisher who\ndesignates somebody is a failed load wearing a successful one's clothes,\nand belongs in Refusal instead.","type":"integer"},"refusal":{"description":"Refusal is why the load failed, when it did.","type":"string"},"source":{"description":"Source is the publisher this receipt is for.","type":"string"},"version":{"description":"Version is the digest of what that publisher supplied, so a refresh that\nchanged nothing can be told from a refresh that did not run.","type":"string"}},"type":"object"},"RefreshReferenceIn":{"properties":{"force":{"description":"Force accepts a take whose size moved past the change bound. A publisher\nserving a tenth or ten times its previous list is refused by default and the\nprevious version is left standing; this is the operator saying the change is\nreal. It cannot make an empty, truncated or unparseable take land — those are\nerrors, not magnitudes.","type":"boolean"},"receipts":{"description":"Receipts are supplied by the component that holds the membership, for a set\nof kind attest. They are refused on any other kind, and a set of kind attest\nis refused without them: this plane never invents a freshness it did not\nobserve.","items":{"$ref":"#/components/schemas/ReferenceReceipt"},"type":"array"},"set":{"description":"Set is the set to refresh.","type":"string"}},"type":"object"},"Registrant":{"properties":{"address1":{"description":"street address","type":"string"},"address2":{"description":"second address line","type":"string"},"city":{"description":"city or locality","type":"string"},"companyName":{"description":"the organisation the contact acts for","type":"string"},"country":{"description":"ISO-3166 alpha-2, e.g. \"US\"","type":"string"},"email":{"description":"where WHOIS correspondence is sent","type":"string"},"fax":{"description":"fax number, in the same form as phone","type":"string"},"firstName":{"description":"the contact's given name","type":"string"},"lastName":{"description":"the contact's family name","type":"string"},"phone":{"description":"+NN.NNNNNNN","type":"string"},"state":{"description":"state, province or region","type":"string"},"zip":{"description":"postal code","type":"string"}},"type":"object"},"ReloadIn":{"properties":{"name":{"description":"Name is the app, from the path. It must be one the manifest declares.","type":"string"},"scope":{"description":"Scope \"host\" applies here only. Default \"fleet\" rolls it out one host at\na time, halting on the first host that fails to come up.","type":"string"},"sum":{"type":"string"},"url":{"description":"URL is the artifact directly, for an origin with no index. Sum is its hex\nSHA-256 and is REQUIRED with it: zip refuses an unverified download, and\nso does this.","type":"string"},"version":{"description":"Version is a release tag, resolved to a URL and digest through the\norigin's binaries.json index — the same index CI publishes, so there is\nno second table mapping versions to digests.","type":"string"}},"type":"object"},"ResearchArtifact":{"properties":{"content":{"description":"base64 bytes on write; the server hashes + stores them (never returned)","type":"string"},"git_branch":{"type":"string"},"git_dirty":{"type":"boolean"},"git_sha":{"type":"string"},"kind":{"type":"string"},"lib_versions":{},"project":{"type":"string"},"ref":{"description":"server-derived content address (sha256:<hash>)","type":"string"},"retention_class":{"type":"string"},"run_id":{"type":"string"},"sha256":{"description":"SERVER-derived on write; the identity","type":"string"},"ts":{"type":"integer"},"visibility":{"type":"string"}},"type":"object"},"ResolveReferenceIn":{"properties":{"keys":{"description":"Keys are the values to look up, at most 100 per call: email addresses or\ndomains, IP addresses, card prefixes, user-agent strings, autonomous system\nnumbers, device digests.","items":{"type":"string"},"type":"array"},"sets":{"description":"Sets narrows which sets to consult. Empty consults every set whose matcher\ncan read the keys given.","items":{"type":"string"},"type":"array"}},"type":"object"},"ReviewRequest":{"properties":{"glossary":{"additionalProperties":{"type":"string"},"description":"Glossary is the terminology the entry was translated under. Its VERSION — the\ndigest of the sorted terms — is part of the entry's identity, so editing a term\nyields a new entry rather than overwriting the old rendering.","type":"object"},"source":{"description":"Source is the ORIGINAL string this entry translates. Required; part of the\nentry's identity, so a different source is a different entry.","type":"string"},"state":{"description":"State is the entry's new position on the review ladder: suggested, approved or\npublished. `machine` is engine-only and is refused here — a human may not demote\na string back into the churn.","type":"string"},"target":{"description":"Target is the target language tag (BCP-47, e.g. \"es\" or \"pt-BR\"). Required;\npart of the entry's identity.","type":"string"},"text":{"description":"Text is the reviewed translation to store. A human write always wins over the\nstored value.","type":"string"},"tier":{"description":"Tier is the engine tier the entry belongs to, quality (the default) or bulk.\nPart of the entry's identity: the two tiers keep separate renderings.","type":"string"}},"type":"object"},"RoleAssignment":{"properties":{"role":{"description":"Role is the granted role's name.","type":"string"},"user":{"description":"User is the member the role is granted to.","type":"string"}},"type":"object"},"RoundInput":{"properties":{"name":{"description":"Name is the round's name on the cap table, e.g. \"Seed\". Required.","type":"string"},"preMoneyValuation":{"description":"PreMoneyValuation is the valuation the round prices off, before the new money.","type":"number"},"pricePerShare":{"description":"PricePerShare is the per-share price of a priced round.","type":"number"},"roundType":{"description":"RoundType is PRICED, SAFE or CONVERTIBLE_NOTE. Defaults to PRICED.","type":"string"},"shareClassId":{"description":"ShareClassID is the cap table's share class the round issues into.","type":"string"},"targetAmount":{"description":"TargetAmount is the amount the round is raising, recorded verbatim on the\ncanonical cap table's rounds.create contract.","type":"number"}},"type":"object"},"Route":{"properties":{"host":{"description":"Host is the exact hostname this route matches, lowercased with any trailing\ndot stripped. It is a GLOBALLY unique claim — one route across the whole\nedge may hold a host, so no tenant can hijack another's.","type":"string"},"id":{"description":"ID identifies the route within the org: [A-Za-z0-9-_.], at most 128 chars.\nA create that omits it gets a generated one.","type":"string"},"middlewares":{"description":"Middlewares are the ids of the edge transforms to apply, in this order,\nbefore the request reaches the service. At most 16.","items":{"type":"string"},"type":"array"},"pathPrefix":{"description":"PathPrefix narrows the match to requests under this path; it must start\nwith \"/\". Empty matches every path on the host.","type":"string"},"priority":{"description":"Priority orders routes that share a host: higher wins, and equal priorities\nfall back to the longer PathPrefix.","type":"integer"},"service":{"description":"Service is the id of the backend pool this route dispatches to. A route\nnaming a service that does not exist is skipped at compile, not served.","type":"string"},"tls":{"description":"TLS asks the edge to terminate TLS for Host with an ACME-managed certificate.","type":"boolean"}},"type":"object"},"Rule":{"properties":{"category":{"description":"Category is the COA expense account a matching bill books to. An upsert normalizes\na slug (\"cloud\") to its account number.","type":"string"},"pattern":{"description":"Pattern is the merchant substring the rule matches on, case-insensitively. It is\nalso the key an upsert writes by.","type":"string"},"priority":{"description":"Priority breaks ties: when several patterns match, the highest wins.","type":"integer"}},"type":"object"},"RunIn":{"properties":{"argv":{"description":"Argv is the program and its arguments, already split — the form no shell can\nmisread. Give this or Command, not both.","items":{"type":"string"},"type":"array"},"blind":{"description":"Blind is the set of secrets this command must never publish.\n\nIt exists because output is redacted where it is PRODUCED or not at all. A\ncaller that scrubbed the returned result would still have streamed the\nunredacted bytes into the session as they were written — to a durable event\nstore, an SSE feed and a chat thread — because the narration leaves the\nsandbox by a different door from the result. Nothing downstream can take a\nsecret back out of a message that has already been delivered.\n\nThe sandbox holds these only for the life of the one command, applies them\nto every stream leaving it, and never logs or stores them.","items":{"type":"string"},"type":"array"},"command":{"description":"Command is a shell line, run by `sh -c`. Use it when a pipeline or a\nredirection is the point, and Argv when it is not.","type":"string"},"dir":{"description":"Dir runs the command somewhere other than the sandbox's working directory,\nwhich Leased.Workdir names.","type":"string"},"id":{"description":"ID is the sandbox to run in, from an earlier lease.","type":"string"},"session":{"description":"Session is the live agent session this command narrates into: its output is\nappended there AS IT IS PRODUCED, so every surface watching that session\nwatches the command work instead of a blank pause. A long run is otherwise a\nsilence with a verdict at the end.\n\nIt names a SESSION and never a tenant. The org is the one the caller already\nproved, so a session belonging to somebody else is simply absent from the org\nthis call acts for and the append is refused there. Empty means nothing is\nwatching, and then nothing is sent.","type":"string"},"stdin":{"description":"Stdin is fed to the program on standard input. This is how bytes reach a file\nwithout being quoted into a shell line: `cat > path` with the contents here\nwrites them exactly.","type":"string"},"timeoutSec":{"description":"TimeoutSec bounds this ONE command, so a wedged program holds the caller for\nits own timeout rather than for the whole lease.","type":"integer"}},"type":"object"},"SbomIngest":{"properties":{"document":{"description":"Document is the raw CycloneDX bill of materials, any JSON. Its components[]\nare flattened and persisted; nothing else is read or stored."},"format":{"description":"Format names the document format; \"cyclonedx\" is the only one parsed.","type":"string"},"gitSha":{"description":"GitSha is the commit the image was built from.","type":"string"},"imageDigest":{"description":"ImageDigest is the content-addressed digest (sha256:…) the components are\nkeyed under. Required — it, not a tenant, is what an SBOM belongs to.","type":"string"},"imageRef":{"description":"ImageRef is the human-readable image reference the digest was published as.\nA resolve matches on either this or the digest.","type":"string"},"sourceRepo":{"description":"SourceRepo is the repository the image was built from.","type":"string"}},"type":"object"},"ScaleIn":{"properties":{"count":{"description":"Count is the node count to set.","type":"integer"},"id":{"description":"ID is the DOKS cluster id, from the path.","type":"string"},"pool":{"description":"Pool is the node pool, from the path. Its DO id or its name — both are unique\nwithin a cluster, and an operator reads the name off the board.","type":"string"}},"type":"object"},"ScheduleInput":{"properties":{"id":{"description":"ID is the campaign id from the path.","type":"string"},"scheduledAt":{"description":"ScheduledAt is the unix send time. 0 clears the schedule.","type":"integer"}},"type":"object"},"Sequence":{"properties":{"createdAt":{"description":"CreatedAt and UpdatedAt are unix seconds, both server-assigned.","type":"integer"},"id":{"description":"ID is the server-assigned sequence id (\"seq_\" + 128 random bits).","type":"string"},"name":{"description":"Name is the sequence's label. Required, trimmed, capped at 1024 bytes.","type":"string"},"status":{"description":"Status is the lifecycle: draft, active or archived. Empty means draft, and\nONLY an active sequence accepts enrollments.","type":"string"},"updatedAt":{"type":"integer"}},"type":"object"},"SequenceStatus":{"properties":{"id":{"description":"ID is the sequence id from the path.","type":"string"},"status":{"description":"Status is draft, active or archived. Required; there is no default here,\nunlike on create. Only an active sequence accepts enrollments.","type":"string"}},"type":"object"},"ServiceInput":{"properties":{"description":{"type":"string"},"displayName":{"type":"string"},"hosts":{"items":{"type":"string"},"type":"array"},"service":{"type":"string"},"waitlistMode":{"type":"boolean"}},"type":"object"},"SetReferenceIn":{"properties":{"entries":{"description":"Entries are the overrides to write, up to 1000 per call.","items":{"$ref":"#/components/schemas/ReferenceOverrideIn"},"type":"array"}},"type":"object"},"Signer":{"properties":{"email":{"description":"Email is the address the signature request is sent to.","type":"string"},"name":{"description":"Name is the recipient's name, as it appears on the signature request.","type":"string"}},"type":"object"},"SpanBody":{"properties":{"duration":{"type":"integer"},"id":{"type":"string"},"kind":{"type":"string"},"parent":{"type":"string"},"status":{"type":"string"},"trace":{"type":"string"}},"type":"object"},"Spec":{"properties":{"arch":{"description":"amd64 | arm64 | ...","type":"string"},"cpus":{"description":"logical cores","type":"integer"},"gpus":{"items":{"$ref":"#/components/schemas/GPU"},"type":"array"},"memory":{"description":"total RAM, bytes","type":"integer"},"os":{"description":"linux | darwin | windows","type":"string"}},"type":"object"},"StepInput":{"properties":{"body":{"description":"Body is the message text. Required.","type":"string"},"delaySeconds":{"description":"DelaySeconds is how long after the previous step this one sends (after\nenrollment, for the first step). Must be >= 0.","type":"integer"},"id":{"description":"SequenceID is the sequence id from the path (the route's :id).","type":"string"},"subject":{"description":"Subject is the email subject line, capped at 1024 bytes.","type":"string"}},"type":"object"},"StepSettings":{"properties":{"actionName":{"type":"string"},"input":{"additionalProperties":{"type":"object"},"type":"object"},"pieceName":{"type":"string"},"pieceVersion":{"type":"string"},"triggerName":{"type":"string"}},"type":"object"},"StopIn":{"properties":{"id":{"type":"string"}},"type":"object"},"Suppression":{"properties":{"address":{"description":"Address is the recipient, normalized (lower-cased, trimmed) so an opt-out\ncannot be slipped past on a case or whitespace difference. Required.","type":"string"},"channel":{"description":"Channel is the surface opted out of: email, sms, social, meta, google or\ntiktok. Empty means email. Opting out of one leaves the others reachable.","type":"string"},"createdAt":{"description":"CreatedAt is unix seconds, server-assigned.","type":"integer"},"reason":{"description":"Reason is a free-text note, capped at 1024 bytes. The public one-click\nendpoint records \"one-click unsubscribe\".","type":"string"}},"type":"object"},"TLSConfig":{"properties":{"acmeEmail":{"description":"ACMEEmail is the ACME account email. It binds an account for the lifetime\nof an edge process, so it applies only when the edge (re)starts.","type":"string"},"extraHosts":{"description":"ExtraHosts get certificates without owning a route — at most 256. They feed\nthe ACME HostPolicy and hot-apply on the next reload.","items":{"type":"string"},"type":"array"},"staging":{"description":"Staging issues from Let's Encrypt's staging directory (untrusted certs, high\nrate limits). Like ACMEEmail it applies only when the edge (re)starts.","type":"boolean"}},"type":"object"},"UTM":{"properties":{"campaign":{"type":"string"},"content":{"type":"string"},"medium":{"type":"string"},"source":{"type":"string"},"term":{"type":"string"}},"type":"object"},"Upstream":{"properties":{"backends":{"description":"Backends are the upstream servers to balance across: 1..32 of them.","items":{"$ref":"#/components/schemas/Backend"},"type":"array"},"id":{"description":"ID identifies the pool within the org: [A-Za-z0-9-_.], at most 128 chars.\nA create that omits it gets a generated one. Routes reference it by this id.","type":"string"},"passHostHeader":{"description":"PassHostHeader forwards the client's original Host header upstream instead\nof rewriting it to the backend's.","type":"boolean"}},"type":"object"},"Variant":{"properties":{"framework":{"description":"only when it differs from the template's","type":"string"},"id":{"description":"selector, unique within the template (\"react\", \"grid-3-fluid\")","type":"string"},"kind":{"description":"the axis it varies: format | page | theme","type":"string"},"label":{"description":"human label for the picker","type":"string"},"source":{"description":"the repository this shape is forked from; the synthesized default shape carries the template's own","type":"string"}},"type":"object"},"VendorRow":{"properties":{"aliases":{"description":"Aliases are the other spellings a receipt may print the vendor under; a scan\nmatching any of them resolves to this vendor.","items":{"type":"string"},"type":"array"},"canonical":{"description":"Canonical is the vendor's one true name, and the key an upsert writes by.","type":"string"},"defaultCategory":{"description":"DefaultCategory is the COA expense account new bills from this vendor book to.\nAn upsert normalizes a slug (\"software\") to its account number.","type":"string"}},"type":"object"},"VolumeIn":{"properties":{"id":{"description":"ID is the DO volume id, from the path.","type":"string"},"name":{"description":"Name is the snapshot name on the snapshot action. Blank gets a deterministic\n\"<volume>-predelete-<unix>\" so the undo is findable in the DO console.","type":"string"},"sizeGiB":{"description":"SizeGiB is the target size on the resize action. A volume only ever grows —\nExpandTo is the verdict that refuses a shrink, so this is not validated here.","type":"integer"},"snapshot":{"description":"Snapshot is the snapshot-first switch on DELETE. Anything other than the literal\n\"false\" snapshots before destroying — the snapshot IS the undo, so waiving it is\ndeliberate and explicit.","type":"string"}},"type":"object"},"Voucher":{"properties":{"description":{"description":"Description is the human line for the event, e.g. the vendor a bill came from.","type":"string"},"legs":{"description":"Legs are the sides of the posting. They must balance: Σdebit == Σcredit, give or\ntake the 2¢ round-off allowance.","items":{"$ref":"#/components/schemas/Leg"},"type":"array"},"postingAt":{"description":"PostingAt is the RFC3339 instant the event posts at — the time every statement\nwindow filters on.","type":"string"},"sourceId":{"description":"SourceID is the source event's own id within that namespace. Together with\nSourceKind it is the key that makes a repeat posting a no-op.","type":"string"},"sourceKind":{"description":"SourceKind is the idempotency namespace naming what booked this, e.g. \"scan\".","type":"string"}},"type":"object"},"WorkerScriptPut":{"properties":{"bindings":{},"compatibilityDate":{"type":"string"},"compatibilityFlags":{"items":{"type":"string"},"type":"array"},"mainModule":{"type":"string"},"script":{"type":"string"}},"type":"object"},"WriteIn":{"properties":{"data":{"contentEncoding":"base64","description":"Data is the file's bytes, and replaces whatever was there.","type":"string"},"id":{"description":"ID is the sandbox to write into, from an earlier lease.","type":"string"},"path":{"description":"Path is confined the same way PathIn.Path is. Missing parent directories are\ncreated.","type":"string"}},"type":"object"},"accreditationDecision":{"properties":{"id":{"description":"ID is the accreditation record to decide, from the path.","type":"string"},"status":{"description":"Status is the decision being recorded: reviewer_confirmed, provider_verified,\nrejected, or expired.","type":"string"}},"type":"object"},"accreditationReq":{"properties":{"basis":{"description":"Basis is the qualification category: income, net_worth, professional_license,\nor entity.","type":"string"},"evidenceDocId":{"description":"EvidenceDocID references an evidence document in the org's sealed data room.","type":"string"},"expiresAt":{"description":"ExpiresAt is the unix second a confirmation ages out; 0 means none.","type":"integer"},"method":{"description":"Method is how the state was established: self_attested, third_party_letter,\nor provider_verified.","type":"string"},"note":{"description":"Note is a non-PII operator note.","type":"string"},"status":{"description":"Status may only be \"asserted\" (empty reads as asserted); every confirmed,\nrejected or expired state is recorded via the decision endpoint.","type":"string"},"subjectId":{"description":"SubjectID names the subject this record is about; it must exist within the org.","type":"string"}},"type":"object"},"activationReq":{"properties":{"activate":{"description":"Activate switches these tool names on for the caller's org and project.","items":{"type":"string"},"type":"array"},"deactivate":{"description":"Deactivate switches these tool names off.","items":{"type":"string"},"type":"array"}},"type":"object"},"addDomainReq":{"properties":{"app":{"description":"App is the application's slug, from the path.","type":"string"},"host":{"description":"Host is the hostname to attach. Required, and must be a valid DNS hostname.","type":"string"},"project":{"description":"Project is the project the application lives under, from the path.","type":"string"}},"type":"object"},"advanceIn":{"properties":{"to":{"description":"To is the target stage: structure, founders, payment, documents, esign,\ngenesis, import or company.","type":"string"}},"type":"object"},"allowlistPutIn":{"properties":{"accessGroups":{"additionalProperties":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"},"description":"AccessGroups REPLACES the org's named access groups, as\ngroup name -> channel -> entries. Absent or null leaves them alone.","type":"object"},"channel":{"description":"Channel is the transport to edit: discord, slack, teams or telegram.\nRequired; an unknown value is a 404.","type":"string"},"dm":{"description":"DM REPLACES the config-managed DM allow entries. Absent or null leaves them\nalone; an empty list clears them. It never touches senders approved through\npairing — a policy edit cannot revoke an approved pairing.","items":{"type":"string"},"type":"array"},"dmPolicy":{"description":"DMPolicy sets how direct messages are admitted: \"pairing\" (a person must be\napproved first), \"allowlist\" (only listed senders) or \"open\". Empty leaves\nit unchanged.","type":"string"},"group":{"description":"Group REPLACES the config-managed group allow entries. Absent or null\nleaves them alone; an empty list clears them.","items":{"type":"string"},"type":"array"},"groupPolicy":{"description":"GroupPolicy sets how group and thread rooms are admitted: \"open\",\n\"allowlist\" or \"disabled\". Empty leaves it unchanged.","type":"string"}},"type":"object"},"analyzeQuery":{"properties":{"alpha":{"description":"Alpha overrides the 0.05 two-tailed significance threshold when it lies\nstrictly between 0 and 1; anything else leaves the default in place.","type":"number"},"days":{"description":"Days is how far back to read when no start is given: 1 to 365, 30 by\ndefault. A value outside that range leaves the default in place.","type":"integer"},"end":{"description":"End is the window's exclusive end in RFC3339, defaulting to now.","type":"string"},"id":{"description":"ID is the experiment the URL names.","type":"string"},"start":{"description":"Start is the window's inclusive start in RFC3339. Given, it wins over days.","type":"string"}},"type":"object"},"appearance":{"properties":{"accent":{"description":"Accent is the one hue — a CSS colour token (a hex, or a bounded functional\ncolour like rgb()/oklch()). Anything else is dropped rather than stored.","type":"string"},"density":{"description":"Density is the spacing step: \"compact\", \"default\" or \"comfortable\".","type":"string"},"type":{"description":"Type is the text-size multiplier, clamped to the ramp window [0.85, 1.4].\nAbsent (0) leaves the published default.","type":"number"}},"type":"object"},"applyRequest":{"properties":{"requestedCode":{"description":"RequestedCode is the vanity code the applicant asks for; approval may mint\na different one if it is taken. Body-only: the URL cannot supply it.","type":"string"}},"type":"object"},"approval":{"properties":{"code":{"description":"Code overrides the minted code; else the requested vanity code, else a\nderived slug.","type":"string"},"id":{"description":"ID is the affiliate to approve, from the path.","type":"string"}},"type":"object"},"approvePairingIn":{"properties":{"channel":{"description":"Channel is the transport the request came in on: discord, slack, teams or telegram.","type":"string"},"code":{"description":"Code is the pairing code from GET /v1/channels/pairing. It is a capability:\nholding it is what authorises the approval, alongside org admin.","type":"string"}},"type":"object"},"approveRequest":{"properties":{"id":{"description":"ID is the author to approve, from the path.","type":"string"},"shareBps":{"description":"ShareBps overrides this author's royalty share, in basis points (0–10000).\n0 keeps the platform default. A share change never rewrites history: existing\nledger rows keep the share that was applied when they were written.","type":"integer"}},"type":"object"},"askPostIn":{"properties":{"query":{"description":"Query is the question, from the BODY. Takes precedence over `?q=`.","type":"string"},"repo":{"description":"Repo is the repository narrowing, from the BODY. Takes precedence over `?repo=`.","type":"string"}},"type":"object"},"askRequest":{"properties":{"followUps":{"type":"boolean"},"language":{"type":"string"},"maxQueries":{"type":"integer"},"maxSources":{"type":"integer"},"mode":{"type":"string"},"model":{"type":"string"},"q":{"type":"string"},"question":{"type":"string"},"sources":{"items":{"type":"string"},"type":"array"},"stream":{"type":"boolean"},"system":{"type":"string"}},"type":"object"},"attributeRequest":{"properties":{"code":{"description":"Code is the affiliate code the referred org arrived with. Body-only: the\nURL cannot supply it.","type":"string"}},"type":"object"},"autoCreate":{"properties":{"data":{"description":"Data is the flow graph — the product's nodes/edges document, verbatim:\nnodes carry a piece type (webhook, schedule, http, set, branch) and its\nconfig; edges wire them. Omit it to create an empty flow."},"name":{"description":"Name is the flow's display name.","type":"string"}},"type":"object"},"autoStart":{"properties":{"flow":{"description":"Flow is the id of the flow to run.","type":"string"},"input":{"description":"Input is the trigger payload handed to the run, verbatim JSON object.\nThe run's state starts as {\"trigger\": input}."}},"type":"object"},"autoUpdate":{"properties":{"data":{"description":"Data replaces the flow graph when present, verbatim."},"flow":{"description":"Flow is the flow's id, taken from the path.","type":"string"},"name":{"description":"Name renames the flow when present.","type":"string"}},"type":"object"},"backfillQuery":{"properties":{"before":{"description":"Before bounds the seed to ledger rows written before this RFC3339 instant.\nDefaults to now, and is snapped down to UTC midnight — the rollup's grain, so\nthe seeded days and the guarded days are the same set. Pass the day the\nincremental view started capturing, so seed and view never share a day.","type":"string"},"force":{"description":"Force must be exactly \"true\" to seed a rollup that already holds rows. It is\nspelled as a string, not a flag, because the guard has always compared this\nvalue literally — \"1\" and \"yes\" do NOT force.","type":"string"}},"type":"object"},"beginIn":{"properties":{"alreadyIncorporated":{"description":"AlreadyIncorporated declares an org that already has an entity, which takes\nthe import path (POST /v1/company/skip) instead of the formation path.","type":"boolean"},"jurisdiction":{"description":"Jurisdiction is the state of formation: DE or WY.","type":"string"},"name":{"description":"Name is the proposed company name.","type":"string"},"structure":{"description":"Structure is the legal entity to form: c-corp, llc or dao-llc.","type":"string"}},"type":"object"},"binarySpec":{"properties":{"image":{"type":"string"},"ldflags":{"type":"string"},"main":{"type":"string"},"name":{"type":"string"},"out":{"type":"string"},"platforms":{"items":{"type":"string"},"type":"array"},"run":{"type":"string"}},"type":"object"},"bindAgentReq":{"properties":{"agentName":{"description":"AgentName is the cloud Agent (/v1/agents) the machine will run. Required.","type":"string"},"botVersion":{"description":"BotVersion pins the @hanzo/bot runtime version; empty takes the default.","type":"string"},"id":{"description":"ID is the machine to bind, from the URL path.","type":"string"}},"type":"object"},"bucketCreateIn":{"properties":{"name":{"description":"Name is the bucket name to create.","type":"string"}},"type":"object"},"bucketWrite":{"properties":{"bucket":{"description":"Bucket is the bucket's name within the org, from the path: 1–64 of\n[A-Za-z0-9_], no dash.","type":"string"},"history":{"description":"History is how many revisions each key keeps, 1–64. 0 means 1.","type":"integer"},"maxValue":{"description":"MaxValue caps one value's size in bytes. 0 or less means the server's\nceiling.","type":"integer"},"ttl":{"description":"TTL expires entries after this many SECONDS. 0 means no expiry.","type":"integer"}},"type":"object"},"buildRequest":{"properties":{"name":{"type":"string"},"provider":{"type":"string"},"source":{"type":"string"},"spec":{"type":"string"}},"type":"object"},"busPublish":{"properties":{"data":{"description":"Data is the payload, carried verbatim as UTF-8 text (typically JSON).\nBinary payloads belong on the NATS port.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"Headers are optional message headers, one value per name. A Nats-Msg-Id\nheader is JetStream's deduplication key: a repeat within the stream's\ndedup window is acknowledged as duplicate rather than stored twice.","type":"object"},"subject":{"description":"Subject is the subject to publish to, in the org's own namespace — e.g.\norders.created. No wildcards.","type":"string"}},"type":"object"},"busRequest":{"properties":{"data":{"description":"Data is the request payload, carried verbatim as UTF-8 text.","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"Headers are optional request headers, one value per name.","type":"object"},"subject":{"description":"Subject is the subject a responder listens on, in the org's namespace.","type":"string"},"timeoutMs":{"description":"TimeoutMs bounds the wait for a reply. 0 or less means the default of\n5000; anything above 30000 is clamped to 30000.","type":"integer"}},"type":"object"},"buyInput":{"properties":{"e164":{"type":"string"}},"type":"object"},"callInput":{"properties":{"agent":{"type":"string"},"from":{"type":"string"},"record":{"description":"Record is a per-call flag rather than a product. Where a recording lands and\nhow long it is kept is the org's retention policy, not this call's.","type":"boolean"},"to":{"type":"string"},"webhook":{"type":"string"}},"type":"object"},"campaignInput":{"properties":{"account":{"description":"Account is the provider ad-account this campaign runs on (Meta act_<id>). Optional.","type":"string"},"budget":{"description":"Budget is the campaign budget in MINOR units (cents). Negative values clamp to 0.","type":"integer"},"name":{"description":"Name is the campaign's display label. Required; trimmed and bounded to 1024 bytes.","type":"string"},"objective":{"description":"Objective is the campaign goal as the provider names it. Optional, bounded to 1024 bytes.","type":"string"},"platform":{"description":"Platform is the ad network: meta, google, tiktok or x. Empty defaults to meta.","type":"string"},"spend":{"description":"Spend is the amount spent so far in MINOR units (cents). Negative values clamp to 0.","type":"integer"},"status":{"description":"Status is the lifecycle state: draft, active, paused or completed. Empty defaults to draft.","type":"string"}},"type":"object"},"campaignUpdate":{"properties":{"audience":{"type":"string"},"budget":{"type":"integer"},"channels":{"items":{"$ref":"#/components/schemas/ChannelSpec"},"type":"array"},"content":{"items":{"type":"string"},"type":"array"},"id":{"description":"ID is the campaign to update, from the path.","type":"string"},"name":{"type":"string"},"scheduleAt":{"type":"integer"}},"type":"object"},"campaignWrite":{"properties":{"audience":{"description":"Audience is the segment or audience selector this campaign targets.","type":"string"},"budget":{"description":"Budget is the campaign's total budget in CENTS. Negative reads as 0.","type":"integer"},"channels":{"description":"Channels are the fan-out targets, at most one per kind (paid, organic,\nemail) and at most 12. A channel's status and provider id are server-owned:\nwhatever the caller sends for them is replaced with \"pending\".","items":{"$ref":"#/components/schemas/ChannelSpec"},"type":"array"},"content":{"description":"Content is the ordered creative set. Content[0] is the active creative and\nthe rest are A/B variants; at most 32, empty entries dropped.","items":{"type":"string"},"type":"array"},"name":{"description":"Name is the campaign's display name. Required; trimmed and capped at 2048\ncharacters.","type":"string"},"scheduleAt":{"description":"ScheduleAt is when the campaign should run, in unix seconds. Negative reads\nas 0 (immediately).","type":"integer"}},"type":"object"},"capIn":{"properties":{"id":{"description":"ID is the cap to edit or remove, from the path. Unused by the list and create ops.","type":"string"},"org":{"description":"Org is the tenant to act on. Required for a SuperAdmin — they must name their\ntarget; ignored for a white-label admin, who always acts on their own org.","type":"string"}},"type":"object"},"captableCompanyUpdate":{"properties":{"incorporationCountry":{"description":"IncorporationCountry is the ISO country the entity is incorporated in.\nOptional; omitted, null or empty clears it. Any JSON scalar is accepted\nand stored as its text."},"incorporationState":{"description":"IncorporationState is the state or province of incorporation. Optional;\nomitted, null or empty clears it. Any JSON scalar is accepted and stored\nas its text."},"incorporationType":{"description":"IncorporationType is the entity kind, e.g. LLC or C_CORP. Optional;\nomitted, null or empty clears it. Any JSON scalar is accepted and stored\nas its text."},"name":{"description":"Name is the company's legal name. Required, and it must be a non-empty\nstring — anything else is refused with the cap table's own validation\nerror."}},"type":"object"},"captableRoundCloseRequest":{"properties":{"closeDate":{"description":"CloseDate is the date to record the round as closed on. Optional: omitted,\nnull or empty records TODAY. Any JSON scalar is accepted and stored as its\ntext, and the text is stored unparsed, so a caller that wants an ISO date\nsends one."},"id":{"description":"ID is the round to close. It is the path segment: the URL is the\naddressing authority, and the org it is resolved in comes from the\ncaller's principal, so an id from another tenant is simply not found.","type":"string"}},"type":"object"},"captableStakeholderPatch":{"properties":{"city":{"description":"City is the stakeholder's city."},"currentRelationship":{"description":"CurrentRelationship is how the stakeholder relates to the company, e.g.\nFOUNDER, INVESTOR or EMPLOYEE. This route stores it as sent — unlike\nadding a stakeholder, it is not checked against the vocabulary."},"email":{"description":"Email is the stakeholder's email. This route stores it as sent — unlike\nadding a stakeholder, it is not checked for shape or uniqueness."},"id":{"description":"ID is the stakeholder to update. It is the path segment: the URL is the\naddressing authority, and the org it is resolved in comes from the\ncaller's principal, so an id from another tenant is simply not found.","type":"string"},"institutionName":{"description":"InstitutionName names the institution, when the stakeholder is one."},"name":{"description":"Name is the stakeholder's full name."},"stakeholderType":{"description":"StakeholderType is INDIVIDUAL or INSTITUTION. This route stores it as\nsent — unlike adding a stakeholder, it is not checked against the\nvocabulary."},"state":{"description":"State is the stakeholder's state or province."},"streetAddress":{"description":"StreetAddress is the stakeholder's street address."},"taxId":{"description":"TaxID is the stakeholder's tax identifier."},"zipcode":{"description":"Zipcode is the stakeholder's postal code."}},"type":"object"},"categoryIn":{"properties":{"brands":{"description":"Brands are the brands whose console shows it. Omit for every brand.","items":{"type":"string"},"type":"array"},"id":{"description":"ID is the category slug to write, from the path.","type":"string"},"label":{"description":"Label is the display name. Required.","type":"string"},"order":{"description":"Order is where the category sits among its siblings, ascending.","type":"integer"},"summary":{"description":"Summary is the one line describing what the category groups.","type":"string"}},"type":"object"},"channelAdd":{"properties":{"account":{"description":"Account is the provider account this channel runs under: an ad-account, a\npage, or a mailing-list id.","type":"string"},"id":{"description":"ID is the campaign to add the channel to, from the path.","type":"string"},"kind":{"description":"Kind is the channel kind and the identity a campaign holds at most one of:\npaid, organic or email.","type":"string"},"platform":{"description":"Platform is the provider within the kind — meta, google, x, instagram, or\nthe email provider.","type":"string"}},"type":"object"},"chatRequest":{"properties":{"message":{"description":"Message is the founder's question for the Business AI. Required; trimmed,\nand clipped to 4 KiB so a caller cannot amplify the AI prompt.","type":"string"}},"type":"object"},"claimRequest":{"properties":{"code":{"description":"Code is the referrer's referral code, as it appeared in their ?ref= link.\nCase and surrounding whitespace do not matter.","type":"string"}},"type":"object"},"clickRequest":{"properties":{"code":{"description":"Code is the share-link code that was clicked. Body-only: the URL cannot\nsupply it.","type":"string"}},"type":"object"},"clusterAttach":{"properties":{"default":{"description":"Default marks this the org's default cluster for scheduling.","type":"boolean"},"kubeconfig":{"description":"Kubeconfig is the cluster's kubeconfig, verbatim. Required — a body without\none is not an attach.","type":"string"},"name":{"description":"Name is the fleet-local name for the cluster; lower-cased, and the key the\ndetach route addresses it by. Required.","type":"string"},"provider":{"description":"Provider is a free-form label for where the cluster runs (\"gke\", \"on-prem\");\nit is display only, not a routing key.","type":"string"}},"type":"object"},"companyReq":{"properties":{"arr":{"description":"ARR is annual recurring revenue in minor units (cents) of Currency.","type":"integer"},"city":{"description":"City is the head-office city.","type":"string"},"country":{"description":"Country is the head-office country.","type":"string"},"currency":{"description":"Currency is the ISO code ARR is denominated in; empty defaults to USD.","type":"string"},"domainName":{"description":"DomainName is the company's primary domain, e.g. \"acme.com\".","type":"string"},"employees":{"description":"Employees is the headcount.","type":"integer"},"id":{"description":"ID names the company to update and comes from the path. A create ignores\nit: the server mints the id.","type":"string"},"idealCustomerProfile":{"description":"ICP marks the company as an ideal-customer-profile fit.","type":"boolean"},"linkedinLink":{"description":"Linkedin is the company's LinkedIn URL.","type":"string"},"name":{"description":"Name is the company name. Required.","type":"string"},"xLink":{"description":"XLink is the company's X (Twitter) URL.","type":"string"}},"type":"object"},"connectIn":{"properties":{"accountId":{"description":"AccountID is the provider account the credential should be scoped to, for the\nproviders whose Verify needs one (Cloudflare). Ignored by the OAuth path.","type":"string"},"provider":{"description":"Provider is the connector's registry id, from the :provider path segment.","type":"string"},"token":{"description":"Token is the customer's provider credential. Its PRESENCE — not its value —\nis what selects the apikey seal over the OAuth flow for a provider that\noffers both: {\"token\":\"…\"}, even empty, is an apikey attempt (→ verify, which\nanswers the \"token required\" 400 on an empty value), while a body with no\ntoken key (the console Connect button, `hanzo connector add` with no --token)\nstarts OAuth. Read on STDIN by the CLI, never argv; never logged or echoed.","type":"string"}},"type":"object"},"connectRequest":{"properties":{"githubLogin":{"description":"GithubLogin is the account to link. Used only when IAM holds no linked\naccount for the provider — a linked account is stronger proof and always wins.","type":"string"},"login":{"description":"Login is the provider-neutral alias for GithubLogin, preferred when both are\nsent.","type":"string"},"provider":{"description":"Provider is the forge to enrol with: github (the default) or gitlab.","type":"string"}},"type":"object"},"consumerWrite":{"properties":{"ack":{"type":"string"},"ackWait":{"type":"integer"},"deliver":{"type":"string"},"filter":{"type":"string"},"maxDeliver":{"type":"integer"},"name":{"description":"Name is the durable consumer name: 1–64 of [A-Za-z0-9_-].","type":"string"},"stream":{"description":"Stream is the stream to consume, from the path.","type":"string"}},"type":"object"},"contactReq":{"properties":{"city":{"description":"City is where the person is based.","type":"string"},"companyId":{"description":"CompanyID links the contact to one of the org's companies.","type":"string"},"email":{"description":"Email is the person's email address.","type":"string"},"firstName":{"description":"FirstName is the person's given name.","type":"string"},"id":{"description":"ID names the contact to update and comes from the path. A create ignores\nit: the server mints the id.","type":"string"},"jobTitle":{"description":"JobTitle is the person's role at their company.","type":"string"},"lastName":{"description":"LastName is the person's family name.","type":"string"},"linkedinLink":{"description":"Linkedin is the person's LinkedIn URL.","type":"string"},"phone":{"description":"Phone is the person's phone number.","type":"string"},"xLink":{"description":"XLink is the person's X (Twitter) URL.","type":"string"}},"type":"object"},"contextIn":{"properties":{"budgetTokens":{"description":"BudgetTokens caps the bundle's size. Clamped to [256, 32000]; 0 or absent\nuses 4000.","type":"integer"},"query":{"description":"Query is what to retrieve context for. Required, max 4000 bytes.","type":"string"},"repo":{"description":"Repo narrows retrieval to one repository. Empty searches every repo the org\nhas indexed.","type":"string"}},"type":"object"},"crawlRequest":{"properties":{"url":{"type":"string"}},"type":"object"},"createAccountIn":{"properties":{"name":{"description":"Name is the account's label. Required, trimmed; it groups wallets and is\nnot itself a key.","type":"string"}},"type":"object"},"createAgentIn":{"properties":{"computeRef":{"type":"string"},"description":{"type":"string"},"executionMode":{"type":"string"},"instructions":{"type":"string"},"model":{"type":"string"},"name":{"type":"string"},"schedule":{"type":"string"},"serviceAccountId":{"type":"string"},"tools":{"items":{"type":"string"},"type":"array"}},"type":"object"},"createAppReq":{"properties":{"buildType":{"description":"BuildType is `pack` — the zero-config default that detects any project —\nor `dockerfile`, the explicit escape hatch. An image app never builds.","type":"string"},"description":{"description":"Description is free text about what the application is.","type":"string"},"dockerfile":{"description":"Dockerfile is the path to build from, for buildType `dockerfile`.","type":"string"},"domains":{"description":"Domains are extra ingress hosts. The canonical default host is always\nattached; a bare custom host is refused here and must go through\nadd-domain → verify first.","items":{"type":"string"},"type":"array"},"env":{"description":"Env is the application's environment. Keys must match\n`^[A-Za-z_][A-Za-z0-9_]*$`; a variable marked `secret: true` is sealed into\nKMS and its plaintext is never written to the database.","items":{"$ref":"#/components/schemas/EnvVarJSON"},"type":"array"},"environment":{"description":"Environment is the deploy target this app names (\"production\" by default).","type":"string"},"image":{"$ref":"#/components/schemas/imageOrigin","description":"Image is the container image to run, for source `image`."},"name":{"description":"Name is the application's display name. Required; the slug is derived from\nit when none is given.","type":"string"},"port":{"description":"Port is the container port the app listens on.","type":"integer"},"project":{"description":"Project is the project to create the application under, from the path.","type":"string"},"replicas":{"description":"Replicas is how many copies to run; clamped to the deployment's limit\nrather than refused.","type":"integer"},"repo":{"$ref":"#/components/schemas/gitOrigin","description":"Repo is the git source to build from, for source `git`."},"slug":{"description":"Slug is the app's identity in the cluster — its CR name and part of its\nhost. Given or derived from Name, it must match\n`^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$`, and one already used in this\nproject is 409.","type":"string"},"source":{"description":"Source is `git`, which requires repo.url, or `image`, which requires\nimage.repository. Anything else is 400.","type":"string"},"storageGb":{"description":"StorageGB is the persistent volume size in GiB; absent means stateless.\nClamped to the deployment's limit rather than refused.","type":"integer"}},"type":"object"},"createBody":{"properties":{"exposureEvent":{"description":"ExposureEvent is the event that marks a subject as enrolled — the analysis\ndenominator — defaulting to the SDK's $feature_flag_called marker.","type":"string"},"flagKey":{"description":"FlagKey names the assignment flag this experiment writes, defaulting to\nexp_<id>. It must be a slug.","type":"string"},"id":{"description":"ID is the experiment's slug, claimed once per project. It must match\n[A-Za-z0-9][A-Za-z0-9._-]{0,127}.","type":"string"},"metricEvent":{"description":"MetricEvent is the event that counts as a conversion — the analysis\nnumerator.","type":"string"},"name":{"description":"Name is free text for a reader; the id is what addresses the experiment.","type":"string"},"subjectKind":{"description":"SubjectKind is the unit assigned and measured: user (the default), org,\nsession or audience.","type":"string"},"variants":{"description":"Arms are the arms, at least two. Weights that are all zero become an\neven split; otherwise they must sum to 100, and at most one arm may be\nflagged control.","items":{"$ref":"#/components/schemas/Arm"},"type":"array"}},"required":["id","metricEvent","variants"],"type":"object"},"createClusterReq":{"properties":{"name":{"description":"Name is the cluster's name. Required.","type":"string"},"nodePool":{"properties":{"count":{"type":"integer"},"name":{"type":"string"},"size":{"type":"string"}},"type":"object"},"region":{"description":"Region is the provider region slug (e.g. \"nyc3\"). Required.","type":"string"},"version":{"description":"Version is the Kubernetes version slug; empty takes the provider default.","type":"string"}},"type":"object"},"createEndpointIn":{"properties":{"description":{"description":"Description is a free-text label for the console. Optional, clipped to 1024 bytes.","type":"string"},"events":{"description":"Events are NATS subject patterns to subscribe to (e.g. \"commerce.order.>\").\nAn empty or omitted list means EVERY event on the platform bus. Max 64\npatterns, each max 256 bytes.","items":{"type":"string"},"type":"array"},"status":{"description":"Status is \"active\" or \"disabled\". Empty defaults to active. A disabled\nendpoint receives no bus deliveries, but can still be exercised with\nPOST /v1/webhooks/{id}/test.","type":"string"},"url":{"description":"URL is the https:// address each matching event is POSTed to. Required,\nmax 2048 bytes; http:// and every other scheme is refused, because a\nwebhook carries signed event data and must not travel in the clear.","type":"string"}},"type":"object"},"createFlowReq":{"properties":{"displayName":{"description":"DisplayName names the flow's initial draft version.","type":"string"},"externalId":{"description":"ExternalID is the caller's own id for this flow. Optional.","type":"string"},"folderId":{"description":"FolderID groups the flow in the builder's tree. Optional.","type":"string"},"trigger":{"$ref":"#/components/schemas/FlowTrigger","description":"Trigger is the root of the step tree — how the flow starts, and the action\nchain that follows. Optional: a flow may be created empty and edited later."}},"type":"object"},"createLBReq":{"properties":{"forwarding_rules":{"description":"ForwardingRules are the listen→backend port mappings. Empty defaults to\nplain HTTP 80→80, the same default DigitalOcean's own console applies.","items":{"$ref":"#/components/schemas/fwdRule"},"type":"array"},"name":{"description":"Name is the FRIENDLY name, a DNS-safe slug of at most 40 characters. The\nphysical DigitalOcean name is derived from it and the caller's org.","type":"string"},"region":{"description":"Region is the DigitalOcean region slug (nyc3, sfo3, …). Required.","type":"string"},"size":{"description":"Size is the DigitalOcean size slug. Empty takes DO's default.","type":"string"},"type":{"description":"Type is the DigitalOcean load-balancer type. Empty takes DO's default (REGIONAL).","type":"string"}},"type":"object"},"createLinkRequest":{"properties":{"code":{"description":"Code is an optional vanity code; it must be free across the whole\ndirectory, and omitting it mints a random one. Body-only.","type":"string"},"label":{"description":"Label is cosmetic — trimmed, stripped of control characters, capped — and\nnever part of a code. Body-only: the URL cannot supply it.","type":"string"}},"type":"object"},"createReq":{"properties":{"description":{"description":"Description is a free-form blurb, max 4KiB.","type":"string"},"name":{"description":"Name is the repo's handle, unique within the scope, and the last segment of\nboth clone URLs. Must match ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$; a trailing\n\".git\" is stripped first. Required.","type":"string"},"project":{"description":"Project narrows the repo to a sub-scope of the org. Omit it to use the\ncaller's own X-Project-Id scope; it can never widen past the caller's org.","type":"string"},"public":{"description":"Public grants ANONYMOUS read (fetch) only; push and the whole control plane\nstay org-authed. Defaults to false.","type":"boolean"}},"type":"object"},"createServerReq":{"properties":{"authHeader":{"description":"AuthHeader is the request header the credential is injected into, e.g.\n\"Authorization\". Empty means the server needs no credential.","type":"string"},"listing":{"description":"Listing enables a CATALOG entry instead — the id from GET /v1/tools/catalog.\nThe endpoint is the listing's own streamable-http remote, so a listing that\nonly ships a stdio package is refused: there is nothing to reach yet.","type":"string"},"name":{"description":"Name labels the server for the org. Required with URL; with Listing it\ndefaults to the listing's own title.","type":"string"},"secret":{"description":"Secret is the credential VALUE. It is sealed into KMS under a per-org ref\nand never stored in SQLite, never listed, and never returned.","type":"string"},"url":{"description":"URL is the server's JSON-RPC endpoint. It must be an http(s) URL naming a\nPUBLIC host: loopback, link-local, private and cloud-metadata addresses are\nrefused here and again when the dialer connects.","type":"string"}},"type":"object"},"createVPCReq":{"properties":{"ip_range":{"description":"IPRange is the VPC's private CIDR. Empty lets DigitalOcean assign one.","type":"string"},"name":{"description":"Name is the FRIENDLY name, a DNS-safe slug of at most 40 characters. The\nphysical DigitalOcean name is derived from it and the caller's org.","type":"string"},"region":{"description":"Region is the DigitalOcean region slug (nyc3, sfo3, …). Required.","type":"string"}},"type":"object"},"createVersionIn":{"properties":{"displayName":{"description":"DisplayName names the new version.","type":"string"},"id":{"description":"ID is the flow to add a version to, from the path.","type":"string"},"trigger":{"$ref":"#/components/schemas/FlowTrigger","description":"Trigger is the root of the version's step tree. Optional: a version with no\ntrigger is created invalid, and cannot run until one is set."}},"type":"object"},"createWalletIn":{"properties":{"accountId":{"description":"AccountID is the account this wallet belongs to. Required, and it must be\nan account of the caller's own org — an unknown one is a 404.","type":"string"},"agent":{"description":"Agent optionally narrows the wallet to one agent within the org. It becomes\na segment of the key ref, so it must be a url-safe segment with no slash.","type":"string"},"chain":{"description":"Chain is the EVM chain this wallet is for, as \"eip155:<n>\" or a bare\ndecimal chain id. Optional; a Safe defaults to the Hanzo L1 (36963).","type":"string"},"custody":{"description":"Custody selects the signing backend: \"kms\" (in-process, always available),\n\"mpc\" or \"treasury\" (the deployed MPC ring), or \"safe\" (a Safe smart wallet\nowned by an MPC key). Empty uses the deployment's default. A backend that is\nnot configured fails CLOSED with 503 rather than fabricating a signature.","type":"string"},"name":{"description":"Name is the wallet's display label. Optional.","type":"string"},"tier":{"description":"Tier is the MPC wallet tier: hot, warm, cold, gas, bridge, contract_admin,\nvalidator, quarantine or disaster_recovery. Empty defaults to hot.","type":"string"}},"type":"object"},"credentialIn":{"properties":{"accountId":{"description":"AccountID scopes the credential where the provider's Verify needs one.","type":"string"},"label":{"description":"Label names this connection; empty means \"default\".","type":"string"},"oauth":{"$ref":"#/components/schemas/oauthBundleIn","description":"OAuth is a bundle the CLI already obtained through its own local PKCE flow.\nPresent ⇒ the Adopt path; absent ⇒ the Token path."},"provider":{"description":"Provider is the user-scoped provider's registry id, from the path.","type":"string"},"token":{"description":"Token is the customer-held credential for the Verify path. Read on STDIN by\nthe CLI, never argv; never logged, echoed, or stored outside KMS.","type":"string"}},"type":"object"},"curateReq":{"properties":{"featured":{"description":"Featured puts the listing on the front of the shelf, or takes it off.","type":"boolean"},"hidden":{"description":"Hidden takes the listing off the org-visible shelf, or puts it back.","type":"boolean"},"id":{"description":"ID is the listing to curate, from the path.","type":"string"},"logo":{"description":"Logo is the brand mark to render, an https URL. Empty clears ours and lets\nthe next sync adopt the publisher's own icon again.","type":"string"},"official":{"description":"Official overrides the derivation: setting it makes this answer FINAL, so\nno later sync re-derives over it. That is the difference between a default\nand a decision — the derivation can only tell that a domain-verified\npublisher serves the endpoint, not that the product is theirs.","type":"boolean"}},"type":"object"},"databaseCreateIn":{"properties":{"name":{"description":"Name is the database name to create.","type":"string"}},"type":"object"},"dataroomAddDocument":{"properties":{"documentId":{"description":"DocumentId is the document to attach. Required, and it must already exist\nin the caller's own store — this route attaches, it never uploads."},"id":{"description":"ID is the room to add to. It is the path segment: the URL is the addressing\nauthority, and the org it is resolved in comes from the caller's principal,\nso an id from another tenant is simply not found.","type":"string"},"orderIndex":{"description":"OrderIndex fixes the document's place in the viewer's list. Optional; a\nnumber or a numeric string is accepted, and anything that is not a number\nleaves the document unordered, which sorts it last."}},"type":"object"},"dataroomCreate":{"properties":{"description":{"description":"Description is the room's description. Optional; any JSON scalar is\naccepted and stored as its text, and omitting it leaves the room with none."},"name":{"description":"Name is the room's display name. Required, and a room without one is\nrefused with the data room's own validation error."}},"type":"object"},"dataroomLinkCreate":{"properties":{"allowDownload":{"description":"AllowDownload permits downloading rather than viewing only. Optional and\nOFF by default; any truthy JSON value turns it on."},"allowList":{"description":"AllowList narrows which addresses pass the email gate. Optional; an entry\nmay be a full address (\"[email protected]\"), an \"@domain.com\" suffix, or a\nbare \"domain.com\". An omitted or EMPTY list admits everyone, so a link with\nno list enforces the email gate alone.","items":{},"type":"array"},"dataroomId":{"description":"DataroomId is the room to share. One of dataroomId or documentId is\nrequired, and the target must exist in the caller's own store."},"denyList":{"description":"DenyList rejects addresses, in the same three forms as the allow list.\nOptional. It is checked BEFORE the allow list, so deny always wins.","items":{},"type":"array"},"documentId":{"description":"DocumentId shares a SINGLE document instead of a room. One of dataroomId or\ndocumentId is required."},"emailProtected":{"description":"EmailProtected makes a visitor state an address before entering. Optional\nand ON by default: it is disabled only by the JSON literal false, so any\nother value — including the string \"false\" — leaves the gate on."},"expiresAt":{"description":"ExpiresAt closes the link, in unix milliseconds. Optional; a number or a\nnumeric string is accepted, and omitting it means the link never expires."},"name":{"description":"Name labels the link. Optional; any JSON scalar is stored as its text."},"password":{"description":"Password gates the link. Optional; it is hashed with bcrypt before storage\nand is never readable back through any route."}},"type":"object"},"datasetReq":{"properties":{"description":{"description":"Description is free text about what this set measures; over 64 KiB is refused.","type":"string"},"metadata":{"additionalProperties":{"type":"object"},"description":"Metadata is a free-form object stored with the set and echoed back verbatim.","type":"object"},"name":{"description":"Name is the dataset's org-unique handle and the segment that will address\nit, so it must match ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$.","type":"string"}},"required":["name"],"type":"object"},"decideBody":{"properties":{"winner":{"description":"Winner is the variant to promote. It must name one of this experiment's own\narms.","type":"string"}},"required":["winner"],"type":"object"},"decisionIn":{"properties":{"email":{"description":"Email identifies the founder on the formation.","type":"string"},"status":{"description":"Status is the decision: reviewer_confirmed or failed. Nothing else is accepted.","type":"string"}},"type":"object"},"definition":{"properties":{"code":{"description":"Code is the source to run, capped so one function cannot amplify the store.","type":"string"},"envNames":{"description":"EnvNames are the secret NAMES to mount. Values live in the secret store and\nare never carried here.","items":{"type":"string"},"type":"array"},"environment":{"description":"Environment is a second spelling of runtime, accepted so a console that says\n\"environment\" needs no translation.","type":"string"},"handler":{"description":"Handler is the entry point within the code.","type":"string"},"image":{"description":"Image names a prebuilt image to run instead of source.","type":"string"},"memoryLimit":{"description":"MemoryLimit is the memory the function runs with, defaulting to 256Mi. It is\nalso the multiplier on the GB-seconds compute charge.","type":"string"},"name":{"description":"Name is the function's org-unique handle and the segment that addresses it,\nmatching ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. The names that would shadow a\ncollection route are reserved.","type":"string"},"namespace":{"description":"Namespace groups functions for display. It is cosmetic — the org is the\nisolation key — and is normalised to a DNS-safe label.","type":"string"},"runtime":{"description":"Runtime is the language the code runs under: node, python or deno.","type":"string"},"target":{"description":"Target is where the function runs: sandbox (the default) or fleet, the org's\nown GPU fleet. fleet supports runtime=python only.","type":"string"},"timeoutSec":{"description":"TimeoutSec is the per-invocation deadline, defaulting to 30 and clamped at\n900 — a larger value is capped rather than reset to the default.","type":"integer"}},"required":["name"],"type":"object"},"deployReq":{"properties":{"app":{"description":"App is the application's slug, from the path.","type":"string"},"commit":{"description":"Commit is the git commit or ref to build, for a git-source app. Defaults to\nthe app's branch.","type":"string"},"project":{"description":"Project is the project the application lives under, from the path.","type":"string"},"tag":{"description":"Tag is the image tag to deploy, for an image-source app. Defaults to the\napp's tag, then `latest`.","type":"string"}},"type":"object"},"deployRequest":{"properties":{"project":{"description":"Project is the deployed project's id. Required.","type":"string"},"repoUrl":{"description":"RepoURL is the source repository the project was built from. Empty means a\nhand-built project with nothing to attribute — an honest no-op, not an error.","type":"string"}},"type":"object"},"deviceStartIn":{"properties":{"label":{"description":"Label names this connection so one user can hold several per provider\n(\"work\", \"personal\"). Empty means \"default\". 1-64 of [A-Za-z0-9._-].","type":"string"},"provider":{"description":"Provider is the user-scoped provider's registry id, from the path.","type":"string"}},"type":"object"},"disbursal":{"properties":{"amountCents":{"description":"AmountCents is the payout, integer cents; it must be positive and can\nnever exceed the affiliate's pending commission. Body-only (`url:\"-\"`,\nlike every money field here): a payout must never ride the URL into\naccess logs, and the raw handler read only the body.","type":"integer"},"id":{"description":"ID is the affiliate to pay, from the path.","type":"string"},"method":{"description":"Method decides whether money moves: `credits` issues a commerce grant,\nevery other method (wire, paypal, …) is record-only.","type":"string"},"reference":{"description":"Reference is the operator's settlement note (a bank id, a ledger ref).","type":"string"}},"type":"object"},"domainAddIn":{"properties":{"name":{"description":"Name is the custom domain to attach, e.g. \"www.acme.com\".","type":"string"},"project":{"description":"Project is the Pages project name, from the path.","type":"string"}},"type":"object"},"enablementOptRef":{"properties":{"id":{"description":"ID is the item within that namespace.","type":"string"},"kind":{"description":"Kind is the item's namespace: \"model\", \"provider\" or \"feature\".","type":"string"}},"type":"object"},"endpointReq":{"properties":{"connector":{"description":"Connector names the stored credential to reach this endpoint with.","type":"string"},"locator":{"description":"Locator addresses the resource. For a git source it is the https clone URL on\nthe provider's own host, with no embedded credentials; for a native target it\nis the repository name.","type":"string"},"provider":{"description":"Provider is the platform: github or gitlab for a source; a target defaults to\nthe native Hanzo Git plane.","type":"string"}},"type":"object"},"enrollReq":{"properties":{"account":{"description":"Account is the provider-side account identifier.","type":"string"},"host":{"description":"Host is the machine's human hostname label.","type":"string"},"kind":{"description":"Kind decides how the account's inference BILLS and defaults to\nsubscription: a subscription account bills the user's own monthly plan and\nis metered here for visibility only, while an apikey account bills through\ncommerce on the gateway path.","type":"string"},"machine":{"description":"Machine is the stable machine identifier. Required, length-bounded.","type":"string"},"os":{"description":"OS is the machine's operating system label.","type":"string"},"plan":{"description":"Plan is the provider plan label (e.g. \"Claude Max\").","type":"string"},"provider":{"description":"Provider is the AI provider the account belongs to. Required, length-bounded.","type":"string"},"usage":{"description":"Usage is an optional usage snapshot, clamped and re-serialized to known\nfields; omitting it keeps the last good one."}},"type":"object"},"esignCompleteIn":{"properties":{"signed":{"description":"Signed, when present, overrides what the provider reports — the manual path\nfor a provider whose webhook is not wired. Omit it to take the provider's answer.","type":"boolean"}},"type":"object"},"evaluateIn":{"properties":{"distinct_id":{"description":"DistinctID is the identity the flags are evaluated for. Required.","type":"string"},"groups":{"description":"Groups are the group-level properties, keyed by group type index."},"person_properties":{"description":"PersonProperties are the person-level properties conditions match against."}},"type":"object"},"evaluatorReq":{"properties":{"criteria":{"description":"Criteria is the written standard the judge applies; over 64 KiB is refused.","type":"string"},"model":{"description":"Model is the model that will do the grading.","type":"string"},"name":{"description":"Name is the judge's org-unique handle, matching\n^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. Re-posting a name edits that judge\nrather than adding a second one.","type":"string"},"scoreName":{"description":"ScoreName is the name the resulting scores are filed under. It defaults to\nthe judge's own name and must match the same pattern.","type":"string"}},"required":["name"],"type":"object"},"fetchQuery":{"properties":{"batch":{"description":"Batch is the most messages to return. 0 or less means 1; anything above\n100 is clamped to 100.","type":"integer"},"name":{"description":"Name is the consumer, from the path.","type":"string"},"stream":{"description":"Stream is the stream, from the path.","type":"string"},"waitMs":{"description":"WaitMs is how long to wait for the batch to fill before answering with\nwhat arrived. 0 or less means the default of 5000; clamped to 30000.","type":"integer"}},"type":"object"},"fileInput":{"properties":{"content":{"description":"Content is the file's full text. Max 1 MiB per file; binary files should\nsimply be omitted rather than sent.","type":"string"},"path":{"description":"Path is the file's repo-relative path, e.g. \"internal/store/db.go\".","type":"string"}},"type":"object"},"filingRequest":{"properties":{"documentIds":{"description":"DocumentIDs are the documents to file. At least one is required, and every\none must belong to the caller's org — a filing can never reach across orgs.","items":{"type":"string"},"type":"array"},"jurisdiction":{"description":"Jurisdiction is the state or agency the filing is for, e.g. \"DE\".","type":"string"}},"type":"object"},"flowCreate":{"properties":{"data":{"description":"Data is the workflow graph (the product's nodes/edges document),\nverbatim. Omit it to create an empty workflow."},"description":{"description":"Description says what the workflow does.","type":"string"},"name":{"description":"Name is the workflow's display name, unique within the org's project\n(the product de-duplicates by suffixing).","type":"string"}},"type":"object"},"flowRun":{"properties":{"input":{"description":"Input is the run's chat input value, handed to the graph's input node.","type":"string"},"session":{"description":"Session groups runs into one conversation; the product mints one when\nabsent and returns it in the response.","type":"string"},"tweaks":{"description":"Tweaks override component fields for this run only (the product's\ntweaks document), verbatim."},"workflow":{"description":"Workflow is the UUID of the workflow to run.","type":"string"}},"type":"object"},"flowUpdate":{"properties":{"data":{"description":"Data replaces the workflow graph when present, verbatim."},"description":{"description":"Description replaces the description when present.","type":"string"},"locked":{"description":"Locked freezes or unfreezes the workflow against edits when present.","type":"boolean"},"name":{"description":"Name renames the workflow when present.","type":"string"},"workflow":{"description":"Workflow is the workflow's UUID, taken from the path.","type":"string"}},"type":"object"},"foundersIn":{"properties":{"founders":{"description":"Founders is every founding stakeholder. Each needs a name and an email, and\nequityBps between 0 and 10000 (1% == 100 bps).","items":{"$ref":"#/components/schemas/Founder"},"type":"array"}},"type":"object"},"fwdRule":{"properties":{"entry_port":{"description":"EntryPort is the port the load balancer listens on.","type":"integer"},"entry_protocol":{"description":"EntryProtocol is the protocol the load balancer listens with (http, https, tcp).","type":"string"},"target_port":{"description":"TargetPort is the backend port traffic is forwarded to.","type":"integer"},"target_protocol":{"description":"TargetProtocol is the protocol used to reach the backend droplets.","type":"string"}},"type":"object"},"generateRequest":{"properties":{"data":{"additionalProperties":{"type":"string"},"description":"Data supplies every merge field the template declares, keyed by field key.\nEvery declared field is REQUIRED: a missing one is refused with 400 rather\nthan rendered as a blank into a contract.","type":"object"},"templateId":{"description":"TemplateID is the template to render. Required; resolved for the caller's\norg, so an override wins over the built-in.","type":"string"}},"type":"object"},"gitOrigin":{"properties":{"branch":{"description":"Branch is the branch to build; defaults to `main` for a git source.","type":"string"},"url":{"description":"URL is the repository clone URL. Required for source `git`, and validated\nagainst the same allowlist the privileged build enforces.","type":"string"}},"type":"object"},"githubBackfillIn":{"properties":{"state":{"description":"State is the GitHub issue state to walk: \"open\" (the default), \"closed\" or\n\"all\". Anything else is a 400.","type":"string"}},"type":"object"},"githubClaimIn":{"properties":{"accounts":{"description":"Accounts names GitHub logins the App is installed on (\"hanzoai\"). Matched\ncase-insensitively, since GitHub logins are. Ignored when all is true.","items":{"type":"string"},"type":"array"},"all":{"description":"All binds every account the App holds, instead of naming them.","type":"boolean"}},"type":"object"},"githubForkReq":{"properties":{"org":{"description":"Org is the GitHub account to fork INTO; empty forks to the installation's\nown account, which is the common case.","type":"string"},"repo":{"description":"Repo is a repository the org's installation was GRANTED, by name.","type":"string"}},"type":"object"},"githubImportIn":{"properties":{"all":{"description":"All imports every repository the installation grants, instead of naming\nthem. Archived and disabled repositories are skipped either way — they\ncannot be fetched.","type":"boolean"},"repos":{"description":"Repos names the repositories to import, either owner-qualified\n(\"hanzo-apps/ai\") or as a bare name (\"ai\"); a trailing \".git\" is stripped.\nA bare name that matches more than one granted repository is an error\nrather than a guess, because one Hanzo org may hold several GitHub\ninstallations and a name is only unique within an owner.\nIgnored when all is true.","items":{"type":"string"},"type":"array"}},"type":"object"},"githubPagesEnableReq":{"properties":{"branch":{"description":"Branch is the legacy source branch; empty defaults to the repo's own default\nbranch. Ignored when buildType is \"workflow\".","type":"string"},"buildType":{"description":"BuildType selects the builder: \"workflow\" builds via GitHub Actions, anything\nelse builds from the branch source above.","type":"string"},"path":{"description":"Path is the source directory within the branch: \"/\" (the default) or \"/docs\".\nGitHub allows no others.","type":"string"},"repo":{"description":"Repo is the repository, from the :repo path segment.","type":"string"}},"type":"object"},"githubPagesUpdateReq":{"properties":{"branch":{"description":"Branch switches the legacy source branch. Empty leaves the source alone.","type":"string"},"buildType":{"description":"BuildType switches the builder: \"legacy\" or \"workflow\". Empty leaves it.","type":"string"},"cname":{"description":"CNAME is the custom domain. Omit to leave it alone, \"\" to clear it, or a\nvalid FQDN to set it.","type":"string"},"httpsEnforced":{"description":"HTTPSEnforced toggles GitHub's enforce-HTTPS bit. Omit to leave it alone.","type":"boolean"},"path":{"description":"Path is the source directory to pair with Branch: \"/\" (the default) or\n\"/docs\". Read only when Branch is given.","type":"string"},"repo":{"description":"Repo is the repository, from the :repo path segment.","type":"string"}},"type":"object"},"githubSearchReq":{"properties":{"limit":{"description":"Limit caps the answer; 0 takes the default and anything above the ceiling\nis clamped rather than refused.","type":"integer"},"q":{"description":"Q is GitHub's own search syntax, passed through: \"tetris language:go\",\n\"org:hanzoai stars:>10\". Passing it through rather than inventing a\nvocabulary means one thing to learn, and it is theirs.","type":"string"}},"type":"object"},"handleRequest":{"properties":{"handle":{"description":"Handle is the public leaderboard display name; empty opts out. Body-only:\nthe URL cannot supply it.","type":"string"}},"type":"object"},"helpTicketIntake":{"properties":{"description":{"description":"Description is the customer's message. Optional; it becomes the ticket's\ndescription AND the opening entry of its conversation thread. Clipped at\n16 KiB.","type":"string"},"email":{"description":"Email is how the support team replies. Required; clipped at 320 characters\n(the RFC 5321 maximum). It is recorded as the ticket's customer, and it is\nnot verified.","type":"string"},"priority":{"description":"Priority is Low, Medium, High or Urgent, case-insensitively. Anything else —\nincluding omitting it — is recorded as Medium rather than refused.","type":"string"},"subject":{"description":"Subject is the one-line summary of the problem. Required; longer than 300\ncharacters is clipped rather than refused.","type":"string"}},"type":"object"},"iam.AccountItem":{"properties":{"modifyRule":{"type":"string"},"name":{"type":"string"},"regex":{"type":"string"},"tab":{"type":"string"},"viewRule":{"type":"string"},"visible":{"type":"boolean"}},"type":"object"},"iam.Address":{"properties":{"city":{"type":"string"},"line1":{"type":"string"},"line2":{"type":"string"},"region":{"type":"string"},"state":{"type":"string"},"tag":{"type":"string"},"zipCode":{"type":"string"}},"type":"object"},"iam.Application":{"properties":{"affiliationUrl":{"type":"string"},"category":{"type":"string"},"cert":{"type":"string"},"certObj":{"$ref":"#/components/schemas/iam.Cert"},"certPublicKey":{"type":"string"},"clientCert":{"type":"string"},"clientId":{"description":"ClientId is the OAuth2/OIDC client identifier and the GLOBAL key every\nconfidential-client resolver authenticates against (store.GetApplicationByClientId,\nthe mint gates, Basic auth). It MUST be globally unique across ALL owners — a\ncollision would let one app shadow another at that key. This store persists each\nentity as a JSON document in a shared table, so there is no per-field column to\ncarry a DB UNIQUE index; uniqueness is enforced at the write in\napplications.Create/Update (ensureClientIdUnique), exactly as the (owner,name)\nnatural key is, and store.GetApplicationByClientId resolves admin-preferring as\ndefense-in-depth.","type":"string"},"clientSecret":{"type":"string"},"codeResendTimeout":{"type":"integer"},"cookieExpireInHours":{"type":"integer"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"customScopes":{"items":{"$ref":"#/components/schemas/iam.ScopeDescription"},"type":"array"},"defaultGroup":{"type":"string"},"deleted":{"type":"boolean"},"description":{"type":"string"},"disableSamlAttributes":{"type":"boolean"},"disableSignin":{"type":"boolean"},"displayName":{"type":"string"},"domain":{"type":"string"},"enableAutoSignin":{"type":"boolean"},"enableCodeSignin":{"type":"boolean"},"enableExclusiveSignin":{"type":"boolean"},"enableLinkWithEmail":{"type":"boolean"},"enablePassword":{"type":"boolean"},"enableSamlAssertionSignature":{"type":"boolean"},"enableSamlC14n10":{"type":"boolean"},"enableSamlCompress":{"type":"boolean"},"enableSamlPostBinding":{"type":"boolean"},"enableSignUp":{"type":"boolean"},"enableSigninSession":{"type":"boolean"},"enableWebAuthn":{"type":"boolean"},"environment":{"type":"string"},"expireInHours":{"type":"number"},"failedSigninFrozenTime":{"type":"integer"},"failedSigninLimit":{"type":"integer"},"favicon":{"type":"string"},"footerHtml":{"type":"string"},"forcedRedirectOrigin":{"type":"string"},"forgetUrl":{"type":"string"},"formBackgroundUrl":{"type":"string"},"formBackgroundUrlMobile":{"type":"string"},"formCss":{"type":"string"},"formCssMobile":{"type":"string"},"formOffset":{"type":"integer"},"formSideHtml":{"type":"string"},"grantTypes":{"items":{"type":"string"},"type":"array"},"headerHtml":{"type":"string"},"homepageUrl":{"type":"string"},"id":{"type":"string"},"ipRestriction":{"type":"string"},"ipWhitelist":{"type":"string"},"isShared":{"type":"boolean"},"logo":{"type":"string"},"name":{"type":"string"},"order":{"type":"integer"},"orgChoiceMode":{"type":"string"},"organization":{"type":"string"},"organizationObj":{"$ref":"#/components/schemas/iam.Organization"},"otherDomains":{"items":{"type":"string"},"type":"array"},"owner":{"type":"string"},"project":{"type":"string"},"providers":{"items":{"$ref":"#/components/schemas/iam.ProviderItem"},"type":"array"},"redirectUris":{"items":{"type":"string"},"type":"array"},"refreshExpireInHours":{"type":"number"},"samlAttributes":{"items":{"$ref":"#/components/schemas/iam.SamlItem"},"type":"array"},"samlHashAlgorithm":{"type":"string"},"samlReplyUrl":{"type":"string"},"scopes":{"items":{"$ref":"#/components/schemas/iam.ScopeItem"},"type":"array"},"signinHtml":{"type":"string"},"signinItems":{"items":{"$ref":"#/components/schemas/iam.SigninItem"},"type":"array"},"signinMethods":{"items":{"$ref":"#/components/schemas/iam.SigninMethod"},"type":"array"},"signinUrl":{"type":"string"},"signupHtml":{"type":"string"},"signupItems":{"items":{"$ref":"#/components/schemas/iam.SignupItem"},"type":"array"},"signupUrl":{"type":"string"},"sslCert":{"type":"string"},"sslMode":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"termsOfUse":{"type":"string"},"themeData":{"$ref":"#/components/schemas/iam.ThemeData"},"title":{"type":"string"},"tokenAttributes":{"items":{"$ref":"#/components/schemas/iam.JwtItem"},"type":"array"},"tokenFields":{"items":{"type":"string"},"type":"array"},"tokenFormat":{"type":"string"},"tokenSigningMethod":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"upstreamHost":{"type":"string"},"useEmailAsSamlNameId":{"type":"boolean"}},"type":"object"},"iam.ApplicationRef":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name"],"type":"object"},"iam.CartItem":{"properties":{"displayName":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"price":{"type":"number"},"quantity":{"type":"integer"}},"type":"object"},"iam.Cert":{"properties":{"accessKey":{"type":"string"},"accessSecret":{"type":"string"},"account":{"type":"string"},"bitSize":{"type":"integer"},"certificate":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"cryptoAlgorithm":{"type":"string"},"deleted":{"type":"boolean"},"displayName":{"type":"string"},"domainExpireTime":{"type":"string"},"expireInYears":{"type":"integer"},"expireTime":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"privateKey":{"type":"string"},"provider":{"type":"string"},"scope":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"type":"object"},"iam.ConsentRecord":{"properties":{"application":{"type":"string"},"grantedScopes":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.CreateInput":{"properties":{"password":{"type":"string"},"user":{"$ref":"#/components/schemas/iam.User"}},"type":"object"},"iam.CreateOrganizationInput":{"properties":{"accountItems":{"items":{"$ref":"#/components/schemas/iam.AccountItem"},"type":"array"},"accountMenu":{"type":"string"},"balanceCredit":{"type":"number"},"balanceCurrency":{"type":"string"},"countryCodes":{"items":{"type":"string"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"dcrPolicy":{"type":"string"},"defaultApplication":{"type":"string"},"defaultAvatar":{"type":"string"},"defaultPassword":{"type":"string"},"deleted":{"type":"boolean"},"disableSignin":{"type":"boolean"},"displayName":{"type":"string"},"enableSoftDeletion":{"type":"boolean"},"enableTour":{"type":"boolean"},"failedSigninFrozenTime":{"type":"integer"},"failedSigninLimit":{"type":"integer"},"favicon":{"type":"string"},"founder":{"type":"string"},"hasPrivilegeConsent":{"type":"boolean"},"id":{"type":"string"},"initScore":{"type":"integer"},"ipRestriction":{"type":"string"},"ipWhitelist":{"type":"string"},"isPersonal":{"type":"boolean"},"isProfilePublic":{"type":"boolean"},"kerberosKdcHost":{"type":"string"},"kerberosKeytab":{"type":"string"},"kerberosRealm":{"type":"string"},"kerberosServiceName":{"type":"string"},"languages":{"items":{"type":"string"},"type":"array"},"ldapAttributes":{"items":{"type":"string"},"type":"array"},"logo":{"type":"string"},"logoDark":{"type":"string"},"masterPassword":{"type":"string"},"masterVerificationCode":{"type":"string"},"mfaItems":{"items":{"$ref":"#/components/schemas/iam.MfaItem"},"type":"array"},"mfaRememberInHours":{"type":"integer"},"name":{"type":"string"},"navItems":{"items":{"type":"string"},"type":"array"},"orgBalance":{"type":"number"},"owner":{"type":"string"},"passwordExpireDays":{"type":"integer"},"passwordObfuscatorKey":{"type":"string"},"passwordObfuscatorType":{"type":"string"},"passwordOptions":{"items":{"type":"string"},"type":"array"},"passwordSalt":{"type":"string"},"passwordType":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"themeData":{"$ref":"#/components/schemas/iam.ThemeData"},"updatedAt":{"format":"date-time","type":"string"},"useEmailAsUsername":{"type":"boolean"},"usePermanentAvatar":{"type":"boolean"},"userBalance":{"type":"number"},"userNavItems":{"items":{"type":"string"},"type":"array"},"userTypes":{"items":{"type":"string"},"type":"array"},"websiteUrl":{"type":"string"},"widgetItems":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.CreateSessionIn":{"properties":{"application":{"type":"string"},"exclusiveSignin":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":"string"},"sessionId":{"items":{"type":"string"},"type":"array"}},"required":["owner","name","application"],"type":"object"},"iam.DeleteOrganizationInput":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.FaceId":{"properties":{"faceIdData":{"items":{"type":"number"},"type":"array"},"imageUrl":{"type":"string"},"name":{"type":"string"}},"type":"object"},"iam.Input":{"properties":{"createdTime":{"type":"string"},"description":{"type":"string"},"displayName":{"type":"string"},"isDefault":{"type":"boolean"},"metadata":{"type":"string"},"name":{"type":"string"},"organization":{"type":"string"},"owner":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"workspace":{"type":"string"}},"type":"object"},"iam.JwtItem":{"properties":{"category":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"value":{"type":"string"}},"type":"object"},"iam.Key":{"properties":{"accessKey":{"description":"AccessKey (pk-*) is the publishable identifier and lookup index;\nAccessSecret (sk-*) is the confidential secret.","type":"string"},"accessSecret":{"type":"string"},"application":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"description":"CreatedTime and UpdatedTime are RFC3339 audit stamps carried as strings\nfor byte-parity with the v1 row (orm.Model separately tracks CreatedAt /\nUpdatedAt as time.Time for the store's own lifecycle).","type":"string"},"deleted":{"type":"boolean"},"displayName":{"description":"DisplayName is the human-facing label.","type":"string"},"expireTime":{"description":"ExpireTime is when the key stops being honored (empty = never). State is\nthe lifecycle flag (\"Active\", \"test\", …); \"test\" mints test-env\ncredentials instead of live ones.","type":"string"},"id":{"type":"string"},"name":{"type":"string"},"organization":{"type":"string"},"owner":{"description":"Owner is the tenant that holds the key; Name is unique within Owner.","type":"string"},"scope":{"description":"Scope is the key's ACCESS CLASS, orthogonal to Type (which names the bound\nprincipal). Empty (the default, \"secret\") is a full key: a pk- publishable\nhalf AND a confidential sk- half, the sk- authenticating a server-side reader.\nKeyScopePublish is a WRITE-ONLY publishable key — a pk- half only, no secret —\nthat resolves to just an ORG (never a principal) at the ingest door and is safe\nto ship in client JS. A missing value on an existing row reads as the default,\nso every pre-Scope key is a secret key unchanged.","type":"string"},"state":{"type":"string"},"type":{"description":"Type is the scope the key is bound to — \"Organization\", \"Application\",\n\"User\", or \"General\" — and Organization / Application / User name the\nconcrete principal for whichever scope Type selects.","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"updatedTime":{"type":"string"},"user":{"type":"string"}},"type":"object"},"iam.ListSessionsIn":{"properties":{"application":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner"],"type":"object"},"iam.ManagedAccount":{"properties":{"application":{"type":"string"},"signinUrl":{"type":"string"},"username":{"type":"string"}},"type":"object"},"iam.MfaAccount":{"properties":{"accountName":{"type":"string"},"issuer":{"type":"string"},"origin":{"type":"string"}},"type":"object"},"iam.MfaItem":{"properties":{"name":{"type":"string"},"rule":{"type":"string"}},"type":"object"},"iam.MfaProps":{"properties":{"countryCode":{"type":"string"},"enabled":{"type":"boolean"},"isPreferred":{"type":"boolean"},"mfaRememberInHours":{"type":"integer"},"mfaType":{"type":"string"},"url":{"type":"string"}},"type":"object"},"iam.Organization":{"properties":{"accountItems":{"items":{"$ref":"#/components/schemas/iam.AccountItem"},"type":"array"},"accountMenu":{"type":"string"},"balanceCredit":{"type":"number"},"balanceCurrency":{"type":"string"},"countryCodes":{"items":{"type":"string"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"dcrPolicy":{"type":"string"},"defaultApplication":{"type":"string"},"defaultAvatar":{"type":"string"},"defaultPassword":{"type":"string"},"deleted":{"type":"boolean"},"disableSignin":{"type":"boolean"},"displayName":{"type":"string"},"enableSoftDeletion":{"type":"boolean"},"enableTour":{"type":"boolean"},"failedSigninFrozenTime":{"type":"integer"},"failedSigninLimit":{"description":"Per-organization signin throttle. Zero means \"inherit the application\ndefault\"; a non-zero value overrides it. Safe bounds are clamped by the\nresource service before persistence.","type":"integer"},"favicon":{"type":"string"},"founder":{"description":"Founder is the stable storage id of the identity that provisioned this org\n(self-service onboarding). It is the resume token that makes provisioning\nconverge on a backend where each write autocommits independently (no\ntransaction rollback): after a partial failure that created the org but did\nnot move the founder in, a retry recognises the org as the founder's own and\ncompletes it, instead of refusing it as \"already taken\". It also fences the\norg to ONE tenant — a different identity can never complete or join it.","type":"string"},"hasPrivilegeConsent":{"type":"boolean"},"id":{"type":"string"},"initScore":{"type":"integer"},"ipRestriction":{"type":"string"},"ipWhitelist":{"type":"string"},"isPersonal":{"type":"boolean"},"isProfilePublic":{"type":"boolean"},"kerberosKdcHost":{"type":"string"},"kerberosKeytab":{"type":"string"},"kerberosRealm":{"type":"string"},"kerberosServiceName":{"type":"string"},"languages":{"items":{"type":"string"},"type":"array"},"ldapAttributes":{"items":{"type":"string"},"type":"array"},"logo":{"type":"string"},"logoDark":{"type":"string"},"masterPassword":{"type":"string"},"masterVerificationCode":{"type":"string"},"mfaItems":{"items":{"$ref":"#/components/schemas/iam.MfaItem"},"type":"array"},"mfaRememberInHours":{"type":"integer"},"name":{"type":"string"},"navItems":{"items":{"type":"string"},"type":"array"},"orgBalance":{"description":"Balance fields are read-only mirrors; authoritative balances live in\nCommerce (billing.hanzo.ai). Carried for field-complete v1 parity.","type":"number"},"owner":{"type":"string"},"passwordExpireDays":{"type":"integer"},"passwordObfuscatorKey":{"type":"string"},"passwordObfuscatorType":{"type":"string"},"passwordOptions":{"items":{"type":"string"},"type":"array"},"passwordSalt":{"type":"string"},"passwordType":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"themeData":{"$ref":"#/components/schemas/iam.ThemeData"},"updatedAt":{"format":"date-time","type":"string"},"useEmailAsUsername":{"type":"boolean"},"usePermanentAvatar":{"type":"boolean"},"userBalance":{"type":"number"},"userNavItems":{"items":{"type":"string"},"type":"array"},"userTypes":{"items":{"type":"string"},"type":"array"},"websiteUrl":{"type":"string"},"widgetItems":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.Permission":{"properties":{"actions":{"items":{"type":"string"},"type":"array"},"adapter":{"type":"string"},"approveTime":{"type":"string"},"approver":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"description":"Descriptive metadata.","type":"string"},"deleted":{"type":"boolean"},"description":{"type":"string"},"displayName":{"type":"string"},"domains":{"items":{"type":"string"},"type":"array"},"effect":{"type":"string"},"groups":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"isEnabled":{"type":"boolean"},"model":{"description":"Authorization model, targets, and decision. AuthzModel carries the v1\n`model` column (the named authz model); it is not the Go identifier\n`Model` because that name is taken by the embedded orm.Model[Permission]\nmixin. The HTTP contract is unchanged — json:\"model\".","type":"string"},"name":{"type":"string"},"owner":{"description":"Identity — the (owner, name) natural key.","type":"string"},"resourceType":{"type":"string"},"resources":{"items":{"type":"string"},"type":"array"},"roles":{"items":{"type":"string"},"type":"array"},"state":{"type":"string"},"submitter":{"description":"Submission / approval workflow.","type":"string"},"updatedAt":{"format":"date-time","type":"string"},"users":{"description":"Subjects the grant is evaluated for.","items":{"type":"string"},"type":"array"}},"type":"object"},"iam.Provider":{"properties":{"appId":{"type":"string"},"bucket":{"type":"string"},"category":{"type":"string"},"cert":{"type":"string"},"clientId":{"type":"string"},"clientId2":{"type":"string"},"clientSecret":{"type":"string"},"clientSecret2":{"type":"string"},"content":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"customAuthUrl":{"type":"string"},"customLogo":{"type":"string"},"customTokenUrl":{"type":"string"},"customUserInfoUrl":{"type":"string"},"deleted":{"type":"boolean"},"disableSsl":{"type":"boolean"},"displayName":{"type":"string"},"domain":{"type":"string"},"emailRegex":{"type":"string"},"enablePkce":{"type":"boolean"},"enableProxy":{"type":"boolean"},"enableSignAuthnRequest":{"type":"boolean"},"endpoint":{"type":"string"},"host":{"type":"string"},"httpHeaders":{"additionalProperties":{"type":"string"},"type":"object"},"id":{"type":"string"},"idP":{"type":"string"},"intranetEndpoint":{"type":"string"},"issuerUrl":{"type":"string"},"metadata":{"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"pathPrefix":{"type":"string"},"port":{"type":"integer"},"providerUrl":{"type":"string"},"receiver":{"type":"string"},"regionId":{"type":"string"},"scopes":{"type":"string"},"signName":{"type":"string"},"sslMode":{"type":"string"},"subType":{"type":"string"},"templateCode":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"userMapping":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"iam.ProviderItem":{"properties":{"bindingRule":{"items":{"type":"string"},"type":"array"},"canSignIn":{"type":"boolean"},"canSignUp":{"type":"boolean"},"canUnlink":{"type":"boolean"},"countryCodes":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"owner":{"type":"string"},"prompted":{"type":"boolean"},"provider":{"$ref":"#/components/schemas/iam.Provider"},"rule":{"type":"string"},"signupGroup":{"type":"string"}},"type":"object"},"iam.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.Role":{"properties":{"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"deleted":{"type":"boolean"},"description":{"type":"string"},"displayName":{"type":"string"},"domains":{"items":{"type":"string"},"type":"array"},"groups":{"items":{"type":"string"},"type":"array"},"id":{"type":"string"},"isEnabled":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"users":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.SamlItem":{"properties":{"name":{"type":"string"},"nameFormat":{"type":"string"},"value":{"type":"string"}},"type":"object"},"iam.ScopeDescription":{"properties":{"description":{"type":"string"},"displayName":{"type":"string"},"scope":{"type":"string"}},"type":"object"},"iam.ScopeItem":{"properties":{"description":{"type":"string"},"displayName":{"type":"string"},"name":{"type":"string"},"tools":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.SessionRef":{"properties":{"application":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name","application"],"type":"object"},"iam.SigninItem":{"properties":{"customCss":{"type":"string"},"isCustom":{"type":"boolean"},"label":{"type":"string"},"name":{"type":"string"},"placeholder":{"type":"string"},"rule":{"type":"string"},"visible":{"type":"boolean"}},"type":"object"},"iam.SigninMethod":{"properties":{"displayName":{"type":"string"},"name":{"type":"string"},"rule":{"type":"string"}},"type":"object"},"iam.SignupItem":{"properties":{"customCss":{"type":"string"},"label":{"type":"string"},"name":{"type":"string"},"options":{"items":{"type":"string"},"type":"array"},"placeholder":{"type":"string"},"prompted":{"type":"boolean"},"regex":{"type":"string"},"required":{"type":"boolean"},"rule":{"type":"string"},"type":{"type":"string"},"visible":{"type":"boolean"}},"type":"object"},"iam.ThemeData":{"properties":{"borderRadius":{"type":"integer"},"colorPrimary":{"type":"string"},"isCompact":{"type":"boolean"},"isEnabled":{"type":"boolean"},"themeType":{"type":"string"}},"type":"object"},"iam.Token":{"properties":{"accessToken":{"type":"string"},"accessTokenHash":{"type":"string"},"application":{"type":"string"},"code":{"type":"string"},"codeChallenge":{"type":"string"},"codeChallengeMethod":{"type":"string"},"codeExpireIn":{"type":"integer"},"codeIsUsed":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"deleted":{"type":"boolean"},"expiresIn":{"type":"integer"},"id":{"type":"string"},"name":{"type":"string"},"nonce":{"description":"Nonce is the OIDC authorize nonce, stored on the code and echoed into the\nid_token minted at the exchange (OIDC Core §3.1.3.6) so a relying party\nbinds the id_token to its own request and detects replay.","type":"string"},"organization":{"type":"string"},"owner":{"type":"string"},"publicGrant":{"description":"PublicGrant records that this grant was established WITHOUT client\nauthentication — a PKCE code exchange from a client that presented no\nsecret. Whether a client is confidential is a property of the GRANT, not\nonly of the registration: `hanzo-cli` and every @hanzo/iam SPA keep a\nregistered secret for a BACKEND path while the surface that actually signs\nin is a public PKCE client that cannot hold one. authorizationCodeGrant\nalready makes exactly that bounded relaxation; this is the same fact,\nrecorded so refreshTokenGrant can honour it instead of demanding a secret\nthe client never had (which 401s invalid_client and kills the session at\nthe access token's expiry). Carried across rotation, so the second refresh\nbehaves like the first.","type":"boolean"},"redirectUri":{"description":"RedirectUri binds the authorization code to the exact redirect URI of the\nauthorize request (RFC 6749 §4.1.3): the token endpoint refuses a code\nredeemed with a different redirect_uri, closing code-injection across a\nclient's registered URIs.","type":"string"},"refreshConsumed":{"type":"boolean"},"refreshExpireIn":{"type":"integer"},"refreshFamily":{"description":"Refresh-token rotation state (v2). Each refresh belongs to a family (the\ngrant); rotation mints a new row in the same family and marks the prior\none consumed. Presenting a consumed refresh is reuse — the whole family is\nrevoked (RFC 9700 §4.14.2). RefreshExpireIn is the refresh token's own\nabsolute expiry (unix), independent of the access token's shorter life.","type":"string"},"refreshToken":{"type":"string"},"refreshTokenHash":{"type":"string"},"resource":{"description":"RFC 8707 resource indicator","type":"string"},"scope":{"type":"string"},"tokenType":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"user":{"type":"string"},"userCode":{"type":"string"}},"type":"object"},"iam.UpdateInput":{"properties":{"password":{"type":"string"},"user":{"$ref":"#/components/schemas/iam.User"}},"type":"object"},"iam.UpdateOrganizationInput":{"properties":{"accountItems":{"items":{"$ref":"#/components/schemas/iam.AccountItem"},"type":"array"},"accountMenu":{"type":"string"},"balanceCredit":{"type":"number"},"balanceCurrency":{"type":"string"},"countryCodes":{"items":{"type":"string"},"type":"array"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"dcrPolicy":{"type":"string"},"defaultApplication":{"type":"string"},"defaultAvatar":{"type":"string"},"defaultPassword":{"type":"string"},"deleted":{"type":"boolean"},"disableSignin":{"type":"boolean"},"displayName":{"type":"string"},"enableSoftDeletion":{"type":"boolean"},"enableTour":{"type":"boolean"},"failedSigninFrozenTime":{"type":"integer"},"failedSigninLimit":{"type":"integer"},"favicon":{"type":"string"},"founder":{"type":"string"},"hasPrivilegeConsent":{"type":"boolean"},"id":{"type":"string"},"initScore":{"type":"integer"},"ipRestriction":{"type":"string"},"ipWhitelist":{"type":"string"},"isPersonal":{"type":"boolean"},"isProfilePublic":{"type":"boolean"},"kerberosKdcHost":{"type":"string"},"kerberosKeytab":{"type":"string"},"kerberosRealm":{"type":"string"},"kerberosServiceName":{"type":"string"},"languages":{"items":{"type":"string"},"type":"array"},"ldapAttributes":{"items":{"type":"string"},"type":"array"},"logo":{"type":"string"},"logoDark":{"type":"string"},"masterPassword":{"type":"string"},"masterVerificationCode":{"type":"string"},"mfaItems":{"items":{"$ref":"#/components/schemas/iam.MfaItem"},"type":"array"},"mfaRememberInHours":{"type":"integer"},"name":{"type":"string"},"navItems":{"items":{"type":"string"},"type":"array"},"orgBalance":{"type":"number"},"owner":{"type":"string"},"passwordExpireDays":{"type":"integer"},"passwordObfuscatorKey":{"type":"string"},"passwordObfuscatorType":{"type":"string"},"passwordOptions":{"items":{"type":"string"},"type":"array"},"passwordSalt":{"type":"string"},"passwordType":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"themeData":{"$ref":"#/components/schemas/iam.ThemeData"},"updatedAt":{"format":"date-time","type":"string"},"useEmailAsUsername":{"type":"boolean"},"usePermanentAvatar":{"type":"boolean"},"userBalance":{"type":"number"},"userNavItems":{"items":{"type":"string"},"type":"array"},"userTypes":{"items":{"type":"string"},"type":"array"},"websiteUrl":{"type":"string"},"widgetItems":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.UpdateSessionIn":{"properties":{"application":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"sessionId":{"items":{"type":"string"},"type":"array"}},"required":["owner","name","application"],"type":"object"},"iam.User":{"properties":{"accessKey":{"description":"API credentials. AccessSecret / AccessSecretHash / the OAuth tokens are\nbearer material. AccessSecretHash MUST persist (orm stores via JSON; a\njson:\"-\" field is never saved), so it carries a real json tag and the\nhandler's redact() strips it (and AccessSecret + the token fields) before\nresponding.","type":"string"},"accessSecret":{"type":"string"},"accessSecretHash":{"type":"string"},"accessToken":{"type":"string"},"address":{"items":{"type":"string"},"type":"array"},"addresses":{"items":{"$ref":"#/components/schemas/iam.Address"},"type":"array"},"adfs":{"type":"string"},"affiliation":{"type":"string"},"alipay":{"type":"string"},"amazon":{"type":"string"},"apple":{"type":"string"},"applicationScopes":{"items":{"$ref":"#/components/schemas/iam.ConsentRecord"},"type":"array"},"auth0":{"type":"string"},"avatar":{"type":"string"},"avatarType":{"type":"string"},"azuread":{"type":"string"},"azureadb2c":{"type":"string"},"baidu":{"type":"string"},"balance":{"description":"Balance mirrors v1 for lossless migration but is authoritative in\nCommerce (billing.hanzo.ai), not here — do not write it from IAM.","type":"number"},"balanceCredit":{"type":"number"},"balanceCurrency":{"type":"string"},"battlenet":{"type":"string"},"bilibili":{"type":"string"},"bio":{"type":"string"},"birthday":{"type":"string"},"bitbucket":{"type":"string"},"box":{"type":"string"},"cart":{"items":{"$ref":"#/components/schemas/iam.CartItem"},"type":"array"},"cloudfoundry":{"type":"string"},"countryCode":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"createdIp":{"description":"Sign-in provenance.","type":"string"},"createdTime":{"type":"string"},"currency":{"type":"string"},"custom":{"type":"string"},"custom10":{"type":"string"},"custom2":{"type":"string"},"custom3":{"type":"string"},"custom4":{"type":"string"},"custom5":{"type":"string"},"custom6":{"type":"string"},"custom7":{"type":"string"},"custom8":{"type":"string"},"custom9":{"type":"string"},"dailymotion":{"type":"string"},"deezer":{"type":"string"},"deleted":{"type":"boolean"},"deletedTime":{"type":"string"},"digitalocean":{"type":"string"},"dingtalk":{"type":"string"},"discord":{"type":"string"},"displayName":{"description":"Profile.","type":"string"},"douyin":{"type":"string"},"dropbox":{"type":"string"},"education":{"type":"string"},"email":{"type":"string"},"emailVerified":{"type":"boolean"},"eveonline":{"type":"string"},"externalId":{"type":"string"},"faceIds":{"items":{"$ref":"#/components/schemas/iam.FaceId"},"type":"array"},"facebook":{"type":"string"},"firstName":{"type":"string"},"fitbit":{"type":"string"},"gender":{"type":"string"},"gitea":{"type":"string"},"gitee":{"type":"string"},"github":{"description":"Linked federated-identity subjects, one column per connector (v1 parity).","type":"string"},"gitlab":{"type":"string"},"google":{"type":"string"},"groups":{"items":{"type":"string"},"type":"array"},"hash":{"type":"string"},"heroku":{"type":"string"},"homepage":{"type":"string"},"iam":{"type":"string"},"id":{"description":"Id is the user's STABLE OPAQUE identifier — the value the OIDC `sub` claim\ncarries. It is the v1 the legacy surface per-row UUID (e.g.\n\"e7d7fda0-4c53-4508-9d35-7ec892b7e5d7\"), migrated verbatim so a user's `sub`\nis byte-identical across the cutover: every live session, external reference,\nand the downstream money-path principal keyed on `sub` survive unchanged. A\nuser minted natively in v2 is assigned a fresh UUID here on create, so the\n`sub` is ALWAYS a stable opaque id going forward — never the (Owner, Name)\npair, which is mutable (a rename would otherwise silently reissue identity).\n\nIt is distinct from the embedded orm.Model STORAGE KEY — the value the datastore\nlocks and looks a row up by — which is NOT (Owner, Name) for every row: a MIGRATED\nlegacy row is stamped \"owner/name\" (SetId in the migrator), but a v2-native\nusers.Create'd row is NOT — Create allocates rather than pinning a key, so its\nstorage key is a store-assigned surrogate id (a decimal string like\n\"17847909129933610000001\"). (Owner, Name) is therefore the natural/QUERY key\n(unique, indexed), not necessarily the storage key: resolve a row for a locked\nwrite by its REAL key (store.GetUserByName(...).Key().Encode(), which stamps both\nshapes — see internal/oidc updateUser), never by assuming \"owner/name\". This Id is\na first-class, indexed DOMAIN field; its json tag \"id\" dominates the promoted\norm.Model `Id_` (also \"id\") by shallower depth, so the persisted record's \"id\" is\nthis UUID — exactly the v1 shape. A row that carries no Id (a not-yet-assigned\npre-cutover user) falls back to the (Owner, Name) subject at mint; every other\npath resolves `sub`→user by Id.","type":"string"},"idCard":{"type":"string"},"idCardType":{"type":"string"},"influxcloud":{"type":"string"},"infoflow":{"type":"string"},"instagram":{"type":"string"},"intercom":{"type":"string"},"invitation":{"type":"string"},"invitationCode":{"type":"string"},"ipWhitelist":{"type":"string"},"isAdmin":{"type":"boolean"},"isDefaultAvatar":{"description":"State flags.","type":"boolean"},"isDeleted":{"type":"boolean"},"isForbidden":{"type":"boolean"},"isOnline":{"type":"boolean"},"isVerified":{"type":"boolean"},"kakao":{"type":"string"},"karma":{"type":"integer"},"kwai":{"type":"string"},"language":{"type":"string"},"lark":{"type":"string"},"lastChangePasswordTime":{"type":"string"},"lastName":{"type":"string"},"lastSigninIp":{"type":"string"},"lastSigninTime":{"type":"string"},"lastSigninWrongTime":{"type":"string"},"lastfm":{"type":"string"},"ldap":{"type":"string"},"line":{"type":"string"},"linkedin":{"type":"string"},"location":{"type":"string"},"mailru":{"type":"string"},"managedAccounts":{"items":{"$ref":"#/components/schemas/iam.ManagedAccount"},"type":"array"},"meetup":{"type":"string"},"mfaAccounts":{"items":{"$ref":"#/components/schemas/iam.MfaAccount"},"type":"array"},"mfaEmailEnabled":{"type":"boolean"},"mfaItems":{"items":{"$ref":"#/components/schemas/iam.MfaItem"},"type":"array"},"mfaPhoneEnabled":{"type":"boolean"},"mfaPushEnabled":{"type":"boolean"},"mfaPushProvider":{"type":"string"},"mfaPushReceiver":{"type":"string"},"mfaRadiusEnabled":{"type":"boolean"},"mfaRadiusProvider":{"type":"string"},"mfaRadiusUsername":{"type":"string"},"mfaRememberDeadline":{"type":"string"},"mfaRememberDigest":{"description":"MfaRememberDigest is the digest of the token held by the ONE browser the\ndeadline above applies to. Without it the deadline is account-wide and \"don't\nask again on this browser\" switches the second factor off everywhere. It is a\ndigest, never the token, so a database dump yields nothing presentable — and it\ncarries a REAL json tag because orm persists via json.Marshal, so `json:\"-\"`\nwould never be stored (the trap PasswordHash documents above); Mask() strips it\nfrom every response instead.","type":"string"},"microsoftonline":{"type":"string"},"multiFactorAuths":{"items":{"$ref":"#/components/schemas/iam.MfaProps"},"type":"array"},"name":{"type":"string"},"naver":{"type":"string"},"needUpdatePassword":{"type":"boolean"},"nextcloud":{"type":"string"},"okta":{"type":"string"},"onedrive":{"type":"string"},"originalRefreshToken":{"type":"string"},"originalToken":{"type":"string"},"oura":{"type":"string"},"owner":{"description":"Identity / tenancy. (Owner, Name) is the natural key.","type":"string"},"passwordHash":{"description":"Credential material. PasswordHash is a one-way bcrypt digest and is\nverify-only. It MUST be persisted (orm serializes the entity to its JSON\ndata column, so a json:\"-\" field would never be stored — that silently\nbroke login), so it carries a real json tag; the users API redact() strips\nit (and every other secret) from every response. PasswordType and\nPasswordSalt describe the digest scheme so rows hashed under the legacy\nargon2id scheme can still be verified and lazily re-hashed to bcrypt.","type":"string"},"passwordSalt":{"type":"string"},"passwordType":{"type":"string"},"patreon":{"type":"string"},"paypal":{"type":"string"},"permanentAvatar":{"type":"string"},"permissions":{"items":{"$ref":"#/components/schemas/iam.Permission"},"type":"array"},"phone":{"type":"string"},"preHash":{"type":"string"},"preferredMfaType":{"type":"string"},"properties":{"additionalProperties":{"type":"string"},"type":"object"},"qq":{"type":"string"},"ranking":{"type":"integer"},"realName":{"type":"string"},"recoveryCodes":{"items":{"type":"string"},"type":"array"},"region":{"type":"string"},"registerSource":{"type":"string"},"registerType":{"type":"string"},"roles":{"description":"Authorization attachments. Roles and Permissions are computed on read\nfrom the authz store and carried here for API parity with v1.","items":{"$ref":"#/components/schemas/iam.Role"},"type":"array"},"salesforce":{"type":"string"},"score":{"type":"integer"},"shopify":{"type":"string"},"signinWrongTimes":{"type":"integer"},"signupApplication":{"type":"string"},"slack":{"type":"string"},"soundcloud":{"type":"string"},"spotify":{"type":"string"},"steam":{"type":"string"},"strava":{"type":"string"},"stripe":{"type":"string"},"tag":{"type":"string"},"telegram":{"type":"string"},"tiktok":{"type":"string"},"title":{"type":"string"},"totpSecret":{"type":"string"},"tumblr":{"type":"string"},"twitch":{"type":"string"},"twitter":{"type":"string"},"type":{"type":"string"},"typetalk":{"type":"string"},"uber":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"},"updatedTime":{"type":"string"},"verificationCode":{"type":"string"},"vk":{"type":"string"},"webauthnCredentials":{"description":"Multi-factor authentication. TotpSecret and RecoveryCodes are secret\nverify-only material — the handler strips them from every response.\nWebauthnCredentials is carried as raw JSON here for lossless migration;\nthe typed passkey model is the sibling WebauthnCredential entity.","items":{},"type":"array"},"wechat":{"type":"string"},"wecom":{"type":"string"},"weibo":{"type":"string"},"wepay":{"type":"string"},"xero":{"type":"string"},"yahoo":{"type":"string"},"yammer":{"type":"string"},"yandex":{"type":"string"},"zoom":{"type":"string"}},"type":"object"},"iam.WebauthnCredential":{"properties":{"aaguid":{"contentEncoding":"base64","type":"string"},"attachment":{"type":"string"},"attestationType":{"type":"string"},"backupEligible":{"type":"boolean"},"backupState":{"type":"boolean"},"cloneWarning":{"type":"boolean"},"createdAt":{"format":"date-time","type":"string"},"createdTime":{"type":"string"},"credentialId":{"contentEncoding":"base64","type":"string"},"deleted":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"publicKey":{"contentEncoding":"base64","type":"string"},"signCount":{"type":"integer"},"transport":{"items":{"type":"string"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"user":{"type":"string"},"userPresent":{"type":"boolean"},"userVerified":{"type":"boolean"}},"type":"object"},"iam.auditlogs.Input":{"properties":{"action":{"type":"string"},"clientIp":{"type":"string"},"createdTime":{"type":"string"},"isTriggered":{"type":"boolean"},"language":{"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"object":{"type":"string"},"organization":{"type":"string"},"owner":{"type":"string"},"requestUri":{"type":"string"},"response":{"type":"string"},"statusCode":{"type":"integer"},"user":{"type":"string"}},"type":"object"},"iam.certs.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.invitations.Input":{"properties":{"application":{"type":"string"},"code":{"type":"string"},"createdTime":{"type":"string"},"defaultCode":{"type":"string"},"displayName":{"type":"string"},"email":{"type":"string"},"isRegexp":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":"string"},"phone":{"type":"string"},"quota":{"type":"integer"},"signupGroup":{"type":"string"},"state":{"type":"string"},"updatedTime":{"type":"string"},"usedCount":{"type":"integer"},"username":{"type":"string"}},"type":"object"},"iam.invitations.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.keys.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.passwordBody":{"properties":{"code":{"description":"Code is the one-time code delivered to the account's own address.","type":"string"},"oldPassword":{"description":"OldPassword is the credential being replaced, the proof a signed-in caller\ngives instead of a code.","type":"string"},"organization":{"description":"The account being recovered, for a caller who cannot be signed in. Read on\nthe CODE arm only — a signed-in caller is resolved from its own session or\ntoken, never from these.","type":"string"},"password":{"description":"Password is the new credential. It must satisfy the platform floor and the\norganization's own complexity options.","type":"string"},"username":{"description":"email, username OR phone","type":"string"}},"type":"object"},"iam.permission.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.person":{"properties":{"displayName":{"type":"string"},"email":{"type":"string"},"isAdmin":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":"string"},"password":{"type":"string"},"passwordType":{"type":"string"},"phone":{"type":"string"}},"type":"object"},"iam.projects.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.providerKey":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name"],"type":"object"},"iam.registration":{"properties":{"cert":{"type":"string"},"clientId":{"type":"string"},"clientSecret":{"type":"string"},"displayName":{"type":"string"},"enableCodeSignin":{"description":"EnableCodeSignin offers sign-in by an emailed or texted one-time code\nbeside the password. A POINTER for the same reason as IsShared: a plain\nbool reads as false on every reconcile that says nothing and would switch\nthe method off for every app whose caller never mentioned it.","type":"boolean"},"expireInHours":{"description":"ExpireInHours and RefreshExpireInHours are the application's token\nlifetimes. They are the ONLY declarative way to say that a refresh token\nmust OUTLIVE its access token: with neither stated, oidc.refreshTTL clamps\nthe refresh lifetime to the access lifetime, so the refresh_token grant the\nregistration advertises expires at the same instant as the token it was\nmeant to renew and can never be exercised. `hanzo-cli` sat in exactly that\nstate — a browser re-login every hour, and a live refresh returning 401.\n\nPOINTERS, for the same reason as IsShared: a plain float would read as 0 on\nevery reconcile that says nothing and reset a deliberate lifetime back to\nthe default. Nil means \"not stated, leave it\".","type":"number"},"grantTypes":{"items":{"type":"string"},"type":"array"},"isShared":{"description":"IsShared declares that this application serves EVERY organization, not only\nthe one named in Organization. It is the honest description of a brand app —\nhanzo-id, hanzo-chat, a brand console — whose customers each live in their own\ntenant: self-service onboarding moves a founder OUT of the brand org, so\n`user.Owner != app.Organization` is the steady state and the app really does\nserve every org. Application.ServesOrg reads it as one of the three ways to\nsay yes.\n\nA POINTER because omission must PRESERVE. This upsert is the operator's\nsteady-state reconcile and most callers say nothing about sharing; a plain\nbool would read as false on every one of them and silently un-share an app —\nthe same shape of accident that de-secreted apps through update-application.\nNil means \"not stated, leave it\"; only an explicit true or false moves it.","type":"boolean"},"name":{"type":"string"},"organization":{"type":"string"},"public":{"description":"Public declares a client that CANNOT hold a credential — a browser SPA,\na CLI, a desktop app. It proves itself with PKCE instead, and the token\nendpoint treats \"no stored secret\" as exactly that (token.go: a secret is\nverified only when one is stored). Without this flag every upsert minted\na secret, so a public client could never be registered at all and its\nbrowser code->token exchange 401'd `invalid_client` forever.","type":"boolean"},"redirectUris":{"items":{"type":"string"},"type":"array"},"refreshExpireInHours":{"type":"number"}},"type":"object"},"iam.roles.Input":{"properties":{"createdTime":{"type":"string"},"description":{"type":"string"},"displayName":{"type":"string"},"domains":{"items":{"type":"string"},"type":"array"},"groups":{"items":{"type":"string"},"type":"array"},"isEnabled":{"type":"boolean"},"name":{"type":"string"},"owner":{"type":"string"},"roles":{"items":{"type":"string"},"type":"array"},"users":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.roles.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"iam.tokenKey":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name"],"type":"object"},"iam.users.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name"],"type":"object"},"iam.webauthnCredentialKey":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"required":["owner","name"],"type":"object"},"iam.workspaces.Input":{"properties":{"bucket":{"type":"string"},"createdTime":{"type":"string"},"description":{"type":"string"},"displayName":{"type":"string"},"isDefault":{"type":"boolean"},"metadata":{"type":"string"},"name":{"type":"string"},"organization":{"type":"string"},"owner":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"iam.workspaces.Ref":{"properties":{"name":{"type":"string"},"owner":{"type":"string"}},"type":"object"},"imageOrigin":{"properties":{"repository":{"description":"Repository is the image repository. Required for source `image`.","type":"string"},"tag":{"description":"Tag is the image tag to deploy; `latest` when omitted.","type":"string"}},"type":"object"},"importCapTableIn":{"properties":{"range":{"description":"Range is an optional A1 range within the sheet; empty reads the default range.","type":"string"},"spreadsheetId":{"description":"SpreadsheetID is a Google Sheets id. Required.","type":"string"}},"type":"object"},"importDocumentsIn":{"properties":{"folderId":{"description":"FolderID is a Google Drive folder id. Required.","type":"string"}},"type":"object"},"indexIn":{"properties":{"files":{"description":"Files is the full set of files to index. Required and non-empty; max 20000\nfiles, 1 MiB per file and 1 GiB in total. Unchanged files are skipped by\ncontent hash, so re-sending the whole tree is cheap.","items":{"$ref":"#/components/schemas/fileInput"},"type":"array"},"prune":{"description":"Prune deletes indexed files that are NOT in this request — which makes the\ncall a full sync of the repo rather than an upsert. Only pass it when Files\nis the complete tree.","type":"boolean"},"repo":{"description":"Repo is the repository label to index under. Required, max 200 bytes. It is\na stored column value, not a filesystem path.","type":"string"}},"type":"object"},"ingestReq":{"properties":{"account":{"type":"string"},"cachedInputTokens":{"type":"integer"},"confidence":{"type":"string"},"costCents":{"type":"integer"},"costLimitCents":{"type":"integer"},"currency":{"type":"string"},"inputTokens":{"type":"integer"},"kind":{"type":"string"},"lane":{"type":"string"},"machine":{"type":"string"},"outputTokens":{"type":"integer"},"plan":{"type":"string"},"provider":{"type":"string"},"requests":{"type":"integer"},"resetsAt":{"type":"string"},"samples":{"description":"Samples is the batch form, up to 256 samples; leave it empty to send one\nsample inline on the same fields.","items":{"$ref":"#/components/schemas/readingReq"},"type":"array"},"synthetic":{"type":"boolean"},"totalTokens":{"type":"integer"},"usedPct":{"type":"number"},"window":{"type":"string"},"windowMinutes":{"type":"integer"},"windowStart":{"type":"string"}},"type":"object"},"insightsBody":{"properties":{"batch":{"items":{"$ref":"#/components/schemas/insightsEvent"},"type":"array"},"distinct_id":{"type":"string"},"event":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"timestamp":{"type":"string"},"uuid":{"type":"string"}},"type":"object"},"insightsEvent":{"properties":{"distinct_id":{"type":"string"},"event":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"timestamp":{"type":"string"},"uuid":{"type":"string"}},"type":"object"},"installReq":{"properties":{"tool":{"description":"Tool is the registry name of the capability to activate (or deactivate) for\nthe caller's own org and project. Required.","type":"string"}},"type":"object"},"invokeReq":{"properties":{"input":{"description":"Input is what the function is given on stdin. It is opaque to this surface.","type":"string"}},"type":"object"},"issueEdit":{"properties":{"description":{"description":"Description rewrites the body.","type":"string"},"key":{"description":"Key is the board — the repository name, from the path.","type":"string"},"num":{"description":"Num is the issue number on that repository, from the path.","type":"integer"},"priority":{"description":"Priority re-prioritises it.","type":"string"},"status":{"description":"Status moves the card to another column.","type":"string"},"title":{"description":"Title renames the work item.","type":"string"}},"type":"object"},"itemReq":{"properties":{"expectedOutput":{"description":"Expected is the answer a correct model produces, which the judge grades\nagainst, stored as raw JSON exactly as sent, up to 64 KiB."},"id":{"description":"ID makes the write idempotent — re-posting the same id replaces that example\nin place. Omit it and one is generated. An id that already exists in a\nDIFFERENT dataset is 409 rather than a move.","type":"string"},"input":{"description":"Input is what the model under test will be given, stored as raw JSON exactly\nas sent, up to 64 KiB."},"metadata":{"additionalProperties":{"type":"object"},"description":"Metadata is a free-form object stored with the example.","type":"object"},"status":{"description":"Status is ACTIVE (the default) or ARCHIVED. Only ACTIVE examples are fed to\na run, which is how an example is retired without being deleted.","type":"string"}},"type":"object"},"jobCancel":{"properties":{"id":{"description":"ID is the job (activity) id, from the URL path.","type":"string"},"reason":{"description":"Reason is recorded on the cancellation; empty records \"canceled from console\".","type":"string"},"run":{"description":"Run is the run id; empty defaults to the job id, which is what the dispatcher\nsets (runId == activityId == prompt_id), so the common case sends no body.","type":"string"}},"type":"object"},"judgeSpec":{"properties":{"criteria":{"description":"Criteria is the standard the judge applies, defaulting to a correctness\ncriterion.","type":"string"},"model":{"description":"Model is the model that grades. It defaults to the model under test, so a\nrun with no judge named has the model grade itself.","type":"string"},"name":{"description":"Name is the score name the judge's grades are filed under, \"llm-judge\" by\ndefault. A name that is not a legal handle falls back to that default\nrather than being stored as sent.","type":"string"}},"type":"object"},"keyTypeIn":{"properties":{"limit":{"description":"Limit narrows what the minted key may reach, as `kind:name` entries:\n`model:zen5`, `project:acme`, `product:commerce`, or `model:*` for a whole\nkind. It only ever NARROWS — a key can never reach further than the person\nwho minted it — so an unrecognised kind costs availability, never privilege.\n\nOmitted mints an unrestricted key, because that is what every key in the\nestate is today and a default that restricted would revoke all of them.\n\nExample: {\"type\": \"secret\", \"limit\": [\"model:zen5\", \"project:acme\"]}","items":{"type":"string"},"type":"array"},"type":{"description":"Type is the key class to act on: \"secret\" (sk-, session-equivalent, belongs\non a server) or \"publishable\" (pk-, org-identifying, safe in a browser\nbundle). Omitted means secret, which is what every existing caller means.","type":"string"}},"type":"object"},"kvWrite":{"properties":{"bucket":{"description":"Bucket is the bucket, from the path.","type":"string"},"key":{"description":"Key is the key, from the path.","type":"string"},"value":{"description":"Value is the value, carried verbatim as UTF-8 text (typically JSON).","type":"string"}},"type":"object"},"legalSigner":{"properties":{"email":{"type":"string"},"name":{"type":"string"}},"type":"object"},"licensing.DeviceSignals":{"properties":{"arch":{"type":"string"},"cpuid":{"description":"CPUID is a CPU/board identifier string.","type":"string"},"disk_serial":{"description":"DiskSerial of the boot/root volume.","type":"string"},"hostname":{"description":"Hostname is a weak signal, used only as a tiebreaker.","type":"string"},"install_id":{"description":"InstallID is a per-install random the agent persists locally on first run.","type":"string"},"machine_id":{"description":"MachineID is a stable per-host id (e.g. /etc/machine-id, IOPlatformUUID,\nMachineGuid). Strongest single signal where present.","type":"string"},"macs":{"description":"MAC addresses of stable interfaces (order-insensitive; we sort).","items":{"type":"string"},"type":"array"},"os":{"description":"OS / Arch coarse platform tags.","type":"string"}},"type":"object"},"licensing.FingerprintRequest":{"properties":{"signals":{"$ref":"#/components/schemas/licensing.DeviceSignals","description":"Signals is the host material the client agent collected. Which fields\nactually participate in the binding is deliberately unspecified — send\neverything available and let the server decide."}},"type":"object"},"licensing.IssueRequest":{"properties":{"fingerprint":{"description":"Fingerprint is a previously-registered device binding value, as returned by\nPOST /v1/licensing/fingerprint. Leave it empty and pass Signals to bind the\ndevice at issue time instead.","type":"string"},"holder":{"description":"Holder overrides who the token is issued to; defaults to the caller's own\nvalidated subject. It NAMES the token's bearer and grants nothing on its\nown — the entitlement checked is always the caller's org's.","type":"string"},"product":{"description":"Product is the licensed commerce product the caller wants a token for.","type":"string"},"release":{"description":"Release scopes the token to one signed binary release, recorded as a\n\"release:<id>\" feature so a single bad release can be revoked on its own.","type":"string"},"signals":{"$ref":"#/components/schemas/licensing.DeviceSignals","description":"Signals binds the device at issue time, as an alternative to a\npre-registered fingerprint. The raw signals are never stored or echoed —\nthey are folded immediately into the one-way binding value."},"ttl_seconds":{"description":"TTLSeconds requests a token lifetime in seconds. It is clamped to the\ndeployment maximum AND to the entitlement's own expiry — a token never\noutlives the subscription that paid for it.","type":"integer"}},"required":["product"],"type":"object"},"licensing.Release":{"properties":{"app_id":{"description":"AppID scopes the release to an app build (\"hanzo\" | \"lux\" | \"zoo\").","type":"string"},"artifact_ref":{"description":"ArtifactRef is where the binary lives (object-store key / OCI ref / path).","type":"string"},"cosign_cert":{"description":"CosignCert is the cosign/Fulcio cert (keyless) or public key ref used to\nverify CosignSignature. The download response hands this to the client.","type":"string"},"cosign_signature":{"description":"CosignSignature is the base64 cosign signature over the artifact digest.","type":"string"},"created_at":{"type":"integer"},"id":{"description":"ID is the release identifier, e.g. \"engine-rocm-0.4.2-linux-amd64\". The\naccelerator belongs here — one product is built several ways — and never\nin Product below.","type":"string"},"min_features":{"description":"MinFeatures, when set, are features the license must include to download.","items":{"type":"string"},"type":"array"},"platform":{"description":"Platform is \"<os>/<arch>\", e.g. \"linux/amd64\".","type":"string"},"product":{"description":"Product is the licensed product this artifact belongs to (commerce SKU):\n\"engine\" for every one of those builds.","type":"string"},"sha256":{"description":"SHA256 is the hex digest of the artifact (integrity + cosign subject).","type":"string"},"version":{"description":"Version is the semantic version of the binary.","type":"string"},"yanked":{"description":"Yanked marks a pulled release (download refused; tokens may be revoked\nrelease-scoped too).","type":"boolean"}},"type":"object"},"licensing.RevokeRequest":{"properties":{"reason":{"description":"Reason is the operator's note, echoed back by verify so a support agent can\nexplain the refusal.","type":"string"},"scope":{"description":"Scope is what the revocation matches on: \"nonce\" kills one token,\n\"holder\" every token issued to one bearer, \"fingerprint\" every token bound\nto one device, and \"release\" every token scoped to one binary release.","type":"string"},"value":{"description":"Value is the concrete nonce, holder, fingerprint or release id to revoke.","type":"string"}},"required":["scope","value"],"type":"object"},"licensing.VerifyRequest":{"properties":{"app":{"description":"App overrides the app_id the token is expected to carry. Leave it empty and\nthe token's own app_id is used — an online verify is informational, and it\nis the ENGINE that enforces the app at boot.","type":"string"},"token":{"description":"Token is the license token to check.","type":"string"}},"required":["token"],"type":"object"},"makeIn":{"properties":{"ack_policy":{"type":"string"},"ack_wait":{"type":"string"},"deliver_policy":{"type":"string"},"description":{"type":"string"},"durable_name":{"type":"string"},"filter_subject":{"type":"string"},"max_ack_pending":{"type":"integer"},"max_deliver":{"type":"integer"},"opt_start_seq":{"type":"integer"},"opt_start_time":{"format":"date-time","type":"string"},"replay_policy":{"type":"string"},"stream":{"description":"Stream is the stream name, from the path.","type":"string"}},"type":"object"},"messageInput":{"properties":{"from":{"type":"string"},"media":{"items":{"type":"string"},"type":"array"},"text":{"type":"string"},"to":{"type":"string"}},"type":"object"},"mirrorReq":{"properties":{"name":{"description":"Name is the local repo to mirror into, from the :name path segment. It is\nCREATED on first use.","type":"string"},"project":{"description":"Project is the sub-scope to land the repo in; empty uses the caller's own,\nexactly as a create would.","type":"string"},"source":{"description":"Source is the http(s) git URL to fetch from. The host is SSRF-guarded, and a\ncredential is sent only if we hold one NAMED FOR that host — so a\ntenant-supplied URL to anywhere else fetches anonymously.","type":"string"}},"type":"object"},"mirrorTargetReq":{"properties":{"host":{"description":"Host is an optional assertion of the target's hostname. The authoritative\nhost is the one in URL; a value that disagrees with it is refused.","type":"string"},"name":{"description":"Name is the repo whose advanced refs are pushed downstream, from the :name\npath segment.","type":"string"},"url":{"description":"URL is the downstream https git remote. Must be https to an allowlisted\nhost (github.com / gitlab.com); any embedded credentials are stripped.\nRequired.","type":"string"}},"type":"object"},"mutateReq":{"properties":{"add":{"description":"Add is the product ids to turn ON. Each must already be an ACTIVE entitlement\nof the org's plan, unless the caller is a platform super admin.","items":{"type":"string"},"type":"array"},"remove":{"description":"Remove is the product ids to turn OFF. Disabling is never gated.","items":{"type":"string"},"type":"array"}},"type":"object"},"namespaceCreateIn":{"properties":{"title":{"description":"Title is the namespace's display title. Cloudflare mints the id.","type":"string"}},"type":"object"},"newIssue":{"properties":{"description":{"description":"Description becomes the issue body.","type":"string"},"key":{"description":"Key is the board — the repository name, from the path.","type":"string"},"priority":{"description":"Priority is one of none, urgent, high, medium or low.","type":"string"},"status":{"description":"Status is the board column to open into: backlog, todo, in_progress, done\nor canceled. Empty opens into backlog.","type":"string"},"title":{"description":"Title is required.","type":"string"}},"type":"object"},"nextIn":{"properties":{"batch":{"description":"Batch is how many messages to pull (1–1000, default 1).","type":"integer"},"expires":{"description":"Expires is how long to wait for messages, e.g. \"5s\" (default \"30s\", max \"60s\").","type":"string"},"name":{"description":"Name is the consumer name, from the path.","type":"string"},"no_wait":{"description":"NoWait answers immediately with whatever is available instead of waiting.","type":"boolean"},"stream":{"description":"Stream is the stream name, from the path.","type":"string"}},"type":"object"},"notifySend":{"properties":{"body":{"description":"Body is the message text, sent verbatim when present — the no-template path.","type":"string"},"channel":{"description":"Channel selects the delivery channel, sms or email. The per-channel routes\n(/send/sms, /send/email) pin it, overriding whatever the body names; on the\ngeneric route it is required.","type":"string"},"event":{"description":"Event is the event name, which doubles as the template id when TemplateID is\nempty — the IAM OTP path sends event=iam.otp_sent and nothing else.","type":"string"},"provider":{"description":"Provider pins a provider service name (twilio, plivo, twilio_email, mail).\nEmpty picks the one whose org credentials are actually configured in KMS.","type":"string"},"subject":{"description":"Subject is the message subject, carried on the email channel only.","type":"string"},"sync":{"description":"Sync must be exactly \"true\": delivery here is synchronous, and anything else\nanswers 503 because the queue plane that would run an async dispatch is owned\nelsewhere. Over REST it rides as ?sync=true (the URL binds over the body); a\nby-name call states it in its arguments.","type":"string"},"template_id":{"description":"TemplateID selects a built-in template when Body is empty.","type":"string"},"template_vars":{"description":"TemplateVars carries the values the selected template renders against, as\na raw JSON object. Raw on purpose: the by-name call plane computes an\ninput's layout before reading any payload and refuses a map field\noutright, which would make every typed call to these ops fail — and that\ncall is the reason they are typed at all (IAM's OTP sender). deliver\ndecodes it right before the template renders, so REST bodies decode\nbyte-identically to the map this replaced."},"to":{"description":"To is the destination address per recipient — a phone number for sms, an\nemail address for email. Several recipients fan out into one provider call\neach, and the response shape follows the count (see the items field).","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.AWSAccountConfig":{"properties":{"regions":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.AWSPostableAccountConfig":{"properties":{"deploymentRegion":{"type":"string"},"regions":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.AWSServiceConfig":{"properties":{"logs":{"$ref":"#/components/schemas/o11y.AWSServiceLogsConfig"},"metrics":{"$ref":"#/components/schemas/o11y.AWSServiceMetricsConfig"}},"type":"object"},"o11y.AWSServiceLogsConfig":{"properties":{"enabled":{"type":"boolean"},"s3Buckets":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"type":"object"},"o11y.AWSServiceMetricsConfig":{"properties":{"enabled":{"type":"boolean"}},"type":"object"},"o11y.AttributeKey":{"properties":{"dataType":{"type":"string"},"isColumn":{"type":"boolean"},"isJSON":{"type":"boolean"},"key":{"type":"string"},"type":{"type":"string"}},"type":"object"},"o11y.Authorization":{"properties":{"credentials":{},"credentials_file":{"type":"string"},"credentials_ref":{"description":"CredentialsRef is the name of the secret within the secret manager to use as credentials.","type":"string"},"type":{"type":"string"}},"type":"object"},"o11y.AzureAccountConfig":{"properties":{"deploymentRegion":{"type":"string"},"resourceGroups":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.AzureServiceConfig":{"properties":{"logs":{"$ref":"#/components/schemas/o11y.AzureServiceLogsConfig"},"metrics":{"$ref":"#/components/schemas/o11y.AzureServiceMetricsConfig"}},"type":"object"},"o11y.AzureServiceLogsConfig":{"properties":{"enabled":{"type":"boolean"}},"type":"object"},"o11y.AzureServiceMetricsConfig":{"properties":{"enabled":{"type":"boolean"}},"type":"object"},"o11y.BasicAuth":{"properties":{"password":{},"password_file":{"type":"string"},"password_ref":{"description":"PasswordRef is the name of the secret within the secret manager to use as the password.","type":"string"},"username":{"type":"string"},"username_file":{"type":"string"},"username_ref":{"description":"UsernameRef is the name of the secret within the secret manager to use as the username.","type":"string"}},"type":"object"},"o11y.BuilderQuery":{"properties":{"IsAnomaly":{"type":"boolean"},"QueriesUsedInFormula":{"items":{"type":"string"},"type":"array"},"ShiftBy":{"type":"integer"},"aggregateAttribute":{"$ref":"#/components/schemas/o11y.AttributeKey"},"aggregateOperator":{"type":"string"},"dataSource":{"type":"string"},"disabled":{"type":"boolean"},"expression":{"type":"string"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"functions":{"items":{"$ref":"#/components/schemas/o11y.Function"},"type":"array"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"having":{"items":{"$ref":"#/components/schemas/o11y.Having"},"type":"array"},"legend":{"type":"string"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"items":{"$ref":"#/components/schemas/o11y.OrderBy"},"type":"array"},"pageSize":{"type":"integer"},"queryName":{"type":"string"},"reduceTo":{"type":"string"},"selectColumns":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"seriesAggregation":{"type":"string"},"spaceAggregation":{"type":"string"},"stepInterval":{"type":"integer"},"temporality":{"type":"string"},"timeAggregation":{"type":"string"}},"type":"object"},"o11y.ClusterListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.CompositeQuery":{"properties":{"builderQueries":{"additionalProperties":{"$ref":"#/components/schemas/o11y.BuilderQuery"},"type":"object"},"chQueries":{"additionalProperties":{"$ref":"#/components/schemas/o11y.DatastoreQuery"},"type":"object"},"fillGaps":{"description":"FillGaps is used to fill the gaps in the time series data","type":"boolean"},"panelType":{"type":"string"},"promQueries":{"additionalProperties":{"$ref":"#/components/schemas/o11y.PromQuery"},"type":"object"},"queries":{"items":{"$ref":"#/components/schemas/o11y.QueryEnvelope"},"type":"array"},"queryType":{"type":"string"},"unit":{"description":"Unit for the time series data shown in the graph\nThis is used in alerts to format the value and threshold","type":"string"}},"type":"object"},"o11y.Credentials":{"properties":{"ingestionKey":{"type":"string"},"ingestionUrl":{"type":"string"},"o11yApiKey":{"description":"PAT","type":"string"},"o11yApiUrl":{"type":"string"}},"type":"object"},"o11y.DaemonSetListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.DatastoreQuery":{"properties":{"disabled":{"type":"boolean"},"legend":{"type":"string"},"query":{"type":"string"}},"type":"object"},"o11y.DeploymentListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.DiscordConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"avatar_url":{"type":"string"},"content":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"title":{"type":"string"},"username":{"type":"string"},"webhook_url":{},"webhook_url_file":{"type":"string"}},"type":"object"},"o11y.EmailConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"auth_identity":{"type":"string"},"auth_password":{},"auth_password_file":{"type":"string"},"auth_secret":{},"auth_secret_file":{"type":"string"},"auth_username":{"type":"string"},"force_implicit_tls":{"description":"ForceImplicitTLS controls whether to use implicit TLS (direct TLS connection).\ntrue: force use of implicit TLS (direct TLS connection)\nfalse: force disable implicit TLS (use explicit TLS/STARTTLS if required)\nnil (default): auto-detect based on port (465=implicit, other=explicit) for backward compatibility","type":"boolean"},"from":{"type":"string"},"headers":{"additionalProperties":{"type":"string"},"type":"object"},"hello":{"type":"string"},"html":{"type":"string"},"require_tls":{"type":"boolean"},"smarthost":{},"text":{"type":"string"},"threading":{"$ref":"#/components/schemas/o11y.ThreadingConfig"},"tls_config":{"$ref":"#/components/schemas/o11y.TLSConfig"},"to":{"description":"Email address to notify.","type":"string"}},"type":"object"},"o11y.Filter":{"properties":{"expression":{"description":"expression to filter by following the filter syntax","type":"string"}},"type":"object"},"o11y.FilterAttributeValueRequest":{"properties":{"aggregateAttribute":{"type":"string"},"aggregateOperator":{"type":"string"},"dataSource":{"type":"string"},"endTimeMillis":{"type":"integer"},"existingFilterItems":{"items":{"$ref":"#/components/schemas/o11y.FilterItem"},"type":"array"},"filterAttributeKey":{"type":"string"},"filterAttributeKeyDataType":{"type":"string"},"includeRelated":{"type":"boolean"},"limit":{"type":"integer"},"metricNames":{"items":{"type":"string"},"type":"array"},"searchText":{"type":"string"},"startTimeMillis":{"type":"integer"},"tagType":{"type":"string"}},"type":"object"},"o11y.FilterItem":{"properties":{"key":{"$ref":"#/components/schemas/o11y.AttributeKey"},"op":{"type":"string"},"value":{"type":"object"}},"type":"object"},"o11y.FilterSet":{"properties":{"items":{"items":{"$ref":"#/components/schemas/o11y.FilterItem"},"type":"array"},"op":{"type":"string"}},"type":"object"},"o11y.FormatOptions":{"properties":{"fillGaps":{"type":"boolean"},"formatTableResultForUI":{"type":"boolean"}},"type":"object"},"o11y.Function":{"properties":{"args":{"items":{"type":"object"},"type":"array"},"name":{"type":"string"},"namedArgs":{"additionalProperties":{"type":"object"},"type":"object"}},"type":"object"},"o11y.FunnelStep":{"properties":{"description":{"description":"step description","type":"string"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"has_errors":{"type":"boolean"},"id":{},"latency_pointer":{"type":"string"},"latency_type":{"type":"string"},"name":{"description":"step name","type":"string"},"service_name":{"type":"string"},"span_name":{"type":"string"},"step_order":{"type":"integer"}},"type":"object"},"o11y.GCPAccountConfig":{"properties":{"deploymentProjectId":{"description":"Project ID where central pub/sub for logs exist","type":"string"},"deploymentRegion":{"description":"Project ID where otel collector will be deployed","type":"string"},"projectIds":{"description":"List of project IDs to monitor","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.GCPServiceConfig":{"properties":{"logs":{"$ref":"#/components/schemas/o11y.GCPServiceLogsConfig"},"metrics":{"$ref":"#/components/schemas/o11y.GCPServiceMetricsConfig"}},"type":"object"},"o11y.GCPServiceLogsConfig":{"properties":{"enabled":{"type":"boolean"}},"type":"object"},"o11y.GCPServiceMetricsConfig":{"properties":{"enabled":{"type":"boolean"}},"type":"object"},"o11y.GoogleChatReceiverConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"text":{"type":"string"},"title":{"type":"string"},"webhook_url":{}},"type":"object"},"o11y.GroupByKey":{"properties":{"description":{"type":"string"},"fieldContext":{},"fieldDataType":{},"name":{"type":"string"},"signal":{},"unit":{"type":"string"}},"required":["name"],"type":"object"},"o11y.HTTPClientConfig":{"properties":{"authorization":{"$ref":"#/components/schemas/o11y.Authorization","description":"The HTTP authorization credentials for the targets."},"basic_auth":{"$ref":"#/components/schemas/o11y.BasicAuth","description":"The HTTP basic authentication credentials for the targets."},"bearer_token":{"description":"The bearer token for the targets. Deprecated in favour of\nAuthorization.Credentials."},"bearer_token_file":{"description":"The bearer token file for the targets. Deprecated in favour of\nAuthorization.CredentialsFile.","type":"string"},"enable_http2":{"description":"EnableHTTP2 specifies whether the client should configure HTTP2.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.","type":"boolean"},"follow_redirects":{"description":"FollowRedirects specifies whether the client should follow HTTP 3xx redirects.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.","type":"boolean"},"http_headers":{"description":"HTTPHeaders specify headers to inject in the requests. Those headers\ncould be marshalled back to the users."},"no_proxy":{"type":"string"},"oauth2":{"$ref":"#/components/schemas/o11y.OAuth2","description":"The OAuth2 client credentials used to fetch a token for the targets."},"proxy_connect_header":{"additionalProperties":{"items":{},"type":"array"},"type":"object"},"proxy_from_environment":{"type":"boolean"},"proxy_url":{},"tls_config":{"$ref":"#/components/schemas/o11y.TLSConfig","description":"TLSConfig to use to connect to the targets."}},"type":"object"},"o11y.Having":{"properties":{"columnName":{"type":"string"},"op":{"type":"string"},"value":{"type":"object"}},"type":"object"},"o11y.HostFilter":{"properties":{"Filter":{"$ref":"#/components/schemas/o11y.Filter"},"filterByStatus":{}},"type":"object"},"o11y.HostListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.IncidentioConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"alert_source_token":{"description":"AlertSourceToken is the key used to authenticate with the alert source in incident.io."},"alert_source_token_file":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"max_alerts":{"description":"MaxAlerts is the maximum number of alerts to be sent per incident.io message.\nAlerts exceeding this threshold will be truncated. Setting this to 0\nallows an unlimited number of alerts. Note that if the payload exceeds\nincident.io's size limits, you will receive a 429 response and alerts\nwill not be ingested.","type":"integer"},"timeout":{"description":"Timeout is the maximum time allowed to invoke incident.io. Setting this to 0\ndoes not impose a timeout.","type":"integer"},"url":{"description":"URL to send POST request to."},"url_file":{"type":"string"}},"type":"object"},"o11y.InstallIntegrationRequest":{"properties":{"config":{"additionalProperties":{"type":"object"},"type":"object"},"integration_id":{"type":"string"}},"type":"object"},"o11y.JiraConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"api_type":{"type":"string"},"api_url":{},"custom_fields":{"additionalProperties":{"type":"object"},"type":"object"},"description":{"$ref":"#/components/schemas/o11y.JiraFieldConfig"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"priority":{"type":"string"},"project":{"type":"string"},"reopen_duration":{},"reopen_transition":{"type":"string"},"resolve_transition":{"type":"string"},"summary":{"$ref":"#/components/schemas/o11y.JiraFieldConfig"},"wont_fix_resolution":{"type":"string"}},"type":"object"},"o11y.JiraFieldConfig":{"properties":{"enable_update":{"description":"EnableUpdate indicates whether this field should be omitted when updating an existing issue.","type":"boolean"},"template":{"description":"Template is the template string used to render the field.","type":"string"}},"type":"object"},"o11y.JobListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.LimitConfig":{"properties":{"day":{"$ref":"#/components/schemas/o11y.LimitValue"},"second":{"$ref":"#/components/schemas/o11y.LimitValue"}},"type":"object"},"o11y.LimitValue":{"properties":{"count":{"type":"integer"},"size":{"type":"integer"}},"type":"object"},"o11y.MSTeamsConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"summary":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"},"webhook_url":{},"webhook_url_file":{"type":"string"}},"type":"object"},"o11y.MSTeamsV2Config":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"text":{"type":"string"},"title":{"type":"string"},"webhook_url":{},"webhook_url_file":{"type":"string"}},"type":"object"},"o11y.MattermostAttachment":{"properties":{"author_icon":{"type":"string"},"author_link":{"type":"string"},"author_name":{"type":"string"},"color":{"type":"string"},"fallback":{"type":"string"},"fields":{"items":{"$ref":"#/components/schemas/o11y.MattermostField"},"type":"array"},"footer":{"type":"string"},"footer_icon":{"type":"string"},"image_url":{"type":"string"},"pretext":{"type":"string"},"text":{"type":"string"},"thumb_url":{"type":"string"},"title":{"type":"string"},"title_link":{"type":"string"}},"type":"object"},"o11y.MattermostConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"attachments":{"items":{"$ref":"#/components/schemas/o11y.MattermostAttachment"},"type":"array"},"channel":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"icon_emoji":{"type":"string"},"icon_url":{"type":"string"},"priority":{"$ref":"#/components/schemas/o11y.MattermostPriority"},"props":{"$ref":"#/components/schemas/o11y.MattermostProps"},"text":{"type":"string"},"type":{"type":"string"},"username":{"type":"string"},"webhook_url":{},"webhook_url_file":{"type":"string"}},"type":"object"},"o11y.MattermostField":{"properties":{"short":{"type":"boolean"},"title":{"type":"string"},"value":{"type":"string"}},"type":"object"},"o11y.MattermostPriority":{"properties":{"persistent_notifications":{"type":"boolean"},"priority":{"type":"string"},"requested_ack":{"type":"boolean"}},"type":"object"},"o11y.MattermostProps":{"properties":{"card":{"type":"string"}},"type":"object"},"o11y.NamespaceListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.NodeListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.NotifierConfig":{"properties":{"send_resolved":{"type":"boolean"}},"type":"object"},"o11y.O11yAPIKeyCreateIn":{"properties":{"expiresAt":{"description":"ExpiresAt is when the key stops working, as a unix timestamp in seconds.\nZero means it never expires; a past timestamp is refused.","type":"integer"},"name":{"description":"Name is the key's name: a lowercase letter followed by lowercase letters,\ndigits or hyphens, at most 80 characters. Required.","type":"string"}},"type":"object"},"o11y.O11yAPIKeyUpdateIn":{"properties":{"expiresAt":{"description":"ExpiresAt is when the key stops working, as a unix timestamp in seconds.\nZero means it never expires; a past timestamp is refused.","type":"integer"},"name":{"description":"Name is the key's new name, under the same rules it was created with.\nRequired.","type":"string"}},"type":"object"},"o11y.O11yAgentCheckInIn":{"properties":{"account_id":{"type":"string"},"cloudIntegrationId":{},"cloud_account_id":{"type":"string"},"data":{"additionalProperties":{"type":"object"},"type":"object"},"providerAccountId":{"type":"string"}},"type":"object"},"o11y.O11yAnalyzeIn":{"properties":{"query":{"description":"Query is the query text. Required.","type":"string"},"queryType":{"description":"QueryType says which language the query is in — promql or the datastore's\nSQL dialect. Required.","type":"string"}},"required":["query","queryType"],"type":"object"},"o11y.O11yApdexSetIn":{"properties":{"excludeStatusCodes":{"description":"ExcludeStatusCodes are status codes excluded from the score, comma\nseparated.","type":"string"},"serviceName":{"description":"ServiceName is the service the threshold applies to.","type":"string"},"threshold":{"description":"Threshold is the satisfied-response time in seconds.","type":"number"}},"type":"object"},"o11y.O11yAttributeMapping":{"properties":{"email":{"description":"Email is the key carrying the email; defaults to \"email\".","type":"string"},"groups":{"description":"Groups is the key carrying the group list; defaults to \"groups\".","type":"string"},"name":{"description":"Name is the key carrying the display name; defaults to \"name\".","type":"string"},"role":{"description":"Role is the key carrying the role; defaults to \"role\".","type":"string"}},"type":"object"},"o11y.O11yAuthDomainConfig":{"properties":{"googleAuthConfig":{"$ref":"#/components/schemas/o11y.O11yGoogleConfig","description":"Google is the Google provider's settings, when SSOType is google_auth."},"oidcConfig":{"$ref":"#/components/schemas/o11y.O11yOIDCConfig","description":"OIDC is the OIDC provider's settings, when SSOType is oidc."},"roleMapping":{"$ref":"#/components/schemas/o11y.O11yRoleMapping","description":"RoleMapping maps the provider's groups onto roles for new users."},"samlConfig":{"$ref":"#/components/schemas/o11y.O11ySAMLConfig","description":"SAML is the SAML provider's settings, when SSOType is saml."},"ssoEnabled":{"description":"SSOEnabled turns enforced SSO on for the domain.","type":"boolean"},"ssoType":{"description":"SSOType picks the provider — saml, google_auth or oidc.","type":"string"}},"type":"object"},"o11y.O11yBulkInviteIn":{"properties":{"invites":{"description":"Invites are the invitations to create; an email may appear only once.","items":{"$ref":"#/components/schemas/o11y.O11yInviteIn"},"type":"array"}},"type":"object"},"o11y.O11yChangePasswordIn":{"properties":{"newPassword":{"description":"NewPassword is the password to set.","type":"string"},"oldPassword":{"description":"OldPassword is the current password; the change is refused when it does\nnot match.","type":"string"}},"type":"object"},"o11y.O11yChannelUpdateIn":{"properties":{"Receiver":{"$ref":"#/components/schemas/o11y.Receiver"},"googlechat_configs":{"items":{"$ref":"#/components/schemas/o11y.GoogleChatReceiverConfig"},"type":"array"}},"type":"object"},"o11y.O11yCreateAccountIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.PostableAccountConfig"},"credentials":{"$ref":"#/components/schemas/o11y.Credentials"}},"type":"object"},"o11y.O11yCreateLimitIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.LimitConfig"},"signal":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yDashboardPatchIn":{"properties":{"id":{"description":"ID is the dashboard id from the path.","type":"string"},"ops":{"description":"Ops are the JSON Patch operations, applied in order. On the wire this IS the\nrequest body — a bare array, not an object.","items":{"$ref":"#/components/schemas/o11y.O11yDashboardPatchOp"},"type":"array"}},"type":"object"},"o11y.O11yDashboardPatchOp":{"properties":{"from":{"description":"From is the source JSON Pointer for move and copy; ignored otherwise.","type":"string"},"op":{"description":"Op is the verb: add, remove, replace, move, copy or test.","type":"string"},"path":{"description":"Path is a JSON Pointer into the postable dashboard, e.g.\n/spec/display/name, /spec/panels/<id>, /tags/-.","type":"string"},"value":{"description":"Value is the value to add/replace/test; its type depends on Path. Required\nfor add, replace and test; ignored otherwise."}},"type":"object"},"o11y.O11yDashboardPostable":{"properties":{"generateName":{"description":"GenerateName derives a fresh unique name from spec.display.name instead of\ntaking Name.","type":"boolean"},"image":{"description":"Image is an optional cover image reference.","type":"string"},"name":{"description":"Name is the dashboard's unique internal name (a DNS-1123 label). Omit it\nwith generateName to derive one from the display name.","type":"string"},"schemaVersion":{"description":"SchemaVersion is the dashboard schema version; must be the current v6.","type":"string"},"spec":{"description":"Spec is the Perses dashboard spec (display, variables, panels, layouts,\ndatasources). Its plugin-defined leaves are open JSON, carried verbatim."},"tags":{"description":"Tags are the dashboard's tags; at most ten, and none may use a reserved DSL\nkey.","items":{"$ref":"#/components/schemas/o11y.O11yDashboardPostableTag"},"type":"array"}},"type":"object"},"o11y.O11yDashboardPostableTag":{"properties":{"key":{"description":"Key is the tag key.","type":"string"},"value":{"description":"Value is the tag value.","type":"string"}},"type":"object"},"o11y.O11yDashboardUpdateIn":{"properties":{"id":{"description":"ID is the dashboard id from the path.","type":"string"},"image":{"type":"string"},"name":{"type":"string"},"schemaVersion":{"type":"string"},"spec":{},"tags":{"items":{"$ref":"#/components/schemas/o11y.O11yDashboardPostableTag"},"type":"array"}},"type":"object"},"o11y.O11yDashboardVarsIn":{"properties":{"query":{"description":"Query is the variable query to evaluate. Required.","type":"string"},"variables":{"additionalProperties":{"type":"object"},"description":"Variables are the current values of the other dashboard variables, for\nqueries that reference them.","type":"object"}},"required":["query"],"type":"object"},"o11y.O11yDashboardViewData":{"properties":{"order":{"description":"Order is the captured sort direction.","type":"string"},"query":{"description":"Query is the captured filter DSL.","type":"string"},"sort":{"description":"Sort is the captured sort field.","type":"string"},"version":{"description":"Version is the saved-view schema version; must be v1.","type":"string"}},"type":"object"},"o11y.O11yDashboardViewPostable":{"properties":{"data":{"$ref":"#/components/schemas/o11y.O11yDashboardViewData","description":"Data is the listing state the view captures."},"name":{"description":"Name is the saved view's name; at most 32 characters, no surrounding space.","type":"string"}},"type":"object"},"o11y.O11yDashboardViewUpdateIn":{"properties":{"data":{"$ref":"#/components/schemas/o11y.O11yDashboardViewData"},"id":{"description":"ID is the saved view id from the path.","type":"string"},"name":{"type":"string"}},"type":"object"},"o11y.O11yDependencyGraphIn":{"properties":{"end":{"description":"End is the window end, as epoch nanoseconds. Required.","type":"string"},"start":{"description":"Start is the window start, as epoch nanoseconds. Required.","type":"string"},"tags":{"description":"Tags narrow the graph to spans matching every condition.","items":{"$ref":"#/components/schemas/o11y.O11yTagFilter"},"type":"array"}},"required":["start","end"],"type":"object"},"o11y.O11yDeprecatedUserUpdate":{"properties":{"displayName":{"description":"DisplayName is the new display name; empty leaves it unchanged.","type":"string"},"role":{"description":"Role is the legacy role to move to — ADMIN, EDITOR or VIEWER; empty\nleaves it unchanged.","type":"string"}},"type":"object"},"o11y.O11yDiscoverIn":{"properties":{"aggregations":{"description":"Aggregations are the measures to compute per group. Empty means a count.","items":{"type":"string"},"type":"array"},"filters":{"description":"Filters narrow the scan; each is a field, an operator (eq, neq, like) and\na value, and they combine with AND.","items":{"$ref":"#/components/schemas/o11y.O11yFilter"},"type":"array"},"groupBy":{"description":"GroupBy are the columns to group the rows by.","items":{"type":"string"},"type":"array"},"limit":{"description":"Limit caps how many rows come back.","type":"integer"},"orderBy":{"description":"OrderBy is the column or aggregation to sort the rows on.","type":"string"},"orderDir":{"description":"OrderDir is asc or desc.","type":"string"},"period":{"description":"Period is the window to read, relative to now — 1h, 24h, 7d, 14d, 30d.","type":"string"},"project":{"description":"Project is the project to read, as its id. Required.","type":"string"}},"required":["project"],"type":"object"},"o11y.O11yDomainFilter":{"properties":{"expression":{"description":"Expression is the predicate, e.g. `http.status_code >= 500`.","type":"string"}},"type":"object"},"o11y.O11yDomainGroupBy":{"properties":{"description":{"description":"Description describes the field, when known.","type":"string"},"fieldContext":{"description":"FieldContext says which plane the field lives on, e.g. attribute,\nresource, span.","type":"string"},"fieldDataType":{"description":"FieldDataType is the field's type: string, int64, float64 or bool.","type":"string"},"name":{"description":"Name is the field's name. Required.","type":"string"},"signal":{"description":"Signal is the telemetry signal the field belongs to, e.g. traces.","type":"string"},"unit":{"description":"Unit is the field's unit, when known.","type":"string"}},"type":"object"},"o11y.O11yDomainsIn":{"properties":{"domain":{"description":"Domain narrows the read to one external domain (the domain view requires\nit).","type":"string"},"end":{"description":"End is the window's end, epoch milliseconds.","type":"integer"},"endpoint":{"description":"Endpoint narrows the domain view to one endpoint.","type":"string"},"filter":{"$ref":"#/components/schemas/o11y.O11yDomainFilter","description":"Filter is an additional predicate in the query-builder filter syntax."},"groupBy":{"description":"GroupBy adds grouping columns to the result.","items":{"$ref":"#/components/schemas/o11y.O11yDomainGroupBy"},"type":"array"},"show_ip":{"description":"ShowIP keeps rows whose domain is a bare IP address; they are dropped\notherwise.","type":"boolean"},"start":{"description":"Start is the window's start, epoch milliseconds.","type":"integer"}},"type":"object"},"o11y.O11yDowntimeUpdateIn":{"properties":{"alertIds":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"name":{"type":"string"},"schedule":{},"scope":{"type":"string"}},"type":"object"},"o11y.O11yDraftFunnelIn":{"properties":{"end_time":{"description":"EndTime is the end of the window, as a millisecond epoch.","type":"integer"},"start_time":{"description":"StartTime is the start of the window, as a millisecond epoch.","type":"integer"},"step_end":{"description":"StepEnd is the step the transition runs to, 1-based.","type":"integer"},"step_start":{"description":"StepStart is the step the transition runs from, 1-based. Ignored by the\nreads that span the whole funnel.","type":"integer"},"steps":{"description":"Steps are the funnel's steps, in order. At least two are needed.","items":{"$ref":"#/components/schemas/o11y.FunnelStep"},"type":"array"}},"type":"object"},"o11y.O11yEmailPasswordSessionIn":{"properties":{"email":{"description":"Email is the account's address. Required.","type":"string"},"orgId":{"description":"OrgID picks the org to sign into when the address belongs to several.","type":"string"},"password":{"description":"Password is the account's password. Required.","type":"string"}},"type":"object"},"o11y.O11yErrorUpdateIssueIn":{"properties":{"assignee":{"description":"Assignee is who the issue is assigned to.","type":"string"},"id":{"description":"ID is the issue id.","type":"string"},"status":{"description":"Status is the new lifecycle state: unresolved, resolved or ignored.","type":"string"}},"required":["id"],"type":"object"},"o11y.O11yErrorsCountIn":{"properties":{"end":{"description":"End is the window end, as a nanosecond epoch spelled as a string.","type":"string"},"exceptionType":{"description":"ExceptionType narrows to one exception type.","type":"string"},"serviceName":{"description":"ServiceName narrows to one reporting service.","type":"string"},"start":{"description":"Start is the window start, as a nanosecond epoch spelled as a string.","type":"string"},"tags":{"description":"Tags narrow the scan to spans carrying the given tag values.","items":{"$ref":"#/components/schemas/o11y.O11yTagQuery"},"type":"array"}},"type":"object"},"o11y.O11yErrorsListIn":{"properties":{"end":{"description":"End is the window end, as a nanosecond epoch spelled as a string.","type":"string"},"exceptionType":{"description":"ExceptionType narrows to one exception type.","type":"string"},"limit":{"description":"Limit caps how many exception groups come back. Required, non-zero.","type":"integer"},"offset":{"description":"Offset is how many groups to skip.","type":"integer"},"order":{"description":"Order is the direction: ascending or descending.","type":"string"},"orderParam":{"description":"OrderParam is the column to order by, e.g. exceptionCount, lastSeen.","type":"string"},"serviceName":{"description":"ServiceName narrows to one reporting service.","type":"string"},"start":{"description":"Start is the window start, as a nanosecond epoch spelled as a string.","type":"string"},"tags":{"description":"Tags narrow the scan to spans carrying the given tag values.","items":{"$ref":"#/components/schemas/o11y.O11yTagQuery"},"type":"array"}},"type":"object"},"o11y.O11yEventIn":{"properties":{"attributes":{"additionalProperties":{"type":"object"},"description":"Attributes are free-form event properties.","type":"object"},"eventName":{"description":"EventName names the event; required for track events.","type":"string"},"eventType":{"description":"EventType is the kind of event — track, identify or group. Required.","type":"string"},"rateLimited":{"description":"RateLimited marks an event the reporting client rate-limited.","type":"boolean"}},"required":["eventType"],"type":"object"},"o11y.O11yFieldSetting":{"properties":{"dataType":{"description":"DataType is the field's data type, e.g. string, int64, float64, bool.\nRequired.","type":"string"},"index":{"description":"Index is the index expression to put on the column, e.g. minmax,\nset(N), bloom_filter(P), tokenbf_v1(S,H,SEED). Empty keeps the default.","type":"string"},"indexGranularity":{"description":"IndexGranularity is the index granularity in rows.","type":"integer"},"name":{"description":"Name is the field to tune. Required.","type":"string"},"selected":{"description":"Selected materializes the field as its own column when true.","type":"boolean"},"type":{"description":"Type is where the field lives: attributes or resources. Required.","type":"string"}},"required":["name","dataType","type"],"type":"object"},"o11y.O11yFilter":{"properties":{"field":{"description":"Field is the column to test.","type":"string"},"op":{"description":"Op is how to test it: eq, neq or like.","type":"string"},"value":{"description":"Value is what to test it against.","type":"string"}},"type":"object"},"o11y.O11yFilterKey":{"properties":{"dataType":{"description":"DataType is the attribute's value type — string, int64, float64 or bool.","type":"string"},"isColumn":{"description":"IsColumn marks an attribute stored as its own column.","type":"boolean"},"isJSON":{"description":"IsJSON marks an attribute read out of a JSON body.","type":"boolean"},"key":{"description":"Key is the attribute name.","type":"string"},"type":{"description":"Type says where the attribute lives — tag or resource.","type":"string"}},"type":"object"},"o11y.O11yForgotPasswordIn":{"properties":{"email":{"description":"Email is the address to mail the reset link to. Required.","type":"string"},"frontendBaseURL":{"description":"FrontendBaseURL is the console origin the reset link is built on.","type":"string"},"orgId":{"description":"OrgID is the org the address belongs to. Required.","type":"string"}},"type":"object"},"o11y.O11yFunnelCreateIn":{"properties":{"funnel_name":{"description":"Name is the funnel's name.","type":"string"},"timestamp":{"description":"Timestamp is when the funnel was created, as a millisecond epoch. Zero\ntakes the runtime's own clock.","type":"integer"}},"type":"object"},"o11y.O11yFunnelStepWindowIn":{"properties":{"end_time":{"type":"integer"},"start_time":{"type":"integer"},"step_end":{"type":"integer"},"step_start":{"type":"integer"}},"type":"object"},"o11y.O11yFunnelStepsUpdateIn":{"properties":{"description":{"description":"Description replaces the funnel's description. Empty leaves it as it was.","type":"string"},"funnel_id":{"description":"FunnelID is the funnel to update.","type":"string"},"funnel_name":{"description":"Name replaces the funnel's name. Empty leaves it as it was.","type":"string"},"steps":{"description":"Steps are the funnel's steps, in order. At least two are needed before\nany analytics read will answer.","items":{"$ref":"#/components/schemas/o11y.FunnelStep"},"type":"array"},"timestamp":{"description":"Timestamp is when the change was made, as a millisecond epoch.","type":"integer"}},"type":"object"},"o11y.O11yFunnelUpdateIn":{"properties":{"description":{"description":"Description replaces the funnel's description. Empty leaves it as it was.","type":"string"},"funnel_name":{"description":"Name replaces the funnel's name. Empty leaves it as it was.","type":"string"},"timestamp":{"description":"Timestamp is when the change was made, as a millisecond epoch.","type":"integer"}},"type":"object"},"o11y.O11yFunnelWindowIn":{"properties":{"end_time":{"type":"integer"},"start_time":{"type":"integer"}},"type":"object"},"o11y.O11yGoogleConfig":{"properties":{"allowedGroups":{"description":"AllowedGroups, when set, admits only members of these groups.","items":{"type":"string"},"type":"array"},"clientId":{"description":"ClientID is the OAuth application's id.","type":"string"},"clientSecret":{"description":"ClientSecret is the OAuth application's secret.","type":"string"},"domainToAdminEmail":{"additionalProperties":{"type":"string"},"description":"DomainToAdminEmail maps each Workspace domain to the admin the service\naccount impersonates; \"*\" is the fallback.","type":"object"},"fetchGroups":{"description":"FetchGroups reads the user's Workspace groups for role mapping.","type":"boolean"},"fetchTransitiveGroupMembership":{"description":"FetchTransitiveGroupMembership also reads groups held through other\ngroups.","type":"boolean"},"insecureSkipEmailVerified":{"description":"InsecureSkipEmailVerified admits addresses Google has not verified.","type":"boolean"},"redirectURI":{"description":"RedirectURI is the callback the flow returns to.","type":"string"},"serviceAccountJson":{"description":"ServiceAccountJSON is the service-account credential used to read\ngroups, when FetchGroups is on.","type":"string"}},"type":"object"},"o11y.O11yInviteIn":{"properties":{"email":{"description":"Email is the address the invitation goes to.","type":"string"},"frontendBaseUrl":{"description":"FrontendBaseUrl is the console origin the invite link is built on.","type":"string"},"name":{"description":"Name is the invitee's display name.","type":"string"},"role":{"description":"Role is the role they will hold on accepting — ADMIN, EDITOR or VIEWER.","type":"string"}},"type":"object"},"o11y.O11yLLMIngestAnnotation":{"properties":{"content":{"description":"Content is the note itself. Required.","type":"string"},"observationId":{"description":"ObservationID is the single observation the annotation attaches to, when\nnarrowed to one.","type":"string"},"queue":{"description":"Queue is the review queue to file the annotation in.","type":"string"},"status":{"description":"Status is the annotation's initial review status. Defaults to PENDING.","type":"string"},"traceId":{"description":"TraceID is the trace the annotation attaches to. Required.","type":"string"}},"type":"object"},"o11y.O11yLLMIngestScore":{"properties":{"comment":{"description":"Comment is a free-text note.","type":"string"},"dataType":{"description":"DataType is the score's kind — NUMERIC or CATEGORICAL. Defaults from the\nvalue when empty.","type":"string"},"name":{"description":"Name is the score's name, e.g. helpfulness. Required.","type":"string"},"observationId":{"description":"ObservationID is the single observation the score attaches to, when\nnarrowed to one.","type":"string"},"source":{"description":"Source is where the score came from, e.g. API, EVAL. Defaults to API.","type":"string"},"stringValue":{"description":"StringValue is the categorical score, when the score is categorical.","type":"string"},"traceId":{"description":"TraceID is the trace the score attaches to. Required.","type":"string"},"value":{"description":"Value is the numeric score.","type":"number"}},"type":"object"},"o11y.O11yLLMPricingCacheCosts":{"properties":{"mode":{"description":"Mode is how cached tokens are counted — subtract (inside input_tokens,\nOpenAI-style), additive (reported separately, Anthropic-style) or unknown.","type":"string"},"read":{"description":"Read is the cost per unit of cache-read tokens.","type":"number"},"write":{"description":"Write is the cost per unit of cache-write tokens.","type":"number"}},"type":"object"},"o11y.O11yLLMRulePricing":{"properties":{"cache":{"$ref":"#/components/schemas/o11y.O11yLLMPricingCacheCosts","description":"Cache is the cost of cached tokens, when the model prices them."},"input":{"description":"Input is the cost per unit of input tokens.","type":"number"},"output":{"description":"Output is the cost per unit of output tokens.","type":"number"}},"type":"object"},"o11y.O11yLLMUpdatablePricingRule":{"properties":{"enabled":{"description":"Enabled turns the rule on.","type":"boolean"},"id":{"description":"ID matches an existing rule by its id.","type":"string"},"isOverride":{"description":"IsOverride pins the rule so the sync job skips it. Omit to leave a matched\noverride untouched.","type":"boolean"},"modelName":{"description":"Model is the model the rule prices. Required.","type":"string"},"modelPattern":{"description":"ModelPattern are the model-name globs the rule matches. Required.","items":{"type":"string"},"type":"array"},"pricing":{"$ref":"#/components/schemas/o11y.O11yLLMRulePricing","description":"Pricing is the per-unit cost. Required."},"provider":{"description":"Provider is the model's provider. Required.","type":"string"},"sourceId":{"description":"SourceID matches an existing rule by its upstream source id.","type":"string"},"unit":{"description":"Unit is the pricing unit, e.g. per_million_tokens. Required.","type":"string"}},"type":"object"},"o11y.O11yLLMUpdatablePricingRules":{"properties":{"rules":{"description":"Rules are the rules to create or update, matched per rule.","items":{"$ref":"#/components/schemas/o11y.O11yLLMUpdatablePricingRule"},"type":"array"}},"type":"object"},"o11y.O11yLogFilter":{"properties":{"items":{"description":"Items are the predicates.","items":{"$ref":"#/components/schemas/o11y.O11yLogFilterItem"},"type":"array"},"op":{"description":"Op combines the items: AND or OR.","type":"string"}},"type":"object"},"o11y.O11yLogFilterItem":{"properties":{"key":{"$ref":"#/components/schemas/o11y.O11yLogFilterKey","description":"Key is the field the predicate tests."},"op":{"description":"Op is the comparison, e.g. =, !=, in, contains.","type":"string"},"value":{"description":"Value is what it tests against, in the value's own JSON type."}},"type":"object"},"o11y.O11yLogFilterKey":{"properties":{"dataType":{"description":"DataType is the field's data type, e.g. string, int64, float64, bool.","type":"string"},"isColumn":{"description":"IsColumn marks a field materialized as its own column.","type":"boolean"},"isJSON":{"description":"IsJSON marks a path into the record's JSON body.","type":"boolean"},"key":{"description":"Key is the field's name.","type":"string"},"type":{"description":"Type is where the field lives: tag or resource.","type":"string"}},"type":"object"},"o11y.O11yLogParseFrom":{"properties":{"parse_from":{"description":"ParseFrom is the field to read.","type":"string"}},"type":"object"},"o11y.O11yLogPipeline":{"properties":{"alias":{"description":"Alias is the pipeline's short name.","type":"string"},"config":{"description":"Config is the pipeline's processors, in order.","items":{"$ref":"#/components/schemas/o11y.O11yLogPipelineOperator"},"type":"array"},"createdAt":{"description":"CreatedAt is when the pipeline was created.","format":"date-time","type":"string"},"createdBy":{"description":"CreatedBy is the id of who created the pipeline.","type":"string"},"description":{"description":"Description says what the pipeline is for.","type":"string"},"enabled":{"description":"Enabled says whether the pipeline is on.","type":"boolean"},"filter":{"$ref":"#/components/schemas/o11y.O11yLogFilter","description":"Filter selects which records the pipeline processes."},"id":{"description":"ID is the pipeline's id.","type":"string"},"name":{"description":"Name is the pipeline's display name.","type":"string"},"orderId":{"description":"OrderID is the pipeline's 1-based position in the set.","type":"integer"},"updatedAt":{"description":"UpdatedAt is when the pipeline last changed.","format":"date-time","type":"string"},"updatedBy":{"description":"UpdatedBy is the id of who last changed it.","type":"string"}},"type":"object"},"o11y.O11yLogPipelineCreateIn":{"properties":{"pipelines":{"description":"Pipelines are the pipelines the new version holds, in order.","items":{"$ref":"#/components/schemas/o11y.O11yLogPostablePipeline"},"type":"array"}},"type":"object"},"o11y.O11yLogPipelineOperator":{"properties":{"default":{"description":"Default is the id of the processor a router falls through to.","type":"string"},"enable_flattening":{"description":"EnableFlattening flattens parsed JSON one level when true.","type":"boolean"},"enable_paths":{"description":"EnablePaths keeps the JSON path in flattened keys when true.","type":"boolean"},"enabled":{"description":"Enabled turns the processor on.","type":"boolean"},"expr":{"description":"Expr is a router route's expression.","type":"string"},"field":{"description":"Field is the field an add/remove processor works on.","type":"string"},"fields":{"description":"Fields are the fields a retain processor keeps.","items":{"type":"string"},"type":"array"},"from":{"description":"From is the source field of a move or copy.","type":"string"},"id":{"description":"ID is the processor's id, unique within the pipeline.","type":"string"},"if":{"description":"If gates the processor on an expression.","type":"string"},"layout":{"description":"Layout is a time parser's layout.","type":"string"},"layout_type":{"description":"LayoutType is the layout's kind, e.g. strptime, gotime, epoch.","type":"string"},"mapping":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Mapping maps severity levels (or flattened keys) to the values that\nmean them.","type":"object"},"name":{"description":"Name is the processor's display name.","type":"string"},"on_error":{"description":"OnError says what to do when the processor fails, e.g. send, drop.","type":"string"},"orderId":{"description":"OrderID is the processor's 1-based position in the pipeline.","type":"integer"},"output":{"description":"Output is the id of the processor that runs next.","type":"string"},"overwrite_text":{"description":"OverwriteSeverityText rewrites the severity text alongside the number\nwhen true.","type":"boolean"},"parse_from":{"description":"ParseFrom is where a parser reads from.","type":"string"},"parse_to":{"description":"ParseTo is where a parser writes its result.","type":"string"},"path_prefix":{"description":"PathPrefix prefixes flattened keys.","type":"string"},"pattern":{"description":"Pattern is a grok parser's pattern.","type":"string"},"regex":{"description":"Regex is a regex parser's expression.","type":"string"},"routes":{"description":"Routes are a router processor's routes.","items":{"$ref":"#/components/schemas/o11y.O11yLogPipelineRoute"},"type":"array"},"span_id":{"$ref":"#/components/schemas/o11y.O11yLogParseFrom","description":"SpanID says where a trace parser reads the span id from."},"to":{"description":"To is the destination field of a move or copy.","type":"string"},"trace_flags":{"$ref":"#/components/schemas/o11y.O11yLogParseFrom","description":"TraceFlags says where a trace parser reads the trace flags from."},"trace_id":{"$ref":"#/components/schemas/o11y.O11yLogParseFrom","description":"TraceID says where a trace parser reads the trace id from."},"type":{"description":"Type is the processor type, e.g. grok_parser, regex_parser, json_parser,\ntrace_parser, time_parser, severity_parser, add, remove, move, copy.","type":"string"},"value":{"description":"Value is the value an add processor writes.","type":"string"}},"type":"object"},"o11y.O11yLogPipelinePreviewIn":{"properties":{"logs":{"description":"Logs are the sample records to transform.","items":{"$ref":"#/components/schemas/o11y.O11yLogRecord"},"type":"array"},"pipelines":{"description":"Pipelines are the pipelines to simulate, in order.","items":{"$ref":"#/components/schemas/o11y.O11yLogPipeline"},"type":"array"}},"type":"object"},"o11y.O11yLogPipelineRoute":{"properties":{"expr":{"description":"Expr is the expression that selects the route.","type":"string"},"output":{"description":"Output is the id of the processor the route sends to.","type":"string"}},"type":"object"},"o11y.O11yLogPostablePipeline":{"properties":{"alias":{"description":"Alias is the pipeline's short name.","type":"string"},"config":{"description":"Config is the pipeline's processors, in order.","items":{"$ref":"#/components/schemas/o11y.O11yLogPipelineOperator"},"type":"array"},"description":{"description":"Description says what the pipeline is for.","type":"string"},"enabled":{"description":"Enabled turns the pipeline on.","type":"boolean"},"filter":{"$ref":"#/components/schemas/o11y.O11yLogFilter","description":"Filter selects which records the pipeline processes."},"id":{"description":"ID is the pipeline's id. Empty on a new pipeline; the id it was listed\nwith to keep an existing one.","type":"string"},"name":{"description":"Name is the pipeline's display name.","type":"string"},"orderId":{"description":"OrderID is the pipeline's 1-based position in the set.","type":"integer"}},"type":"object"},"o11y.O11yLogPromoteIndex":{"properties":{"fieldDataType":{"description":"FieldDataType is the path's data type, e.g. string, number, bool.","type":"string"},"granularity":{"description":"Granularity is the index granularity in rows.","type":"integer"},"type":{"description":"Type is the index type, e.g. minmax, set(N), bloom_filter(P).","type":"string"}},"type":"object"},"o11y.O11yLogPromotePath":{"properties":{"indexes":{"description":"Indexes are the indexes to put on the path.","items":{"$ref":"#/components/schemas/o11y.O11yLogPromoteIndex"},"type":"array"},"path":{"description":"Path is the body path, e.g. body.user.id on the way in; listed without\nthe body. prefix.","type":"string"},"promote":{"description":"Promote lifts the path into its own column when true.","type":"boolean"}},"type":"object"},"o11y.O11yLogRecord":{"properties":{"attributes_bool":{"additionalProperties":{"type":"boolean"},"description":"AttributesBool are the record's boolean attributes.","type":"object"},"attributes_float":{"additionalProperties":{"type":"number"},"description":"AttributesFloat are the record's float attributes.","type":"object"},"attributes_int":{"additionalProperties":{"type":"integer"},"description":"AttributesInt are the record's integer attributes.","type":"object"},"attributes_string":{"additionalProperties":{"type":"string"},"description":"AttributesString are the record's string attributes.","type":"object"},"body":{"description":"Body is the record's body.","type":"string"},"id":{"description":"ID is the record's id.","type":"string"},"resources_string":{"additionalProperties":{"type":"string"},"description":"ResourcesString are the record's string resource attributes.","type":"object"},"severity_number":{"description":"SeverityNumber is the record's severity as a number.","type":"integer"},"severity_text":{"description":"SeverityText is the record's severity as text, e.g. ERROR.","type":"string"},"span_id":{"description":"SpanID is the span the record belongs to.","type":"string"},"timestamp":{"description":"Timestamp is the record's time as a nanosecond epoch.","type":"integer"},"trace_flags":{"description":"TraceFlags are the record's trace flags.","type":"integer"},"trace_id":{"description":"TraceID is the trace the record belongs to.","type":"string"}},"type":"object"},"o11y.O11yMetricField":{"properties":{"description":{"description":"Description describes the field.","type":"string"},"fieldContext":{"description":"FieldContext is the context the field lives in, e.g. resource, attribute.","type":"string"},"fieldDataType":{"description":"FieldDataType is the field's data type.","type":"string"},"name":{"description":"Name is the field's name.","type":"string"},"signal":{"description":"Signal is the telemetry signal the field belongs to.","type":"string"},"unit":{"description":"Unit is the field's unit.","type":"string"}},"type":"object"},"o11y.O11yMetricFilter":{"properties":{"expression":{"description":"Expression is the filter, in the query-builder filter syntax.","type":"string"}},"type":"object"},"o11y.O11yMetricInspectIn":{"properties":{"end":{"description":"End is the end of the window as a Unix timestamp in milliseconds, at most\nthirty minutes after start. Required.","type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.O11yMetricFilter","description":"Filter narrows the series returned."},"metricName":{"description":"MetricName is the metric to inspect. Required.","type":"string"},"start":{"description":"Start is the start of the window as a Unix timestamp in milliseconds. Required.","type":"integer"}},"required":["metricName","start","end"],"type":"object"},"o11y.O11yMetricMetadataSaveIn":{"properties":{"description":{"description":"Description describes the metric.","type":"string"},"isMonotonic":{"description":"IsMonotonic marks a sum that only ever increases.","type":"boolean"},"metricName":{"description":"MetricName is the metric to update. Required.","type":"string"},"temporality":{"description":"Temporality is delta or cumulative.","type":"string"},"type":{"description":"Type is the metric type, e.g. gauge, sum, histogram.","type":"string"},"unit":{"description":"Unit is the metric's unit.","type":"string"}},"required":["metricName"],"type":"object"},"o11y.O11yMetricOrder":{"properties":{"direction":{"description":"Direction is asc or desc.","type":"string"},"key":{"$ref":"#/components/schemas/o11y.O11yMetricField","description":"Key is the field to order by."}},"type":"object"},"o11y.O11yMetricStatsIn":{"properties":{"end":{"description":"End is the end of the window as a Unix timestamp in milliseconds. Required.","type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.O11yMetricFilter","description":"Filter narrows the metrics counted."},"limit":{"description":"Limit caps how many metrics come back, between 1 and 5000. Required.","type":"integer"},"offset":{"description":"Offset is how many metrics to skip, for paging.","type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.O11yMetricOrder","description":"OrderBy sorts the page, by samples or timeseries."},"start":{"description":"Start is the start of the window as a Unix timestamp in milliseconds. Required.","type":"integer"}},"required":["start","end","limit"],"type":"object"},"o11y.O11yMetricTreemapIn":{"properties":{"end":{"description":"End is the end of the window as a Unix timestamp in milliseconds. Required.","type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.O11yMetricFilter","description":"Filter narrows the metrics counted."},"limit":{"description":"Limit caps how many entries come back, between 1 and 5000. Required.","type":"integer"},"mode":{"description":"Mode picks the measure: timeseries or samples. Required.","type":"string"},"start":{"description":"Start is the start of the window as a Unix timestamp in milliseconds. Required.","type":"integer"}},"required":["start","end","limit","mode"],"type":"object"},"o11y.O11yMyServiceAccountUpdateIn":{"properties":{"name":{"description":"Name is the account's new name, under the same rules it was created with.\nRequired.","type":"string"}},"type":"object"},"o11y.O11yOIDCConfig":{"properties":{"claimMapping":{"$ref":"#/components/schemas/o11y.O11yAttributeMapping","description":"ClaimMapping names the token claims to read identity from."},"clientId":{"description":"ClientID is the OAuth application's id.","type":"string"},"clientSecret":{"description":"ClientSecret is the OAuth application's secret.","type":"string"},"getUserInfo":{"description":"GetUserInfo also queries the userinfo endpoint, for providers whose id\ntokens are thin.","type":"boolean"},"insecureSkipEmailVerified":{"description":"InsecureSkipEmailVerified admits addresses the provider has not\nverified.","type":"boolean"},"issuer":{"description":"Issuer is the provider's issuer URL.","type":"string"},"issuerAlias":{"description":"IssuerAlias overrides the issuer for providers whose discovery document\ndisagrees with their issuer URL.","type":"string"}},"type":"object"},"o11y.O11yObject":{"properties":{"resource":{"$ref":"#/components/schemas/o11y.O11yResourceRef","description":"Resource is the resource's type and kind."},"selector":{"description":"Selector picks the instance — an FGA object string, wildcard allowed.","type":"string"}},"type":"object"},"o11y.O11yObjectGroup":{"properties":{"resource":{"$ref":"#/components/schemas/o11y.O11yResourceRef","description":"Resource is the objects' type and kind."},"selectors":{"description":"Selectors pick the instances; a wildcard selects them all.","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yOperationsIn":{"properties":{"end":{"description":"End is the window's end, epoch nanoseconds as a string.","type":"string"},"limit":{"description":"Limit caps how many operations come back.","type":"integer"},"service":{"description":"Service is the service whose operations are read.","type":"string"},"start":{"description":"Start is the window's start, epoch nanoseconds as a string.","type":"string"},"tags":{"description":"Tags narrow the spans counted, each a span-attribute predicate.","items":{"$ref":"#/components/schemas/o11y.O11yServiceTag"},"type":"array"}},"type":"object"},"o11y.O11yOrganization":{"properties":{"alias":{"description":"Alias is an alternate name the org also answers to.","type":"string"},"createdAt":{"description":"CreatedAt is when the org was created.","format":"date-time","type":"string"},"displayName":{"description":"DisplayName is what the console shows for the org.","type":"string"},"id":{"description":"ID is the org id. On update it is ignored: the call always addresses the\ncaller's own org.","type":"string"},"key":{"description":"Key is the org's stable numeric key, derived from its id.","type":"integer"},"name":{"description":"Name is the org's short name.","type":"string"},"updatedAt":{"description":"UpdatedAt is when it last changed.","format":"date-time","type":"string"}},"type":"object"},"o11y.O11yPostableAuthDomain":{"properties":{"config":{"$ref":"#/components/schemas/o11y.O11yAuthDomainConfig","description":"Config is the domain's SSO configuration."},"name":{"description":"Name is the email domain being claimed, e.g. example.com.","type":"string"}},"type":"object"},"o11y.O11yPostableUser":{"properties":{"displayName":{"description":"DisplayName is the new member's display name.","type":"string"},"email":{"description":"Email is the new member's address. Required.","type":"string"},"frontendBaseUrl":{"description":"FrontendBaseUrl is the console origin the invite link is built on.","type":"string"},"userRoles":{"description":"UserRoles are the roles the member starts with, each by id.","items":{"$ref":"#/components/schemas/o11y.O11yRoleID"},"type":"array"}},"type":"object"},"o11y.O11yPublicDashboardWriteIn":{"properties":{"defaultTimeRange":{"type":"string"},"id":{"description":"ID is the dashboard id from the path.","type":"string"},"timeRangeEnabled":{"type":"boolean"}},"type":"object"},"o11y.O11yQueryRangePreviewIn":{"properties":{"compositeQuery":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.CompositeQuery"},"end":{"type":"integer"},"formatOptions":{"$ref":"#/components/schemas/o11y.FormatOptions"},"noCache":{"type":"boolean"},"requestType":{},"schemaVersion":{"type":"string"},"start":{"type":"integer"},"variables":{"additionalProperties":{"$ref":"#/components/schemas/o11y.VariableItem"},"type":"object"},"verbose":{"description":"Verbose selects the answer's depth. Empty or \"true\" renders the underlying\nDatastore SQL with EXPLAIN and granule analysis; \"false\" returns only the\nper-query valid/error/warnings verdict with no Datastore round trips.","type":"string"}},"type":"object"},"o11y.O11yQueueFilterKey":{"properties":{"dataType":{"description":"DataType is the attribute's type: string, int64, float64 or bool.","type":"string"},"isColumn":{"description":"IsColumn marks an attribute materialized as its own store column.","type":"boolean"},"isJSON":{"description":"IsJSON marks an attribute read out of the span's JSON body.","type":"boolean"},"key":{"description":"Key is the attribute name.","type":"string"},"type":{"description":"Type says which plane the attribute lives on: tag or resource.","type":"string"}},"type":"object"},"o11y.O11yQueueFilterRule":{"properties":{"key":{"$ref":"#/components/schemas/o11y.O11yQueueFilterKey","description":"Key names the attribute the predicate tests."},"op":{"description":"Op is the comparison, e.g. =, !=, in, contains.","type":"string"},"value":{"description":"Value is the operand; its JSON type follows the attribute's dataType.","type":"object"}},"type":"object"},"o11y.O11yQueueFilterSet":{"properties":{"items":{"description":"Items are the predicates.","items":{"$ref":"#/components/schemas/o11y.O11yQueueFilterRule"},"type":"array"},"op":{"description":"Op combines the items: AND or OR.","type":"string"}},"type":"object"},"o11y.O11yQueueIn":{"properties":{"end":{"description":"End is the window's end, epoch nanoseconds.","type":"integer"},"eval_time":{"description":"EvalTime bounds the span-evaluation scan, nanoseconds; only the\nspan/evaluation view reads it.","type":"integer"},"start":{"description":"Start is the window's start, epoch nanoseconds.","type":"integer"},"variables":{"additionalProperties":{"type":"string"},"description":"Variables name what the view drills into — topic, partition, service,\nconsumer_group — keyed by the name the view expects.","type":"object"}},"type":"object"},"o11y.O11yQueueListIn":{"properties":{"end":{"description":"End is the window's end, epoch nanoseconds.","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.O11yQueueFilterSet","description":"Filters narrow the rows by span attribute; null means all rows."},"limit":{"description":"Limit caps how many rows come back.","type":"integer"},"start":{"description":"Start is the window's start, epoch nanoseconds.","type":"integer"}},"type":"object"},"o11y.O11yReductionRuleCreateIn":{"properties":{"labels":{"description":"Labels are the label names the rule matches. Required, at least one.","items":{"type":"string"},"type":"array"},"matchType":{"description":"MatchType is drop or keep: drop the named labels, or keep only them. Required.","type":"string"},"metricName":{"description":"MetricName is the metric the rule governs; one rule per metric. Required.","type":"string"}},"required":["metricName","matchType","labels"],"type":"object"},"o11y.O11yReductionRulePreviewIn":{"properties":{"labels":{"description":"Labels are the label names the rule would match. Required, at least one.","items":{"type":"string"},"type":"array"},"lookbackMs":{"description":"LookbackMs is how far back to sample when estimating.","type":"integer"},"matchType":{"description":"MatchType is drop or keep. Required.","type":"string"},"metricName":{"description":"MetricName is the metric the rule would govern. Required.","type":"string"}},"required":["metricName","matchType","labels"],"type":"object"},"o11y.O11yReductionRuleSaveIn":{"properties":{"id":{"description":"ID is the rule's id.","type":"string"},"labels":{"description":"Labels are the label names the rule matches. Required, at least one.","items":{"type":"string"},"type":"array"},"matchType":{"description":"MatchType is drop or keep. Required.","type":"string"}},"required":["id","matchType","labels"],"type":"object"},"o11y.O11yRegisterIn":{"properties":{"email":{"description":"Email is the admin's email. Required.","type":"string"},"name":{"description":"Name is the admin's display name.","type":"string"},"orgDisplayName":{"description":"OrgDisplayName is the organization's display name.","type":"string"},"orgName":{"description":"OrgName is the organization's name.","type":"string"},"password":{"description":"Password is the admin's password.","type":"string"}},"required":["email"],"type":"object"},"o11y.O11yResetPasswordIn":{"properties":{"password":{"description":"Password is the new password.","type":"string"},"token":{"description":"Token is the reset-password token authorizing the change.","type":"string"}},"type":"object"},"o11y.O11yResetTokenRef":{"properties":{"token":{"description":"Token is the reset-password token.","type":"string"}},"type":"object"},"o11y.O11yResourceRef":{"properties":{"kind":{"description":"Kind is the resource kind the type belongs to.","type":"string"},"type":{"description":"Type is the resource type, e.g. role, dashboard, serviceaccount.","type":"string"}},"type":"object"},"o11y.O11yRetentionMatch":{"properties":{"key":{"description":"Key is the label to test.","type":"string"},"values":{"description":"Values are the label values the rule matches.","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yRetentionRule":{"properties":{"conditions":{"description":"Conditions all have to hold for the rule to match.","items":{"$ref":"#/components/schemas/o11y.O11yRetentionMatch"},"type":"array"},"ttlDays":{"description":"TTLDays is the retention applied when it does, in days.","type":"integer"}},"type":"object"},"o11y.O11yRetentionSetIn":{"properties":{"coldStorageDurationDays":{"description":"ColdStorageDurationDays is how old data must be before it moves, in days.","type":"integer"},"coldStorageVolume":{"description":"ColdStorageVolume names the volume aged data moves to, when set.","type":"string"},"defaultTTLDays":{"description":"DefaultTTLDays is the retention for data no rule matches, in days.","type":"integer"},"ttlConditions":{"description":"TTLConditions are ordered per-label rules; the first matching rule wins.","items":{"$ref":"#/components/schemas/o11y.O11yRetentionRule"},"type":"array"},"type":{"description":"Type is the signal the policy applies to — traces, metrics or logs.","type":"string"}},"type":"object"},"o11y.O11yRoleCreateIn":{"properties":{"description":{"description":"Description says what the role is for.","type":"string"},"name":{"description":"Name is the role's name: lowercase letters and hyphens, at most 50\ncharacters, not starting with the reserved managed-role prefix. Required.","type":"string"},"transactionGroups":{"description":"TransactionGroups are the grants the role carries.","items":{"$ref":"#/components/schemas/o11y.O11yTransactionGroup"},"type":"array"}},"type":"object"},"o11y.O11yRoleID":{"properties":{"id":{"description":"ID is the role id.","type":"string"}},"type":"object"},"o11y.O11yRoleMapping":{"properties":{"defaultRole":{"description":"DefaultRole is the role when no group mapping applies.","type":"string"},"groupMappings":{"additionalProperties":{"type":"string"},"description":"GroupMappings maps a provider group name to a role name.","type":"object"},"useRoleAttribute":{"description":"UseRoleAttribute reads the role straight from the provider's role claim\ninstead of the group mappings.","type":"boolean"}},"type":"object"},"o11y.O11yRoleUpdateIn":{"properties":{"description":{"description":"Description says what the role is for. Required — send an empty string to\nclear it.","type":"string"},"transactionGroups":{"description":"TransactionGroups are the grants the role carries. Required — send an\nempty array to clear them.","items":{"$ref":"#/components/schemas/o11y.O11yTransactionGroup"},"type":"array"}},"type":"object"},"o11y.O11yRotateSessionIn":{"properties":{"refreshToken":{"description":"RefreshToken is the refresh token being redeemed.","type":"string"}},"type":"object"},"o11y.O11yRoutePolicyUpdateIn":{"properties":{"channels":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"expression":{"type":"string"},"kind":{},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yRuleHistoryQueryIn":{"properties":{"end":{"type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"limit":{"type":"integer"},"offset":{"type":"integer"},"order":{"type":"string"},"start":{"type":"integer"},"state":{"type":"string"}},"type":"object"},"o11y.O11ySAMLConfig":{"properties":{"attributeMapping":{"$ref":"#/components/schemas/o11y.O11yAttributeMapping","description":"AttributeMapping names the assertion attributes to read identity from."},"insecureSkipAuthNRequestsSigned":{"description":"InsecureSkipAuthNRequestsSigned skips signing outgoing AuthN requests,\nfor IdPs that refuse signed ones.","type":"boolean"},"samlCert":{"description":"SamlCert is the IdP's signing certificate.","type":"string"},"samlEntity":{"description":"SamlEntity is the IdP's entityID.","type":"string"},"samlIdp":{"description":"SamlIdp is the IdP's single-sign-on endpoint.","type":"string"}},"type":"object"},"o11y.O11ySavedViewUpdateIn":{"properties":{"category":{"type":"string"},"compositeQuery":{"$ref":"#/components/schemas/o11y.CompositeQuery"},"createdAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"extraData":{"type":"string"},"id":{},"name":{"type":"string"},"sourcePage":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"updatedBy":{"type":"string"},"viewId":{"description":"ViewID is the id of the view to replace, taken from the URL.","type":"string"}},"type":"object"},"o11y.O11ySentryPostableProject":{"properties":{"name":{"description":"Name is the project's display name. Required.","type":"string"},"platform":{"description":"Platform is the reporting runtime, e.g. go, python, javascript.","type":"string"},"slug":{"description":"Slug is the project's short name. Server-assigned from Name when empty.","type":"string"}},"required":["name"],"type":"object"},"o11y.O11ySentryUpdateIssueIn":{"properties":{"assignee":{"description":"Assignee is who the issue is assigned to.","type":"string"},"id":{"description":"ID is the issue id.","type":"string"},"status":{"description":"Status is the new lifecycle state: unresolved, resolved or ignored.","type":"string"}},"required":["id"],"type":"object"},"o11y.O11yServiceAccountCreateIn":{"properties":{"name":{"description":"Name is the account's name: a lowercase letter followed by lowercase\nletters, digits or hyphens, at most 50 characters. Required.","type":"string"}},"type":"object"},"o11y.O11yServiceAccountRoleGrantIn":{"properties":{"id":{"description":"RoleID is the id of the role to assign. Required.","type":"string"}},"type":"object"},"o11y.O11yServiceAccountUpdateIn":{"properties":{"name":{"description":"Name is the account's new name, under the same rules it was created with.\nRequired.","type":"string"}},"type":"object"},"o11y.O11yServiceTag":{"properties":{"BoolValues":{"description":"BoolValues are the boolean operands, when the attribute is a bool.","items":{"type":"boolean"},"type":"array"},"Key":{"description":"Key is the span attribute to test.","type":"string"},"NumberValues":{"description":"NumberValues are the numeric operands, when the attribute is a number.","items":{"type":"number"},"type":"array"},"Operator":{"description":"Operator is how to test it, e.g. in, not_in.","type":"string"},"StringValues":{"description":"StringValues are the string operands, when the attribute is a string.","items":{"type":"string"},"type":"array"},"TagType":{"description":"TagType says which plane the attribute lives on, e.g. tag or resource.","type":"string"}},"type":"object"},"o11y.O11yServicesIn":{"properties":{"end":{"description":"End is the window's end, epoch nanoseconds as a string.","type":"string"},"start":{"description":"Start is the window's start, epoch nanoseconds as a string.","type":"string"},"tags":{"description":"Tags narrow the spans counted, each a span-attribute predicate.","items":{"$ref":"#/components/schemas/o11y.O11yServiceTag"},"type":"array"}},"type":"object"},"o11y.O11ySetRoleIn":{"properties":{"name":{"description":"Name is the role name to assign.","type":"string"}},"type":"object"},"o11y.O11ySpanMapperCreateIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.SpanMapperConfig"},"enabled":{"type":"boolean"},"fieldContext":{},"name":{"type":"string"}},"type":"object"},"o11y.O11ySpanMapperGroupUpdateIn":{"properties":{"condition":{"$ref":"#/components/schemas/o11y.SpanMapperGroupCondition"},"enabled":{"type":"boolean"},"name":{"type":"string"}},"type":"object"},"o11y.O11ySpanMapperUpdateIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.SpanMapperConfig"},"enabled":{"type":"boolean"},"fieldContext":{}},"type":"object"},"o11y.O11ySpanPercentileIn":{"properties":{"end":{"description":"End is the window end, as epoch nanoseconds.","type":"integer"},"name":{"description":"Name is the span name whose peers are compared. Required.","type":"string"},"resourceAttributes":{"additionalProperties":{"type":"string"},"description":"ResourceAttributes narrow the peer group to spans carrying them all.","type":"object"},"serviceName":{"description":"ServiceName is the service the span belongs to. Required.","type":"string"},"spanDuration":{"description":"SpanDuration is the span's duration in nanoseconds.","type":"integer"},"start":{"description":"Start is the window start, as epoch nanoseconds.","type":"integer"}},"required":["name","serviceName"],"type":"object"},"o11y.O11yTagFilter":{"properties":{"boolValues":{"description":"BoolValues are the values matched when the tag holds booleans.","items":{"type":"boolean"},"type":"array"},"key":{"description":"Key is the tag to test.","type":"string"},"numberValues":{"description":"NumberValues are the values matched when the tag holds numbers.","items":{"type":"number"},"type":"array"},"operator":{"description":"Operator is the comparison to apply — in, not_in, equals, contains and\nthe other operators the trace filter grammar names.","type":"string"},"stringValues":{"description":"StringValues are the values matched when the tag holds strings.","items":{"type":"string"},"type":"array"},"tagType":{"description":"TagType says which kind of value the tag holds: string, number or bool.","type":"string"}},"type":"object"},"o11y.O11yTagQuery":{"properties":{"boolValues":{"description":"BoolValues are the boolean values to test against.","items":{"type":"boolean"},"type":"array"},"key":{"description":"Key is the tag to test.","type":"string"},"numberValues":{"description":"NumberValues are the numeric values to test against.","items":{"type":"number"},"type":"array"},"operator":{"description":"Operator is the comparison, e.g. in, nin, contains, exists.","type":"string"},"stringValues":{"description":"StringValues are the string values to test against.","items":{"type":"string"},"type":"array"},"tagType":{"description":"TagType is where the tag lives, e.g. ResourceAttribute, SpanAttribute.","type":"string"}},"type":"object"},"o11y.O11yTopLevelOpsIn":{"properties":{"end":{"description":"End is the window's end, epoch nanoseconds as a string; empty means\nunbounded.","type":"string"},"service":{"description":"Service narrows the map to one service when set.","type":"string"},"start":{"description":"Start is the window's start, epoch nanoseconds as a string; empty means\nunbounded.","type":"string"}},"type":"object"},"o11y.O11yTraceAggregationsIn":{"properties":{"aggregations":{"items":{"$ref":"#/components/schemas/o11y.SpanAggregation"},"type":"array"}},"type":"object"},"o11y.O11yTraceFlamegraphIn":{"properties":{"selectFields":{"items":{"$ref":"#/components/schemas/o11y.TelemetryFieldKey"},"type":"array"},"selectedSpanId":{"type":"string"}},"type":"object"},"o11y.O11yTraceWaterfallIn":{"properties":{"selectedSpanId":{"type":"string"},"uncollapsedSpans":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yTransaction":{"properties":{"object":{"$ref":"#/components/schemas/o11y.O11yObject","description":"Object is the resource the verb would act on."},"relation":{"description":"Relation is the verb being asked about, e.g. read, create, update, delete.","type":"string"}},"type":"object"},"o11y.O11yTransactionGroup":{"properties":{"objectGroup":{"$ref":"#/components/schemas/o11y.O11yObjectGroup","description":"ObjectGroup is the set of objects it allows the verb on."},"relation":{"description":"Relation is the verb the grant allows.","type":"string"}},"type":"object"},"o11y.O11yUpdatableAuthDomain":{"properties":{"config":{"$ref":"#/components/schemas/o11y.O11yAuthDomainConfig","description":"Config is the SSO configuration to store."}},"type":"object"},"o11y.O11yUpdatablePreference":{"properties":{"value":{"description":"Value is the value to set; its JSON type must match the preference's\ndeclared value type.","type":"object"}},"type":"object"},"o11y.O11yUpdatableQuickFilters":{"properties":{"filters":{"description":"Filters are the attributes to offer, in the order to offer them.","items":{"$ref":"#/components/schemas/o11y.O11yFilterKey"},"type":"array"},"signal":{"description":"Signal is the signal whose filters are being replaced.","type":"string"}},"type":"object"},"o11y.O11yUpdatableUser":{"properties":{"displayName":{"description":"DisplayName is the new display name.","type":"string"}},"type":"object"},"o11y.O11yUpdateAccountIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.UpdatableAccountConfig"}},"type":"object"},"o11y.O11yUpdateIngestionKeyIn":{"properties":{"expires_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yUpdateLimitIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.LimitConfig"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.O11yUpdateServiceIn":{"properties":{"config":{"$ref":"#/components/schemas/o11y.ServiceConfig"}},"type":"object"},"o11y.O11yUserUpdate":{"properties":{"displayName":{"description":"DisplayName is the new display name.","type":"string"}},"type":"object"},"o11y.OAuth2":{"properties":{"TLSConfig":{"$ref":"#/components/schemas/o11y.TLSConfig"},"audience":{"description":"Audience optionally specifies the intended audience of the\nrequest. If empty, the value of TokenURL is used as the\nintended audience. Only used if\nGrantType is set to \"urn:ietf:params:oauth:grant-type:jwt-bearer\".","type":"string"},"claims":{"additionalProperties":{"type":"object"},"description":"Claims is a map of claims to be added to the JWT token. Only used if\nGrantType is set to \"urn:ietf:params:oauth:grant-type:jwt-bearer\".","type":"object"},"client_certificate_key":{},"client_certificate_key_file":{"type":"string"},"client_certificate_key_id":{"type":"string"},"client_certificate_key_ref":{"description":"ClientCertificateKeyRef is the name of the secret within the secret manager to use as the client\nsecret.","type":"string"},"client_id":{"type":"string"},"client_secret":{},"client_secret_file":{"type":"string"},"client_secret_ref":{"description":"ClientSecretRef is the name of the secret within the secret manager to use as the client\nsecret.","type":"string"},"endpoint_params":{"additionalProperties":{"type":"string"},"type":"object"},"grant_type":{"description":"GrantType is the OAuth2 grant type to use. It can be one of\n\"client_credentials\" or \"urn:ietf:params:oauth:grant-type:jwt-bearer\" (RFC 7523).\nDefault value is \"client_credentials\"","type":"string"},"iss":{"description":"Iss is the OAuth client identifier used when communicating with\nthe configured OAuth provider. Default value is client_id. Only used if\nGrantType is set to \"urn:ietf:params:oauth:grant-type:jwt-bearer\".","type":"string"},"no_proxy":{"type":"string"},"proxy_connect_header":{"additionalProperties":{"items":{},"type":"array"},"type":"object"},"proxy_from_environment":{"type":"boolean"},"proxy_url":{},"scopes":{"items":{"type":"string"},"type":"array"},"signature_algorithm":{"description":"SignatureAlgorithm is the RSA algorithm used to sign JWT token. Only used if\nGrantType is set to \"urn:ietf:params:oauth:grant-type:jwt-bearer\".\nDefault value is RS256 and valid values RS256, RS384, RS512","type":"string"},"token_url":{"type":"string"}},"type":"object"},"o11y.OpsGenieConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"actions":{"type":"string"},"api_key":{},"api_key_file":{"type":"string"},"api_url":{},"description":{"type":"string"},"details":{"additionalProperties":{"type":"string"},"type":"object"},"entity":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"note":{"type":"string"},"priority":{"type":"string"},"responders":{"items":{"$ref":"#/components/schemas/o11y.OpsGenieConfigResponder"},"type":"array"},"source":{"type":"string"},"tags":{"type":"string"},"update_alerts":{"type":"boolean"}},"type":"object"},"o11y.OpsGenieConfigResponder":{"properties":{"id":{"description":"One of those 3 should be filled.","type":"string"},"name":{"type":"string"},"type":{"description":"team, user, escalation, schedule etc.","type":"string"},"username":{"type":"string"}},"type":"object"},"o11y.OrderBy":{"properties":{"columnName":{"type":"string"},"order":{"type":"string"}},"type":"object"},"o11y.OrderByKey":{"properties":{"description":{"type":"string"},"fieldContext":{},"fieldDataType":{},"name":{"type":"string"},"signal":{},"unit":{"type":"string"}},"required":["name"],"type":"object"},"o11y.PagerdutyConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"class":{"type":"string"},"client":{"type":"string"},"client_url":{"type":"string"},"component":{"type":"string"},"description":{"type":"string"},"details":{"additionalProperties":{"type":"object"},"type":"object"},"group":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"images":{"items":{"$ref":"#/components/schemas/o11y.PagerdutyImage"},"type":"array"},"links":{"items":{"$ref":"#/components/schemas/o11y.PagerdutyLink"},"type":"array"},"routing_key":{},"routing_key_file":{"type":"string"},"service_key":{},"service_key_file":{"type":"string"},"severity":{"type":"string"},"source":{"type":"string"},"timeout":{"description":"Timeout is the maximum time allowed to invoke the pagerduty. Setting this to 0\ndoes not impose a timeout.","type":"integer"},"url":{}},"type":"object"},"o11y.PagerdutyImage":{"properties":{"alt":{"type":"string"},"href":{"type":"string"},"src":{"type":"string"}},"type":"object"},"o11y.PagerdutyLink":{"properties":{"href":{"type":"string"},"text":{"type":"string"}},"type":"object"},"o11y.PodListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.PostableAccountConfig":{"properties":{"AgentVersion":{"description":"as agent version is common for all providers, we can keep it at top level of this struct","type":"string"},"aws":{"$ref":"#/components/schemas/o11y.AWSPostableAccountConfig"},"azure":{"$ref":"#/components/schemas/o11y.AzureAccountConfig"},"gcp":{"$ref":"#/components/schemas/o11y.GCPAccountConfig"}},"type":"object"},"o11y.PostableChannel":{"properties":{"Receiver":{"$ref":"#/components/schemas/o11y.Receiver"},"googlechat_configs":{"items":{"$ref":"#/components/schemas/o11y.GoogleChatReceiverConfig"},"type":"array"}},"type":"object"},"o11y.PostableClusters":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableDaemonSets":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableDeployments":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableHost":{"properties":{"name":{"type":"string"}},"type":"object"},"o11y.PostableHosts":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.HostFilter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableIngestionKey":{"properties":{"expires_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.PostableJobs":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableNamespaces":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableNodes":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostablePlannedMaintenance":{"properties":{"alertIds":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"name":{"type":"string"},"schedule":{},"scope":{"type":"string"}},"type":"object"},"o11y.PostablePods":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableProfile":{"properties":{"existing_observability_tool":{"type":"string"},"has_existing_observability_tool":{"type":"boolean"},"logs_scale_per_day_in_gb":{"type":"integer"},"number_of_hosts":{"type":"integer"},"number_of_services":{"type":"integer"},"reasons_for_interest_in_o11y":{"items":{"type":"string"},"type":"array"},"timeline_for_migrating_to_o11y":{"type":"string"},"uses_otel":{"type":"boolean"},"where_did_you_discover_o11y":{"type":"string"}},"type":"object"},"o11y.PostableRoutePolicy":{"properties":{"channels":{"items":{"type":"string"},"type":"array"},"description":{"type":"string"},"expression":{"type":"string"},"kind":{},"name":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.PostableSpanMapperGroup":{"properties":{"condition":{"$ref":"#/components/schemas/o11y.SpanMapperGroupCondition"},"enabled":{"type":"boolean"},"name":{"type":"string"}},"type":"object"},"o11y.PostableStatefulSets":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.PostableVolumes":{"properties":{"end":{"type":"integer"},"filter":{"$ref":"#/components/schemas/o11y.Filter"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.GroupByKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.OrderBy"},"start":{"type":"integer"}},"type":"object"},"o11y.ProcessListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.PromQuery":{"properties":{"disabled":{"type":"boolean"},"legend":{"type":"string"},"query":{"type":"string"},"stats":{"type":"string"}},"type":"object"},"o11y.PushoverConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"device":{"type":"string"},"expire":{"type":"integer"},"html":{"type":"boolean"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"monospace":{"type":"boolean"},"priority":{"type":"string"},"retry":{"type":"integer"},"sound":{"type":"string"},"title":{"type":"string"},"token":{},"token_file":{"type":"string"},"ttl":{"type":"integer"},"url":{"type":"string"},"url_title":{"type":"string"},"user_key":{},"user_key_file":{"type":"string"}},"type":"object"},"o11y.QueryEnvelope":{"properties":{"spec":{"description":"Spec is the deferred decoding of the query if any.","type":"object"},"type":{"description":"Type is the type of the query."}},"type":"object"},"o11y.QueryRangeParamsV3":{"properties":{"compositeQuery":{"$ref":"#/components/schemas/o11y.CompositeQuery"},"end":{"type":"integer"},"formatForWeb":{"type":"boolean"},"noCache":{"type":"boolean"},"start":{"type":"integer"},"step":{"description":"step is in seconds; used for prometheus queries","type":"integer"},"variables":{"additionalProperties":{"type":"object"},"type":"object"}},"type":"object"},"o11y.QueryRangeRequest":{"properties":{"compositeQuery":{"$ref":"#/components/schemas/o11y.querybuildertypesv5.CompositeQuery","description":"CompositeQuery is the composite query to use for the request."},"end":{"description":"End is the end time of the query in epoch milliseconds.","type":"integer"},"formatOptions":{"$ref":"#/components/schemas/o11y.FormatOptions"},"noCache":{"description":"NoCache is a flag to disable caching for the request.","type":"boolean"},"requestType":{"description":"RequestType is the type of the request."},"schemaVersion":{"description":"SchemaVersion is the version of the schema to use for the request payload.","type":"string"},"start":{"description":"Start is the start time of the query in epoch milliseconds.","type":"integer"},"variables":{"additionalProperties":{"$ref":"#/components/schemas/o11y.VariableItem"},"description":"Variables is the variables to use for the request.","type":"object"}},"type":"object"},"o11y.Receiver":{"properties":{"discord_configs":{"items":{"$ref":"#/components/schemas/o11y.DiscordConfig"},"type":"array"},"email_configs":{"items":{"$ref":"#/components/schemas/o11y.EmailConfig"},"type":"array"},"incidentio_configs":{"items":{"$ref":"#/components/schemas/o11y.IncidentioConfig"},"type":"array"},"jira_configs":{"items":{"$ref":"#/components/schemas/o11y.JiraConfig"},"type":"array"},"mattermost_configs":{"items":{"$ref":"#/components/schemas/o11y.MattermostConfig"},"type":"array"},"msteams_configs":{"items":{"$ref":"#/components/schemas/o11y.MSTeamsConfig"},"type":"array"},"msteamsv2_configs":{"items":{"$ref":"#/components/schemas/o11y.MSTeamsV2Config"},"type":"array"},"name":{"description":"A unique identifier for this receiver.","type":"string"},"opsgenie_configs":{"items":{"$ref":"#/components/schemas/o11y.OpsGenieConfig"},"type":"array"},"pagerduty_configs":{"items":{"$ref":"#/components/schemas/o11y.PagerdutyConfig"},"type":"array"},"pushover_configs":{"items":{"$ref":"#/components/schemas/o11y.PushoverConfig"},"type":"array"},"rocketchat_configs":{"items":{"$ref":"#/components/schemas/o11y.RocketchatConfig"},"type":"array"},"slack_configs":{"items":{"$ref":"#/components/schemas/o11y.SlackConfig"},"type":"array"},"sns_configs":{"items":{"$ref":"#/components/schemas/o11y.SNSConfig"},"type":"array"},"telegram_configs":{"items":{"$ref":"#/components/schemas/o11y.TelegramConfig"},"type":"array"},"victorops_configs":{"items":{"$ref":"#/components/schemas/o11y.VictorOpsConfig"},"type":"array"},"webex_configs":{"items":{"$ref":"#/components/schemas/o11y.WebexConfig"},"type":"array"},"webhook_configs":{"items":{"$ref":"#/components/schemas/o11y.WebhookConfig"},"type":"array"},"wechat_configs":{"items":{"$ref":"#/components/schemas/o11y.WechatConfig"},"type":"array"}},"type":"object"},"o11y.RocketchatAttachmentAction":{"properties":{"image_url":{"type":"string"},"is_webview":{"type":"boolean"},"msg":{"type":"string"},"msg_in_chat_window":{"type":"boolean"},"msg_processing_type":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"},"webview_height_ratio":{"type":"string"}},"type":"object"},"o11y.RocketchatAttachmentField":{"properties":{"short":{"type":"boolean"},"title":{"type":"string"},"value":{"type":"string"}},"type":"object"},"o11y.RocketchatConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"actions":{"items":{"$ref":"#/components/schemas/o11y.RocketchatAttachmentAction"},"type":"array"},"api_url":{},"channel":{"description":"RocketChat channel override, (like #other-channel or @username).","type":"string"},"color":{"type":"string"},"emoji":{"type":"string"},"fields":{"items":{"$ref":"#/components/schemas/o11y.RocketchatAttachmentField"},"type":"array"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"icon_url":{"type":"string"},"image_url":{"type":"string"},"link_names":{"type":"boolean"},"short_fields":{"type":"boolean"},"text":{"type":"string"},"thumb_url":{"type":"string"},"title":{"type":"string"},"title_link":{"type":"string"},"token":{},"token_file":{"type":"string"},"token_id":{},"token_id_file":{"type":"string"}},"type":"object"},"o11y.SNSConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"api_url":{"type":"string"},"attributes":{"additionalProperties":{"type":"string"},"type":"object"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"phone_number":{"type":"string"},"sigv4":{"$ref":"#/components/schemas/o11y.SigV4Config"},"subject":{"type":"string"},"target_arn":{"type":"string"},"topic_arn":{"type":"string"}},"type":"object"},"o11y.SavedView":{"properties":{"category":{"type":"string"},"compositeQuery":{"$ref":"#/components/schemas/o11y.CompositeQuery"},"createdAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"extraData":{"description":"ExtraData is JSON encoded data used by frontend to store additional data","type":"string"},"id":{},"name":{"type":"string"},"sourcePage":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array"},"updatedAt":{"format":"date-time","type":"string"},"updatedBy":{"type":"string"}},"type":"object"},"o11y.ServiceConfig":{"properties":{"aws":{"$ref":"#/components/schemas/o11y.AWSServiceConfig"},"azure":{"$ref":"#/components/schemas/o11y.AzureServiceConfig"},"gcp":{"$ref":"#/components/schemas/o11y.GCPServiceConfig"}},"type":"object"},"o11y.SigV4Config":{"properties":{"AccessKey":{"type":"string"},"ExternalID":{"type":"string"},"Profile":{"type":"string"},"Region":{"type":"string"},"RoleARN":{"type":"string"},"SecretKey":{},"ServiceName":{"type":"string"},"UseFIPSSTSEndpoint":{"type":"boolean"}},"type":"object"},"o11y.SlackAction":{"properties":{"confirm":{"$ref":"#/components/schemas/o11y.SlackConfirmationField"},"name":{"type":"string"},"style":{"type":"string"},"text":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"},"value":{"type":"string"}},"type":"object"},"o11y.SlackConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"actions":{"items":{"$ref":"#/components/schemas/o11y.SlackAction"},"type":"array"},"api_url":{},"api_url_file":{"type":"string"},"app_token":{},"app_token_file":{"type":"string"},"app_url":{},"callback_id":{"type":"string"},"channel":{"description":"Slack channel override, (like #other-channel or @username).","type":"string"},"color":{"type":"string"},"fallback":{"type":"string"},"fields":{"items":{"$ref":"#/components/schemas/o11y.SlackField"},"type":"array"},"footer":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"icon_emoji":{"type":"string"},"icon_url":{"type":"string"},"image_url":{"type":"string"},"link_names":{"type":"boolean"},"message_text":{"type":"string"},"mrkdwn_in":{"items":{"type":"string"},"type":"array"},"pretext":{"type":"string"},"short_fields":{"type":"boolean"},"text":{"type":"string"},"thumb_url":{"type":"string"},"timeout":{"description":"Timeout is the maximum time allowed to invoke the slack. Setting this to 0\ndoes not impose a timeout.","type":"integer"},"title":{"type":"string"},"title_link":{"type":"string"},"username":{"type":"string"}},"type":"object"},"o11y.SlackConfirmationField":{"properties":{"dismiss_text":{"type":"string"},"ok_text":{"type":"string"},"text":{"type":"string"},"title":{"type":"string"}},"type":"object"},"o11y.SlackField":{"properties":{"short":{"type":"boolean"},"title":{"type":"string"},"value":{"type":"string"}},"type":"object"},"o11y.SpanAggregation":{"properties":{"aggregation":{},"field":{"$ref":"#/components/schemas/o11y.TelemetryFieldKey"}},"type":"object"},"o11y.SpanMapperConfig":{"properties":{"sources":{"items":{"$ref":"#/components/schemas/o11y.SpanMapperSource"},"type":"array"}},"type":"object"},"o11y.SpanMapperGroupCondition":{"properties":{"attributes":{"items":{"type":"string"},"type":"array"},"resource":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.SpanMapperSource":{"properties":{"context":{},"key":{"type":"string"},"operation":{},"priority":{"type":"integer"}},"type":"object"},"o11y.StatefulSetListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.TLSConfig":{"properties":{"ca":{"description":"Text of the CA cert to use for the targets.","type":"string"},"ca_file":{"description":"The CA cert to use for the targets.","type":"string"},"ca_ref":{"description":"CARef is the name of the secret within the secret manager to use as the CA cert for the\ntargets.","type":"string"},"cert":{"description":"Text of the client cert file for the targets.","type":"string"},"cert_file":{"description":"The client cert file for the targets.","type":"string"},"cert_ref":{"description":"CertRef is the name of the secret within the secret manager to use as the client cert for\nthe targets.","type":"string"},"insecure_skip_verify":{"description":"Disable target certificate validation.","type":"boolean"},"key":{"description":"Text of the client key file for the targets."},"key_file":{"description":"The client key file for the targets.","type":"string"},"key_ref":{"description":"KeyRef is the name of the secret within the secret manager to use as the client key for\nthe targets.","type":"string"},"max_version":{"description":"Maximum TLS version."},"min_version":{"description":"Minimum TLS version."},"server_name":{"description":"Used to verify the hostname for the targets.","type":"string"}},"type":"object"},"o11y.TelegramConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"api_url":{},"chat":{"type":"integer"},"chat_file":{"type":"string"},"disable_notifications":{"type":"boolean"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"message_thread_id":{"type":"integer"},"parse_mode":{"type":"string"},"token":{},"token_file":{"type":"string"}},"type":"object"},"o11y.TelemetryFieldKey":{"properties":{"description":{"type":"string"},"fieldContext":{},"fieldDataType":{},"name":{"type":"string"},"signal":{},"unit":{"type":"string"}},"required":["name"],"type":"object"},"o11y.ThreadingConfig":{"properties":{"enabled":{"type":"boolean"},"thread_by_date":{"type":"string"}},"type":"object"},"o11y.UninstallIntegrationRequest":{"properties":{"integration_id":{"type":"string"}},"type":"object"},"o11y.UpdatableAccountConfig":{"properties":{"aws":{"$ref":"#/components/schemas/o11y.AWSAccountConfig"},"azure":{"$ref":"#/components/schemas/o11y.UpdatableAzureAccountConfig"},"gcp":{"$ref":"#/components/schemas/o11y.UpdatableGCPAccountConfig"}},"type":"object"},"o11y.UpdatableAzureAccountConfig":{"properties":{"resourceGroups":{"items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.UpdatableGCPAccountConfig":{"properties":{"deploymentProjectId":{"description":"Project ID where central pub/sub for logs exist","type":"string"},"deploymentRegion":{"description":"Compute service region where otel collector will be deployed","type":"string"},"projectIds":{"description":"List of project IDs to monitor","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.VariableItem":{"properties":{"type":{},"value":{"type":"object"}},"type":"object"},"o11y.VictorOpsConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"api_key":{},"api_key_file":{"type":"string"},"api_url":{},"custom_fields":{"additionalProperties":{"type":"string"},"type":"object"},"entity_display_name":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message_type":{"type":"string"},"monitoring_tool":{"type":"string"},"routing_key":{"type":"string"},"state_message":{"type":"string"}},"type":"object"},"o11y.VolumeListRequest":{"properties":{"end":{"description":"epoch time in ms","type":"integer"},"filters":{"$ref":"#/components/schemas/o11y.FilterSet"},"groupBy":{"items":{"$ref":"#/components/schemas/o11y.AttributeKey"},"type":"array"},"limit":{"type":"integer"},"offset":{"type":"integer"},"orderBy":{"$ref":"#/components/schemas/o11y.OrderBy"},"start":{"description":"epoch time in ms","type":"integer"}},"type":"object"},"o11y.WebexConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"api_url":{},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"room_id":{"type":"string"}},"type":"object"},"o11y.WebhookConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"max_alerts":{"description":"MaxAlerts is the maximum number of alerts to be sent per webhook message.\nAlerts exceeding this threshold will be truncated. Setting this to 0\nallows an unlimited number of alerts.","type":"integer"},"timeout":{"description":"Timeout is the maximum time allowed to invoke the webhook. Setting this to 0\ndoes not impose a timeout.","type":"integer"},"url":{"description":"URL to send POST request to."},"url_file":{"type":"string"}},"type":"object"},"o11y.WechatConfig":{"properties":{"NotifierConfig":{"$ref":"#/components/schemas/o11y.NotifierConfig"},"agent_id":{"type":"string"},"api_secret":{},"api_secret_file":{"type":"string"},"api_url":{},"corp_id":{"type":"string"},"http_config":{"$ref":"#/components/schemas/o11y.HTTPClientConfig"},"message":{"type":"string"},"message_type":{"type":"string"},"to_party":{"type":"string"},"to_tag":{"type":"string"},"to_user":{"type":"string"}},"type":"object"},"o11y.addItemsIn":{"properties":{"id":{"description":"ID is the annotation queue to add to, from the path.","type":"string"},"items":{"description":"Items are the objects to enqueue for review, 1–200 per request. Each names\nexactly one object.","items":{"$ref":"#/components/schemas/o11y.itemInput"},"type":"array"}},"type":"object"},"o11y.alertmanagertypes.Receiver":{"properties":{"Receiver":{"$ref":"#/components/schemas/o11y.Receiver"},"googlechat_configs":{"items":{"$ref":"#/components/schemas/o11y.GoogleChatReceiverConfig"},"type":"array"}},"type":"object"},"o11y.createQueueReq":{"properties":{"description":{"description":"Description is optional free text, up to 512 characters.","type":"string"},"name":{"description":"Name is the queue's display handle, 1–128 printable characters. It must be\nunique within the org's project. Required.","type":"string"},"scoreConfigIds":{"description":"ScoreConfigIDs are the eval score-configs reviewers grade against.","items":{"type":"string"},"type":"array"}},"type":"object"},"o11y.itemInput":{"properties":{"assignee":{"description":"Assignee is the reviewer this item is for, up to 512 characters.","type":"string"},"objectId":{"description":"ObjectID is the referenced object's id, paired with objectType.","type":"string"},"objectType":{"description":"ObjectType is TRACE, OBSERVATION or SESSION — the generic form, paired\nwith objectId.","type":"string"},"observationId":{"description":"ObservationID references an observation — the console-friendly form of\nobjectType=OBSERVATION.","type":"string"},"sessionId":{"description":"SessionID references a session — the console-friendly form of\nobjectType=SESSION.","type":"string"},"traceId":{"description":"TraceID references a trace — the console-friendly form of\nobjectType=TRACE.","type":"string"}},"type":"object"},"o11y.querybuildertypesv5.CompositeQuery":{"properties":{"queries":{"description":"Queries is the queries to use for the request.","items":{"$ref":"#/components/schemas/o11y.QueryEnvelope"},"type":"array"}},"type":"object"},"o11y.querybuildertypesv5.OrderBy":{"properties":{"direction":{"description":"direction to order by"},"key":{"$ref":"#/components/schemas/o11y.OrderByKey","description":"key to order by"}},"type":"object"},"o11y.updateItemIn":{"properties":{"assignee":{"description":"Assignee replaces the reviewer this item is for, up to 512 characters.","type":"string"},"id":{"description":"ID is the annotation queue the item belongs to, from the path.","type":"string"},"itemId":{"description":"ItemID is the item to update, from the path.","type":"string"},"status":{"description":"Status is the item's new review state: PENDING or COMPLETED. Required.","type":"string"}},"type":"object"},"o11y.updateQueueIn":{"properties":{"description":{"description":"Description replaces the free text when present, up to 512 characters.","type":"string"},"id":{"description":"ID is the annotation queue to update, from the path.","type":"string"},"name":{"description":"Name replaces the queue's display handle when present, 1–128 printable\ncharacters and unique within the project.","type":"string"},"scoreConfigIds":{"description":"ScoreConfigIDs replaces the whole score-config set when present.","items":{"type":"string"},"type":"array"}},"type":"object"},"oauthBundleIn":{"properties":{"access":{"description":"Access is the access token.","type":"string"},"account":{"description":"Account is the account label the flow reported; sanitized on ingest.","type":"string"},"refresh":{"description":"Refresh is the refresh token. It is sealed and NEVER handed back out.","type":"string"}},"type":"object"},"onboardReq":{"properties":{"name":{"description":"Name is the organization's display name. Ignored when personal is true, which\nderives the name from the caller's own username instead.","type":"string"},"personal":{"description":"Personal asks for the caller's own workspace: the name is derived from their\nusername and the slug auto-suffixes to stay unique. Meaningless — and refused\n— for a caller who already has an organization.","type":"boolean"}},"type":"object"},"openReq":{"properties":{"base":{"description":"Base is the branch the work is proposed INTO, by short name. Defaults to\nthe repo's default branch, which is where a proposal goes when nobody says\notherwise.","type":"string"},"body":{"description":"Body is the longer description. Optional.","type":"string"},"head":{"description":"Head is the branch holding the work, by short name (agent/fix-503).\nRequired, and must already exist.","type":"string"},"name":{"description":"Name is the repo the proposal belongs to, from the :name path segment.","type":"string"},"title":{"description":"Title is the one-line summary of what is being proposed. Required.","type":"string"}},"type":"object"},"oppReq":{"properties":{"amount":{"description":"Amount is the deal value in minor units (cents) of Currency.","type":"integer"},"closeDate":{"description":"CloseDate is the expected close, as a unix second (0 = unset).","type":"integer"},"companyId":{"description":"CompanyID links the deal to one of the org's companies.","type":"string"},"currency":{"description":"Currency is the ISO code Amount is denominated in; empty defaults to USD.","type":"string"},"id":{"description":"ID names the opportunity to update and comes from the path. A create\nignores it: the server mints the id.","type":"string"},"name":{"description":"Name is the deal name. Required.","type":"string"},"pointOfContactId":{"description":"PointOfContact links the deal to one of the org's contacts.","type":"string"},"stage":{"description":"Stage is the pipeline stage: NEW, SCREENING, MEETING, PROPOSAL or CUSTOMER\n(case-insensitive). Empty defaults to NEW.","type":"string"}},"type":"object"},"order":{"properties":{"contacts":{"$ref":"#/components/schemas/Contacts","description":"Contacts is the WHOIS contact set. Omit it and the registrar uses the\nreseller account's default contacts."},"domain":{"description":"Domain is the name to buy. It is required.","type":"string"},"years":{"description":"Years is the term to buy, defaulting to 1.","type":"integer"}},"required":["domain"],"type":"object"},"orgOptinReq":{"properties":{"display":{"description":"Display is the name shown for the org on that board: 1-40 characters of\nletters, digits, space, dot, underscore, apostrophe or hyphen. Left empty on a\nlisting opt-in it defaults to the org id.","type":"string"},"listed":{"description":"Listed publishes the org on the cross-org global board when true, and withdraws\nit when false.","type":"boolean"}},"type":"object"},"patchApplicationIn":{"properties":{"id":{"description":"ID is the application to move, from the path.","type":"string"},"note":{"description":"Note is a free-text comment recorded on the timeline, with or without a\nstage change.","type":"string"},"reason":{"description":"Reason records WHY, and is required to reject.","type":"string"},"stage":{"description":"Stage is the stage to move to: applied, screened, qualified,\ncredits-offered, onboarded or rejected. Omit to leave the stage alone.","type":"string"}},"type":"object"},"patchFlowIn":{"properties":{"externalId":{"description":"ExternalID sets the caller's own id for this flow.","type":"string"},"folderId":{"description":"FolderID moves the flow in the builder's tree.","type":"string"},"id":{"description":"ID is the flow to update, from the path.","type":"string"},"metadata":{"description":"Metadata replaces the caller's opaque JSON."},"publishedVersionId":{"description":"PublishedVersionID pins the version runs execute. It must name a version OF\nTHIS FLOW; empty clears the pin, so runs take the latest version again.","type":"string"}},"type":"object"},"patchIn":{"properties":{"name":{"description":"Name is the repo to update, from the :name path segment.","type":"string"},"public":{"description":"Public flips anonymous read access. Omit it and the request is refused —\nthere is nothing else to update yet.","type":"boolean"}},"type":"object"},"patchSessionIn":{"properties":{"cwd":{"description":"Cwd is where the session is working NOW.\n\nIt was write-once — captured at register and never again — which is right\nfor a run that starts in a directory and stays there, and wrong for a linked\nshell, which is a place a person moves around in. The console showed the\ndirectory `hanzo link` happened to be run from and kept showing it after the\nshell had walked away, so the field answered \"which work is this\" with an\nanswer that was true once. A pointer, so an unchanged path is an omitted\nfield rather than a repeated write.","type":"string"},"id":{"description":"ID is the session to update, from the path.","type":"string"},"project":{"description":"Project tags the product this session built; Published is the author's\ndecision to let anyone read the story (provenance.go). Both are pointers so\n\"absent\" and \"cleared\" are different requests.","type":"string"},"published":{"type":"boolean"},"status":{"type":"string"},"target":{"description":"Target re-dispatches a session to a run-target (the #48 association). \"\" detaches.","type":"string"},"terminal":{"description":"Terminal publishes (or, with \"\", withdraws) the URL this session's live\nterminal can be watched at. A pointer so \"absent\" and \"withdrawn\" are\ndifferent requests: a session that stops sharing must be able to say so.","type":"string"},"title":{"type":"string"}},"type":"object"},"patchSyncIn":{"properties":{"actor":{"description":"Actor is the loop-guard identity the sync writes as. Omitted, the stored actor\nstands.","type":"string"},"direction":{"description":"Direction is both, pull, push or off. Omitted, the stored direction stands.","type":"string"},"id":{"description":"ID is the sync to update, from the path.","type":"string"},"kind":{"description":"Kind names a different kind of sync, and is refused, for the same reason.","type":"string"},"source":{"$ref":"#/components/schemas/endpointReq","description":"Source, Target and Kind are DECLARED HERE IN ORDER TO BE REFUSED.\n\nThey are immutable by design — re-pointing a sync is a delete and a create, so\na link can never silently start syncing somewhere else — but an UNDECLARED\nfield is dropped by the binder before the handler sees it, so a request asking\nto repoint answered 200, changed nothing, and said nothing. The operator then\nbelieves a moved repository has been repointed and it has not.\n\nLive: a sync still naming github.com/hanzoai/cloud after the repository moved\nto hanzo-inc/cloud failed every reconcile with \"Repository not found\", and the\nPATCH that appeared to fix it did nothing at all. Declaring the fields is what\nlets the documented immutability actually answer.\nSource names a new upstream, and is refused. Delete this sync and create the\none you want."},"target":{"$ref":"#/components/schemas/endpointReq","description":"Target names a new native repository, and is refused, for the same reason."},"trigger":{"description":"Trigger is webhook, poll or manual. Omitted, the stored trigger stands.","type":"string"}},"type":"object"},"patchTargetIn":{"properties":{"capacity":{"type":"string"},"host":{"type":"string"},"id":{"description":"ID is the target to update, from the path.","type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"metrics":{"$ref":"#/components/schemas/Metrics","description":"present => a heartbeat; the server stamps its time"},"spec":{"$ref":"#/components/schemas/Spec"},"status":{"type":"string"}},"type":"object"},"payoutRequest":{"properties":{"amountCents":{"description":"AmountCents is how much to pay, in cents. Must be positive and can never\nexceed the author's pending royalty (accrued minus paid).","type":"integer"},"id":{"description":"ID is the author to pay, from the path.","type":"string"},"method":{"description":"Method is how it settles: \"credits\" issues a grant into the author's wallet;\nwire, paypal and the like are record-only. Required.","type":"string"},"reference":{"description":"Reference is the operator's external reference for a cash settlement — a wire\nconfirmation, a PayPal transaction id.","type":"string"}},"type":"object"},"pipelineReq":{"properties":{"feeds":{"description":"Feeds is the RSS/Atom feed URLs to read, at most 64. Each must be an\nhttp(s) URL whose host is on the server's allowlist — the SSRF guard is\napplied here, at the write, so a stored pipeline can never name a host the\nfetcher would refuse. Blank entries are dropped and duplicates collapse.","items":{"type":"string"},"type":"array"},"filters":{"$ref":"#/components/schemas/Filters","description":"Filters narrows the merged feed. Terms are trimmed, de-duplicated\ncase-insensitively, and capped at 64 per axis."}},"type":"object"},"policyRequest":{"properties":{"revenueShareBps":{"description":"RevenueShareBps is the share of net platform revenue a sweep accrues into the\nreserve fund, in basis points. 0–10000; 2000 (20%) is the platform default.","type":"integer"}},"type":"object"},"poolCreate":{"properties":{"autoScale":{"description":"AutoScale turns the provider's cluster autoscaler on for this pool.","type":"boolean"},"clusterId":{"description":"ClusterID is the cluster to add the pool to, from the URL path.","type":"string"},"count":{"description":"Count is how many nodes the pool starts with.","type":"integer"},"maxNodes":{"type":"integer"},"minNodes":{"description":"MinNodes and MaxNodes bound the autoscaler; they are ignored unless\nAutoScale is set.","type":"integer"},"name":{"description":"Name is the pool's name.","type":"string"},"provider":{"description":"Provider is the cloud the cluster lives on (e.g. \"digitalocean\"). Required —\nVisor routes the create by it. Accepted from the body or ?provider=.","type":"string"},"size":{"description":"Size is the provider size slug for each node (e.g. \"s-4vcpu-8gb\").","type":"string"}},"type":"object"},"poolScale":{"properties":{"clusterId":{"description":"ClusterID and PoolID address the pool, from the URL path.","type":"string"},"count":{"description":"Count is the node count to scale TO — an absolute target, not a delta, and\nnever negative.","type":"integer"},"poolId":{"type":"string"},"provider":{"description":"Provider is the cloud the cluster lives on. Required; body or ?provider=.","type":"string"}},"type":"object"},"previewReq":{"properties":{"app":{"description":"App is the parent application's slug, from the path.","type":"string"},"branch":{"description":"Branch is the branch to preview; defaults to the parent app's branch.","type":"string"},"image":{"description":"Image is the already-built image ref to deploy. Required — a preview never\nbuilds.","type":"string"},"project":{"description":"Project is the project the parent application lives under, from the path.","type":"string"}},"type":"object"},"projectsBuildSite":{"properties":{"brief":{"type":"string"},"model":{"type":"string"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"projectsComplete":{"properties":{"bytes":{"type":"integer"},"commit":{"type":"string"},"files":{"type":"integer"},"id":{"description":"ID is the queued deployment to complete, from the path.","type":"string"},"keys":{"description":"Keys is the manifest CI just uploaded, RELATIVE to the deployment prefix. It\nis what replaces `aws s3 sync --delete`: an upload grant authorizes writes\nonly, so CI cannot remove a file, and cloud reconciles the prefix against\nthis list instead (grant.go). Omit it and nothing is deleted — the prefix\nonly grows, which is the old pre-grant behaviour and a safe default.","items":{"type":"string"},"type":"array"},"liveUrl":{"type":"string"},"message":{"type":"string"},"slug":{"description":"Slug is the project the deployment belongs to, from the path.","type":"string"},"status":{"description":"live | error","type":"string"}},"type":"object"},"projectsCreate":{"properties":{"analytics":{"description":"Analytics is the opt-OUT for the wired-by-default analytics beacon: absent\n(nil) ⇒ ON (the default); explicit false ⇒ off. A pointer so \"unset\" is\ndistinguishable from \"false\" — the only way to turn the default off.","type":"boolean"},"description":{"type":"string"},"framework":{"type":"string"},"license":{"type":"string"},"name":{"type":"string"},"repo":{"properties":{"branch":{"type":"string"},"url":{"type":"string"}},"type":"object"},"slug":{"type":"string"},"upstream":{"description":"Upstream/License credit the third-party work this project was published\nfrom. Taken from any caller: disclaiming authorship can only cost the\npublisher credit, so it needs no gate (see Project.Upstream).","type":"string"},"visibility":{"description":"Visibility is \"public\" (the default when absent) or \"private\". Publishing\npublicly is ungated — that is the point of a community. Going PRIVATE is\nthe paid feature, so an unfunded org asking for it is refused rather than\nsilently downgraded (see resolve).","type":"string"}},"type":"object"},"projectsDeploySite":{"properties":{"files":{"items":{"$ref":"#/components/schemas/projectsFile"},"type":"array"},"name":{"type":"string"},"slug":{"type":"string"}},"type":"object"},"projectsDeployStart":{"properties":{"commit":{"description":"Commit is the git sha this build was produced from, recorded on the\ndeployment so a released site can be traced back to its source. Optional.\n\nIt is the ONLY field here, and deliberately: the predecessor also accepted\n`source` and `branch`. `source` was the Content-Type discriminator this\nsplit removed. `branch` was accepted and DISCARDED — there is no branch\ncolumn on a deployment, and the lifecycle event derives the branch from the\nproject's own linked one — so declaring it would publish a settable field\nthat does nothing into the document, every generated SDK and the MCP input\nschema. A field that is read by nothing is not described as if it were.\n\n`url:\"-\"` because zip binds the query string OVER a decoded body, so\nwithout it a `?commit=` the caller never sent would outrank the one it did.","type":"string"},"slug":{"description":"Slug is the site to deploy, from the path.","type":"string"}},"type":"object"},"projectsDomainsBind":{"properties":{"domains":{"description":"Domains are the custom hostnames to attach, in order. An empty list is a\n400 rather than a clear — releasing a host is its own call.","items":{"type":"string"},"type":"array"},"slug":{"description":"Slug is the site the hosts attach to, from the path.","type":"string"}},"type":"object"},"projectsFile":{"properties":{"content":{"type":"string"},"path":{"type":"string"}},"type":"object"},"projectsFork":{"properties":{"name":{"description":"target project name (optional; defaults to the parent's title)","type":"string"},"slug":{"description":"parent slug to fork — catalog template or published project (required)","type":"string"},"target":{"description":"Target overrides the derived project slug (optional; defaults to the\nparent slug). Kept distinct from Slug so callers can rename on fork.","type":"string"},"variant":{"description":"Variant picks a template's format/page/theme (optional; defaults to the\ntemplate's first shape). This is the axis the catalog used to spend\nsibling slugs on, so it is expressed here, where the user's preference is.","type":"string"}},"type":"object"},"projectsPublish":{"properties":{"slug":{"description":"Slug is the site to publish, from the path.","type":"string"},"source":{"description":"Source is the build output to promote, as a path RELATIVE to your org's own\nstorage space — never a URL and never a bucket. The org segment is prepended\nserver-side from the validated principal, so the worst a hostile source can\naddress is something your own org already owns.","type":"string"}},"type":"object"},"projectsUpdate":{"properties":{"cacheControl":{"type":"string"},"description":{"type":"string"},"framework":{"type":"string"},"hidden":{"description":"Hidden is MODERATION, and the only admin-gated field on this body: it pulls\na public project out of the catalogue from admin.hanzo.ai without editing\nthe publisher's own visibility choice, so un-hiding restores exactly what\nthey asked for. A tenant sending it is ignored.","type":"boolean"},"hiddenReason":{"type":"string"},"license":{"type":"string"},"name":{"type":"string"},"repo":{"properties":{"branch":{"type":"string"},"url":{"type":"string"}},"type":"object"},"slug":{"description":"Slug is the project to update, from the path. The URL is the addressing\nauthority — a `slug` in the body cannot move the write to another project.","type":"string"},"tags":{"additionalProperties":{"type":"string"},"description":"Tags sets the site's browser tag config: platform slug → non-secret pixel id\n(e.g. {\"ga4\":\"G-…\",\"meta\":\"…\"}). track.js injects these first-party and the\nserver CAPI reads them, per site. Absent LEAVES them; a present object REPLACES\nthe set (send {} to clear). The ids are public — they ship in the page — so this\nis not the SECRET path (a CAPI token is sealed via POST /v1/destinations).","type":"object"},"upstream":{"description":"Upstream/License credit the third-party work this app was published from —\nsettable after the fact, because the demos that need crediting most are the\nones already live. Pointers so \"\" clears a credit and absent leaves it.","type":"string"},"visibility":{"description":"Visibility flips an existing project between \"public\" and \"private\". Same\nONE rule as at create: public is free, private needs a paid plan.","type":"string"}},"type":"object"},"promoIn":{"properties":{"active":{"description":"Active is the master switch: false parks the offer without deleting it.","type":"boolean"},"end":{"description":"End is when the offer closes (RFC3339).","type":"string"},"percentOff":{"description":"PercentOff is the discount, 0-100.","type":"integer"},"plans":{"description":"Plans are the plan ids the offer applies to.","items":{"type":"string"},"type":"array"},"start":{"description":"Start is when the offer opens (RFC3339).","type":"string"}},"type":"object"},"promoteReq":{"properties":{"app":{"description":"App is the application's slug, from the path.","type":"string"},"deploymentId":{"description":"DeploymentID promotes that deployment's exact built image. One of this and\nTag is required.","type":"string"},"project":{"description":"Project is the project the application lives under, from the path.","type":"string"},"tag":{"description":"Tag promotes an image tag, resolved the same way a deploy resolves one.","type":"string"}},"type":"object"},"promptReq":{"properties":{"labels":{"description":"Labels is free-form taxonomy, each up to 64 characters, capped at 32 entries.","items":{"type":"string"},"type":"array"},"name":{"description":"Name is the org-unique handle AND the URL segment the prompt is addressed by:\n1-64 characters matching ^[A-Za-z0-9][A-Za-z0-9._-]*$. \"metrics\", \"new\" and\n\"catalog\" are reserved. A name that already exists appends a new version.","type":"string"},"prompt":{"description":"Prompt is the template body, capped at 64 KiB. It holds template text only —\nnever a secret.","type":"string"},"tags":{"description":"Tags is free-form taxonomy under the same bounds as Labels.","items":{"type":"string"},"type":"array"},"type":{"description":"Type labels the template's kind; defaults to \"text\".","type":"string"}},"type":"object"},"providerPatchIn":{"properties":{"beta":{"type":"boolean"},"betaOrgs":{"items":{"type":"string"},"type":"array"},"enabled":{"type":"boolean"},"name":{"description":"Name is the provider the overlay belongs to, from the URL.","type":"string"},"overrides":{},"state":{"type":"string"}},"type":"object"},"provisionRequest":{"properties":{"instance":{"type":"string"},"name":{"type":"string"}},"type":"object"},"publishKitIn":{"properties":{"category":{"description":"Category groups the kit in the gallery browser.","type":"string"},"demo":{"description":"Demo is the deployed site itself, when there is one.","type":"string"},"description":{"description":"Description is the browse-card blurb, max 4096 characters.","type":"string"},"features":{"description":"Features are the highlights the card lists, at most 32.","items":{"type":"string"},"type":"array"},"framework":{"description":"Framework is the stack the kit is built on (\"Next.js 14\").","type":"string"},"preview":{"description":"Preview is the still image the browse card renders, max 4096 characters.","type":"string"},"slug":{"description":"Slug is the kit's identity — lowercase alphanumeric with dashes, max 40.","type":"string"},"source":{"description":"Source is the repository the kit is forked from, max 4096 characters.","type":"string"},"title":{"description":"Title is the display name. Required, max 200 characters.","type":"string"},"useCase":{"description":"UseCase is what the kit is for, in a phrase.","type":"string"},"variants":{"description":"Variants are the shapes this kit ships in, at most 32; the fork picks one.","items":{"$ref":"#/components/schemas/Variant"},"type":"array"}},"type":"object"},"publishReq":{"properties":{"category":{"description":"Category groups the listing in the shop window.","type":"string"},"currency":{"description":"Currency denominates Price.","type":"string"},"description":{"description":"Description is the long copy, clipped at 4096 characters.","type":"string"},"price":{"description":"Price is the per-call price as a decimal USD string, exact to 18 places —\n\"0.0025\" is a quarter of a cent and stays one. Empty or \"0\" (the default)\npublishes it free; any positive price makes the listing monetized and\nrequires Recipient.","type":"string"},"public":{"description":"Public makes the listing discoverable by other orgs. Private otherwise.","type":"boolean"},"recipient":{"description":"Recipient is the seller's payout wallet ID, in the publishing org — the\nwallet x402 pays. Required for a monetized listing.","type":"string"},"title":{"description":"Title is the shop-window name, 1-200 characters. Required.","type":"string"},"tool":{"description":"Tool is the registry name of the capability being offered. It must already\nresolve in the publisher's own scope — there are no phantom listings.","type":"string"}},"type":"object"},"purgeIn":{"properties":{"files":{"description":"Files purges exactly the listed URLs — at most 30, Cloudflare's per-request cap.","items":{"type":"string"},"type":"array"},"purge_everything":{"description":"Everything drops the zone's entire edge cache.","type":"boolean"},"zone":{"description":"Zone is the 32-hex Cloudflare zone id, from the path.","type":"string"}},"type":"object"},"push":{"properties":{"after":{"type":"string"},"before":{"type":"string"},"pusher":{"properties":{"login":{"type":"string"},"username":{"type":"string"}},"type":"object"},"ref":{"type":"string"},"repository":{"properties":{"name":{"type":"string"},"owner":{"properties":{"login":{"type":"string"},"username":{"type":"string"}},"type":"object"}},"type":"object"}},"type":"object"},"pushFile":{"properties":{"content":{"description":"Content is the file's bytes, carried per Encoding.","type":"string"},"encoding":{"description":"Encoding is \"base64\", or \"utf-8\" (the default, also \"utf8\" / \"text\").","type":"string"},"path":{"description":"Path is repo-relative. Absolute or traversing paths are refused.","type":"string"}},"type":"object"},"pushReq":{"properties":{"branch":{"description":"Branch to advance; empty means \"main\". A fresh branch that is the repo's\nfirst also becomes HEAD.","type":"string"},"files":{"description":"Files are added to or overwritten on the branch tip — files already there\nand not listed SURVIVE. At least one, at most 5000, 32 MiB each.","items":{"$ref":"#/components/schemas/pushFile"},"type":"array"},"message":{"description":"Message is the commit message; empty gets a generated one.","type":"string"},"name":{"description":"Name is the repo to push into, from the :name path segment. It is CREATED\non first push if it does not exist.","type":"string"}},"type":"object"},"rateSet":{"properties":{"id":{"description":"ID is the affiliate whose direct rate moves, from the path.","type":"string"},"rateBps":{"description":"RateBps is the direct commission rate, in basis points of Hanzo's margin;\ncapped so the whole L1+L2+L3 schedule never exceeds the margin. Body-only\n(`url:\"-\"`): a money parameter must never ride the URL into access logs.","type":"integer"}},"type":"object"},"readingReq":{"properties":{"account":{"description":"Account is the provider-side account the sample belongs to.","type":"string"},"cachedInputTokens":{"description":"CachedInputTokens is the window's cached-prompt-token count.","type":"integer"},"confidence":{"description":"Confidence says how real the counters are, as the meter graded itself.","type":"string"},"costCents":{"description":"CostCents is the window's spend in cents, as the provider's meter states it.","type":"integer"},"costLimitCents":{"description":"CostLimitCents is the window's spend cap in cents, when the meter knows one.","type":"integer"},"currency":{"description":"Currency is the ISO currency the cost fields are stated in.","type":"string"},"inputTokens":{"description":"InputTokens is the window's prompt-token count.","type":"integer"},"kind":{"description":"Kind is subscription or apikey; anything else is refused.","type":"string"},"lane":{"description":"Lane names the meter's own lane label for this measurement.","type":"string"},"machine":{"description":"Machine is the machine the collector observed the account on. Required.","type":"string"},"outputTokens":{"description":"OutputTokens is the window's completion-token count.","type":"integer"},"plan":{"description":"Plan is the provider plan label the account is on.","type":"string"},"provider":{"description":"Provider is the AI provider whose meter reported this sample. Required.","type":"string"},"requests":{"description":"Requests is the window's request count.","type":"integer"},"resetsAt":{"description":"ResetsAt is when the window resets, RFC 3339, bounded.","type":"string"},"synthetic":{"description":"Synthetic marks a sample the collector derived rather than observed.","type":"boolean"},"totalTokens":{"description":"TotalTokens is the window's total token count.","type":"integer"},"usedPct":{"description":"UsedPct is how much of the window's allowance is consumed, clamped 0..100.","type":"number"},"window":{"description":"Window is the window class, one of 6h, day, week, month; anything else is\nrefused rather than silently reclassified.","type":"string"},"windowMinutes":{"description":"WindowMinutes is the window's length as the meter reported it.","type":"integer"},"windowStart":{"description":"WindowStart is when the measured window opened, RFC 3339, bounded to a\nsane interval around now.","type":"string"}},"type":"object"},"registerKeyReq":{"properties":{"publicKey":{"description":"PublicKey is one OpenSSH authorized-key line (\"ssh-ed25519 AAAA… you@host\").\nRequired; a line that does not parse is refused and never stored.","type":"string"},"title":{"description":"Title labels the key in the console. Max 256 chars; when omitted the\ncomment on the key line is used.","type":"string"}},"type":"object"},"registerReq":{"properties":{"account":{"type":"string"},"actor":{"type":"string"},"agent":{"type":"string"},"cwd":{"type":"string"},"host":{"description":"Execution context — where this session runs (all optional).","type":"string"},"parentSessionId":{"type":"string"},"project":{"description":"The readable build (provenance.go): which product this session builds, and\nwhether its story may be read by the world.","type":"string"},"provider":{"description":"Account tag — the linked AI account this session ran under (login manager).","type":"string"},"published":{"type":"boolean"},"repo":{"type":"string"},"status":{"type":"string"},"target":{"type":"string"},"taskRunId":{"type":"string"},"taskWorkflowId":{"type":"string"},"terminal":{"description":"Terminal is the URL this session's live terminal is published at, so the\nconsole can watch it. Optional — a session that publishes nothing is still\na session.","type":"string"},"title":{"type":"string"}},"type":"object"},"registryMint":{"properties":{"image":{"description":"Image is the repository name inside the org's namespace (e.g. \"cloud\").","type":"string"}},"type":"object"},"renewReq":{"properties":{"domain":{"description":"Domain is the name to extend. It is required, and the caller's org must hold it.","type":"string"},"years":{"description":"Years is how much longer to hold it, defaulting to 1.","type":"integer"}},"required":["domain"],"type":"object"},"replaceKitIn":{"properties":{"category":{"description":"Category groups the kit in the gallery browser.","type":"string"},"demo":{"description":"Demo is the deployed site itself, when there is one.","type":"string"},"description":{"description":"Description is the browse-card blurb, max 4096 characters.","type":"string"},"features":{"description":"Features are the highlights the card lists, at most 32.","items":{"type":"string"},"type":"array"},"framework":{"description":"Framework is the stack the kit is built on (\"Next.js 14\").","type":"string"},"preview":{"description":"Preview is the still image the browse card renders, max 4096 characters.","type":"string"},"slug":{"description":"Slug is the kit to replace, from the path.","type":"string"},"source":{"description":"Source is the repository the kit is forked from, max 4096 characters.","type":"string"},"title":{"description":"Title is the display name. Required, max 200 characters.","type":"string"},"useCase":{"description":"UseCase is what the kit is for, in a phrase.","type":"string"},"variants":{"description":"Variants are the shapes this kit ships in, at most 32; the fork picks one.","items":{"$ref":"#/components/schemas/Variant"},"type":"array"}},"type":"object"},"replayBody":{"properties":{"distinctId":{"type":"string"},"events":{"items":{},"type":"array"},"sessionId":{"type":"string"},"windowId":{"type":"string"}},"type":"object"},"reportReq":{"properties":{"account":{"description":"Account is the linked account the window was metered from.","type":"string"},"cachedInputTokens":{"description":"CachedInputTokens is the prompt tokens the provider served from cache.","type":"integer"},"confidence":{"description":"Confidence says how much the counters below mean.","type":"string"},"costCents":{"description":"CostCents is what the window cost on the PROVIDER's own plan, in US cents.","type":"integer"},"costLimitCents":{"description":"CostLimitCents is the plan's spend ceiling for the window, in US cents.","type":"integer"},"currency":{"description":"Currency is the provider's currency when it is not US cents.","type":"string"},"inputTokens":{"description":"InputTokens is prompt tokens consumed in the window.","type":"integer"},"kind":{"description":"Kind is subscription or apikey. Empty is accepted; anything else is\nrefused.","type":"string"},"lane":{"description":"Lane is the meter lane within the account.","type":"string"},"machine":{"description":"Machine is the host whose meter read the window. Required on every sample.","type":"string"},"outputTokens":{"description":"OutputTokens is completion tokens produced in the window.","type":"integer"},"plan":{"description":"Plan is the subscription plan the account is on, as the provider names it.","type":"string"},"provider":{"description":"Provider is the upstream the account belongs to, e.g. anthropic. Required\non every sample.","type":"string"},"requests":{"description":"Requests is how many requests the window covers.","type":"integer"},"resetsAt":{"description":"ResetsAt is when the measured window rolls over, RFC3339.","type":"string"},"samples":{"description":"Samples is the batch form: every lane a poller measured, in one call. When\nit is non-empty the top-level sample fields are ignored.","items":{"$ref":"#/components/schemas/sampleReq"},"type":"array"},"synthetic":{"description":"Synthetic marks a window the meter inferred rather than read.","type":"boolean"},"totalTokens":{"description":"TotalTokens is the window's total tokens.","type":"integer"},"usedPct":{"description":"UsedPct is how much of the window's allowance is consumed, 0–100.","type":"number"},"window":{"description":"Window is the window class: 6h, day, week or month. Required, and a class\nthis surface does not know is refused rather than rewritten.","type":"string"},"windowMinutes":{"description":"WindowMinutes is the window's real length in minutes, as the meter reports\nit.","type":"integer"},"windowStart":{"description":"WindowStart is when the measured window opened, RFC3339. This is how a\nbackfill states WHICH window it measured; the server always owns the\nobservation clock, so there is no timestamp field.","type":"string"}},"type":"object"},"reportRunIn":{"properties":{"branch":{"description":"Branch, CommitSha and Diffstat describe what the run produced; Error is the\nfailure when OK is false. Each is clamped, never rejected.","type":"string"},"changed":{"type":"boolean"},"commitSha":{"type":"string"},"diffstat":{"type":"string"},"error":{"type":"string"},"id":{"description":"ID is the machine reporting, from the path.","type":"string"},"ok":{"description":"OK is whether the run succeeded; Changed whether it produced any commit.","type":"boolean"},"runId":{"description":"RunID is the routed run being completed, from the path.","type":"string"}},"type":"object"},"restartRef":{"properties":{"app":{"description":"App is the service's CR name, from the path. It must be a DNS-1123 label.","type":"string"},"env":{"description":"Env is REQUIRED and must be main, test or dev. A bare call does not default\nto production, which is what closes the fat-finger and confused-deputy\nhazard.\n\nIt carries no `validate:\"required\"`: the handler already refuses an empty env\nwith the sentence that names the three values, and a validator tag would\nreplace that sentence with a generic one. The requirement is stated here and\nenforced there, once.","type":"string"}},"type":"object"},"riskAdoptIn":{"properties":{"address":{"description":"Address is one of YOUR organisation's own published values (GET\n/v1/risk/state reports them, and a search reports the one it fitted for you).\nAn address your organisation has not published is NOT FOUND — including one\nanother organisation published, because an address names a value and never\nauthorises reading it.","type":"string"}},"type":"object"},"riskAppetiteIn":{"properties":{"live":{"description":"Live turns the model out of shadow. It defaults to FALSE on every call, so\ngoing live is always an explicit act and never a side effect of changing a\nnumber.\n\nSetting it requires an ADMIN of this organisation. Arming decides whether the\nmodel may change an outcome at all — a payment frozen, a grant refused — for\nevery customer this organisation has, which is a governance act rather than a\ntuning one. Stating the appetite and the sample needs no admin.","type":"boolean"},"review":{"description":"Review is the share of the stream that may be sent for examination, in\n(0, 0.5]. The alert threshold is derived from it as a quantile of the scores\nactually observed, so the level is governed rather than tuned.","type":"number"},"sample":{"description":"Sample is the share of below-the-line events retained for review, in\n[0, 1]. It is the instrument that measures what the model missed; there are\nno labels, so nothing else can.","type":"number"}},"type":"object"},"riskDatasetSpec":{"properties":{"cuts":{"description":"Cuts are the two RFC 3339 instants dividing train | val | test. Omit them to\ntake 70% and 85% of the window by time. Splitting is TEMPORAL and then\ngrouped by subject — a random split puts one device on both sides of the\nline and the model memorises the entity instead of the behaviour.","items":{"type":"string"},"type":"array"},"dims":{"description":"Dims are the coordinates to carry, by published name. Empty takes the whole\nsurface. They are stored in the plane's own order, never the order given, so\ntwo requests naming the same dims produce identical rows.","items":{"type":"string"},"type":"array"},"from":{"description":"From and To bound the event window, half-open, RFC 3339. The window may not\nbe longer than the source's own retention: past that, its older half is\nalready gone and the dataset would silently be shorter than it says.","type":"string"},"horizon":{"description":"Horizon is how many days a row must have aged before it may be admitted. It\nis what keeps a fact that was not yet knowable at scoring time out of a\ntraining set: a chargeback lands 30 to 120 days after the transaction it\ncondemns, so 120 for the payment lane and 14 for signup abuse. Zero admits\nthe whole window and is honest only where the outcome is immediate.","type":"integer"},"kind":{"description":"Kind narrows to one subject kind — person, session or account. Empty takes\nevery kind.","type":"string"},"name":{"description":"Name identifies the dataset across its versions: lower-case letters, digits\nand hyphens, starting with a letter.","type":"string"},"rows":{"description":"Rows caps the materialisation. Zero takes the plane's own bound.","type":"integer"},"seed":{"description":"Seed decides WHICH subjects are admitted when the window holds more rows\nthan the cap allows. It is recorded on the version, so a capped dataset is\nreproducible rather than being whichever rows the store returned first.\nOmit it to seed from the dataset's name.","type":"string"},"to":{"type":"string"}},"type":"object"},"riskDisposeIn":{"properties":{"before":{"description":"Before disposes of assertions WRITTEN before this instant, RFC 3339. It is\nmeasured against the server clock at the write and not against the event\nor observation times, both of which the asserting caller supplies — a\ntenant that could back-date could delete a compliance record on demand.","type":"string"}},"type":"object"},"riskEvent":{"properties":{"at":{"description":"At is when it happened, RFC 3339. Empty means now. It must sit inside the\nthirty-day window the aggregates keep and no more than two minutes ahead of\nthis plane's clock; anything outside that is REFUSED rather than quietly\naccepted, because a future timestamp moves the aggregates' leading edge and\nleaves every later event for that subject reading as though it never\nhappened. History older than the window is folded in from your own event\nsurface, not through this door.","type":"string"},"device":{"description":"Device is the device fingerprint, if any. It is the axis that surfaces\nseveral nominally unrelated subjects acting as one.","type":"string"},"id":{"description":"ID is the caller's own stable identifier for the event. It selects the\nbelow-the-line review sample by hash, so a counter would make the sample\nsteerable — use the id the event already has.","type":"string"},"kind":{"description":"Kind is whose behaviour this is: person, session or account. It namespaces\nthe subject, so a person and an account that share an identifier stay two\nsubjects.","type":"string"},"nano":{"description":"Nano is the value moved, in nano-USD. Omit it for an event that moves no\nmoney: the value features then read BLIND rather than being told the amount\nwas zero, and the difference is reported on the model state.","type":"integer"},"peer":{"description":"Peer is the counterparty, if any. It is an aggregation axis of its own —\n\"unfamiliar\" is a fact about a relationship and not about either party.","type":"string"},"subject":{"description":"Subject is the identifier on that kind.","type":"string"}},"type":"object"},"riskHoldIn":{"properties":{"hold":{"description":"Hold is the state to put them in: true places the hold, false releases it.\nOne op both ways, because a hold that can be placed and not released pins a\ncompliance record past every retention boundary with nothing able to let it\ngo — and an operator who cannot release a hold stops placing them.","type":"boolean"},"ids":{"description":"IDs are the content digests of the records, as returned by the write and\nby the read. They name records in THIS tenant's plane; an id belonging to\nanybody else names nothing here, because the statement runs against this\ntenant's own file and there is no other file it could reach.","items":{"type":"string"},"type":"array"}},"type":"object"},"riskLabelEvent":{"properties":{"at":{"description":"At is the event's own instant, RFC 3339. It is part of the event's IDENTITY\nand not a filter: it is matched exactly, to the second, against the `at` the\nassertions were filed under, so an instant a second off names a different\nevent and resolves to nothing. It is also what this event's as-of is measured\nfrom — At plus the horizon.","type":"string"},"kind":{"description":"Kind is the judged entity's type, from the closed set: account, agent,\nmerchant, payout, person, session or transaction. One outside it is refused\nrather than answered `unlabelled`, because it could only ever match nothing\nand the caller would read a real absence into a typo.","type":"string"},"subject":{"description":"Subject is the entity id in the tenant's own namespace, at most 512 bytes. It\nis matched EXACTLY against what was recorded — this is a lookup, not a search,\nand no prefix, pattern or normalisation is applied.","type":"string"}},"type":"object"},"riskLabelFact":{"properties":{"at":{"description":"At is when the judged event happened, RFC 3339.","type":"string"},"confidence":{"description":"Confidence in [0,1]. A processor chargeback is 1; an analyst's hunch is\nnot. It breaks a tie WITHIN a precedence rank and can never lift a weak\nsource above a strong one — otherwise every caller would send 1.\n\nA litigation hold is NOT a field here. It is a fact about the record and\nnot about the world, so it is not part of what was asserted, it is not in\nthe content digest, and it has its own op — which is also the only way one\ncan be released. Carried here it was silently a no-op on any record that\nalready existed: the digest was the same, the insert was ignored, and the\ncaller was told `duplicate` while the hold it asked for was never placed.","type":"number"},"disposition":{"description":"Disposition is productive, unproductive, or empty for an explicit\nunjudged — the AML engine's own vocabulary, verbatim.","type":"string"},"evidence":{"description":"Evidence points at the record this conclusion came from: a dispute id, a\ncase id, a decision id. Required, because a label with no evidence cannot\nbe defended when the adverse action it fed is challenged.","type":"string"},"kind":{"description":"Kind is what the subject is: account, agent, merchant, payout, person,\nsession or transaction. Closed, because a typo in an open field would shard\na tenant's labels into a partition nothing reads and nothing would say so.","type":"string"},"seen":{"description":"Seen is when this assertion became KNOWABLE, RFC 3339. It is required and\nit is not At: a chargeback lands 30 to 120 days after the transaction it\njudges, and a training set joined on At alone knows the future. Everything\nthis plane does to prevent leakage is computed from Seen.","type":"string"},"source":{"description":"Source is who asserted: chargeoff, dispute, case, refund, review or\nsample. It is the primary term of the precedence rule, so it is closed —\nan unknown source has no rank and a conflict with it could not be resolved.","type":"string"},"subject":{"description":"Subject identifies the thing being judged, in the tenant's own namespace.","type":"string"}},"type":"object"},"riskLabelIn":{"properties":{"labels":{"description":"Labels is the batch. Each member is judged on its own: one refusal does\nnot discard the rest, because a webhook redelivering five disputes must\nnot lose four of them to one malformed fifth.","items":{"$ref":"#/components/schemas/riskLabelFact"},"type":"array"}},"type":"object"},"riskLearnIn":{"properties":{"events":{"description":"Events are the things that happened, oldest first. An empty batch is\nrefused: learning nothing is not an operation.","items":{"$ref":"#/components/schemas/riskEvent"},"type":"array"}},"type":"object"},"riskResolveIn":{"properties":{"horizon":{"description":"Horizon is how many days an event must age before it may be resolved at\nall, and it is the whole of the no-leakage rule. 120 for the payment lane\n(past the Visa and Mastercard dispute windows), 14 for signup abuse.\nUnstated takes 120.","type":"integer"},"now":{"description":"Now moves the observation instant BACKWARDS, RFC 3339. It exists so a\nBACKTEST can resolve labels as the plane stood at a past moment; without it,\nevery backtest would score a model against knowledge that arrived after the\ndecision it is being scored on. An instant after the server clock is\nrefused: a backtest resolves the past, and a future one would declare\nunmatured events matured and hand a training set negatives for rows whose\nchargeback has not had time to arrive.","type":"string"},"subjects":{"description":"Subjects are the exact events being judged. Each carries its own event\ntime, because the as-of that keeps the future out is derived from that\ninstant plus the horizon — one as-of over a whole batch would give a\nJanuary row six extra months of hindsight.\n\nOne entry per DISTINCT (kind, subject, at): naming an event twice answers\nonce, because an event resolved twice would list its own winner as a\ncontrary claim and would hand a materialiser duplicate training rows.","items":{"$ref":"#/components/schemas/riskLabelEvent"},"type":"array"}},"type":"object"},"riskScoreIn":{"properties":{"event":{"$ref":"#/components/schemas/riskEvent","description":"Event is the thing to judge. It is judged against the caller's OWN model\nand nothing is learned from it."}},"type":"object"},"riskSearchIn":{"properties":{"days":{"description":"Days is how much of the organisation's own history to replay, 1 to 400.\nZero takes thirty.","type":"integer"}},"type":"object"},"rollbackReq":{"properties":{"app":{"description":"App is the application's slug, from the path.","type":"string"},"deploymentId":{"description":"DeploymentID is the deployment to redeploy. Omit it to return to the\nprevious release.","type":"string"},"project":{"description":"Project is the project the application lives under, from the path.","type":"string"}},"type":"object"},"routeCreateIn":{"properties":{"pattern":{"description":"Pattern is the URL pattern to bind, e.g. \"acme.com/api/*\".","type":"string"},"script":{"description":"Script is the Worker script to dispatch to. Omit it to leave the pattern\nbound to no script, which is how Cloudflare expresses \"bypass the Worker here\".","type":"string"},"zone":{"description":"Zone is the 32-hex Cloudflare zone id, from the path.","type":"string"}},"type":"object"},"rpcIn":{"properties":{"chain":{"description":"Chain is the registry id, from the URL.","type":"string"},"id":{"description":"ID is echoed back untouched."},"jsonrpc":{"description":"JSONRPC must be \"2.0\" when present.","type":"string"},"method":{"description":"Method is the RPC method, e.g. eth_getBalance.","type":"string"},"params":{"description":"Params is the method's parameters, passed through unread."}},"type":"object"},"runIn":{"properties":{"action":{"description":"Action is the name of the connector action to invoke.","type":"string"},"auth":{"description":"Auth is the caller's resolved credential for the connector, handed to the\naction verbatim. Its shape is whatever the connector's auth descriptor\ndeclares (a token string, an object), so it is opaque here.","type":"object"},"id":{"description":"ID is the connector to run, from the path.","type":"string"},"props":{"additionalProperties":{"type":"object"},"description":"Props are the action's input properties, keyed by property name.","type":"object"}},"type":"object"},"runReq":{"properties":{"env":{"description":"Env is the run's environment. Keys must match `^[A-Za-z_][A-Za-z0-9_]*$`;\na variable marked `secret: true` is sealed into KMS.","items":{"$ref":"#/components/schemas/EnvVarJSON"},"type":"array"},"gpu":{"description":"GPU is how many GPUs the run asks for; a negative value is 400.","type":"integer"},"image":{"description":"Image is the container image to run. Required.","type":"string"},"maxScale":{"description":"MaxScale above the floor declares an autoscaling ceiling; 0 means no\nautoscaler at all — a fixed run at the floor.","type":"integer"},"minScale":{"description":"MinScale is the replica floor, clamped to the deployment's limit.","type":"integer"},"name":{"description":"Name is the run's name, and the slug is derived from it. Required, and it\nmust resolve to `^[a-z0-9]([a-z0-9-]{0,38}[a-z0-9])?$`. Re-running the same\nname updates that run in place.","type":"string"},"port":{"description":"Port is the container port the run listens on.","type":"integer"},"runtime":{"description":"Runtime is accepted for the client contract and echoed nowhere: the image\nIS the runtime unit.","type":"string"},"shape":{"description":"Shape is a compute size label, echoed back; sizing is the operator's\ndefault. Defaults to \"auto\".","type":"string"}},"type":"object"},"runRequest":{"properties":{"dataset":{"description":"Dataset is the set to score, which must belong to the caller's org and hold\nat least one ACTIVE example.","type":"string"},"judge":{"$ref":"#/components/schemas/judgeSpec","description":"Judge is the judge to grade with. Omitted, the model under test grades\nitself against a default correctness criterion under the score name\n\"llm-judge\"."},"limit":{"description":"Limit caps how many examples this run scores. It defaults to 20, and\nanything above 100 falls back to that default.","type":"integer"},"model":{"description":"Model is the model under test.","type":"string"},"runName":{"description":"RunName labels the run and is generated from the clock when omitted. It\nmust match ^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$.","type":"string"}},"required":["dataset","model"],"type":"object"},"runnerBuildReq":{"properties":{"arch":{"description":"Arch is the target architecture for the artifact lane.","type":"string"},"args":{"additionalProperties":{"type":"string"},"description":"Args are --build-arg values. They are what lets several images off ONE\nDockerfile mean different things — the sandbox classes are three entries\ndiffering only by STAGE. Validated at the k8s choke point, with VERSION and\nREVISION taking precedence: those are receipts the builder derives from the\ntag and the commit, and a caller that could overwrite them could make an\nimage lie about which commit it is.","type":"object"},"binaries":{"description":"Binaries selects the ARTIFACT lane (artifact.go): build what the repo's\nhanzo.yml `binaries:` block declares — a Go binary, an npm tarball, a Rust\nbinary — and publish it to hanzoai/s3 instead of pushing an image. It is the\nsame recipe hanzoai/ci reads, sent verbatim, so `image` is meaningless here\nand must be absent.","items":{"$ref":"#/components/schemas/binarySpec"},"type":"array"},"branch":{"description":"Branch is the branch to build when no SHA or Ref is given.","type":"string"},"bucket":{"description":"Bucket mirrors hanzo.yml's `bucket:` — where the artifact lane publishes.","type":"string"},"context":{"description":"Context is the build context path within the repo.","type":"string"},"dockerTarget":{"description":"DockerTarget is the multi-stage build target to stop at.","type":"string"},"dockerfile":{"description":"Dockerfile is the path to build from; empty uses the zero-config frontend.","type":"string"},"image":{"description":"Image is the output image ref to push. Required on the image lane, and it\nmust target a registry namespace the caller's org owns.","type":"string"},"organizationId":{"description":"OrgID attributes the build to an org. On the IAM path it defaults to the\ncaller's own validated org, and a foreign one is refused unless the caller\nis a platform SuperAdmin.","type":"string"},"os":{"description":"OS is the target operating system for the artifact lane.","type":"string"},"ref":{"description":"Ref is the git ref to build when no SHA is given.","type":"string"},"release":{"description":"Release requests native release semantics for cloud's self-publish: compute\nthe next version, build+push ghcr.io/hanzoai/cloud, smoke it, then tag (the\nreceipt) and notify universe. It owns its output image (release.go), and it\ntakes SuperAdmin.","type":"boolean"},"repo":{"description":"Repo is the repository clone URL to build. Required on the image lane.","type":"string"},"sha":{"description":"SHA is the commit to pin; it wins over Ref and Branch.","type":"string"},"tag":{"description":"Tag is the publish path segment, so both front doors write ONE index at ONE\nURL. It defaults to the pinned ref, and must be named explicitly for a\nbranch.","type":"string"}},"type":"object"},"safeIn":{"properties":{"documentIds":{"description":"DocumentIDs are data room document ids to raise a signature request over. Required.","items":{"type":"string"},"type":"array"},"signers":{"description":"Signers are the recipients, each a name and an email. Required.","items":{"$ref":"#/components/schemas/Signer"},"type":"array"}},"type":"object"},"safeTxIn":{"properties":{"chainId":{"description":"ChainID is the EVM chain the Safe transaction is bound to. 0 uses the\nwallet's own chain, or the Hanzo L1 (36963) when it is chain-agnostic.","type":"integer"},"data":{"description":"Data is the call data, hex-encoded.","type":"string"},"nonce":{"description":"Nonce is the Safe's transaction nonce.","type":"integer"},"to":{"description":"To is the transaction's target address.","type":"string"},"value":{"description":"Value is the native-token amount to send, as a decimal string in wei.","type":"string"}},"type":"object"},"sampleIngest":{"properties":{"gpuModel":{"type":"string"},"gpuUtil":{"description":"GPUUtil is accelerator utilization as a fraction 0..1; the warehouse clamps\nanything outside that.","type":"number"},"gpus":{"description":"GPUs is how many accelerators the reading covers, GPUModel the representative\nmodel name.","type":"integer"},"host":{"description":"Host is the node's hostname, for display.","type":"string"},"memFree":{"type":"integer"},"memUsed":{"description":"MemUsed and MemFree are host memory in bytes.","type":"integer"},"unit":{"description":"Unit is the reporting node's own id — the same id it registered under, and\nthe key the board joins this series onto. Required.","type":"string"}},"type":"object"},"sampleReq":{"properties":{"account":{"description":"Account is the linked account the window was metered from.","type":"string"},"cachedInputTokens":{"description":"CachedInputTokens is the prompt tokens the provider served from cache.","type":"integer"},"confidence":{"description":"Confidence says how much the counters below mean.","type":"string"},"costCents":{"description":"CostCents is what the window cost on the PROVIDER's own plan, in US cents.","type":"integer"},"costLimitCents":{"description":"CostLimitCents is the plan's spend ceiling for the window, in US cents.","type":"integer"},"currency":{"description":"Currency is the provider's currency when it is not US cents.","type":"string"},"inputTokens":{"description":"InputTokens is prompt tokens consumed in the window.","type":"integer"},"kind":{"description":"Kind is subscription or apikey. Empty is accepted; anything else is\nrefused.","type":"string"},"lane":{"description":"Lane is the meter lane within the account.","type":"string"},"machine":{"description":"Machine is the host whose meter read the window. Required.","type":"string"},"outputTokens":{"description":"OutputTokens is completion tokens produced in the window.","type":"integer"},"plan":{"description":"Plan is the subscription plan the account is on, as the provider names it.","type":"string"},"provider":{"description":"Provider is the upstream the account belongs to, e.g. anthropic. Required.","type":"string"},"requests":{"description":"Requests is how many requests the window covers.","type":"integer"},"resetsAt":{"description":"ResetsAt is when the measured window rolls over, RFC3339. Empty is\nallowed; anything else that is not RFC3339 is refused.","type":"string"},"synthetic":{"description":"Synthetic marks a window the meter inferred rather than read.","type":"boolean"},"totalTokens":{"description":"TotalTokens is the window's total tokens.","type":"integer"},"usedPct":{"description":"UsedPct is how much of the window's allowance is consumed, 0–100.","type":"number"},"window":{"description":"Window is the window class: 6h, day, week or month. Required, and a class\nthis surface does not know is refused rather than rewritten.","type":"string"},"windowMinutes":{"description":"WindowMinutes is the window's real length in minutes, as the meter reports\nit.","type":"integer"},"windowStart":{"description":"WindowStart is when the measured window opened, RFC3339. Empty is allowed;\nanything else that is not RFC3339 is refused.","type":"string"}},"type":"object"},"scan":{"properties":{"content":{"description":"Content is the source to scan. It is NEVER stored: what persists is the\nfinding, with a masked preview and a fingerprint.","type":"string"},"path":{"description":"Path is where the file lives, recorded on any finding so a result can be\nlocated in the tree it came from.","type":"string"}},"type":"object"},"scoreConfigReq":{"properties":{"categories":{"description":"Categories is the closed set of labels a CATEGORICAL score may carry. A\nCATEGORICAL rubric with none is refused.","items":{"type":"string"},"type":"array"},"dataType":{"description":"DataType is NUMERIC (the default), CATEGORICAL or BOOLEAN.","type":"string"},"maxValue":{"description":"MaxValue is the inclusive ceiling a NUMERIC score must stay under, finite.","type":"number"},"minValue":{"description":"MinValue is the inclusive floor a NUMERIC score must clear. It must be\nfinite and must not exceed MaxValue.","type":"number"},"name":{"description":"Name is the score name this rubric governs, matching\n^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$. The name is the key, so re-posting one\nreplaces its rules.","type":"string"}},"required":["name"],"type":"object"},"scoreReq":{"properties":{"comment":{"description":"Comment is the grader's reasoning, truncated at 2000 characters.","type":"string"},"dataType":{"description":"DataType is NUMERIC, CATEGORICAL or BOOLEAN. A declared rubric overrides it\n— a caller cannot claim a type the org's rubric contradicts.","type":"string"},"datasetItemId":{"description":"ItemID attaches the score to one graded example.","type":"string"},"datasetName":{"description":"Dataset attaches the score to one dataset.","type":"string"},"name":{"description":"Name is the score name. A rubric of the same name, if the org has declared\none, decides this score's type and the values it may take.","type":"string"},"runName":{"description":"RunName attaches the score to one run.","type":"string"},"stringValue":{"description":"StringValue is the label of a CATEGORICAL score, which must be one the\nrubric allows.","type":"string"},"traceId":{"description":"TraceID attaches the score to one model call.","type":"string"},"value":{"description":"Value is the numeric score, which must be finite: NaN and Inf are refused.\nA BOOLEAN score takes 0 or 1.","type":"number"}},"required":["name"],"type":"object"},"searchIn":{"properties":{"doctypes":{"description":"DocTypes restricts retrieval to a subset of the indexed knowledge doctypes\n(kb-page, kb-memory, kb-source). An empty or foreign list reads all of them.","items":{"type":"string"},"type":"array"},"limit":{"description":"Limit bounds the hits returned. Default 10, maximum 50.","type":"integer"},"project":{"description":"Project narrows retrieval to one project scope.","type":"string"},"query":{"description":"Query is the natural-language question. Required.","type":"string"}},"type":"object"},"seedRequest":{"properties":{"amountCents":{"description":"AmountCents is the capital to inject, in minor units. Must be > 0.","type":"integer"},"memo":{"description":"Memo is the operator's note on the entry. Empty takes \"reserve capital injection\".","type":"string"},"ref":{"description":"Ref is an idempotency key. Without one each seed is a distinct injection.","type":"string"}},"type":"object"},"serviceModeIn":{"properties":{"service":{"description":"Service is the slug to flip, taken from the path.","type":"string"},"waitlistMode":{"description":"WaitlistMode is the new mode: true gates the service behind the waitlist, false\nopens it. This is the launch lever.","type":"boolean"}},"type":"object"},"setEnablementBody":{"properties":{"betaOrgs":{"description":"BetaOrgs REPLACES the item's beta grant list when present. Omit it to\nleave the existing grants alone.","items":{"type":"string"},"type":"array"},"id":{"description":"ID is the item within that namespace — a model id, a provider name, or a\nfeature's key.","type":"string"},"kind":{"description":"Kind is the item's namespace: \"model\", \"provider\" or \"feature\".","type":"string"},"state":{"description":"State is the item's global enablement: \"off\" (hidden from everyone,\nabsolutely), \"beta\" (visible only to granted orgs) or \"ga\" (visible to\neveryone). Required.","type":"string"}},"type":"object"},"setEnvReq":{"properties":{"app":{"description":"App is the application's slug, from the path.","type":"string"},"env":{"description":"Env is the app's whole environment set, REPLACING what it had. Keys must\nmatch `^[A-Za-z_][A-Za-z0-9_]*$`; a variable marked `secret: true` is\nsealed into KMS and blanked in the database.","items":{"$ref":"#/components/schemas/EnvVarJSON"},"type":"array"},"project":{"description":"Project is the project the application lives under, from the path.","type":"string"}},"type":"object"},"setFlagIn":{"properties":{"active":{"description":"Active is the switch itself: true enables the flag for every evaluation.","type":"boolean"},"filters":{"description":"Filters is the optional rollout/payload block of a VALUED switch, e.g.\n{\"groups\":[{\"properties\":[],\"rollout_percentage\":100}],\"payloads\":{\"true\":250}}."},"key":{"description":"Key is the switch to write, taken from the path (e.g. \"waitlist.chat\").","type":"string"}},"type":"object"},"settingsReq":{"properties":{"config":{"additionalProperties":{"type":"object"},"description":"Config is the product's non-secret configuration, stored verbatim. Bounded at\n64 KiB once serialized. Omit it to store an empty object.","type":"object"},"product":{"description":"Product is the catalog slug, from the PATH. zip binds the path last, so the\nURL names the product being written whatever a body field claims.","type":"string"},"secrets":{"additionalProperties":{"type":"string"},"description":"Secrets are the secret fields, by name. Each VALUE is sealed into KMS and\nnever reaches this deployment's database; a value that is empty or equal to\nthe mask the read path returns means \"unchanged\" and is skipped, so a console\nround-trip cannot blank a stored secret. A key must match\n^[a-z0-9][a-z0-9._-]{0,62}$, a value is bounded at 8 KiB, and an org may hold\nat most 64 secret fields per product.","type":"object"}},"type":"object"},"signIn":{"properties":{"digest":{"description":"Digest is a pre-computed 32-byte digest as hex, with or without the 0x\nprefix. When present it is signed verbatim and message is ignored.","type":"string"},"message":{"description":"Message is arbitrary text to hash with Keccak256 and sign. Used only when\ndigest is empty.","type":"string"}},"type":"object"},"signRequest":{"properties":{"id":{"description":"ID is the document to send for signature, from the path.","type":"string"},"signers":{"description":"Signers are the people who must sign, by name and email. At least one is\nrequired.","items":{"$ref":"#/components/schemas/legalSigner"},"type":"array"}},"type":"object"},"skillIn":{"properties":{"content":{"description":"Content is the SKILL.md body. Required, at most 256 KiB.","type":"string"},"description":{"description":"Description is the one-line summary discovery shows for the skill.","type":"string"},"name":{"description":"Name is the skill's id within the org: one lowercase path segment\n(a-z0-9, _ or -). Writing an existing name REVISES that skill.","type":"string"}},"type":"object"},"streamUpdate":{"properties":{"discard":{"type":"string"},"maxAge":{"type":"integer"},"maxBytes":{"type":"integer"},"maxMsgs":{"type":"integer"},"retention":{"type":"string"},"storage":{"type":"string"},"stream":{"description":"Stream is the stream to update, from the path.","type":"string"},"subjects":{"items":{"type":"string"},"type":"array"}},"type":"object"},"streamWrite":{"properties":{"discard":{"type":"string"},"maxAge":{"type":"integer"},"maxBytes":{"type":"integer"},"maxMsgs":{"type":"integer"},"name":{"description":"Name is the stream's name within the org: 1–64 of [A-Za-z0-9_], no dash.","type":"string"},"retention":{"type":"string"},"storage":{"type":"string"},"subjects":{"items":{"type":"string"},"type":"array"}},"type":"object"},"structureIn":{"properties":{"jurisdiction":{"description":"Jurisdiction is the state of formation: DE or WY.","type":"string"},"name":{"description":"Name is the proposed company name.","type":"string"},"structure":{"description":"Structure is the legal entity: c-corp, llc or dao-llc.","type":"string"}},"type":"object"},"subdomainSetIn":{"properties":{"enabled":{"description":"Enabled publishes the script on <script>.<subdomain>.workers.dev when true,\nand withdraws it when false.","type":"boolean"},"script":{"description":"Script is the Worker script name, from the path.","type":"string"}},"type":"object"},"subjectReq":{"properties":{"email":{"description":"Email is the subject's contact email, sealed at rest.","type":"string"},"kind":{"description":"Kind is the party type: \"individual\" (KYC) or \"business\" (KYB).","type":"string"},"name":{"description":"Name is the subject's name, sealed at rest.","type":"string"},"ref":{"description":"Ref is the org's own opaque external id for this subject.","type":"string"}},"type":"object"},"submitReq":{"properties":{"files":{"description":"Files is the batch to scan, at most 500 files and 8 MiB of content in total.","items":{"$ref":"#/components/schemas/scan"},"type":"array"},"project":{"description":"Project names the sub-scope the scan is filed under. It must be a slug; omit\nit and the caller's project header is used instead.","type":"string"}},"required":["files"],"type":"object"},"subscribeReq":{"properties":{"channel":{"description":"Channel is the Slack channel the notifier posts to — an id (C…/G…), a\n#name, or a bare name. Required.","type":"string"},"events":{"description":"Events narrows delivery to these lifecycle kinds (push.landed,\ndeploy.live, deploy.failed). Omit it to receive every deliverable kind; a\nkind that is never posted to Slack is refused rather than silently dropped.","items":{"type":"string"},"type":"array"},"name":{"description":"Name is the repo to subscribe, from the :name path segment.","type":"string"}},"type":"object"},"suite":{"properties":{"attempts":{"description":"Attempts is how many times to try each item; the harness's default applies\nwhen it is omitted.","type":"integer"},"benchmarks":{"description":"Benchmarks are the catalog ids to run. At least one is required, and every id\nmust be in the catalog.","items":{"type":"string"},"type":"array"},"endpoint":{"description":"Endpoint is your own chat-completions URL, for benchmarking a model this arena\ndoes not host. Either this or model is required.","type":"string"},"model":{"description":"Model is the catalog model id to run. Either this or endpoint is required.","type":"string"}},"required":["benchmarks"],"type":"object"},"sweepRequest":{"properties":{"period":{"description":"Period is the accrual period as YYYY-MM. Empty takes the current UTC month.","type":"string"},"revenueCents":{"description":"RevenueCents is the net platform revenue measured for the period, in minor units. Must be >= 0.","type":"integer"}},"type":"object"},"syncReq":{"properties":{"actor":{"description":"Actor is the identity the sync writes as, used as the loop guard so its own\nwrites do not re-trigger it. Defaults to the deployment's GIT_SYNC_ACTOR.","type":"string"},"direction":{"description":"Direction is both (the default), pull, push or off.","type":"string"},"kind":{"description":"Kind is what is being synced. Only \"git\" today, which is also the default.","type":"string"},"run":{"description":"Run reconciles once immediately after the upsert, in the background.","type":"boolean"},"source":{"$ref":"#/components/schemas/endpointReq","description":"Source is the upstream end. Required."},"target":{"$ref":"#/components/schemas/endpointReq","description":"Target is the downstream end. Optional for git: a native repository named\nafter the source is derived when it is omitted."},"trigger":{"description":"Trigger is what starts a reconcile: webhook (the default), poll or manual.","type":"string"}},"type":"object"},"targetReq":{"properties":{"capacity":{"type":"string"},"host":{"type":"string"},"kind":{"type":"string"},"label":{"type":"string"},"metrics":{"$ref":"#/components/schemas/Metrics"},"spec":{"$ref":"#/components/schemas/Spec"},"status":{"type":"string"}},"type":"object"},"taxonIn":{"properties":{"brands":{"description":"Brands are the brands whose console shows it. Omit for every brand its\ncategory admits.","items":{"type":"string"},"type":"array"},"category":{"description":"Category is the id of an EXISTING category to file it under. Required.","type":"string"},"description":{"description":"Description is the one line shown beneath the name.","type":"string"},"href":{"description":"Href is the absolute URL an external product launches. Give this or route,\nnever both.","type":"string"},"icon":{"description":"Icon names the icon the surface renders, e.g. \"Database\".","type":"string"},"id":{"description":"ID is the taxon slug to write, from the path.","type":"string"},"name":{"description":"Name is the display name. Required.","type":"string"},"order":{"description":"Order is where it sits within its category, ascending.","type":"integer"},"published":{"description":"Published is whether it is shown. Omitted means published — a taxon someone\ntook the trouble to write is meant to be seen, and hiding one is the\ndeliberate act.","type":"boolean"},"route":{"description":"Route is the in-console path it opens, e.g. \"/vector\". Give this or href,\nnever both.","type":"string"},"tags":{"description":"Tags are free-form labels for search and grouping across categories.","items":{"type":"string"},"type":"array"}},"type":"object"},"templateOverride":{"properties":{"body":{"description":"Body is the text/template source. Required. Every {{.key}} it references must\nbe declared in Fields, or the save is refused rather than rendering a blank\ninto a contract later.","type":"string"},"category":{"description":"Category groups the template: formation, equity, ops or sales. Optional when\noverriding a built-in, which supplies its own.","type":"string"},"counselReview":{"description":"CounselReview marks a template whose documents must carry the counsel notice.\nIt can be raised but never lowered: a formation or equity template is always\ncounsel-review, and an override of a counsel-review built-in stays one.","type":"boolean"},"fields":{"description":"Fields declares the merge fields the body consumes. Every declared field is\nREQUIRED at generation — the engine fails closed on a missing one.","items":{"$ref":"#/components/schemas/Field"},"type":"array"},"id":{"description":"ID is the template to override, from the path. Overriding a built-in id\ninherits that built-in's category, title and counsel-review posture.","type":"string"},"title":{"description":"Title is the template's display name. Required unless a built-in supplies it.","type":"string"}},"type":"object"},"toolCall":{"properties":{"arguments":{"additionalProperties":{"type":"object"},"description":"Arguments is the tool's own input object, passed through verbatim to\nwhichever source owns it.","type":"object"},"name":{"description":"Name is the tool to run, exactly as GET /v1/tools reports it.","type":"string"}},"type":"object"},"transferReq":{"properties":{"authCode":{"description":"AuthCode is the transfer authorization the losing registrar issued. It is\nrequired.","type":"string"},"domain":{"description":"Domain is the name to move in. It is required.","type":"string"},"years":{"description":"Years is the term to buy on transfer, defaulting to 1.","type":"integer"}},"required":["domain","authCode"],"type":"object"},"transitionIn":{"properties":{"doctype":{"description":"DocType is the content type to act on, from the path.","type":"string"},"name":{"description":"Name is the document to act on, from the path.","type":"string"},"scheduleAt":{"description":"ScheduleAt is an ISO-8601 go-live time handed to the channel's own scheduler;\n\"\" distributes now.","type":"string"},"to":{"description":"To is the lifecycle state to move to. Required, and the move must be a legal\nedge from the item's current state.","type":"string"}},"type":"object"},"updateAgentIn":{"properties":{"computeRef":{"type":"string"},"description":{"type":"string"},"executionMode":{"type":"string"},"instructions":{"type":"string"},"model":{"type":"string"},"ref":{"description":"Ref is the agent to update — its public id or org-unique name, from the path.","type":"string"},"schedule":{"type":"string"},"serviceAccountId":{"type":"string"},"tools":{"items":{"type":"string"},"type":"array"}},"type":"object"},"updateCampaignIn":{"properties":{"account":{"description":"Account is the provider ad-account this campaign runs on (Meta act_<id>). Optional.","type":"string"},"budget":{"description":"Budget is the campaign budget in MINOR units (cents). Negative values clamp to 0.","type":"integer"},"name":{"description":"Name is the campaign's display label. Required; trimmed and bounded to 1024 bytes.","type":"string"},"objective":{"description":"Objective is the campaign goal as the provider names it. Optional, bounded to 1024 bytes.","type":"string"},"platform":{"description":"Platform is the ad network: meta, google, tiktok or x. Empty defaults to meta.","type":"string"},"spend":{"description":"Spend is the amount spent so far in MINOR units (cents). Negative values clamp to 0.","type":"integer"},"status":{"description":"Status is the lifecycle state: draft, active, paused or completed. Empty defaults to draft.","type":"string"}},"type":"object"},"updateEndpointIn":{"properties":{"description":{"description":"Description is a free-text label for the console. Optional, clipped to 1024 bytes.","type":"string"},"events":{"description":"Events are NATS subject patterns to subscribe to. An empty or omitted list\nmeans EVERY event. Max 64 patterns, each max 256 bytes.","items":{"type":"string"},"type":"array"},"status":{"description":"Status is \"active\" or \"disabled\". Empty defaults to active.","type":"string"},"url":{"description":"URL is the https:// address each matching event is POSTed to. Required,\nmax 2048 bytes; http:// and every other scheme is refused.","type":"string"}},"type":"object"},"userOptinReq":{"properties":{"handle":{"description":"Handle is the display name shown on a listed row: 1-40 characters of letters,\ndigits, space, dot, underscore, apostrophe or hyphen. Left empty on a listing\nopt-in it defaults to the caller's username.","type":"string"},"listed":{"description":"Listed publishes the caller's row to other viewers of the board when true, and\nanonymizes it when false.","type":"boolean"}},"type":"object"},"validatorClaim":{"properties":{"nonce":{"description":"Nonce is the value GET /v1/validators/challenge issued for this slot.","type":"string"},"signature":{"description":"Signature is the wallet's personal_sign over the challenge message, hex with\na 0x prefix.","type":"string"},"tokenId":{"description":"TokenID is the Validator-tier GenesisNFT token id being claimed. It IS the\nvalidator slot.","type":"integer"}},"type":"object"},"venueLinkRequest":{"properties":{"clientId":{"description":"ClientID is the Azure AD application id. Azure only.","type":"string"},"clientSecret":{"description":"ClientSecret selects the service-principal flow. LEAVING IT OUT selects\nkeyless workload identity federation instead, so omitting it is a choice\nrather than an omission. Azure only.","type":"string"},"credentialJson":{"description":"CredentialJSON is a Google credentials document — an external_account\n(workload identity federation, keyless) or a service-account key. GCP only.","type":"string"},"externalId":{"description":"ExternalID pins that role assumption to Hanzo, which is what closes the\nconfused-deputy hole. AWS only.","type":"string"},"label":{"description":"Label is the org-chosen name for this account within the provider, which is\nhow a second account at the same provider is addressed later. Empty means\n\"default\"; anything outside 1–64 of [A-Za-z0-9._-] is refused.","type":"string"},"projectIds":{"description":"ProjectIDs bounds the GKE cluster sweep. GCP only.","items":{"type":"string"},"type":"array"},"provider":{"description":"Provider is the cloud being linked, from the path: digitalocean, aws, gcp\nor azure.","type":"string"},"regions":{"description":"Regions bounds the AWS EKS cluster sweep. AWS only.","items":{"type":"string"},"type":"array"},"roleArn":{"description":"RoleARN is the AWS role Hanzo assumes into the account — the keyless path,\nso no access key is ever stored.","type":"string"},"subscriptionIds":{"description":"SubscriptionIDs bounds the AKS cluster sweep. Azure only.","items":{"type":"string"},"type":"array"},"tenantId":{"description":"TenantID is the Azure AD tenant of the app. Azure only.","type":"string"},"token":{"description":"Token is the DigitalOcean personal access token. DigitalOcean only, and it\nis the one provider that requires storing a secret.","type":"string"}},"type":"object"},"verificationDecision":{"properties":{"id":{"description":"ID is the verification to decide, from the path.","type":"string"},"status":{"description":"Status is the reviewer's decision: \"reviewer_confirmed\" (a pass) or\n\"manual_review\" (withheld for review) — never a provider status.","type":"string"}},"type":"object"},"verificationReq":{"properties":{"email":{"description":"Email is an inline subject's contact email, sealed at rest.","type":"string"},"kind":{"description":"Kind is an inline subject's party type: \"individual\" (KYC) or \"business\" (KYB).","type":"string"},"name":{"description":"Name is an inline subject's name, sealed at rest.","type":"string"},"ref":{"description":"Ref is the org's own opaque external id for an inline subject.","type":"string"},"subjectId":{"description":"SubjectID names an existing subject to verify; empty creates one inline.","type":"string"}},"type":"object"},"verifyRequest":{"properties":{"repoUrl":{"description":"RepoURL is what to claim: a repository (github.com/owner/name) or a whole\nOWNER (github.com/owner, no repository segment). gitlab.com is accepted too.","type":"string"}},"type":"object"},"waitlistBoostRequest":{"properties":{"email":{"description":"Email identifies the entry to boost. Either this or RefCode is required.","type":"string"},"points":{"description":"Points is how many points to award. Must be positive — this seam exists to move\nsomeone UP toward the cutoff.","type":"integer"},"reason":{"description":"Reason is the operator's justification. Not sent to the engine; it is recorded on\nthe audit row, which is the point of asking for it.","type":"string"},"refCode":{"description":"RefCode identifies the entry by its referral code, when the email is unknown.","type":"string"},"waitlist":{"description":"Waitlist is the waitlist slug the grant lands on. Required.","type":"string"}},"type":"object"},"webQuestion":{"properties":{"language":{"description":"Language narrows the search to a locale, BCP-47-ish (\"en\", \"ja\"). Empty\nmeans no narrowing.","type":"string"},"max_sources":{"description":"MaxSources caps how many pages are read. Empty means the mode's own budget.","type":"integer"},"mode":{"description":"Mode is how much work to do: `search` (fast, one pass), `news` (recency\nbiased), `research` (a plan and several rounds) or `deep` (the widest\nsurvey). Empty means research.","type":"string"},"q":{"description":"Q is the question, in plain language. Required.","type":"string"},"sources":{"description":"Sources narrows where the evidence comes from: any of `web`, `news`,\n`academic`, `github`, `reddit`, `x`. Each becomes a site-scoped search, so\n`[\"x\"]` researches X/Twitter posts rather than the open web.","items":{"type":"string"},"type":"array"}},"type":"object"},"webSearchQuery":{"properties":{"language":{"description":"Language narrows the engines to a locale, BCP-47-ish (\"en\", \"ja\", \"de\").\nEmpty means no narrowing.","type":"string"},"q":{"description":"Q is the query. Required — an empty one is refused rather than answered\nwith the whole web.","type":"string"}},"type":"object"},"zapProcReq":{"properties":{"description":{"type":"string"},"name":{"type":"string"},"project":{"type":"string"}},"type":"object"}}},"info":{"description":"Generated by `cargo run --features genspec --bin genspec`. The SOURCE is the Hanzo Cloud API document hanzoai/cloud@14fb4eebc18cb55cfa6c1b7f0b77d9946cb216f0 sha256:73f7ef4598058af3aafcce96f4768ec228cb3fa7b73d9e02043c00808efe733a, and it is the ONLY source: it enumerates the operations, and carries their prose and their reflected shapes. Nothing is joined in — an operation absent here is an operation no cloud router registers, which is what makes a phantom command impossible rather than rare. Never hand-edited: `genproduct` derives src/commands/product/generated.rs from this and nothing else.","title":"Hanzo Cloud — the CLI's command surface","version":"v1"},"openapi":"3.1.0","paths":{"/v1/admin/affiliates":{"get":{"parameters":[{"description":"Limit caps the rows returned. Absent or non-positive means the default of\n500; anything above 1000 is clamped to 1000.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists every affiliate across the fleet with its ORG exposed, plus a fleet summary of lifetime accrued, still-pending and paid commission in integer cents."}},"/v1/admin/affiliates/sweep":{"post":{"summary":"Runs the accrual: for each referred org it reads that org's metered spend for the current period and accrues commission to every affiliate up its referral chain, then answers how many sources were swept and how many NEW accruals landed."}},"/v1/admin/affiliates/{id}/approve":{"post":{"parameters":[{"description":"ID is the affiliate to approve, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/approval"}}}},"summary":"Approves an affiliate and MINTS its referral code — the moment the partner has a working share link and starts accruing."}},"/v1/admin/affiliates/{id}/payout":{"post":{"parameters":[{"description":"ID is the affiliate to pay, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/disbursal"}}}},"summary":"Pays out accrued commission and answers the payout row with the affiliate's updated balances."}},"/v1/admin/affiliates/{id}/rate":{"post":{"parameters":[{"description":"ID is the affiliate whose direct rate moves, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/rateSet"}}}},"summary":"Sets one affiliate's DIRECT commission rate, in basis points of Hanzo's margin."}},"/v1/admin/affiliates/{id}/suspend":{"post":{"parameters":[{"description":"ID is the affiliate's server-minted handle, \"aff_\"-prefixed.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Suspends an affiliate: it stops accruing on the next sweep, and its code stops resolving for new attributions."}},"/v1/admin/aimetrics":{"get":{"parameters":[{"description":"Range is the lower time bound: 24h, 7d or 30d. Anything else reads as the\nboard's own default.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Is the fleet AI board: LLM generations over gen_ai spans (count, cost, avg/p95 latency, per-model), per-model usage from the live cloud_usage ledger, and the eval plane (traces, scores, score names, runs, and the average-score trend)."}},"/v1/admin/analytics":{"get":{"parameters":[{"description":"Range is the lower time bound: 24h, 7d or 30d. Anything else reads as the\nboard's own default.","example":"30d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Is the SaaS product-analytics board over the caller's tenant window: active customers, new and churned, retention, MRR, ARPU, the usage trend and the top customers by spend — every number folded from the commerce ledger, not sampled."}},"/v1/admin/applications":{"get":{"parameters":[{"description":"Owner is the org whose rows to read. Defaults to the admin org, which owns the\nplatform's roles and applications.","example":"admin","in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number. Forwarded only when set — IAM applies its own\ndefault otherwise.","example":"1","in":"query","name":"p","required":false,"schema":{"type":"string"}},{"description":"PageSize is rows per page. Forwarded only when set.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}}],"summary":"Lists IAM applications for one owner org, forwarded VERBATIM from IAM's get-applications."}},"/v1/admin/audit":{"get":{"parameters":[{"description":"Org restricts the trail to one tenant.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Sub restricts it to one actor (the validated subject that made the request).","in":"query","name":"sub","required":false,"schema":{"type":"string"}},{"description":"Action restricts it to one action name, e.g. \"admin.waitlist.grant\".","example":"admin.waitlist.grant","in":"query","name":"action","required":false,"schema":{"type":"string"}},{"description":"Resource restricts it to one resource kind, e.g. \"credit-grant\".","in":"query","name":"resource","required":false,"schema":{"type":"string"}},{"description":"ResourceID restricts it to one resource instance.","in":"query","name":"resourceId","required":false,"schema":{"type":"string"}},{"description":"Result restricts it to \"success\" or \"error\".","in":"query","name":"result","required":false,"schema":{"type":"string"}},{"description":"Since is the inclusive lower time bound, RFC3339. An unparseable value is\nignored rather than refused — one malformed filter must not hide the trail.","example":"2026-07-01T00:00:00Z","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Until is the upper time bound, RFC3339, with the same tolerance.","in":"query","name":"until","required":false,"schema":{"type":"string"}},{"description":"PageSize is rows per page, default 100.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number, driving the offset.","in":"query","name":"p","required":false,"schema":{"type":"string"}}],"summary":"Reads cloud's tamper-evident audit trail, newest first, with the chain's live integrity attached so a listing can be badged as verified."}},"/v1/admin/audit/verify":{"get":{"summary":"Walks the WHOLE hash chain and reports whether it is intact: how many records were checked, the head hash to pin externally against tail-truncation, and — when the chain is broken — the seq of the first bad record and why."}},"/v1/admin/authors":{"get":{"parameters":[{"description":"Limit bounds the page. 0 or less means the default of 500; anything above\n1000 is clamped to 1000.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the platform's whole author program — every org's author record, not the caller's — with each one's repository and deploy counts and a fleet roll-up of the money accrued, pending and paid."}},"/v1/admin/authors/sweep":{"post":{"summary":"Runs the accrual sweep across every approved author: for each of their deploying orgs it computes this period's royalty from that org's metered spend and latches it at most once per period."}},"/v1/admin/authors/{id}/approve":{"post":{"parameters":[{"description":"ID is the author to approve, from the path.","example":"aut_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/approveRequest"}}}},"summary":"Admits one author to EARNING, optionally on a negotiated royalty share."}},"/v1/admin/authors/{id}/basis":{"get":{"parameters":[{"description":"ID is the author record's handle, from the path.","example":"aut_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Period is the UTC accrual month, YYYY-MM. Empty means every period; any other\nshape is refused with 400.","example":"2026-07","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"summary":"Returns the audit trail behind ONE author's royalty — the same payload the author reads at /v1/authors/basis, from the same builder, so support sees exactly what the author sees rather than a parallel view free to drift."}},"/v1/admin/authors/{id}/payout":{"post":{"parameters":[{"description":"ID is the author to pay, from the path.","example":"aut_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/payoutRequest"}}}},"summary":"Records a payout of accrued royalty and settles it."}},"/v1/admin/authors/{id}/suspend":{"post":{"parameters":[{"description":"ID is the author record's handle, \"aut_\"-prefixed.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Stops one author earning."}},"/v1/admin/bases":{"get":{"summary":"Lists the tenant Base instances in the caller's window — a SuperAdmin sees every tenant's, anyone else only their own subtree's."}},"/v1/admin/caps":{"get":{"parameters":[{"description":"Org is the tenant to act on. Required for a SuperAdmin — they must name their\ntarget; ignored for a white-label admin, who always acts on their own org.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"ID is the cap to edit or remove, from the path. Unused by the list and create ops.","in":"query","name":"id","required":false,"schema":{"type":"string"}}],"summary":"Reads one org's usage caps: its spend alerts plus the derived period spend, over/warn state and reset time."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/capIn"}}}},"summary":"Sets a usage cap on one org — a platform override of a customer budget, written to the customer's own spend-alert rows."}},"/v1/admin/caps/{id}":{"delete":{"parameters":[{"description":"ID is the cap to edit or remove, from the path. Unused by the list and create ops.","example":"cap_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Org is the tenant to act on. Required for a SuperAdmin — they must name their\ntarget; ignored for a white-label admin, who always acts on their own org.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}}],"summary":"Removes one cap by id, lifting the ceiling entirely."},"patch":{"parameters":[{"description":"ID is the cap to edit or remove, from the path. Unused by the list and create ops.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/capIn"}}}},"summary":"Edits one cap by id — raise or lower the ceiling, flip enforcement."}},"/v1/admin/catalog":{"get":{"summary":"Returns the full model and provider catalog annotated with each entry's enablement state, for the operator console."}},"/v1/admin/catalog/models/{wildcard1}":{"patch":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Turn one model off, into beta for named orgs, or generally available","x-catch-all":["wildcard1"]}},"/v1/admin/catalog/providers/{name}":{"patch":{"parameters":[{"description":"Name is the provider the overlay belongs to, from the URL.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/providerPatchIn"}}}},"summary":"Sets one provider's availability overlay."}},"/v1/admin/compute":{"get":{"parameters":[{"description":"Kind narrows to one workload class (bot | machine | cluster | nodepool |\ncontainer | function | …). An OPEN spectrum matched as a plain string, lowercased\nto the warehouse's convention; empty means every kind.","example":"bot","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Org narrows to one tenant. Empty means every tenant — this board is\ncross-tenant by nature.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Range is the lower time bound: 24h, 7d or 30d. Anything else reads as 30d.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Rolls the fleet's compute usage up to one row per (org, app, project, kind): how many distinct machines ran in the window, how many are still active, what they billed, and when each group last emitted an event."}},"/v1/admin/customers":{"get":{"summary":"Lists every customer org at a glance, sorted by slug: owner email, plan, suspend status, member count, balance, month-to-date spend and MRR."}},"/v1/admin/customers/{org}":{"get":{"parameters":[{"description":"Org is the tenant slug from the path.","in":"path","name":"org","required":true,"schema":{"type":"string"}}],"summary":"Answers GET /v1/admin/customers/:org."}},"/v1/admin/customers/{org}/credit":{"post":{"parameters":[{"description":"Org is the tenant to credit. Required.","in":"path","name":"org","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantIn"}}}},"summary":"Issues a staff credit grant to the org named in the path — a comp, refund or promo — through the ONE credit-write path core.ApplyGrant, which validates the amount against the per-grant cap, checks the org exists, moves the money and records the tamper-evident audit row."}},"/v1/admin/customers/{org}/reactivate":{"post":{"parameters":[{"description":"Org is the tenant slug from the path.","in":"path","name":"org","required":true,"schema":{"type":"string"}}],"summary":"Restores access for every member of the org, undoing a suspend."}},"/v1/admin/customers/{org}/suspend":{"post":{"parameters":[{"description":"Org is the tenant slug from the path.","in":"path","name":"org","required":true,"schema":{"type":"string"}}],"summary":"Cuts off every member of the org: IAM refuses a forbidden user at login AND at token issuance, so a suspended customer can neither sign in nor mint a fresh token."}},"/v1/admin/enablement":{"get":{"summary":"Returns every item an operator has set an enablement state on — its global state (off, beta or ga) and the orgs granted its beta."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/setEnablementBody"}}}},"summary":"Sets one item's global enablement state — off, beta or ga — and optionally replaces the list of orgs granted its beta."}},"/v1/admin/finance":{"get":{"summary":"Answers GET /v1/admin/finance."}},"/v1/admin/finance/backfill":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackfillIn"}}}},"summary":"Carries ONE org's current commerce prepaid balance into the native finance wallet — the one-time cutover between the two ledgers."}},"/v1/admin/flags":{"get":{"summary":"Reads the platform control-plane board: every runtime launch/release switch (waitlist, public signup, subsystem activation, gateway limits, network ids) with its LIVE value and where that value came from — a stored definition or the compiled-in default."}},"/v1/admin/flags/{key}":{"put":{"parameters":[{"description":"Key is the switch to write, taken from the path (e.g. \"waitlist.chat\").","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/setFlagIn"}}}},"summary":"Stores or overwrites ONE platform switch's definition and answers with the whole board as it now stands."}},"/v1/admin/grants":{"get":{"parameters":[{"description":"Org filters by the ACTOR's org (the staff org that issued the grant), which is\nrarely what a reader wants — the target org is a row field, not a filter.","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Result filters by outcome: \"success\" or \"error\". Empty returns both, which is\nthe point of this view — a refused grant is as interesting as a granted one.","example":"success","in":"query","name":"result","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned. Default 200.","example":"50","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Reads the credit-grant ledger across ALL orgs, newest first — who granted what to whom, when, and from which money bucket."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantIn"}}}},"summary":"Issues a credit grant to any org from the operator Grants view, with the target named in the body."}},"/v1/admin/infra":{"get":{"parameters":[{"description":"Refresh, when present, forces a full re-scan instead of serving the cached\nsnapshot. Every MUTATION re-scans regardless — this is only for the reader.","example":"1","in":"query","name":"refresh","required":false,"schema":{"type":"string"}}],"summary":"Serves the whole DigitalOcean infrastructure board: droplets, volumes, DOKS clusters and load balancers, each cross-referenced against every cluster's live Kubernetes state so the board can say what is safe to destroy and what is not."}},"/v1/admin/infra/clusters/{id}/nodepools/{pool}/scale":{"post":{"parameters":[{"description":"ID is the DOKS cluster id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Pool is the node pool, from the path. Its DO id or its name — both are unique\nwithin a cluster, and an operator reads the name off the board.","in":"path","name":"pool","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScaleIn"}}}},"summary":"Sets a node pool's node count — the ONE correct way to change how many nodes a DOKS cluster has."}},"/v1/admin/infra/droplets/{id}":{"delete":{"parameters":[{"description":"ID is the DO droplet id, from the path. Numeric.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Size is the target DigitalOcean size slug on resize, e.g. \"s-4vcpu-8gb\".","in":"query","name":"size","required":false,"schema":{"type":"string"}},{"description":"Disk requests a PERMANENT resize that grows the disk. DO can never resize such a\ndroplet down again, so it defaults false — a CPU/RAM-only change, reversible.","in":"query","name":"disk","required":false,"schema":{"type":"boolean"}}],"summary":"Destroys a droplet the board has just proven is NOT a DOKS node."}},"/v1/admin/infra/droplets/{id}/resize":{"post":{"parameters":[{"description":"ID is the DO droplet id, from the path. Numeric.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DropletIn"}}}},"summary":"Changes a droplet's plan."}},"/v1/admin/infra/loadbalancers/{id}":{"delete":{"parameters":[{"description":"ID is the DO load balancer id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Destroys a load balancer the board has just proven no live type=LoadBalancer Service in any cluster targets."}},"/v1/admin/infra/nodes/{id}/cordon":{"post":{"parameters":[{"description":"ID is the node's droplet id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CordonIn"}}}},"summary":"Marks one cluster node unschedulable — or schedulable again — and can drain the pods already on it."}},"/v1/admin/infra/volumes/{id}":{"delete":{"parameters":[{"description":"ID is the DO volume id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Snapshot is the snapshot-first switch on DELETE. Anything other than the literal\n\"false\" snapshots before destroying — the snapshot IS the undo, so waiving it is\ndeliberate and explicit.","in":"query","name":"snapshot","required":false,"schema":{"type":"string"}},{"description":"Name is the snapshot name on the snapshot action. Blank gets a deterministic\n\"<volume>-predelete-<unix>\" so the undo is findable in the DO console.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"SizeGiB is the target size on the resize action. A volume only ever grows —\nExpandTo is the verdict that refuses a shrink, so this is not validated here.","in":"query","name":"sizeGiB","required":false,"schema":{"type":"integer"}}],"summary":"Destroys a volume the board has just proven no PersistentVolume in any cluster references."}},"/v1/admin/infra/volumes/{id}/resize":{"post":{"parameters":[{"description":"ID is the DO volume id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeIn"}}}},"summary":"Grows a volume."}},"/v1/admin/infra/volumes/{id}/snapshot":{"post":{"parameters":[{"description":"ID is the DO volume id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolumeIn"}}}},"summary":"Takes a point-in-time snapshot of one volume — the undo a delete relies on, available on its own so an operator can take one before any risky change."}},"/v1/admin/invoices":{"get":{"parameters":[{"description":"Status filters on the invoice's LATEST lifecycle status (paid, open, void, …),\nmatched case-insensitively.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Org filters to one tenant, matched exactly.","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned. total still reports the full match count.","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Answers GET /v1/admin/invoices."}},"/v1/admin/me":{"get":{"summary":"Answers with the validated operator identity — who the console is signed in as, which tier they are, and how wide their tenant window is."}},"/v1/admin/metrics":{"get":{"parameters":[{"description":"Window is the movement window the new/churned MRR and the recent feed are\nmeasured over. Anything unrecognised falls back to the board default.","in":"query","name":"window","required":false,"schema":{"type":"string"}},{"description":"Limit caps the top-customers table.","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Answers GET /v1/admin/metrics by aggregating commerce.events directly (fleet-wide, no per-org fan-out)."}},"/v1/admin/money":{"get":{"summary":"moneyBoardHandler answers GET /v1/admin/money."}},"/v1/admin/o11y":{"get":{"parameters":[{"description":"Range is the lower time bound: 24h, 7d or 30d. Anything else reads as the\nboard's own default.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Is the fleet-wide observability board: LLM usage (requests, tokens, cost, errors, top orgs, top models), trace RED metrics (count, p50/p95/p99 latency in ms, error rate, top services), fleet log volume, and the O11yAI generation rollup — all aggregated across EVERY tenant, with no org filter applied."}},"/v1/admin/orgs":{"get":{"summary":"Lists the tenant directory one row per org, sorted by slug: member count and the org's month-to-date spend and credit balance, read live from IAM and commerce."}},"/v1/admin/overview":{"get":{"summary":"Is the Platform Overview tiles: how many orgs and users are in the caller's tenant window, the fleet workload counts, and month-to-date spend and credits."}},"/v1/admin/plugins":{"get":{"parameters":[{"description":"Scope \"host\" answers for THIS host only. Default \"fleet\" fans out to every\nlive peer. A peer answers a host-scoped read, which is what stops the\nfan-out recursing.","example":"fleet","in":"query","name":"scope","required":false,"schema":{"type":"string"}}],"summary":"Reports what each host is actually running: every loaded plugin with its version, pid, uptime, reload and restart counts, and its measured CPU, RSS, thread and fd cost — read from the kernel, which is only answerable at all because a plugin is a process."}},"/v1/admin/plugins/{name}/disable":{"post":{"parameters":[{"description":"Name is the app, from the path.","example":"billing","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameIn"}}}},"summary":"Stops the plugin."}},"/v1/admin/plugins/{name}/enable":{"post":{"parameters":[{"description":"Name is the app, from the path.","example":"billing","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NameIn"}}}},"summary":"Brings a stopped or disabled plugin back on the artifact it already has: the zero Plugin names no new artifact, so Reload reuses the loaded spec and clears the disabled flag."}},"/v1/admin/plugins/{name}/reload":{"post":{"parameters":[{"description":"Name is the app, from the path. It must be one the manifest declares.","example":"billing","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReloadIn"}}}},"summary":"Swaps a plugin for another build without dropping a request."}},"/v1/admin/products":{"get":{"parameters":[{"description":"Kind matches the operator App CR's declared spec.role (sql|kv|generic|ingress).","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Tier matches the derived infra grouping (cloud|data|edge|daemon|paas|app).","example":"data","in":"query","name":"tier","required":false,"schema":{"type":"string"}},{"description":"Env matches the lifecycle namespace (main|test|dev).","example":"main","in":"query","name":"env","required":false,"schema":{"type":"string"}}],"summary":"Lists the fleet workload registry: every operator App CR across the platform namespaces with its declared vs running image tag, reconciled health/phase and drift verdict."}},"/v1/admin/promos":{"get":{"summary":"Reads the current platform plan promo — the singleton discount offer, e.g."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/promoIn"}}}},"summary":"Upserts the platform plan promo — the ONE place the offer is configured."}},"/v1/admin/providers/credit":{"get":{"summary":"Serves GET /v1/admin/providers/credit — the per-provider upstream credit ledger."}},"/v1/admin/referrals":{"get":{"summary":"Answers the referral board: the top referrers by lifetime commission, the funnel conversion rate (referred orgs that have actually produced commission, over all referred orgs), and the accrual LIABILITY the platform owes, broken out by upline level."}},"/v1/admin/referrals/bonuses":{"get":{"parameters":[{"description":"Limit is how many referrals to return, as a decimal string in the `?limit=`\nquery. Absent, unparseable or non-positive means 500; over 1000 is clamped to\n1000. It is a string rather than a number because the parse that has always\nserved this route trims surrounding whitespace, and one parse rule is better\nthan two.","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Returns every referral edge in the directory with a fleet summary."}},"/v1/admin/referrals/sweep":{"post":{"summary":"Qualify-checks every pending referral and advances the ones that now qualify."}},"/v1/admin/revenue":{"get":{"summary":"Is the fleet money board: total prepaid balances held, total realized spend, MRR, ARPU, a per-customer table sorted highest-revenue first, and a real 30-day spend trend from the usage ledger."}},"/v1/admin/roles":{"get":{"parameters":[{"description":"Owner is the org whose rows to read. Defaults to the admin org, which owns the\nplatform's roles and applications.","example":"admin","in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number. Forwarded only when set — IAM applies its own\ndefault otherwise.","example":"1","in":"query","name":"p","required":false,"schema":{"type":"string"}},{"description":"PageSize is rows per page. Forwarded only when set.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}}],"summary":"Lists IAM roles for one owner org, forwarded VERBATIM from IAM's get-roles."}},"/v1/admin/services":{"get":{"summary":"Reads the launch board: every hosted service in the registry with its LIVE waitlist mode, evaluated through the flag engine."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceInput"}}}},"summary":"Onboards a hosted service, or edits one, so a new host comes under the launch gate WITHOUT a redeploy."}},"/v1/admin/services/{service}/mode":{"post":{"parameters":[{"description":"Service is the slug to flip, taken from the path.","in":"path","name":"service","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/serviceModeIn"}}}},"summary":"Flips ONE service's waitlist switch — the launch lever."}},"/v1/admin/subscriptions":{"get":{"parameters":[{"description":"Status filters on the subscription's LATEST lifecycle status (active, trialing,\ncanceled, …), matched case-insensitively.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Org filters to one tenant, matched exactly.","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned. total still reports the full match count.","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Answers GET /v1/admin/subscriptions."}},"/v1/admin/subsystems":{"get":{"parameters":[{"description":"Range bounds the telemetry window: 24h, 7d or 30d. Anything else, including\nempty, resolves to the default through the same o11yRange the o11y board uses.","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"subsystems answers GET /v1/admin/subsystems."}},"/v1/admin/sync":{"post":{"summary":"Answers the operator's \"Sync now\" button."}},"/v1/admin/treasury":{"get":{"parameters":[{"description":"Limit caps the journal entries returned. Out of range or unparseable takes the default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the whole treasury board for a SuperAdmin: the reserve fund report, the recent double-entry journal, and the Hanzo L1 anchor status of the ledger root."}},"/v1/admin/treasury/anchor":{"post":{"summary":"Commits the current ledger root to Hanzo L1, making the books tamper-evident on chain, and returns the anchoring status."}},"/v1/admin/treasury/anchor/signer":{"put":{"summary":"Installs the reserve's threshold MPC wallet as the signer for on-chain anchors, and returns its EVM address so an operator can fund it for gas."}},"/v1/admin/treasury/policy":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/policyRequest"}}}},"summary":"Sets the revenue-share basis points a sweep accrues into the reserve fund and returns the stored policy."}},"/v1/admin/treasury/seed":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/seedRequest"}}}},"summary":"Injects bootstrap capital into the reserve fund so backed payouts can begin before the first revenue-share sweep, and returns the journal entry it wrote."}},"/v1/admin/treasury/sweep":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/sweepRequest"}}}},"summary":"Posts the revenue-share accrual for one period — revenue into the reserve fund, at the current policy's basis points — and returns what it moved."}},"/v1/admin/usage":{"get":{"parameters":[{"description":"Org reads ONE tenant's trailing-30-day total instead of the fleet sum. Honoured\nfor a SuperAdmin only — a white-label admin always reads their own org.\n\nThe window is the one core.OrgMoney returns, and it is what the operator board\nbeside this already labelled (\"Daily, last 30 days\"). The wire used to say\nmonth-to-date while that UI said 30 days; they agree now. This comment is\nREGENERATED into plugin/admin/openapi.json and openapi.yaml as the ?org\nparameter description, so a stale word here ships as a contradiction inside\none spec file — which is the drift this whole change set exists to remove.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}}],"summary":"Returns the trailing 30 days of AI usage: one org's when org names one, else the whole fleet's — the spend, the tokens and the requests, the daily curve behind them, and the split by model."}},"/v1/admin/usage/funding":{"get":{"parameters":[{"description":"From is the inclusive start of the window. Unparseable or absent, together with\nTo, falls back to the last 30 days.","example":"2026-07-01T00:00:00Z","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the exclusive end of the window.","example":"2026-07-27T00:00:00Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Splits our upstream AI usage by how it was FUNDED: one row per (provider, model) over the window, tagged credit (provider grant still remaining), paid (grant exhausted) or paid_only (no grant at all)."}},"/v1/admin/users":{"get":{"parameters":[{"description":"Org narrows the directory to ONE tenant. Honoured for a SuperAdmin only — a\nwhite-label admin is pinned to their own org and this is ignored.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Query is a free-text filter, matched by IAM as a \"contains\" over the user name.","example":"ada","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number. Defaults to \"1\"; IAM returns zero rows AND a\nzero total when it is unset, so this layer never leaves it empty.","example":"1","in":"query","name":"p","required":false,"schema":{"type":"string"}},{"description":"PageSize is rows per page. Defaults to \"200\", the shared admin page size.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}}],"summary":"Lists the user directory across the caller's tenant window, one page at a time."}},"/v1/admin/volumes":{"get":{"summary":"Returns the realtime block-storage board: the DigitalOcean volume fleet (count, capacity, monthly list cost, per-volume region and attachment) plus the analytics datastore's OWN fill, read from its system.disks."}},"/v1/admin/waitlist":{"get":{"parameters":[{"description":"Waitlist is the waitlist slug to read (e.g. \"chat\"). The engine decides what an\nempty slug means.","example":"chat","in":"query","name":"waitlist","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number.","example":"1","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"PageSize is entries per page.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}}],"summary":"Reads one waitlist's leaderboard from the Hanzo waitlist engine — position, points and referral standing per entry — proxied server-authed with the engine secret, never a client credential."}},"/v1/admin/waitlist/boost":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/waitlistBoostRequest"}}}},"summary":"Grants a user waitlist points, moving them up toward the access cutoff."}},"/v1/ads/campaigns":{"get":{"parameters":[{"description":"Status filters to one lifecycle state (draft, active, paused, completed).\nEmpty returns every campaign the org has.","example":"active","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many campaigns come back: default 200, maximum 1000. A\nvalue that is not a positive integer reads as the default.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's ad campaigns, most recently updated first, optionally narrowed to one lifecycle status."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/campaignInput"}}}},"summary":"Registers a new ad campaign for the caller's org and answers 201 with the stored row."}},"/v1/ads/campaigns/{id}":{"delete":{"parameters":[{"example":"camp_2f9c1d","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's campaigns and answers 204 with no body."},"get":{"parameters":[{"example":"camp_2f9c1d","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's campaigns."},"put":{"parameters":[{"example":"camp_2f9c1d","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateCampaignIn"}}}},"summary":"Replaces the user-owned fields of one of the caller org's campaigns and answers the stored row."}},"/v1/ads/campaigns/{id}/launch":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Run one of your stored campaigns on its ad network"}},"/v1/ads/summary":{"get":{"summary":"Rolls the caller org's ad campaigns up into four numbers: how many campaigns exist, how many are active, and the summed budget and spend across all of them."}},"/v1/affiliates":{"get":{"summary":"Answers the caller org's OWN affiliate standing: status, referral code and share link, commission rate, how many orgs it has referred, and its lifetime accrued, still-pending and already-paid commission in integer cents, with its payout history."}},"/v1/affiliates/apply":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/applyRequest"}}}},"summary":"Enrolls the caller's OWN org as an affiliate at status `applied`, optionally requesting a vanity code, and answers the record — 201 on the first apply, 200 with `created:false` afterwards."}},"/v1/affiliates/attribute":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/attributeRequest"}}}},"summary":"Records the first-touch edge every later commission is computed from: the caller's org was referred by the affiliate that owns this code."}},"/v1/affiliates/click":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/clickRequest"}}}},"summary":"Counts a click on a share link."}},"/v1/affiliates/leaderboard":{"get":{"summary":"Answers the top affiliates by lifetime accrued commission, shown by OPT-IN HANDLE with aggregate figures only, plus the caller's own exact rank."}},"/v1/affiliates/me":{"get":{"summary":"Answers the richer self-view: the same lifetime accrued, pending and paid commission and payout history, plus the caller's downline broken out by upline LEVEL — direct, second, third — each with the rate paid at that level and how many orgs sit there."}},"/v1/affiliates/me/earnings":{"get":{"summary":"Answers the caller's own commission ledger: per period, the margin it earned against and the commission taken from that margin; and per referred org, that referral's aggregate contribution."}},"/v1/affiliates/me/handle":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/handleRequest"}}}},"summary":"Sets the caller's public leaderboard display name, or clears it."}},"/v1/affiliates/me/links":{"get":{"summary":"Answers the caller's share links, each with its URL and its funnel: clicks tracked, signups — orgs attributed with that code — and conversions, meaning how many of those signups have actually produced commission."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createLinkRequest"}}}},"summary":"Mints a new share link for the caller's own affiliate and answers it with its full URL, 201."}},"/v1/agent":{"post":{"summary":"Run one tool-calling round against your org's own tools"}},"/v1/agent/conversations":{"get":{"summary":"List the agent threads in your org"}},"/v1/agent/conversations/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one agent thread in full"}},"/v1/agent/presets":{"get":{"summary":"List the agent presets available to a caller"}},"/v1/agents":{"get":{"summary":"Returns every agent defined in the caller's org, each with the number of runs recorded against it."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createAgentIn"}}}},"summary":"Defines an agent in the caller's org: a model, a system prompt (instructions) and a set of tool names."}},"/v1/agents/activity":{"get":{"summary":"Serves the org-wide recent-activity feed."}},"/v1/agents/builds":{"get":{"parameters":[{"description":"Limit caps the page. Absent, zero or over 500 reads as 100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the public index of every published build, most recently updated first, so a gallery can link straight to the story behind each product."}},"/v1/agents/builds/{org}/{project}":{"get":{"parameters":[{"description":"Org is the org that published the build, from the path.","example":"hanzo","in":"path","name":"org","required":true,"schema":{"type":"string"}},{"description":"Project is the product's slug, from the path.","example":"landing","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Returns the readable build of one product: the agent session that produced it, turn by turn — the prompts, the reasoning, the commits each turn produced — plus the exact `git log` that re-derives every commit binding from git itself, so nothing here has to be taken on trust."}},"/v1/agents/metrics":{"get":{"parameters":[{"description":"Range is the window to bucket: 24H, 7D or 30D. Anything else reads as 30D.","example":"7D","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Serves the invocations-over-time histogram for the org's Agents dashboard."}},"/v1/agents/runs":{"get":{"parameters":[{"description":"Limit caps how many runs come back, newest first. Absent, zero or out of\nrange (1..200) reads as 50.","example":20,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Status keeps only runs with this outcome (\"ok\" or \"error\"). Empty keeps\nboth. It is the filter an operator reaches for first — \"show me what broke\"\n— and answering it here rather than by paging the whole history client-side\nis the difference between a usable feed and a download.","example":"error","in":"query","name":"status","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's agent runs across EVERY agent, newest first — what ran here, for whom, on which model, how long it took, and why it failed."}},"/v1/agents/sessions":{"get":{"parameters":[{"description":"Root scopes the page to one subagent tree (its root session id).","in":"query","name":"root","required":false,"schema":{"type":"string"}},{"description":"Parent scopes the page to the direct children of one session. Ignored when\nroot is set; with neither, only ROOT sessions come back.","in":"query","name":"parent","required":false,"schema":{"type":"string"}},{"description":"Status filters to running, paused, done or error.","example":"running","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Project filters to the sessions tagged with one product slug.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Limit caps the page. Absent, zero or over 500 reads as 100.","example":20,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's live sessions, newest first — each with its event count, its direct-child count and a one-line preview of its latest event."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/registerReq"}}}},"summary":"Opens a live agent session in the caller's org — the row every surface (the CLI's outer agent, hanzo.bot, the console, chat) hangs its activity off."}},"/v1/agents/sessions/stream":{"get":{"summary":"Live session and event updates for the caller's org, as Server-Sent Events."}},"/v1/agents/sessions/{id}":{"get":{"parameters":[{"description":"ID is the session to act on, from the path.","example":"sess_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one session with its direct child sessions and its 50 most recent events, oldest of those first."},"patch":{"parameters":[{"description":"ID is the session to update, from the path.","example":"sess_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchSessionIn"}}}},"summary":"Updates a session's surface-owned truth: its status, its title, the run-target it is dispatched to, and the product it built plus whether that build's story is public."}},"/v1/agents/sessions/{id}/control":{"get":{"parameters":[{"description":"ID is the session whose commands are being drained, from the path.","example":"sess_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"After is the last seq this poller applied; only commands newer than it come\nback. Absent or negative reads as 0, which drains from the beginning.","example":12,"in":"query","name":"after","required":false,"schema":{"type":"integer"}}],"summary":"Returns the steering commands (pause/resume/stop/message) recorded against the caller's own session that are newer than the cursor, oldest first, with the cursor to poll from next."}},"/v1/agents/sessions/{id}/events":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Append one turn to a session's ordered log."}},"/v1/agents/sessions/{id}/message":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Send text into a running session."}},"/v1/agents/sessions/{id}/pause":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Ask a running session to pause."}},"/v1/agents/sessions/{id}/resume":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Ask a paused session to carry on."}},"/v1/agents/sessions/{id}/stop":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Ask a session to stop for good."}},"/v1/agents/sessions/{id}/tree":{"get":{"parameters":[{"description":"ID is the session to act on, from the path.","example":"sess_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns the subagent-flow graph rooted at this session: the session, its children, their children, each node carrying its own event count."}},"/v1/agents/targets":{"get":{"summary":"Returns every machine registered to the caller's org, newest first, each with its live session load."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/targetReq"}}}},"summary":"Registers a machine as an agent target, or re-links one that is already registered."}},"/v1/agents/targets/{id}":{"delete":{"parameters":[{"description":"ID is the target to act on, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deregisters one machine."},"get":{"parameters":[{"description":"ID is the target to act on, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one registered machine, with its live session load."},"patch":{"parameters":[{"description":"ID is the target to update, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchTargetIn"}}}},"summary":"Updates one machine in place."}},"/v1/agents/targets/{id}/claim":{"post":{"parameters":[{"description":"ID is the target to act on, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"ClaimRoutedRun is the machine's long poll for work: it authenticates the daemon, stamps the liveness the dispatch gate reads (the poll IS the proof a runner is listening), and waits up to 25 seconds for the next run addressed to THIS machine."}},"/v1/agents/targets/{id}/key":{"post":{"parameters":[{"description":"ID is the target to act on, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Mints (or rotates) the claim key a `hanzo code --serve` daemon presents to claim work for this machine, and returns it ONCE: only its SHA-256 hash is stored."}},"/v1/agents/targets/{id}/runs/{runId}/report":{"post":{"parameters":[{"description":"ID is the machine reporting, from the path.","example":"tgt_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"RunID is the routed run being completed, from the path.","example":"run_1","in":"path","name":"runId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/reportRunIn"}}}},"summary":"Completes a claimed run: it delivers the terminal result to the run's durable owner, which is what lets that workflow finish."}},"/v1/agents/{ref}":{"delete":{"parameters":[{"description":"Ref is the agent's public id (the agent_… handle create and list return) or\nits org-unique name, from the path. Either resolves the same agent.","example":"helper","in":"path","name":"ref","required":true,"schema":{"type":"string"}}],"summary":"Removes an agent and every run recorded against it."},"get":{"parameters":[{"description":"Ref is the agent's public id (the agent_… handle create and list return) or\nits org-unique name, from the path. Either resolves the same agent.","example":"helper","in":"path","name":"ref","required":true,"schema":{"type":"string"}}],"summary":"Returns one agent with its system prompt and its 20 most recent runs."},"patch":{"parameters":[{"description":"Ref is the agent to update — its public id or org-unique name, from the path.","example":"helper","in":"path","name":"ref","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateAgentIn"}}}},"summary":"Changes an agent in place."}},"/v1/agents/{ref}/run":{"post":{"parameters":[{"in":"path","name":"ref","required":true,"schema":{"type":"string"}}],"summary":"Run one of your org's agents and get the recorded run back."}},"/v1/agents/{ref}/runs":{"get":{"parameters":[{"description":"Ref is the agent's public id or its org-unique name, from the path.","example":"helper","in":"path","name":"ref","required":true,"schema":{"type":"string"}},{"description":"Limit caps how many runs come back, newest first. Absent, zero or out of\nrange (1..200) reads as 50.","example":20,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns one agent's execution history, newest first — each run's input, its output or its error, and how long it took."}},"/v1/ai/account":{"get":{"summary":"Account"}},"/v1/ai/activities":{"get":{"summary":"List activities"}},"/v1/ai/answer":{"get":{"summary":"Answer"}},"/v1/ai/articles":{"get":{"summary":"List articles"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a article"}},"/v1/ai/articles/global":{"get":{"summary":"List articles across tenants"}},"/v1/ai/articles/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a article"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a article"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a article"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a article"}},"/v1/ai/assets":{"get":{"summary":"List assets"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a asset"}},"/v1/ai/assets/scan":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Scan (asset)"}},"/v1/ai/assets/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a asset"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a asset"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a asset"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a asset"}},"/v1/ai/assets/{owner}/{name}/scan":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Scan (asset)"}},"/v1/ai/chats":{"get":{"summary":"List chats"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a chat"}},"/v1/ai/chats/global":{"get":{"summary":"List chats across tenants"}},"/v1/ai/chats/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a chat"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a chat"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a chat"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a chat"}},"/v1/ai/connections":{"get":{"summary":"Lists the org's connectable AI accounts and whether each is currently connected."},"post":{"summary":"Connects (or reconnects) a third-party AI account for the org by sealing the supplied key into KMS and upserting the org's provider row."}},"/v1/ai/connections/{provider}":{"delete":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Disconnects a third-party AI account: it deactivates the org's row so completion resolution falls back to the global Hanzo account (no BYO), and best-effort tombstones the sealed secret."},"post":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Disconnects a third-party AI account: it deactivates the org's row so completion resolution falls back to the global Hanzo account (no BYO), and best-effort tombstones the sealed secret."}},"/v1/ai/connections/{provider}/authorize":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Begins an OAuth connection for the caller's org: it binds the org into a signed state and sends the caller to the provider's authorize URL."}},"/v1/ai/connections/{provider}/callback":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Completes OAuth: the org is recovered from the SIGNED state (not a header), the code is exchanged for a token, the token is SEALED into KMS (never the row/logs) through the same path as a BYOK key, and the org's provider row is upserted to \"connected\"."}},"/v1/ai/connections/{provider}/usage":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Imports the caller org's usage for a connected third-party account."}},"/v1/ai/dashboards/agents":{"get":{"summary":"Dashboards Agents"}},"/v1/ai/dashboards/vm":{"get":{"summary":"Dashboards Vm"}},"/v1/ai/deployments":{"get":{"summary":"List deployments"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a application"}},"/v1/ai/deployments/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a application"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a application"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a application"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a application"}},"/v1/ai/deployments/{owner}/{name}/deploy":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Deploy (application)"}},"/v1/ai/deployments/{owner}/{name}/undeploy":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Undeploy (application)"}},"/v1/ai/files":{"get":{"summary":"List files"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a file"}},"/v1/ai/files/activate":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Activate (file)"}},"/v1/ai/files/active":{"get":{"summary":"Active (file)"}},"/v1/ai/files/global":{"get":{"summary":"List files across tenants"}},"/v1/ai/files/upload":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Upload (file)"}},"/v1/ai/files/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a file"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a file"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a file"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a file"}},"/v1/ai/files/{owner}/{name}/vectors":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Vectors (file)"}},"/v1/ai/forms":{"get":{"summary":"List forms"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a form"}},"/v1/ai/forms/data":{"get":{"summary":"Data (form)"}},"/v1/ai/forms/global":{"get":{"summary":"List forms across tenants"}},"/v1/ai/forms/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a form"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a form"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a form"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a form"}},"/v1/ai/graphs":{"get":{"summary":"List graphs"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a graph"}},"/v1/ai/graphs/global":{"get":{"summary":"List graphs across tenants"}},"/v1/ai/graphs/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a graph"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a graph"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a graph"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a graph"}},"/v1/ai/k8s-status":{"get":{"summary":"K8s Status"}},"/v1/ai/mcp/tools":{"get":{"parameters":[{"description":"Names asks for this process's tool NAMES and not only how many there are.\nOff by default: a list of names is a page, and the question this op exists\nto answer (\"is the door up and does it have anything behind it\") is answered\nby the count.","in":"query","name":"names","required":false,"schema":{"type":"boolean"}}],"summary":"Tools reports what THIS PROCESS's MCP door carries: how many tools its own registry projects, optionally their names, and which subsystems this process composed."}},"/v1/ai/messages":{"get":{"summary":"List messages"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a message"}},"/v1/ai/messages/global":{"get":{"summary":"List messages across tenants"}},"/v1/ai/messages/welcome":{"delete":{"summary":"Welcome (message)"}},"/v1/ai/messages/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a message"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a message"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a message"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a message"}},"/v1/ai/messages/{owner}/{name}/answer":{"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Answer (message)"}},"/v1/ai/nodes":{"get":{"summary":"List nodes"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a node"}},"/v1/ai/nodes/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a node"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a node"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a node"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a node"}},"/v1/ai/nodes/{owner}/{name}/tunnel":{"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Tunnel (node)"},"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Tunnel (node)"}},"/v1/ai/preferences":{"patch":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Preferences"},"put":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Preferences"}},"/v1/ai/prometheus":{"get":{"summary":"Prometheus"}},"/v1/ai/providers":{"get":{"summary":"List providers"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a provider"}},"/v1/ai/providers/global":{"get":{"summary":"List providers across tenants"}},"/v1/ai/providers/mcp-tools":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Mcp Tools (provider)"}},"/v1/ai/providers/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a provider"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a provider"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a provider"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a provider"}},"/v1/ai/records":{"get":{"summary":"List records"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a record"}},"/v1/ai/records/batch":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Batch (record)"}},"/v1/ai/records/commit":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Commit (record)"}},"/v1/ai/records/commit-second":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Commit Second (record)"}},"/v1/ai/records/query":{"get":{"summary":"Query (record)"}},"/v1/ai/records/query-second":{"get":{"summary":"Query Second (record)"}},"/v1/ai/records/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a record"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a record"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a record"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a record"}},"/v1/ai/remote-connections":{"get":{"summary":"List remote-connections"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a connection"}},"/v1/ai/remote-connections/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a connection"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a connection"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a connection"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a connection"}},"/v1/ai/remote-connections/{owner}/{name}/start":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Start (connection)"}},"/v1/ai/remote-connections/{owner}/{name}/stop":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Stop (connection)"}},"/v1/ai/routes":{"get":{"summary":"List routes"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a model-route"}},"/v1/ai/routes/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a model-route"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a model-route"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a model-route"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a model-route"}},"/v1/ai/scales":{"get":{"summary":"List scales"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a scale"}},"/v1/ai/scales/global":{"get":{"summary":"List scales across tenants"}},"/v1/ai/scales/public":{"get":{"summary":"Public (scale)"}},"/v1/ai/scales/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a scale"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a scale"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a scale"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a scale"}},"/v1/ai/scans":{"get":{"summary":"List scans"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a scan"}},"/v1/ai/scans/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a scan"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a scan"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a scan"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a scan"}},"/v1/ai/signin":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Signin"}},"/v1/ai/signin-sessions":{"get":{"summary":"List signin-sessions"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a session"}},"/v1/ai/signin-sessions/duplicated":{"get":{"summary":"Duplicated (session)"}},"/v1/ai/signin-sessions/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a session"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a session"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a session"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a session"}},"/v1/ai/signout":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Signout"}},"/v1/ai/stores":{"get":{"summary":"List stores"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a store"}},"/v1/ai/stores/global":{"get":{"summary":"List stores across tenants"}},"/v1/ai/stores/names":{"get":{"summary":"Names (store)"}},"/v1/ai/stores/providers":{"get":{"summary":"Providers (store)"}},"/v1/ai/stores/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a store"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a store"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a store"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a store"}},"/v1/ai/stores/{owner}/{name}/vectors":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Vectors (store)"}},"/v1/ai/system":{"get":{"summary":"System"}},"/v1/ai/tasks":{"get":{"summary":"List tasks"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a task"}},"/v1/ai/tasks/global":{"get":{"summary":"List tasks across tenants"}},"/v1/ai/tasks/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a task"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a task"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a task"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a task"}},"/v1/ai/tasks/{owner}/{name}/analyze":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Analyze (task)"}},"/v1/ai/tasks/{owner}/{name}/document":{"post":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Document (task)"}},"/v1/ai/templates":{"get":{"summary":"List templates"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a template"}},"/v1/ai/templates/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a template"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a template"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a template"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a template"}},"/v1/ai/training-contribution":{"get":{"summary":"Training Contribution"},"patch":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Training Contribution"},"put":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Training Contribution"}},"/v1/ai/tree-files":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a tree-file"}},"/v1/ai/tree-files/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a tree-file"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a tree-file"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a tree-file"}},"/v1/ai/usages":{"get":{"summary":"List usages"}},"/v1/ai/usages/by-user":{"get":{"summary":"By User (usage)"}},"/v1/ai/usages/cloud":{"get":{"summary":"Cloud (usage)"}},"/v1/ai/usages/range":{"get":{"summary":"Range (usage)"}},"/v1/ai/usages/user-names":{"get":{"summary":"User Names (usage)"}},"/v1/ai/vectors":{"get":{"summary":"List vectors"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a vector"}},"/v1/ai/vectors/all":{"delete":{"summary":"All (vector)"}},"/v1/ai/vectors/global":{"get":{"summary":"List vectors across tenants"}},"/v1/ai/vectors/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a vector"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a vector"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a vector"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a vector"}},"/v1/ai/version":{"get":{"summary":"Version"}},"/v1/ai/videos":{"get":{"summary":"List videos"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a video"}},"/v1/ai/videos/global":{"get":{"summary":"List videos across tenants"}},"/v1/ai/videos/upload":{"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Upload (video)"}},"/v1/ai/videos/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a video"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a video"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a video"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a video"}},"/v1/ai/workflows":{"get":{"summary":"List workflows"},"post":{"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Create a workflow"}},"/v1/ai/workflows/global":{"get":{"summary":"List workflows across tenants"}},"/v1/ai/workflows/{owner}/{name}":{"delete":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete a workflow"},"get":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Retrieve a workflow"},"patch":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Update a workflow"},"put":{"parameters":[{"description":"Owning organization.","in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"description":"Resource name, unique within the owner.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"summary":"Replace a workflow"}},"/v1/analytics/health":{"get":{"summary":"Health reports whether the event plane can take a write and the warehouse can answer a read."}},"/v1/analytics/overview":{"get":{"parameters":[{"description":"Range is a relative window: a count and a unit — 24h, 7d, 90d, any <N>h or\n<N>d — or day, week, month, all. Default 24h. Ignored when both start and\nend are given. An unknown value, or one past the 730-day horizon, is a 400.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is the inclusive lower bound of a custom window, RFC3339. Requires end.","in":"query","name":"start","required":false,"schema":{"type":"string"}},{"description":"End is the exclusive upper bound of a custom window, RFC3339. Requires start.","in":"query","name":"end","required":false,"schema":{"type":"string"}}],"summary":"Overview returns the caller org's analytics KPIs for one time window."}},"/v1/analytics/timeseries":{"get":{"parameters":[{"description":"Range is a relative window: a count and a unit — 24h, 7d, 90d, any <N>h or\n<N>d — or day, week, month, all. Default 24h. Ignored when both start and\nend are given. An unknown value, or one past the 730-day horizon, is a 400.","example":"30d","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is the inclusive lower bound of a custom window, RFC3339. Requires end.","in":"query","name":"start","required":false,"schema":{"type":"string"}},{"description":"End is the exclusive upper bound of a custom window, RFC3339. Requires start.","in":"query","name":"end","required":false,"schema":{"type":"string"}}],"summary":"Timeseries returns the caller org's LLM usage over time as an evenly-spaced series."}},"/v1/analytics/top":{"get":{"parameters":[{"description":"Range is a relative window: a count and a unit — 24h, 7d, 90d, any <N>h or\n<N>d — or day, week, month, all. Default 24h. Ignored when both start and\nend are given. An unknown value, or one past the 730-day horizon, is a 400.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is the inclusive lower bound of a custom window, RFC3339. Requires end.","in":"query","name":"start","required":false,"schema":{"type":"string"}},{"description":"End is the exclusive upper bound of a custom window, RFC3339. Requires start.","in":"query","name":"end","required":false,"schema":{"type":"string"}},{"description":"Limit bounds every ranked lens in the response. Default 10, maximum 100; a\nvalue at or below zero, or one that is not a number, takes the default.","example":25,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Top returns the caller org's ranked lenses for one window, five of them at once."}},"/v1/appearance":{"get":{"summary":"Returns the signed-in caller's own appearance preference — text size, density and accent — read from their IAM account so it is the same on every device and every Hanzo surface."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/appearance"}}}},"summary":"Stores the caller's appearance preference on their IAM account, preserving every other field of the row."}},"/v1/ask":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/askRequest"}}}},"summary":"Ask a grounded question about your own org"}},"/v1/ask/web":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/webQuestion"}}}},"summary":"Research a question on the live web and answer it with sources cited"}},"/v1/audio/foley":{"post":{"summary":"Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively."}},"/v1/audio/music":{"post":{"summary":"Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively."}},"/v1/audio/speech":{"post":{"summary":"The OpenAI-compatible TTS endpoint (POST /v1/audio/speech)."}},"/v1/audio/transcriptions":{"post":{"summary":"The OpenAI-compatible STT endpoint (POST /v1/audio/transcriptions, multipart: file + model [+ language + response_format])."}},"/v1/audio/voice":{"post":{"summary":"Serves the generative audio verbs — /v1/audio/voice (TTS), /music, /foley — that the Zen family serves natively."}},"/v1/audit":{"get":{"parameters":[{"description":"Sub narrows the trail to one actor — the validated subject that made the\nrequest. Blank means every actor in the org.","in":"query","name":"sub","required":false,"schema":{"type":"string"}},{"description":"Action narrows it to one action name, e.g. \"machine.create\".","example":"machine.create","in":"query","name":"action","required":false,"schema":{"type":"string"}},{"description":"Resource narrows it to one resource TYPE, e.g. \"apikey\".","in":"query","name":"resource","required":false,"schema":{"type":"string"}},{"description":"ResourceID narrows it to one resource instance.","in":"query","name":"resourceId","required":false,"schema":{"type":"string"}},{"description":"Result narrows it to one outcome: \"success\", \"deny\" or \"error\".","example":"success","in":"query","name":"result","required":false,"schema":{"type":"string"}},{"description":"Since is the inclusive lower time bound, RFC3339. An unparseable value is\nignored rather than refused — one malformed filter must not hide the trail.","example":"2026-07-01T00:00:00Z","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Until is the upper time bound, RFC3339, with the same tolerance.","in":"query","name":"until","required":false,"schema":{"type":"string"}},{"description":"PageSize is rows per page, default 100. A value that is not a positive\ninteger falls back to the default.","example":"50","in":"query","name":"pageSize","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number, driving the offset. Anything below 2 reads\nthe first page.","in":"query","name":"p","required":false,"schema":{"type":"string"}}],"summary":"List reads the caller's OWN org audit trail, newest first, with the total the filter matched so a console can page it."}},"/v1/authors":{"get":{"summary":"Returns the caller's author-program dashboard: enrolment status, linked forge login, verified repositories and owner-wide claims, recorded deploys, accrued / pending / paid royalty, and the payout history."}},"/v1/authors/basis":{"get":{"parameters":[{"description":"Period is the UTC accrual month, YYYY-MM. Empty means every period; any other\nshape is refused with 400, because the period is echoed back and used as a SQL\nfilter and is only ever accepted in the one form the accrual latch mints.","example":"2026-07","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"summary":"Returns the AUDIT TRAIL behind the caller's own royalty: every ledger row with the spend it was computed from, the share applied at the time, the platform's matching half, whether each row satisfies the formula, and the attribution edges that already existed when the row was written."}},"/v1/authors/connect":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/connectRequest"}}}},"summary":"Enrols the caller's org in the author program at status \"connected\" and returns its enrolment, including the verify code the file method needs."}},"/v1/authors/deploys/record":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/deployRequest"}}}},"summary":"Records that the caller's org deployed a project built from a source repository, which is the edge that makes an author's work earn royalty."}},"/v1/authors/repos/verify":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/verifyRequest"}}}},"summary":"Proves that the caller owns a repository — or a whole OWNER — and records the claim, which is what makes deploys of that code earn royalty."}},"/v1/authz/check":{"post":{"summary":"Ask whether a subject may act on an object"}},"/v1/authz/health":{"get":{"summary":"Liveness of the policy engine"}},"/v1/authz/readyz":{"get":{"summary":"Readiness of the policy engine"}},"/v1/auto/flows":{"get":{"summary":"Flows lists the caller's flows, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/autoCreate"}}}},"summary":"Creates a flow in the caller's org."}},"/v1/auto/flows/{flow}":{"delete":{"parameters":[{"description":"Flow is the flow's id, taken from the path.","in":"path","name":"flow","required":true,"schema":{"type":"string"}}],"summary":"Deletes one of the caller's flows."},"get":{"parameters":[{"description":"Flow is the flow's id, taken from the path.","in":"path","name":"flow","required":true,"schema":{"type":"string"}}],"summary":"Flow reads one of the caller's flows — the full record, graph included."},"patch":{"parameters":[{"description":"Flow is the flow's id, taken from the path.","in":"path","name":"flow","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/autoUpdate"}}}},"summary":"Patches one of the caller's flows: the name, the graph, or both — only the stated fields move."}},"/v1/auto/flows/{flow}/publish":{"post":{"parameters":[{"description":"Flow is the flow's id, taken from the path.","in":"path","name":"flow","required":true,"schema":{"type":"string"}}],"summary":"Publish snapshots the flow's current graph as its next immutable version and arms the flow's triggers."}},"/v1/auto/pieces":{"get":{"summary":"Pieces lists the product's built-in piece catalog: the trigger and action types a flow's nodes can use (webhook, schedule, http, set, branch), each with its input descriptors."}},"/v1/auto/runs":{"get":{"parameters":[{"description":"Flow narrows the list to one flow's runs when present.","in":"query","name":"flow","required":false,"schema":{"type":"string"}}],"summary":"Runs lists the caller's run records, newest first — optionally one flow's."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/autoStart"}}}},"summary":"Start begins one asynchronous run of a flow: the product dispatches the graph to its durable execution engine (the hanzo tasks plane) and answers immediately with the run record in status running."}},"/v1/auto/runs/{run}":{"get":{"parameters":[{"description":"Run is the run's id, taken from the path.","in":"path","name":"run","required":true,"schema":{"type":"string"}}],"summary":"Run reads one run record: status, input, output (each executed node's result keyed by node id once completed), error detail if it failed, and timestamps."}},"/v1/auto/status":{"get":{"summary":"Status reports whether the auto service is reachable — its own health endpoint as an honest lens for \"is the automation plane up\"."}},"/v1/automations/connectors":{"get":{"summary":"Connectors returns the connector catalogue."}},"/v1/automations/connectors/{id}/run":{"post":{"parameters":[{"description":"ID is the connector to run, from the path.","example":"notion","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/runIn"}}}},"summary":"Run executes one connector action in-process and answers the outcome."}},"/v1/automations/flows":{"get":{"parameters":[{"description":"Limit bounds the page (default 200, maximum 1000).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's automations, most-recently-updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createFlowReq"}}}},"summary":"Creates an automation and its initial DRAFT version in one call."}},"/v1/automations/flows/{id}":{"delete":{"parameters":[{"description":"ID is the flow to act on, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes one automation, its versions and its run history."},"get":{"parameters":[{"description":"ID is the flow to act on, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one automation and its latest version."},"patch":{"parameters":[{"description":"ID is the flow to update, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchFlowIn"}}}},"summary":"Updates one automation's metadata in place."}},"/v1/automations/flows/{id}/disable":{"post":{"parameters":[{"description":"ID is the flow to act on, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Disarms a flow's trigger and marks it DISABLED."}},"/v1/automations/flows/{id}/enable":{"post":{"parameters":[{"description":"ID is the flow to act on, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Arms a flow's trigger and marks it ENABLED."}},"/v1/automations/flows/{id}/operations":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Edit a flow — rename it, retarget its trigger, or add, move and delete steps"}},"/v1/automations/flows/{id}/run":{"post":{"parameters":[{"description":"ID is the flow to act on, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Starts one durable run of a flow now."}},"/v1/automations/flows/{id}/versions":{"get":{"parameters":[{"description":"ID is the flow whose versions to list, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Limit bounds the page (default 200, maximum 1000).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns one flow's versions, newest first."},"post":{"parameters":[{"description":"ID is the flow to add a version to, from the path.","example":"flow_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createVersionIn"}}}},"summary":"Adds a new DRAFT version to a flow."}},"/v1/automations/hooks/{source}/{event}":{"post":{"parameters":[{"in":"path","name":"source","required":true,"schema":{"type":"string"}},{"in":"path","name":"event","required":true,"schema":{"type":"string"}}],"summary":"Fire an event that starts every enabled flow subscribed to it"}},"/v1/automations/pieces":{"get":{"summary":"Pieces is the retired-name alias of the connector catalogue."}},"/v1/automations/runs":{"get":{"parameters":[{"description":"FlowID narrows the history to one flow. Omit it for the whole org's runs.","in":"query","name":"flowId","required":false,"schema":{"type":"string"}},{"description":"Limit bounds the page (default 200, maximum 1000).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's run history, newest first."}},"/v1/automations/runs/{id}":{"get":{"parameters":[{"description":"ID is the run to read, from the path.","example":"run_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one run."}},"/v1/automations/runs/{id}/resume":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Release a run waiting at an approval step, with the approval payload"}},"/v1/avatar":{"post":{"summary":"Set your profile photo"}},"/v1/avatar/{org}/{user}/{digest}":{"get":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"user","required":true,"schema":{"type":"string"}},{"in":"path","name":"digest","required":true,"schema":{"type":"string"}}],"summary":"Fetch a profile photo"}},"/v1/balancers":{"get":{"summary":"Returns every load balancer the caller's org owns, under the friendly names the org created them with."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createLBReq"}}}},"summary":"Creates a load balancer in the caller's org namespace and answers 201 with it."}},"/v1/balancers/{id}":{"delete":{"parameters":[{"description":"ID is the DigitalOcean resource id (a UUID), from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's load balancers and answers 204."},"get":{"parameters":[{"description":"ID is the DigitalOcean resource id (a UUID), from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's load balancers by id."}},"/v1/base/health":{"get":{"summary":"Reports that the base subsystem is serving."}},"/v1/benchmark/catalog":{"get":{"summary":"Is the canonical public benchmarks this arena runs — the id, title, axis, item count and upstream source of each, with native marking the ones the standardized harness runs today; the rest are registered and adapter-pending."}},"/v1/benchmark/compare":{"get":{"parameters":[{"description":"Benchmark is the catalog id to compare on, defaulting to gpqa_diamond.","in":"query","name":"benchmark","required":false,"schema":{"type":"string"}},{"description":"A is the first model id. It is required.","in":"query","name":"a","required":true,"schema":{"type":"string"}},{"description":"B is the second model id. It is required.","in":"query","name":"b","required":true,"schema":{"type":"string"}}],"summary":"Is the ONLY valid arm-vs-arm test: it pairs the two models on the items BOTH completed, and answers rescue and damage counts with an exact-McNemar p."}},"/v1/benchmark/leaderboard":{"get":{"parameters":[{"description":"Benchmark is the catalog id to read, defaulting to gpqa_diamond.","in":"query","name":"benchmark","required":false,"schema":{"type":"string"}}],"summary":"Answers one row per model for the benchmark named — what our own harness measured, beside what the vendor claims, and the gap between them."}},"/v1/benchmark/presets":{"get":{"summary":"Are the router blends available to compose from — a named set of model arms, the rank they escalate through and the panel width that bounds fan-out — each served by the model layer as enso-<name>."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Preset"}}}},"summary":"Validates a router blend — its name, its arms, the rank they escalate through and the panel fan-out width — and answers 202 with the preset and the enso-<name> it would be served as."}},"/v1/benchmark/runs":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/suite"}}}},"summary":"Admits and queues a benchmark run against a model or your own endpoint, and answers 202 with the receipt."}},"/v1/billing/accounts":{"get":{"summary":"The billing account you are signed in to"}},"/v1/billing/accounts/{id}/members":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Who is on a billing account"}},"/v1/billing/alerts":{"get":{"summary":"List your org's spend caps and rate limits"},"post":{"summary":"Set a spend cap or rate limit on your org"}},"/v1/billing/alerts/authorize":{"get":{"summary":"The per-request spend-cap verdict the metering gate consumes"}},"/v1/billing/alerts/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Remove one of your org's spend caps"},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Change one of your org's spend caps"}},"/v1/billing/balance":{"get":{"summary":"Prepaid credit the caller's org can still spend"}},"/v1/billing/credit-balance":{"get":{"summary":"What is left of your credit, as one number"}},"/v1/billing/credits":{"get":{"summary":"List the credit grants on your org's balance"}},"/v1/billing/crypto/deposit":{"post":{"summary":"Get a deposit address for a crypto top-up"}},"/v1/billing/crypto/deposit/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Follow one crypto deposit to settlement"}},"/v1/billing/crypto/options":{"get":{"summary":"Which chains and tokens a crypto top-up can use"}},"/v1/billing/invoices":{"get":{"summary":"List your org's billing invoices"},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RaiseInvoiceIn"}}}},"summary":"Raise a draft invoice against a customer"}},"/v1/billing/invoices/{id}":{"get":{"parameters":[{"description":"ID is the invoice id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one invoice"}},"/v1/billing/invoices/{id}/collect":{"post":{"parameters":[{"description":"ID is the invoice id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Collect an issued invoice from credits, balance, then card"}},"/v1/billing/invoices/{id}/issue":{"post":{"parameters":[{"description":"ID is the invoice id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Issue a draft invoice, making it collectible"}},"/v1/billing/invoices/{id}/pdf":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Download one invoice as a PDF attachment"}},"/v1/billing/invoices/{id}/void":{"post":{"parameters":[{"description":"ID is the invoice id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Void a draft or issued invoice"}},"/v1/billing/methods":{"get":{"summary":"Your saved cards, masked — the customer read"},"post":{"summary":"Save a card for later charges"}},"/v1/billing/methods/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Remove one of your saved cards"}},"/v1/billing/mode":{"post":{"summary":"Move an org between sandbox and live billing"}},"/v1/billing/payouts":{"get":{"summary":"List your org's payouts, newest first"}},"/v1/billing/plans":{"get":{"summary":"The public plan catalog, annotated with the active platform promotion"}},"/v1/billing/portal/methods":{"get":{"summary":"Cards saved against the caller's org, masked — the portal read"},"post":{"summary":"Save a card on a subject's behalf — the portal attach"}},"/v1/billing/portal/methods/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Remove a saved card — the portal detach"}},"/v1/billing/recharge/run-all":{"post":{"summary":"Platform sweep: top up every org whose balance has fallen below its own threshold"}},"/v1/billing/settings":{"get":{"summary":"The public payment-provider config your card form needs to initialize"}},"/v1/billing/subscribe/card":{"post":{"summary":"Subscribe to a paid plan with a card, charged for the first period immediately"}},"/v1/billing/subscriptions":{"get":{"summary":"List your org's subscriptions"}},"/v1/billing/subscriptions/{id}/cancel":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Cancel a subscription, at period end by default"}},"/v1/billing/subscriptions/{id}/reactivate":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Undo a pending cancellation and keep the subscription running"}},"/v1/billing/tier":{"get":{"summary":"The subject's plan tier and the balance a metered call is admitted on"}},"/v1/billing/topup":{"post":{"summary":"Add credit to your balance by charging one of your saved cards"}},"/v1/billing/topup/token":{"post":{"summary":"Add credit to your balance by charging a tokenized card once"}},"/v1/billing/transactions":{"get":{"summary":"List the movements on your own balance, newest first"}},"/v1/billing/usage":{"get":{"summary":"Every billed call the caller's org made, attributed to a product"}},"/v1/billing/usage/accounts":{"get":{"summary":"Answers per-account totals for the linked provider accounts the gateway ROUTED this caller's traffic through — requests, prompt and completion tokens, recorded cost — plus their honest sum."}},"/v1/billing/webhooks/{provider}":{"post":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Payment-provider webhook intake for settlement and subscription lifecycle events"}},"/v1/billing/wire":{"get":{"summary":"Where to wire funds, and the reference that credits them to you"}},"/v1/blueprint":{"get":{"summary":"Returns every deployable blueprint with its service count and estimated monthly compute cost."}},"/v1/blueprint/health":{"get":{"summary":"Reports blueprint liveness and echoes the compute rate card in force."}},"/v1/blueprint/sbom":{"get":{"summary":"A blueprint's bill of images and what running it costs"}},"/v1/books/accounts":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's chart of accounts — the seeded fixed chart every posting key in the ledger refers to."}},"/v1/books/ask":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}}},"summary":"Answers a plain-language question about the caller's own books — \"what is my MRR?\", \"how long is my runway?\" — with figures taken from their ledger, never a guessed number."}},"/v1/books/bank/exchange":{"post":{"summary":"Finish connecting a bank account (not yet available)"}},"/v1/books/bank/import":{"post":{"summary":"Import a bank statement file into your books"}},"/v1/books/bank/sync":{"post":{"summary":"Pulls every connected bank (Plaid/Teller) for the caller's org, maps each fetched transaction to a posting and books it idempotently, then advances that connector's cursor so the next sync resumes where this one stopped."}},"/v1/books/bank/token":{"post":{"summary":"Begin connecting a bank account (not yet available)"}},"/v1/books/bank/transactions":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many rows come back; 500 when absent or not positive.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's normalized bank transactions, newest first — every row the import and connector paths have ingested, with its amount in exact cents, its direction, and whether it has been matched to a voucher yet."}},"/v1/books/bank/unreconciled":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's unmatched bank inflows and their open clarifying questions — the queue a human answers so an unexplained deposit is never guessed into revenue."}},"/v1/books/export":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"From is the RFC3339 start of the window, exclusive. Empty means all time.","example":"2026-01-01T00:00:00Z","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 end of the window, inclusive. Empty means up to now.","example":"2026-12-31T23:59:59Z","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Format is the export encoding. Only \"json\" is supported; empty means json.","example":"json","in":"query","name":"format","required":false,"schema":{"type":"string"}},{"description":"Limit caps the GL detail rows included as the audit trail; 5000 when absent\nor not positive.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the complete financial package for the caller's org over (from, to]: the trial balance, the P&L, the balance sheet, and the GL detail behind them — the four statements a tax preparer or an investor asks for, assembled from the one ledger in a single read so they cannot disagree with each other."}},"/v1/books/gl":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many rows come back; 500 when absent or not positive.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"ListGL returns the org's most recent GL Entry rows, newest first."}},"/v1/books/inbox":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's open document queue — everything uploaded but not yet booked, newest first, each with its extracted summary and the confidence the scanner resolved its category at."},"post":{"summary":"Queue a document for later scanning"}},"/v1/books/metrics":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"From is the RFC3339 start of the window, exclusive. Empty means all time.","example":"2026-01-01T00:00:00Z","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 end of the window, inclusive. Empty means up to now.","example":"2026-06-30T23:59:59Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Metrics returns the org's deterministic SaaS-metrics snapshot over an optional (from, to] window — MRR, ARR, revenue, COGS, burn, gross margin, net income, cash, deferred revenue, monthly burn and runway — as raw int64-cent figures AND the same figures already formatted."}},"/v1/books/pnl":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"From is the RFC3339 start of the window, exclusive. Empty means all time.","example":"2026-01-01T00:00:00Z","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 end of the window, inclusive. Empty means up to now.","example":"2026-03-31T23:59:59Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's accrual-basis Profit & Loss over an optional (from, to] window of RFC3339 posting times: recognized revenue, matched cost, and the net."}},"/v1/books/position":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 instant the statement is struck as of. Empty means all time.","example":"2026-03-31T23:59:59Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's Balance Sheet as of `to` (empty = all time), with the Assets == Liabilities + Equity equation proof."}},"/v1/books/questions":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the clarifying questions the caller's own recent GL raises — the unusual postings a founder should look at (outliers, reversals, round-offs, uncosted revenue, an overdrawn wallet), sharpest first."}},"/v1/books/rules":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's auto-categorization rules, highest priority first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rule"}}}},"summary":"Creates or updates one auto-categorization rule, keyed by its pattern — writing a pattern that already exists REPLACES that row's category and priority."}},"/v1/books/scan":{"post":{"summary":"Scan a receipt or invoice into a proposed voucher"}},"/v1/books/scan/book":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookRequest"}}}},"summary":"Posts a reviewed scanned bill to the ledger."}},"/v1/books/sync":{"post":{"summary":"Sync ingests the caller's OWN org from commerce into BOTH ledgers (live and sandbox) and reports how many new vouchers posted to each."}},"/v1/books/transactions":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"From is the RFC3339 start of the posting-time window, inclusive.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 end of the posting-time window, inclusive.","in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Category filters to one COA account, named by number (\"5300\") or by category\nslug (\"software\").","example":"software","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Vendor filters to rows whose vendor or description contains this text,\ncase-insensitively.","in":"query","name":"vendor","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many rows come back; 200 when absent or not positive.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's booked ledger as a single-line register, newest first: one row per voucher, with its date, description, vendor, category, source and amount in exact cents."}},"/v1/books/trial":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\".","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}},{"description":"From is the RFC3339 start of the window, exclusive. Empty means all time.","example":"2026-01-01T00:00:00Z","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the RFC3339 end of the window, inclusive. Empty means up to now.","example":"2026-03-31T23:59:59Z","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's trial balance over an optional [from, to] window of RFC3339 posting times, including the opening/closing columns and the TotalDebit == TotalCredit proof that the books balance."}},"/v1/books/vendors":{"get":{"parameters":[{"description":"Sandbox reads the org's SANDBOX ledger when it is exactly \"true\"; anything else\nreads the live one.","example":"false","in":"query","name":"sandbox","required":false,"schema":{"type":"string"}}],"summary":"Returns the org's vendor book: each canonical vendor, the alias spellings a receipt may print it under, and the expense account new bills from it default to."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VendorRow"}}}},"summary":"Creates or updates one vendor in the org's vendor book, keyed by its canonical name — writing a canonical name that already exists REPLACES that row's aliases and default category."}},"/v1/bot/connect":{"get":{"summary":"The socket a bot node dials and holds open to become invokable."}},"/v1/bot/nodes":{"get":{"summary":"Returns the caller org's currently connected bot nodes: what each one calls itself, the platform it runs on, its agent version, when its socket was established, and the capabilities and commands it reported."}},"/v1/bot/nodes/{id}/invoke":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Ask one of your connected machines to run a command, and get its answer back."}},"/v1/bot/peer/invoke":{"post":{"summary":"Replica-to-replica forward of one invocation to the pod holding the node's socket."}},"/v1/bot/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Relay one of the bot runtime's own operational paths"},"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Relay one of the bot runtime's own operational paths"},"patch":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Relay one of the bot runtime's own operational paths"},"post":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Relay one of the bot runtime's own operational paths"},"put":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Relay one of the bot runtime's own operational paths"}},"/v1/bots":{"get":{"summary":"List returns the caller org's live bot runs, read from the bot runtime and projected into the console contract with each run's live session URL derived here."}},"/v1/bots/run":{"post":{"summary":"Reserved address for launching a bot run — not implemented, always 501"}},"/v1/bots/{runId}/stop":{"post":{"parameters":[{"in":"path","name":"runId","required":true,"schema":{"type":"string"}}],"summary":"Stop terminates one of the caller org's own bot runs and reports its terminal state."}},"/v1/builds":{"get":{"summary":"Returns real build records for your org."}},"/v1/campaign":{"get":{"parameters":[{"description":"Status keeps only campaigns in that state: draft, live, paused or failed.\nEmpty means any.","example":"live","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Limit bounds the page. 0 or less means the default of 200; anything above\n1000 is clamped to 1000.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's campaigns, newest first, optionally narrowed to one status."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/campaignWrite"}}}},"summary":"Creates a campaign as a DRAFT and returns it."}},"/v1/campaign/summary":{"get":{"summary":"Returns the org's go-to-market roll-up: how many campaigns exist, how many are live, their total budget in cents, and which channel executors this deployment can actually reach."}},"/v1/campaign/{id}":{"delete":{"parameters":[{"description":"ID is the campaign's server-minted handle, \"cmp_\"-prefixed.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one campaign of the caller's org and answers 204 with no body."},"get":{"parameters":[{"description":"ID is the campaign's server-minted handle, \"cmp_\"-prefixed.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one campaign of the caller's org — its name, audience, creatives, channels with their per-channel launch state, schedule, budget and status."},"put":{"parameters":[{"description":"ID is the campaign to update, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/campaignUpdate"}}}},"summary":"Rewrites a campaign's core fields — name, audience, creatives, schedule and budget — and returns the updated campaign."}},"/v1/campaign/{id}/channels":{"post":{"parameters":[{"description":"ID is the campaign to add the channel to, from the path.","example":"cmp_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/channelAdd"}}}},"summary":"Adds a channel to a campaign, or REPLACES the one it already has of that kind, and returns the updated campaign."}},"/v1/campaign/{id}/channels/{kind}":{"delete":{"parameters":[{"description":"ID is the campaign, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Kind is the channel to remove: paid, organic or email.","in":"path","name":"kind","required":true,"schema":{"type":"string"}}],"summary":"Drops one channel from a campaign and returns the updated campaign."}},"/v1/campaign/{id}/launch":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Launch a campaign across every channel it declares"}},"/v1/campaign/{id}/metrics":{"get":{"parameters":[{"description":"ID is the campaign to report on, from the path.","example":"cmp_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Range is the lookback window: 24h, 7d, 30d or 90d. Anything else, including\nempty, reads as 30d.","example":"7d","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is an explicit RFC3339 window start. Honored only together with End,\nand only when End is after it.","in":"query","name":"start","required":false,"schema":{"type":"string"}},{"description":"End is an explicit RFC3339 window end.","in":"query","name":"end","required":false,"schema":{"type":"string"}}],"summary":"Returns a campaign's results over a window: the analytics funnel (impressions, clicks, conversions, revenue, visitors), the spend each channel's connector reports, and the derived growth KPIs — CTR, CVR, CAC and ROAS."}},"/v1/campaign/{id}/pause":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Pause every live channel on a campaign at its provider"}},"/v1/captable/classes":{"get":{"summary":"Returns the caller org's share classes, in creation order."},"post":{"summary":"Define a share class"}},"/v1/captable/classes/{id}":{"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Amend a share class"}},"/v1/captable/company":{"get":{"summary":"Returns the caller org's cap-table company record."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/captableCompanyUpdate"}}}},"summary":"Sets the caller org's company name and incorporation details."}},"/v1/captable/convertibles":{"get":{"summary":"Returns the caller org's convertible notes, newest first."},"post":{"summary":"Record a convertible note"}},"/v1/captable/convertibles/{id}":{"delete":{"parameters":[{"description":"ID is the convertible note to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's convertible notes, taking its principal out of the cap table's unconverted-instrument totals."}},"/v1/captable/investments":{"get":{"summary":"Returns the caller org's investments, newest first."}},"/v1/captable/options":{"get":{"summary":"Returns the caller org's option grants, newest first."},"post":{"summary":"Grant options from an equity plan"}},"/v1/captable/options/{id}":{"delete":{"parameters":[{"description":"ID is the option grant to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's option grants, taking its shares out of the cap table's granted-options and fully-diluted counts."}},"/v1/captable/plans":{"get":{"summary":"Returns the caller org's equity plans, newest first."},"post":{"summary":"Open an equity incentive plan"}},"/v1/captable/rounds":{"get":{"summary":"Returns the caller org's fundraising rounds, newest first."},"post":{"summary":"Open a funding round"}},"/v1/captable/rounds/{id}":{"get":{"parameters":[{"description":"ID is the round to read. It is the path segment: the URL is the addressing\nauthority, and the org it is resolved in comes from the caller's principal,\nso an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's fundraising rounds together with every investment written into it, oldest first."}},"/v1/captable/rounds/{id}/close":{"post":{"parameters":[{"description":"ID is the round to close. It is the path segment: the URL is the\naddressing authority, and the org it is resolved in comes from the\ncaller's principal, so an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/captableRoundCloseRequest"}}}},"summary":"Closes one of the caller org's fundraising rounds, recording the close date and moving its status to CLOSED."}},"/v1/captable/rounds/{id}/investments":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Record an investment into a round"}},"/v1/captable/safes":{"get":{"summary":"Returns the caller org's SAFEs, newest first."},"post":{"summary":"Record a SAFE"}},"/v1/captable/safes/{id}":{"delete":{"parameters":[{"description":"ID is the SAFE to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's SAFEs, taking its capital out of the cap table's unconverted-instrument totals."}},"/v1/captable/shares":{"get":{"summary":"Returns the caller org's share certificates, newest first."},"post":{"summary":"Issue a share certificate"}},"/v1/captable/shares/transfer":{"post":{"summary":"Transfer shares to another stakeholder"}},"/v1/captable/shares/{id}":{"delete":{"parameters":[{"description":"ID is the share certificate to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's share certificates, taking its shares out of the cap table's outstanding and fully-diluted counts."}},"/v1/captable/stakeholders":{"get":{"summary":"Returns the caller org's stakeholders, newest first."},"post":{"summary":"Add stakeholders to the cap table"}},"/v1/captable/stakeholders/{id}":{"delete":{"parameters":[{"description":"ID is the stakeholder to delete.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's stakeholders."},"patch":{"parameters":[{"description":"ID is the stakeholder to update. It is the path segment: the URL is the\naddressing authority, and the org it is resolved in comes from the\ncaller's principal, so an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/captableStakeholderPatch"}}}},"summary":"Changes one of the caller org's stakeholders."}},"/v1/captable/summary":{"get":{"summary":"Computes the caller org's cap table."}},"/v1/cart":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartOpen"}}}},"summary":"Open a cart for a shopper to fill"}},"/v1/cart/{id}":{"get":{"parameters":[{"description":"ID is the cart's id, as the open call answered it.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one cart with its lines and totals"}},"/v1/cart/{id}/discard":{"post":{"parameters":[{"description":"ID is the cart's id, as the open call answered it.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Discard a cart the shopper abandoned"}},"/v1/cart/{id}/item":{"post":{"parameters":[{"description":"ID is the cart to amend, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartItemSet"}}}},"summary":"Set one item's quantity in a cart; zero removes it"}},"/v1/catalog":{"get":{"parameters":[{"description":"Q is the free-text query the lexical index scores relevance on. Empty is a\nbrowse rather than a search — the same request either way.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Org narrows to one builder org: hanzo | lux | zoo. Case-insensitive.","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Kind narrows to repo | site. Case-insensitive.","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Origin narrows to what a row IS to you: template | community | third-party |\nproduct. This is the axis the two hanzo.app lanes are cut on.","example":"template","in":"query","name":"origin","required":false,"schema":{"type":"string"}},{"description":"Archetype narrows to one project archetype. Case-insensitive.","in":"query","name":"archetype","required":false,"schema":{"type":"string"}},{"description":"Language narrows to one implementation language. Case-insensitive.","example":"typescript","in":"query","name":"language","required":false,"schema":{"type":"string"}},{"description":"Template narrows a lane to ONE lineage: the id of the parent everything\nreturned was forked from.","in":"query","name":"template","required":false,"schema":{"type":"string"}},{"description":"Forkable is tri-state: \"true\" selects the forkable rows, \"false\" selects the\nrest, and anything else — including absent — applies no filter at all.","example":"true","in":"query","name":"forkable","required":false,"schema":{"type":"string"}},{"description":"Limit caps the page at 200, default 50. A value that is not a non-negative\ninteger falls back to the default.","example":"20","in":"query","name":"limit","required":false,"schema":{"type":"string"}},{"description":"Offset is where the page starts, default 0, with the same tolerance.","in":"query","name":"offset","required":false,"schema":{"type":"string"}}],"summary":"Browse searches AND browses the cross-org catalog: every project, app and site the fleet has built, whichever org built it."}},"/v1/catalog/entries":{"get":{"summary":"The raw catalog entries, including the unpublished ones"},"post":{"summary":"Add a catalog entry"}},"/v1/catalog/entries/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Remove a catalog entry","x-catch-all":["wildcard1"]},"put":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Replace a catalog entry, keeping its slug","x-catch-all":["wildcard1"]}},"/v1/catalog/models":{"post":{"summary":"Land a syncer's view of the model catalog: upstream costs and machine facts"}},"/v1/catalog/models/refresh":{"post":{"summary":"Refresh the model catalog by reading the upstream provider"}},"/v1/catalog/seed":{"post":{"summary":"Seed the embedded catalog, without disturbing edits already made"}},"/v1/chains":{"get":{"summary":"Reports the chains this deployment can reach."}},"/v1/chains/{chain}":{"get":{"parameters":[{"description":"Chain is the registry id, as in /v1/chains/lux.","in":"path","name":"chain","required":true,"schema":{"type":"string"}}],"summary":"Reports one chain and whether its upstream is answering."}},"/v1/channels":{"get":{"summary":"Reports every chat channel this org can send through, and whether it can send through it right now."}},"/v1/channels/allowlist":{"get":{"parameters":[{"description":"Channel is the transport to read: discord, slack, teams or telegram.\nRequired; an unknown value is a 404.","example":"slack","in":"query","name":"channel","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's access policy for one channel: whether DMs are pairing-gated, allowlisted or open, whether group rooms are open, allowlisted or disabled, the config-managed DM and group allow entries, the senders approved through PAIRING (read-only here), and the org's named access groups."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/allowlistPutIn"}}}},"summary":"Edits the caller org's access policy for one channel and answers the policy as GET would, so both verbs return ONE shape."}},"/v1/channels/inbox":{"get":{"parameters":[{"description":"Since is the exclusive cursor: only messages with a higher row id come\nback. Empty starts at the beginning. Must parse as an integer.","example":"1042","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many messages come back. Empty or 0 uses the store's\ndefault page size. Must parse as an integer.","example":"100","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Returns the messages people have sent to the caller org's connected chat bots, oldest first, in the portable envelope shape every transport normalises into."}},"/v1/channels/pairing":{"get":{"summary":"Returns the pairing requests waiting for the caller org to approve — one per person who messaged a connected bot on a channel whose DM policy is \"pairing\" and who is not allowed yet."}},"/v1/channels/pairing/approve":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/approvePairingIn"}}}},"summary":"Turns one pending pairing code into a standing allow entry, so that person can DM the org's bot on that channel from now on."}},"/v1/channels/{channel}/send":{"post":{"parameters":[{"in":"path","name":"channel","required":true,"schema":{"type":"string"}}],"summary":"Send a message from your org's bot to one chat room"}},"/v1/chat":{"post":{"summary":"Implements the OpenAI-compatible chat completions API"}},"/v1/chat/completions":{"post":{"summary":"Implements the OpenAI-compatible chat completions API"}},"/v1/cloud":{"get":{"summary":"Returns the clouds this deployment can link and what linking each one needs — the DigitalOcean token, the AWS role and external id, the GCP credential JSON, the Azure app — plus whether the provider can be linked without storing any long-lived secret."}},"/v1/cloud/accounts":{"get":{"summary":"Lists the caller org's linked cloud accounts across every provider: which account each one is at the provider, which fleet clusters it folded, and when it was last discovered."}},"/v1/cloud/{provider}/accounts":{"post":{"parameters":[{"description":"Provider is the cloud being linked, from the path: digitalocean, aws, gcp\nor azure.","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/venueLinkRequest"}}}},"summary":"Links one of the caller org's cloud accounts and folds the Kubernetes clusters it finds there into the ONE Hanzo fleet, so they appear at /v1/clusters and can run work like any managed or bring-your-own cluster."}},"/v1/cloud/{provider}/accounts/{label}":{"delete":{"parameters":[{"description":"Provider is the cloud the account belongs to: digitalocean, aws, gcp or\nazure. An unknown provider is not found.","in":"path","name":"provider","required":true,"schema":{"type":"string"}},{"description":"Label is the org-chosen name of the account within that provider. Empty\nmeans \"default\"; anything outside 1–64 of [A-Za-z0-9._-] is refused.","in":"path","name":"label","required":true,"schema":{"type":"string"}}],"summary":"Forgets one linked cloud account: it detaches every fleet cluster THIS account folded (its own names, in its own shard — a neighbour's cluster of the same name is untouched), deletes the sealed credential, and drops the index row."}},"/v1/cloud/{provider}/accounts/{label}/sync":{"post":{"parameters":[{"description":"Provider is the cloud the account belongs to: digitalocean, aws, gcp or\nazure. An unknown provider is not found.","in":"path","name":"provider","required":true,"schema":{"type":"string"}},{"description":"Label is the org-chosen name of the account within that provider. Empty\nmeans \"default\"; anything outside 1–64 of [A-Za-z0-9._-] is refused.","in":"path","name":"label","required":true,"schema":{"type":"string"}}],"summary":"Re-discovers one already-linked cloud account and reconciles what it folded: kubeconfigs are refreshed, clusters that appeared since the last sync are folded, and clusters this account folded that the provider no longer returns are detached — only this account's own, in the fleet shard it was linked into."}},"/v1/cloudflare/ai/run/{wildcard1}":{"post":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Run a Cloudflare Workers AI model and get its output back","x-catch-all":["wildcard1"]}},"/v1/cloudflare/d1/databases":{"get":{"parameters":[{"description":"Page is the 1-based page of databases to return.","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"PerPage is how many databases one page holds.","in":"query","name":"per_page","required":false,"schema":{"type":"string"}},{"description":"Name filters to the database with this name.","in":"query","name":"name","required":false,"schema":{"type":"string"}}],"summary":"Lists the D1 databases on the org's Cloudflare account."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/databaseCreateIn"}}}},"summary":"Creates a D1 database on the org's Cloudflare account."}},"/v1/cloudflare/d1/databases/{database}":{"delete":{"parameters":[{"description":"Database is the Cloudflare D1 database id or name.","example":"orders","in":"path","name":"database","required":true,"schema":{"type":"string"}}],"summary":"Deletes a D1 database and everything stored in it."}},"/v1/cloudflare/d1/databases/{database}/query":{"post":{"parameters":[{"in":"path","name":"database","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/D1Query"}}}},"summary":"Run a SQL statement against a D1 database"}},"/v1/cloudflare/kv/namespaces":{"get":{"parameters":[{"description":"Page is the 1-based page of namespaces to return.","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"PerPage is how many namespaces one page holds.","in":"query","name":"per_page","required":false,"schema":{"type":"string"}},{"description":"Order names the field to sort by, and Direction sorts asc or desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"in":"query","name":"direction","required":false,"schema":{"type":"string"}}],"summary":"KVNamespaceList lists the Workers KV namespaces on the org's Cloudflare account."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/namespaceCreateIn"}}}},"summary":"KVNamespaceCreate creates a Workers KV namespace on the org's Cloudflare account."}},"/v1/cloudflare/kv/namespaces/{namespace}":{"delete":{"parameters":[{"description":"Namespace is the Cloudflare KV namespace id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"namespace","required":true,"schema":{"type":"string"}}],"summary":"KVNamespaceDelete deletes a Workers KV namespace and every key in it."}},"/v1/cloudflare/kv/namespaces/{namespace}/values/{key}":{"delete":{"parameters":[{"description":"Namespace is the Cloudflare KV namespace id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"namespace","required":true,"schema":{"type":"string"}},{"description":"Key is the key within that namespace. KV keys are broad (up to 512 bytes),\nso this one is escaped rather than charset-restricted.","example":"session/abc","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"KVValueDelete removes one key from a Workers KV namespace."},"get":{"parameters":[{"in":"path","name":"namespace","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Read a Workers KV value as its stored bytes"},"put":{"parameters":[{"in":"path","name":"namespace","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Write a Workers KV value from the request body"}},"/v1/cloudflare/pages/projects":{"get":{"summary":"Lists the org's Cloudflare Pages projects."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagesProjectCreate"}}}},"summary":"Creates a Cloudflare Pages project on the org's account."}},"/v1/cloudflare/pages/projects/{project}":{"delete":{"parameters":[{"description":"Project is the Pages project name.","example":"marketing-site","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Deletes a Cloudflare Pages project, and with it every deployment it has ever made."},"get":{"parameters":[{"description":"Project is the Pages project name.","example":"marketing-site","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Reads one Cloudflare Pages project — its build config, deployment configs and latest deployment."}},"/v1/cloudflare/pages/projects/{project}/deployments":{"post":{"parameters":[{"in":"path","name":"project","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PagesDeploy"}}}},"summary":"Trigger a new Pages deployment for a project"}},"/v1/cloudflare/pages/projects/{project}/domains":{"post":{"parameters":[{"description":"Project is the Pages project name, from the path.","example":"marketing-site","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/domainAddIn"}}}},"summary":"Attaches a custom domain to a Cloudflare Pages project."}},"/v1/cloudflare/pages/projects/{project}/domains/{domain}":{"delete":{"parameters":[{"description":"Project is the Pages project name.","example":"marketing-site","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"Domain is the attached custom domain to detach.","example":"www.acme.com","in":"path","name":"domain","required":true,"schema":{"type":"string"}}],"summary":"Detaches a custom domain from a Cloudflare Pages project."}},"/v1/cloudflare/r2/buckets":{"get":{"parameters":[{"description":"PerPage is how many buckets one page holds.","in":"query","name":"per_page","required":false,"schema":{"type":"string"}},{"description":"Cursor continues from the position a previous page returned.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}},{"description":"NameContains filters to buckets whose name contains this substring.","in":"query","name":"name_contains","required":false,"schema":{"type":"string"}},{"description":"Order names the field to sort by, and Direction sorts asc or desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"in":"query","name":"direction","required":false,"schema":{"type":"string"}}],"summary":"Lists the R2 buckets on the org's Cloudflare account."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/bucketCreateIn"}}}},"summary":"Creates an R2 bucket on the org's Cloudflare account."}},"/v1/cloudflare/r2/buckets/{bucket}":{"delete":{"parameters":[{"description":"Bucket is the R2 bucket name.","example":"assets","in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"summary":"Deletes an R2 bucket."}},"/v1/cloudflare/workers/scripts":{"get":{"summary":"Lists the Worker scripts on the org's Cloudflare account."}},"/v1/cloudflare/workers/scripts/{script}":{"delete":{"parameters":[{"description":"Script is the Worker script name.","example":"edge-router","in":"path","name":"script","required":true,"schema":{"type":"string"}}],"summary":"Removes a Worker script from the org's Cloudflare account."},"put":{"parameters":[{"in":"path","name":"script","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkerScriptPut"}}}},"summary":"Upload or replace a module Worker script"}},"/v1/cloudflare/workers/scripts/{script}/subdomain":{"post":{"parameters":[{"description":"Script is the Worker script name, from the path.","example":"edge-router","in":"path","name":"script","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/subdomainSetIn"}}}},"summary":"Publishes or withdraws one Worker script on the account's workers.dev subdomain."}},"/v1/cloudflare/workers/subdomain":{"get":{"summary":"Reads the org account's workers.dev subdomain — the name under which every subdomain-enabled script is served."}},"/v1/cloudflare/workers/zones/{zone}/routes":{"get":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}}],"summary":"Lists the Worker routes bound within one zone — the URL patterns that dispatch to a script."},"post":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id, from the path.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/routeCreateIn"}}}},"summary":"Binds a URL pattern in a zone to a Worker script."}},"/v1/cloudflare/workers/zones/{zone}/routes/{route}":{"delete":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}},{"description":"Route is the 32-hex Cloudflare route id.","example":"fedcba9876543210fedcba9876543210","in":"path","name":"route","required":true,"schema":{"type":"string"}}],"summary":"Unbinds a Worker route, so its pattern stops dispatching to a script."}},"/v1/cloudflare/zones":{"get":{"parameters":[{"description":"Page is the 1-based page of zones to return.","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"PerPage is how many zones one page holds.","in":"query","name":"per_page","required":false,"schema":{"type":"string"}},{"description":"Name filters to the zone with this domain name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Status filters by zone status (active, pending, initializing, …).","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Order names the field to sort by, and Direction sorts asc or desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"in":"query","name":"direction","required":false,"schema":{"type":"string"}}],"summary":"Lists the Cloudflare zones the org's connected API token can see, paged and filtered by the query parameters Cloudflare itself accepts."}},"/v1/cloudflare/zones/{zone}":{"get":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}}],"summary":"Reads one Cloudflare zone the org's token can see."}},"/v1/cloudflare/zones/{zone}/analytics":{"get":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}},{"description":"Since and Until bound the window, in the form Cloudflare accepts — an RFC 3339\ntime or a negative number of minutes from now (\"-1440\" is the last day).","example":"-1440","in":"query","name":"since","required":false,"schema":{"type":"string"}},{"example":"0","in":"query","name":"until","required":false,"schema":{"type":"string"}},{"description":"Continuous asks Cloudflare for only fully-aggregated buckets.","in":"query","name":"continuous","required":false,"schema":{"type":"string"}}],"summary":"Reads a zone's Cloudflare traffic dashboard — requests, bandwidth, threats and pageviews over the since/until window."}},"/v1/cloudflare/zones/{zone}/purge":{"post":{"parameters":[{"description":"Zone is the 32-hex Cloudflare zone id, from the path.","example":"0123456789abcdef0123456789abcdef","in":"path","name":"zone","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/purgeIn"}}}},"summary":"Drops a zone's Cloudflare edge cache — either the whole zone (purge_everything) or exactly the listed file URLs."}},"/v1/clusters":{"get":{"summary":"Returns the caller org's clusters from both sources: the managed clusters projected from Visor's node pools, and the BYO clusters attached to the caller's project."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/clusterAttach"}}}},"summary":"Attaches a BYO cluster to the caller's org — the kubeconfig is validated, KMS-sealed and added to the fleet — and answers 201 with the cluster as it now appears on GET /v1/clusters."}},"/v1/clusters/{clusterId}/pools":{"post":{"parameters":[{"description":"ClusterID is the cluster to add the pool to, from the URL path.","in":"path","name":"clusterId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/poolCreate"}}}},"summary":"Adds a node pool to one of the caller org's clusters and answers 201 with the created pool."}},"/v1/clusters/{clusterId}/pools/{poolId}":{"delete":{"parameters":[{"description":"ClusterID and PoolID address the pool, from the URL path.","in":"path","name":"clusterId","required":true,"schema":{"type":"string"}},{"in":"path","name":"poolId","required":true,"schema":{"type":"string"}},{"description":"Provider is the cloud the cluster lives on, from ?provider=. Required.","in":"query","name":"provider","required":false,"schema":{"type":"string"}}],"summary":"Removes a node pool from one of the caller org's clusters."}},"/v1/clusters/{clusterId}/pools/{poolId}/scale":{"post":{"parameters":[{"description":"ClusterID and PoolID address the pool, from the URL path.","in":"path","name":"clusterId","required":true,"schema":{"type":"string"}},{"in":"path","name":"poolId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/poolScale"}}}},"summary":"Resizes a node pool to an absolute node count and returns the pool as Visor reports it after the change."}},"/v1/clusters/{id}":{"delete":{"parameters":[{"description":"ID is the cluster's fleet name (the `name` it was attached under), matched\nlower-cased.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a BYO cluster from the caller org's fleet."}},"/v1/code/ask":{"get":{"parameters":[{"description":"Q is the question to answer. Required, max 4000 bytes.","example":"where is the per-org SQLite file opened","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Repo narrows retrieval to one repository. Empty searches every repo the org\nhas indexed.","example":"cloud","in":"query","name":"repo","required":false,"schema":{"type":"string"}}],"summary":"Answers a question about the caller org's code with a CITED answer: retrieval packs grounding context, then the synthesizer writes the answer over exactly those spans, which come back alongside it."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/askPostIn"}}}},"summary":"Is askGet with the question in the request BODY, for a question too long or too awkward to put in a URL."}},"/v1/code/context":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/contextIn"}}}},"summary":"Packs the most relevant code for a query into a token budget — THE primitive for a coding agent that has to decide what to put in a prompt."}},"/v1/code/file":{"get":{"parameters":[{"description":"Path is the file's repo-relative path. Required.","example":"apps/code/store.go","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"Repo is the repository the file belongs to. REQUIRED.","example":"cloud","in":"query","name":"repo","required":false,"schema":{"type":"string"}}],"summary":"Returns the INDEXED content of one file — read_file over the chunks the search tiers hold, for pulling up code an agent just found."}},"/v1/code/index":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/indexIn"}}}},"summary":"(re)indexes a repository for the caller's org, incrementally: files whose content hash is unchanged are skipped, so re-sending a whole tree is cheap."}},"/v1/code/lsp/complete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"summary":"Offers the candidates a language server has at a position, typed and resolved through the repository's dependencies rather than guessed from text."}},"/v1/code/lsp/diagnostics":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"summary":"Reports every problem the language server finds in one file — compile errors, type errors and lints, each with its span and its severity (1 error, 2 warning, 3 information, 4 hint)."}},"/v1/code/lsp/hover":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"summary":"Renders the type and documentation of the symbol at a position, as the language server itself renders it."}},"/v1/code/lsp/locate":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"summary":"Finds where a symbol lives: its definition, its references, its type or its implementations, chosen by relation (definition, reference, type, implementation — empty means definition)."}},"/v1/code/lsp/symbols":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Query"}}}},"summary":"Outlines one file: every declaration in it, with its kind and its span."}},"/v1/code/search":{"get":{"parameters":[{"description":"Q is the search query. Required, max 4000 bytes. For type=regex it is a\nregular expression; for type=symbol it is a symbol name.","example":"func openStore","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Type selects the retrieval tier: \"text\" (FTS5 trigram), \"regex\",\n\"symbol\" (definitions), \"semantic\" (embeddings) or \"hybrid\". Anything\nelse — including empty — reads as hybrid.","example":"hybrid","in":"query","name":"type","required":false,"schema":{"type":"string"}},{"description":"Repo narrows to one repository. Empty searches every repo the org has indexed.","example":"cloud","in":"query","name":"repo","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many spans come back: default 20, maximum 100. A value that\nis not a positive integer reads as the default.","example":20,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Finds code in the caller org's index across three orthogonal retrieval tiers fused by reciprocal-rank fusion: lexical (FTS5 trigram over code-tokenized text), symbolic (real definition and reference edges), and semantic (embedding cosine over AST-boundary chunks)."}},"/v1/code/tree":{"get":{"parameters":[{"description":"Repo is the repository to walk. REQUIRED — a tree is repo-scoped.","example":"cloud","in":"query","name":"repo","required":false,"schema":{"type":"string"}}],"summary":"Returns one repository's file structure with a per-file symbol count — get_repo_structure over the org's own index, with no git checkout involved."}},"/v1/coding":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodingStartIn"}}}},"summary":"Start one autonomous coding run against a repo in the caller's org"}},"/v1/commands":{"get":{"summary":"Every operation this API answers, as a command"}},"/v1/commerce/admin/catalog":{"get":{"summary":"The catalog projection with cost and margin included"}},"/v1/commerce/catalog":{"get":{"summary":"The public product catalog projection for a brand"}},"/v1/commerce/collection/":{"get":{"summary":"List your org's collections, as a page"},"post":{"summary":"Create a collection"}},"/v1/commerce/collection/{collectionid}":{"delete":{"parameters":[{"in":"path","name":"collectionid","required":true,"schema":{"type":"string"}}],"summary":"Delete a collection, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"collectionid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one collection"},"patch":{"parameters":[{"in":"path","name":"collectionid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a collection"},"post":{"parameters":[{"in":"path","name":"collectionid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a collection — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"collectionid","required":true,"schema":{"type":"string"}}],"summary":"Replace a collection outright"}},"/v1/commerce/currencies":{"get":{"summary":"The reference currency list the price and settings pickers render"}},"/v1/commerce/disclosure/":{"get":{"summary":"List your org's disclosures, as a page"},"post":{"summary":"Create a disclosure"}},"/v1/commerce/disclosure/{disclosureid}":{"delete":{"parameters":[{"in":"path","name":"disclosureid","required":true,"schema":{"type":"string"}}],"summary":"Delete a disclosure, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"disclosureid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one disclosure"},"patch":{"parameters":[{"in":"path","name":"disclosureid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a disclosure"},"post":{"parameters":[{"in":"path","name":"disclosureid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a disclosure — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"disclosureid","required":true,"schema":{"type":"string"}}],"summary":"Replace a disclosure outright"}},"/v1/commerce/discount/":{"get":{"summary":"List your org's discounts, as a page"},"post":{"summary":"Create a discount"}},"/v1/commerce/discount/{discountid}":{"delete":{"parameters":[{"in":"path","name":"discountid","required":true,"schema":{"type":"string"}}],"summary":"Delete a discount, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"discountid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one discount"},"patch":{"parameters":[{"in":"path","name":"discountid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a discount"},"post":{"parameters":[{"in":"path","name":"discountid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a discount — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"discountid","required":true,"schema":{"type":"string"}}],"summary":"Replace a discount outright"}},"/v1/commerce/movie/":{"get":{"summary":"List your org's movies, as a page"},"post":{"summary":"Create a movie"}},"/v1/commerce/movie/{movieid}":{"delete":{"parameters":[{"in":"path","name":"movieid","required":true,"schema":{"type":"string"}}],"summary":"Delete a movie, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"movieid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one movie"},"patch":{"parameters":[{"in":"path","name":"movieid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a movie"},"post":{"parameters":[{"in":"path","name":"movieid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a movie — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"movieid","required":true,"schema":{"type":"string"}}],"summary":"Replace a movie outright"}},"/v1/commerce/note/":{"get":{"summary":"List your org's notes, as a page"},"post":{"summary":"Create a note"}},"/v1/commerce/note/{noteid}":{"delete":{"parameters":[{"in":"path","name":"noteid","required":true,"schema":{"type":"string"}}],"summary":"Delete a note, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"noteid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one note"},"patch":{"parameters":[{"in":"path","name":"noteid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a note"},"post":{"parameters":[{"in":"path","name":"noteid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a note — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"noteid","required":true,"schema":{"type":"string"}}],"summary":"Replace a note outright"}},"/v1/commerce/org":{"get":{"summary":"The public org configuration a checkout page boots from"}},"/v1/commerce/product/":{"get":{"summary":"List your org's products, as a page"},"post":{"summary":"Create a product"}},"/v1/commerce/product/{productid}":{"delete":{"parameters":[{"in":"path","name":"productid","required":true,"schema":{"type":"string"}}],"summary":"Delete a product, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"productid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one product"},"patch":{"parameters":[{"in":"path","name":"productid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a product"},"post":{"parameters":[{"in":"path","name":"productid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a product — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"productid","required":true,"schema":{"type":"string"}}],"summary":"Replace a product outright"}},"/v1/commerce/return/":{"get":{"summary":"List your org's returns, as a page"},"post":{"summary":"Create a return"}},"/v1/commerce/return/{returnid}":{"delete":{"parameters":[{"in":"path","name":"returnid","required":true,"schema":{"type":"string"}}],"summary":"Delete a return, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"returnid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one return"},"patch":{"parameters":[{"in":"path","name":"returnid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a return"},"post":{"parameters":[{"in":"path","name":"returnid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a return — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"returnid","required":true,"schema":{"type":"string"}}],"summary":"Replace a return outright"}},"/v1/commerce/saleschannel/":{"get":{"summary":"List your org's sales channels, as a page"},"post":{"summary":"Create a sales channel"}},"/v1/commerce/saleschannel/{saleschannelid}":{"delete":{"parameters":[{"in":"path","name":"saleschannelid","required":true,"schema":{"type":"string"}}],"summary":"Delete a sales channel, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"saleschannelid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one sales channel"},"patch":{"parameters":[{"in":"path","name":"saleschannelid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a sales channel"},"post":{"parameters":[{"in":"path","name":"saleschannelid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a sales channel — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"saleschannelid","required":true,"schema":{"type":"string"}}],"summary":"Replace a sales channel outright"}},"/v1/commerce/stocklocation/":{"get":{"summary":"List your org's stock locations, as a page"},"post":{"summary":"Create a stock location"}},"/v1/commerce/stocklocation/{stocklocationid}":{"delete":{"parameters":[{"in":"path","name":"stocklocationid","required":true,"schema":{"type":"string"}}],"summary":"Delete a stock location, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"stocklocationid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one stock location"},"patch":{"parameters":[{"in":"path","name":"stocklocationid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a stock location"},"post":{"parameters":[{"in":"path","name":"stocklocationid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a stock location — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"stocklocationid","required":true,"schema":{"type":"string"}}],"summary":"Replace a stock location outright"}},"/v1/commerce/submission/":{"get":{"summary":"List your org's submissions, as a page"},"post":{"summary":"Create a submission"}},"/v1/commerce/submission/{submissionid}":{"delete":{"parameters":[{"in":"path","name":"submissionid","required":true,"schema":{"type":"string"}}],"summary":"Delete a submission, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"submissionid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one submission"},"patch":{"parameters":[{"in":"path","name":"submissionid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a submission"},"post":{"parameters":[{"in":"path","name":"submissionid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a submission — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"submissionid","required":true,"schema":{"type":"string"}}],"summary":"Replace a submission outright"}},"/v1/commerce/subscriber/":{"get":{"summary":"List your org's subscribers, as a page"},"post":{"summary":"Create a subscriber"}},"/v1/commerce/subscriber/{subscriberid}":{"delete":{"parameters":[{"in":"path","name":"subscriberid","required":true,"schema":{"type":"string"}}],"summary":"Delete a subscriber, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"subscriberid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one subscriber"},"patch":{"parameters":[{"in":"path","name":"subscriberid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a subscriber"},"post":{"parameters":[{"in":"path","name":"subscriberid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a subscriber — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"subscriberid","required":true,"schema":{"type":"string"}}],"summary":"Replace a subscriber outright"}},"/v1/commerce/tokentransaction/":{"get":{"summary":"List your org's token transactions, as a page"},"post":{"summary":"Create a token transaction"}},"/v1/commerce/tokentransaction/{tokentransactionid}":{"delete":{"parameters":[{"in":"path","name":"tokentransactionid","required":true,"schema":{"type":"string"}}],"summary":"Delete a token transaction, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"tokentransactionid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one token transaction"},"patch":{"parameters":[{"in":"path","name":"tokentransactionid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a token transaction"},"post":{"parameters":[{"in":"path","name":"tokentransactionid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a token transaction — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"tokentransactionid","required":true,"schema":{"type":"string"}}],"summary":"Replace a token transaction outright"}},"/v1/commerce/transfer/":{"get":{"summary":"List your org's transfers, as a page"},"post":{"summary":"Create a transfer"}},"/v1/commerce/transfer/{transferid}":{"delete":{"parameters":[{"in":"path","name":"transferid","required":true,"schema":{"type":"string"}}],"summary":"Delete a transfer, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"transferid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one transfer"},"patch":{"parameters":[{"in":"path","name":"transferid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a transfer"},"post":{"parameters":[{"in":"path","name":"transferid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a transfer — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"transferid","required":true,"schema":{"type":"string"}}],"summary":"Replace a transfer outright"}},"/v1/commerce/variant/":{"get":{"summary":"List your org's variants, as a page"},"post":{"summary":"Create a variant"}},"/v1/commerce/variant/{variantid}":{"delete":{"parameters":[{"in":"path","name":"variantid","required":true,"schema":{"type":"string"}}],"summary":"Delete a variant, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"variantid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one variant"},"patch":{"parameters":[{"in":"path","name":"variantid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a variant"},"post":{"parameters":[{"in":"path","name":"variantid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a variant — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"variantid","required":true,"schema":{"type":"string"}}],"summary":"Replace a variant outright"}},"/v1/commerce/wallet/":{"get":{"summary":"List your org's wallets, as a page"},"post":{"summary":"Create a wallet"}},"/v1/commerce/wallet/{walletid}":{"delete":{"parameters":[{"in":"path","name":"walletid","required":true,"schema":{"type":"string"}}],"summary":"Delete a wallet, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"walletid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one wallet"},"patch":{"parameters":[{"in":"path","name":"walletid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a wallet"},"post":{"parameters":[{"in":"path","name":"walletid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a wallet — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"walletid","required":true,"schema":{"type":"string"}}],"summary":"Replace a wallet outright"}},"/v1/commerce/watchlist/":{"get":{"summary":"List your org's watchlists, as a page"},"post":{"summary":"Create a watchlist"}},"/v1/commerce/watchlist/{watchlistid}":{"delete":{"parameters":[{"in":"path","name":"watchlistid","required":true,"schema":{"type":"string"}}],"summary":"Delete a watchlist, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"watchlistid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one watchlist"},"patch":{"parameters":[{"in":"path","name":"watchlistid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a watchlist"},"post":{"parameters":[{"in":"path","name":"watchlistid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a watchlist — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"watchlistid","required":true,"schema":{"type":"string"}}],"summary":"Replace a watchlist outright"}},"/v1/commerce/webhook/":{"get":{"summary":"List your org's webhooks, as a page"},"post":{"summary":"Create a webhook"}},"/v1/commerce/webhook/{webhookid}":{"delete":{"parameters":[{"in":"path","name":"webhookid","required":true,"schema":{"type":"string"}}],"summary":"Delete a webhook, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"webhookid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one webhook"},"patch":{"parameters":[{"in":"path","name":"webhookid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a webhook"},"post":{"parameters":[{"in":"path","name":"webhookid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for a webhook — for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"webhookid","required":true,"schema":{"type":"string"}}],"summary":"Replace a webhook outright"}},"/v1/company":{"get":{"summary":"Get returns the caller org's formation and the stages reachable from it, or 404 when the org has not begun one."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/beginIn"}}}},"summary":"Begin starts the org's one formation and returns it with the stages reachable from it."}},"/v1/company/advance":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/advanceIn"}}}},"summary":"Advance runs the ONE guarded transition of the formation machine."}},"/v1/company/documents":{"post":{"summary":"Renders the formation documents for the chosen structure and jurisdiction, ingests each into the org's data room, and submits the state filing through the filing seam."}},"/v1/company/esign":{"post":{"summary":"Sends the generated formation documents for signature by every founder and records the provider's reference on the formation."}},"/v1/company/esign/complete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/esignCompleteIn"}}}},"summary":"Records whether the formation documents have been signed."}},"/v1/company/founders":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/foundersIn"}}}},"summary":"Replaces the formation's founders."}},"/v1/company/fundraise/deck":{"post":{"summary":"Share a pitch deck in the org's data room"}},"/v1/company/fundraise/round":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoundInput"}}}},"summary":"Records a fundraising round on the org's canonical cap table."}},"/v1/company/fundraise/safe":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/safeIn"}}}},"summary":"Raises an e-signature request over documents already in the org's data room — a SAFE, a convertible note, or any other fundraising paper."}},"/v1/company/genesis":{"post":{"summary":"Seeds the canonical cap table with the founding allocation (stakeholders, a common share class, issued shares) and anchors the deterministic equity-genesis root on-chain."}},"/v1/company/import/captable":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/importCapTableIn"}}}},"summary":"Reads an existing company's cap table from a Google Sheet and adds its stakeholders to the canonical cap table."}},"/v1/company/import/documents":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/importDocumentsIn"}}}},"summary":"Ingests an existing company's corporate documents from a Google Drive folder into the org's data room."}},"/v1/company/kyc":{"post":{"summary":"StartKYC opens an identity-verification session for every founder with the wired provider and records each session's reference on the formation."}},"/v1/company/kyc/decision":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/decisionIn"}}}},"summary":"DecideKYC records a privileged reviewer's MANUAL decision on a founder's KYC — the human-in-the-loop path, and the ONLY route to a pass when no real provider is wired."}},"/v1/company/kyc/refresh":{"post":{"summary":"RefreshKYC reconciles each pending founder's KYC with the WIRED provider — the PULL path to a provider-reported terminal status."}},"/v1/company/payment":{"post":{"summary":"Charge the one-time formation fee and mark the formation paid"}},"/v1/company/register":{"get":{"parameters":[{"description":"Stage keeps only formations at that stage. Empty means any.","example":"founders","in":"query","name":"stage","required":false,"schema":{"type":"string"}},{"description":"Structure keeps only formations of that entity kind. Empty means any.","in":"query","name":"structure","required":false,"schema":{"type":"string"}},{"description":"Limit bounds the page; 0 or less means the default of 200.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset skips that many rows.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns the platform's whole formation register, newest activity first — every org's formation, not the caller's."}},"/v1/company/register/summary":{"get":{"summary":"Counts the platform's formations by stage — the register's shape in one read, so a queue that is growing is visible as a number rather than inferred by paging the list."}},"/v1/company/review":{"get":{"parameters":[{"description":"Limit bounds how many formations are scanned; 0 or less means the default of 200.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Reports the founders whose KYC is not yet settled, oldest formation first, so the queue drains in the order founders have been waiting."}},"/v1/company/skip":{"post":{"summary":"Skip marks the org as already incorporated and moves it onto the import path, so an existing company brings its documents and cap table in instead of forming a new entity."}},"/v1/company/structure":{"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/structureIn"}}}},"summary":"Records the entity kind, the state of formation and the proposed name."}},"/v1/completions":{"post":{"summary":"Implements the OpenAI-compatible chat completions API"}},"/v1/compliance/accreditation":{"get":{"parameters":[{"description":"Limit caps the rows returned; non-positive means the server default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's tracked accreditation-state records, newest first — evidence entries the org keeps, never a platform certification."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/accreditationReq"}}}},"summary":"Records an ASSERTED accreditation state for a subject — the subject's own assertion, with no verifier."}},"/v1/compliance/accreditation/{id}":{"get":{"parameters":[{"description":"ID is the accreditation record to read, from the path.","example":"acc_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one tracked accreditation record."}},"/v1/compliance/accreditation/{id}/decision":{"post":{"parameters":[{"description":"ID is the accreditation record to decide, from the path.","example":"acc_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/accreditationDecision"}}}},"summary":"Records an org reviewer's decision on an accreditation record — a reviewer confirmation, a provider verification the reviewer has evidence of (a CPA/attorney letter, a verifier report), a rejection, or an expiry."}},"/v1/compliance/audit":{"get":{"parameters":[{"description":"Result filters rows by outcome result: success, deny, or error; empty means all.","in":"query","name":"result","required":false,"schema":{"type":"string"}}],"summary":"AuditRead is the compliance-scoped read of the SHARED tamper-evident audit plane — the SOC 2 posture surface (privileged actions: who started/decided what, when)."}},"/v1/compliance/health":{"get":{"summary":"Health reports subsystem liveness and the wired verification provider."}},"/v1/compliance/records":{"get":{"parameters":[{"description":"Limit caps the rows returned; non-positive means the server default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"ListRecords is the unified compliance-record view for the org: its verifications and accreditation records together, each provider-reported or tracked, never platform-asserted."}},"/v1/compliance/status":{"get":{"summary":"Status is the org's honest posture read: the wired provider and the per-status tally of its verifications."}},"/v1/compliance/subjects":{"get":{"parameters":[{"description":"Limit caps the rows returned; non-positive means the server default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's subjects as PII-MINIMIZED summaries — no name or email, only whether an email is on file."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/subjectReq"}}}},"summary":"Records a party the org is verifying as part of its own onboarding/compliance — a team member, vendor, customer, or counterparty."}},"/v1/compliance/subjects/{id}":{"get":{"parameters":[{"description":"ID is the subject to read, from the path.","example":"sub_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one subject WITH its contact PII — the only surface that returns it, and only to the owning org."}},"/v1/compliance/verifications":{"get":{"parameters":[{"description":"Limit caps the rows returned; non-positive means the server default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's KYC/KYB verifications, newest first — opaque subject references and provider-reported statuses only, no subject PII."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/verificationReq"}}}},"summary":"Begins a KYC/KYB verification of a subject through the wired provider — an existing subject by id, or one created inline from the request."}},"/v1/compliance/verifications/webhook":{"post":{"summary":"Provider push that settles a verification, authenticated by HMAC signature"}},"/v1/compliance/verifications/{id}":{"get":{"parameters":[{"description":"ID is the verification to act on, from the path.","example":"chk_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one verification — its opaque subject reference and provider-reported status, no subject PII."}},"/v1/compliance/verifications/{id}/decision":{"post":{"parameters":[{"description":"ID is the verification to decide, from the path.","example":"chk_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/verificationDecision"}}}},"summary":"Records a privileged reviewer's MANUAL decision on a verification — the human-in-the-loop path, and the ONLY route to a passing status when no real provider is wired."}},"/v1/compliance/verifications/{id}/refresh":{"post":{"parameters":[{"description":"ID is the verification to act on, from the path.","example":"chk_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Polls the wired provider for its current decision and records it, ATTRIBUTED to the provider — the internal PULL reconcile."}},"/v1/compute/bots":{"get":{"summary":"Returns the caller org's bot machines — the kind=bot machines — each joined with the agent binding that says which cloud Agent it runs."}},"/v1/compute/bots/launch":{"post":{"summary":"Launch a bot machine — an agent plus the machine that runs it — or price one"}},"/v1/compute/bots/{id}":{"delete":{"parameters":[{"description":"ID is the bot machine's id — the same id the machines surface addresses it\nby. Scoped to the caller's org upstream, so another tenant's id is 404.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Tears down both halves of a bot: it unbinds the agent (best-effort — a bot with no binding still deletes), then terminates the machine."},"get":{"parameters":[{"description":"ID is the bot machine's id — the same id the machines surface addresses it\nby. Scoped to the caller's org upstream, so another tenant's id is 404.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's bot machines with its agent binding."}},"/v1/compute/bots/{id}/{action}":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"action","required":true,"schema":{"type":"string"}}],"summary":"Message a bot, or stop it, by naming the action in the path"}},"/v1/compute/regions":{"get":{"summary":"The regions a machine or GPU can be launched into"}},"/v1/compute/sizes":{"get":{"summary":"The machine and GPU sizes that can be launched"}},"/v1/connectors":{"get":{"summary":"Lists the caller's OWN connectors across every provider — the set `hanzo connector ls` prints."}},"/v1/connectors/providers":{"get":{"summary":"Lists the user-scoped provider cards — the catalog of what a user can connect, and how."}},"/v1/connectors/{id}":{"delete":{"parameters":[{"description":"ID is the connector id, provider + \":\" + label (\"openai:default\") — the\nauth-profile-id shape. Another user's id is simply no row, so 404.","example":"openai:work","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Forgets a connector: every custodied secret, then the row."}},"/v1/connectors/{id}/refresh":{"post":{"parameters":[{"description":"ID is the connector id, provider + \":\" + label (\"openai:default\") — the\nauth-profile-id shape. Another user's id is simply no row, so 404.","example":"openai:work","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Forces a token rotation for a connected connector, ahead of the automatic rotation a token read would do inside the expiry window."}},"/v1/connectors/{id}/token":{"get":{"parameters":[{"description":"ID is the connector id, provider + \":\" + label (\"openai:default\") — the\nauth-profile-id shape. Another user's id is simply no row, so 404.","example":"openai:work","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Hands the custodied access token to its owner — the ONE place custody exits."}},"/v1/connectors/{provider}/credential":{"post":{"parameters":[{"description":"Provider is the user-scoped provider's registry id, from the path.","example":"openai","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/credentialIn"}}}},"summary":"Is the direct intake path: a customer-held token/setup-token (Verify) or an externally obtained OAuth bundle from the CLI's local PKCE (Adopt)."}},"/v1/connectors/{provider}/device":{"post":{"parameters":[{"description":"Provider is the user-scoped provider's registry id, from the path.","example":"openai","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/deviceStartIn"}}}},"summary":"Begins a device sign-in and returns the code to show the user plus how to poll for completion."}},"/v1/connectors/{provider}/device/{flow}/poll":{"post":{"parameters":[{"description":"Provider is the user-scoped provider's registry id, from the path.","example":"openai","in":"path","name":"provider","required":true,"schema":{"type":"string"}},{"description":"Flow is the id deviceStartOut returned. Expired or another user's flow is\nindistinguishable from an unknown one: 404.","example":"g_7f2c","in":"path","name":"flow","required":true,"schema":{"type":"string"}}],"summary":"Advances a device sign-in."}},"/v1/content/board":{"get":{"parameters":[{"description":"Status keeps only items in one lifecycle state (draft, in_review, approved,\nqueued, published, archived). An undefined state is refused.","example":"queued","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Project keeps only items in one brand/site sub-scope.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"DocType keeps only one content type; omitted, the board spans every\npublishable type. An unknown type is refused.","in":"query","name":"doctype","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned, clamped to 1000. Defaults to 200, which is also\nwhat a non-positive or unparseable value takes.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Aggregates the caller org's marketing content across every publishable content type into ONE queue board — the cross-type read the framework's per-DocType list cannot give."}},"/v1/content/channels":{"get":{"summary":"Lists the distribution channels the caller's org has connected — the social integrations a publish can target."}},"/v1/content/generate":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateInput"}}}},"summary":"Draft a piece of marketing content and file it in the CMS as a draft."}},"/v1/content/lifecycle":{"get":{"summary":"Returns the ONE marketing-content state machine: the ordered lifecycle states, which state a fresh document starts in, which one is publicly live, and the legal successors of every state."}},"/v1/content/publish":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishInput"}}}},"summary":"Publish distributes one CMS content item to the channels recorded on it and returns the honest per-channel outcome."}},"/v1/content/{doctype}/{name}/transition":{"post":{"parameters":[{"description":"DocType is the content type to act on, from the path.","example":"SocialPost","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Name is the document to act on, from the path.","example":"spring-teaser","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/transitionIn"}}}},"summary":"Moves one content item to a new lifecycle state and, on the move to published, fans it out to the item's channels."}},"/v1/crawl":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/crawlRequest"}}}},"summary":"Fetch one URL and read it back as markdown"}},"/v1/crm/applications":{"get":{"parameters":[{"description":"Stage returns only the applications at that pipeline stage when set:\napplied, screened, qualified, credits-offered, onboarded or rejected.","in":"query","name":"stage","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned: 200 by default, 1000 at most.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's Startup Program applications, newest first."},"post":{"summary":"Apply to the Startup Program from the public form"}},"/v1/crm/applications/{id}":{"get":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"appl_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one Startup Program application with its AI screen and stage history."},"patch":{"parameters":[{"description":"ID is the application to move, from the path.","example":"appl_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchApplicationIn"}}}},"summary":"Moves one Startup Program application through the pipeline."}},"/v1/crm/companies":{"get":{"parameters":[{"description":"Limit caps the rows returned: 200 by default, 1000 at most.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's companies, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/companyReq"}}}},"summary":"Adds a company to the caller's org and answers 201 with the stored record."}},"/v1/crm/companies/{id}":{"delete":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"comp_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's companies and answers 204."},"get":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"comp_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's companies."},"put":{"parameters":[{"description":"ID names the company to update and comes from the path. A create ignores\nit: the server mints the id.","example":"comp_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/companyReq"}}}},"summary":"Replaces one of the caller org's companies."}},"/v1/crm/contacts":{"get":{"parameters":[{"description":"CompanyID returns only the contacts at that company when set.","in":"query","name":"companyId","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned: 200 by default, 1000 at most.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's contacts, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactReq"}}}},"summary":"Adds a person to the caller's org and answers 201 with the stored record."}},"/v1/crm/contacts/{id}":{"delete":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"cont_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's contacts and answers 204."},"get":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"cont_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's contacts."},"put":{"parameters":[{"description":"ID names the contact to update and comes from the path. A create ignores\nit: the server mints the id.","example":"cont_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/contactReq"}}}},"summary":"Replaces one of the caller org's contacts."}},"/v1/crm/opportunities":{"get":{"parameters":[{"description":"Stage returns only the opportunities at that pipeline stage when set\n(NEW, SCREENING, MEETING, PROPOSAL or CUSTOMER; case-insensitive).","in":"query","name":"stage","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned: 200 by default, 1000 at most.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's deals, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/oppReq"}}}},"summary":"Adds a deal to the caller's org and answers 201 with the stored record."}},"/v1/crm/opportunities/{id}":{"delete":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"oppo_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's deals and answers 204."},"get":{"parameters":[{"description":"ID is the record to act on, from the path.","example":"oppo_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's deals."},"put":{"parameters":[{"description":"ID names the opportunity to update and comes from the path. A create\nignores it: the server mints the id.","example":"oppo_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/oppReq"}}}},"summary":"Replaces one of the caller org's deals."}},"/v1/crm/summary":{"get":{"summary":"Summary counts the caller org's CRM records: companies, contacts, opportunities."}},"/v1/csrf":{"get":{"summary":"IssueCSRFToken mints the anti-CSRF token a browser echoes as X-CSRF-Token on every money write (mint/revoke a key, top up, onboard, and the billing/commerce write verbs)."}},"/v1/dataroom/analytics/dataroom/{dataroomId}":{"get":{"parameters":[{"description":"DataroomID is the room to report on. It is the path segment, resolved in\nthe caller's own tenant store.","in":"path","name":"dataroomId","required":true,"schema":{"type":"string"}}],"summary":"Rolls up every share link pointing at one data room: session and page-view totals for the room, plus the per-page breakdown for each link beneath it."}},"/v1/dataroom/analytics/link/{linkId}":{"get":{"parameters":[{"description":"LinkID is the link to report on. It is the path segment, resolved in the\ncaller's own tenant store.","in":"path","name":"linkId","required":true,"schema":{"type":"string"}}],"summary":"Reports how one share link was actually read: total viewing sessions, total page views, and per page the view count, the summed dwell measure and its average."}},"/v1/dataroom/datarooms":{"get":{"summary":"Returns every data room in the caller org's own store, newest first, with its short public id, name, description and timestamps."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/dataroomCreate"}}}},"summary":"Opens a new data room for the caller org and answers with it, including the short public id it is addressed by."}},"/v1/dataroom/datarooms/{id}":{"get":{"parameters":[{"description":"ID is the room to read. It is the path segment: the URL is the addressing\nauthority, and the org it is resolved in comes from the caller's principal,\nso an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Reads one of the caller org's data rooms together with every document in it, each carrying its membership id and order index."}},"/v1/dataroom/datarooms/{id}/documents":{"post":{"parameters":[{"description":"ID is the room to add to. It is the path segment: the URL is the addressing\nauthority, and the org it is resolved in comes from the caller's principal,\nso an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/dataroomAddDocument"}}}},"summary":"Puts an already-uploaded document into one of the caller org's data rooms and answers with the new membership id."}},"/v1/dataroom/documents":{"get":{"summary":"Returns every document in the caller org's own store, newest first — name, opaque storage key, content type, page count, size and timestamps."},"post":{"summary":"Upload a document's bytes and record it"}},"/v1/dataroom/documents/{id}":{"get":{"parameters":[{"description":"ID is the document to read. It is the path segment: the URL is the\naddressing authority, and the org it is resolved in comes from the caller's\nprincipal, so an id from another tenant is simply not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Reads one of the caller org's documents — its name, opaque storage key, content type, page count, size and timestamps."}},"/v1/dataroom/documents/{id}/file":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Download a document's bytes as its owner"}},"/v1/dataroom/health":{"get":{"summary":"Liveness of the dataroom subsystem"}},"/v1/dataroom/links":{"get":{"summary":"Returns every live share link in the caller org's own store, newest first, with the controls a visitor will meet: whether an address is required, whether a password is set, the allow and deny lists, whether download is permitted, and when the link expires."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/dataroomLinkCreate"}}}},"summary":"Grants access: it mints a public share link over one data room (`dataroomId`) or one document (`documentId`) — one of the two is required — and answers with the link, whose `id` is the token a visitor opens it with."}},"/v1/dataroom/view/{linkId}":{"get":{"parameters":[{"in":"path","name":"linkId","required":true,"schema":{"type":"string"}}],"summary":"What a share link's visitor sees before authenticating"}},"/v1/dataroom/view/{linkId}/authenticate":{"post":{"parameters":[{"in":"path","name":"linkId","required":true,"schema":{"type":"string"}}],"summary":"Pass a share link's gates and open a viewing session"}},"/v1/dataroom/view/{linkId}/document/{documentId}/file":{"get":{"parameters":[{"in":"path","name":"linkId","required":true,"schema":{"type":"string"}},{"in":"path","name":"documentId","required":true,"schema":{"type":"string"}}],"summary":"Read a document's bytes as an authorised link visitor"}},"/v1/dataroom/view/{linkId}/pageview":{"post":{"parameters":[{"in":"path","name":"linkId","required":true,"schema":{"type":"string"}}],"summary":"Record one page-view against an open viewing session"}},"/v1/datastore":{"get":{"summary":"Lists the caller org's Hanzo Datastore warehouses."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a Hanzo Datastore instance for your org"}},"/v1/datastore/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"warehouse","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deprovisions one Hanzo Datastore warehouse."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"warehouse","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one Hanzo Datastore warehouse's metadata."}},"/v1/deploy/account/can-i/{wildcard1}":{"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Compatibility answer the console UI asks before enabling its buttons","x-catch-all":["wildcard1"]}},"/v1/deploy/applications":{"get":{"summary":"Returns the fleet as an argocd ApplicationList: one projected Application per operator App CR, carrying the image tag the CR DECLARES, the tag actually RUNNING in the cluster's Deployment, the reconciled health, and the sync verdict those two produce (declared == running ⇒ Synced, both known and different ⇒ OutOfSync, either unknown ⇒ Unknown)."}},"/v1/deploy/applications/{name}":{"get":{"parameters":[{"description":"Name is the application to read, from the path. It must be a DNS-1123 label\n(lowercase alphanumerics and hyphens, starting and ending alphanumeric) —\nevery operator App CR's metadata.name satisfies that, and anything else is a\n400 rather than a lookup.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns ONE projected argocd Application by name, with status.resources filled in from its reconciled resource tree — which is what makes it the detail view rather than a row of the list."}},"/v1/deploy/applications/{name}/resource-tree":{"get":{"parameters":[{"description":"Name is the application to read, from the path. It must be a DNS-1123 label\n(lowercase alphanumerics and hyphens, starting and ending alphanumeric) —\nevery operator App CR's metadata.name satisfies that, and anything else is a\n400 rather than a lookup.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one application's argocd ApplicationTree: the objects the operator reconciled from its App CR, reached by ownerRef — the Deployment and, under it, the ReplicaSet and Pods, plus the Service, Ingress, HorizontalPodAutoscaler, PodDisruptionBudget and ConfigMaps it owns — each node carrying its parent edges and its health."}},"/v1/deploy/applications/{name}/revisions/{revision}/metadata":{"get":{"parameters":[{"description":"Name is the application to read, from the path. It must be a DNS-1123 label.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Revision is the revision to describe, from the path. The empty revision and\n\"HEAD\" both mean \"whatever this application currently declares\".","in":"path","name":"revision","required":true,"schema":{"type":"string"}}],"summary":"Returns the argocd RevisionMetadata for one revision of one application — what the detail view shows beside a revision."}},"/v1/deploy/applications/{name}/rollback":{"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"The console's rollback control — today it requests a reconcile, nothing more"}},"/v1/deploy/applications/{name}/sync":{"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Ask the operator to reconcile one application now"}},"/v1/deploy/applications/{name}/syncwindows":{"get":{"parameters":[{"description":"Name is the application to read, from the path. It must be a DNS-1123 label\n(lowercase alphanumerics and hyphens, starting and ending alphanumeric) —\nevery operator App CR's metadata.name satisfies that, and anything else is a\n400 rather than a lookup.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one application's argocd ApplicationSyncWindowState — the answer to \"is anything blocking a sync of this application right now?\"."}},"/v1/deploy/callback":{"get":{"summary":"Finish the sign-in round trip and mint the console session"}},"/v1/deploy/clusters":{"get":{"summary":"Returns the argocd ClusterList of the destinations the caller's applications reconcile into: one entry per distinct destination server, carrying the count of applications reconciling into it."}},"/v1/deploy/gitops":{"get":{"summary":"Lists every Hanzo CD Application in the cluster: the git source each one polls, the commit it last APPLIED, how its last sync operation ended, and its recent deploy history — newest deploy first, ordered by namespace then name."}},"/v1/deploy/health":{"get":{"summary":"Whether this control plane can actually reach the cluster it deploys to"}},"/v1/deploy/login":{"get":{"summary":"Start the sign-in round trip for this console"}},"/v1/deploy/logout":{"post":{"summary":"End the console session on this host"}},"/v1/deploy/projects":{"get":{"summary":"Returns the argocd AppProjectList this console groups and filters applications by."}},"/v1/deploy/reconcile":{"post":{"summary":"Render the configured git source and apply it to the cluster, once"}},"/v1/deploy/session/userinfo":{"get":{"summary":"Answers \"is this browser signed in, and if not where does it sign in?\" — the dashboard SPA's bootstrap question, and the only route on this plane that answers for an anonymous caller."}},"/v1/deploy/settings":{"get":{"summary":"Returns the argocd AuthSettings object the dashboard SPA awaits before its first render."}},"/v1/deploy/stream/applications":{"get":{"summary":"Live application fleet updates as Server-Sent Events"}},"/v1/deploy/stream/applications/{name}/resource-tree":{"get":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Live resource tree for one application, as Server-Sent Events"}},"/v1/deploy/version":{"get":{"summary":"Returns the argocd VersionMessage the dashboard SPA reads at bootstrap."}},"/v1/destinations":{"get":{"summary":"Reports every destination this deployment can forward to, each with the caller org's connection state: whether it is connected, whether it is enabled, whether a credential resolves right now, and the config fields the console renders for it."}},"/v1/destinations/{platform}":{"delete":{"parameters":[{"description":"Platform is the destination to act on, from the path: ga4 | meta | tiktok |\nlinkedin | x | reddit | posthog | umami.","example":"ga4","in":"path","name":"platform","required":true,"schema":{"type":"string"}}],"summary":"Forgets a destination for the caller's org: every credential held in KMS, then the stored config."},"get":{"parameters":[{"description":"Platform is the destination to act on, from the path: ga4 | meta | tiktok |\nlinkedin | x | reddit | posthog | umami.","example":"ga4","in":"path","name":"platform","required":true,"schema":{"type":"string"}}],"summary":"Reports one destination's card for the caller's org — its config fields, its connection state, and whether a credential resolves right now."},"post":{"parameters":[{"in":"path","name":"platform","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{},"type":"object"}}}},"summary":"Connect one conversion destination for your org, or update the one you have"}},"/v1/destinations/{platform}/test":{"post":{"parameters":[{"description":"Platform is the destination to act on, from the path: ga4 | meta | tiktok |\nlinkedin | x | reddit | posthog | umami.","example":"ga4","in":"path","name":"platform","required":true,"schema":{"type":"string"}}],"summary":"Sends ONE synthetic pageview through the connected destination end to end and reports what the platform said."}},"/v1/dev-bridge":{"get":{"summary":"Upgrades to WebSocket and bridges JSON-RPC messages between the browser and a hanzo-app-server instance."}},"/v1/dns/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Delete a DNS zone or record"},"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Read your org's DNS zones and records"},"patch":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Amend a DNS zone or record"},"post":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Create a DNS zone or record"},"put":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Replace a DNS zone or record"}},"/v1/docdb":{"get":{"summary":"ListDocDB lists the caller org's Hanzo DocDB document databases."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a document database for your org"}},"/v1/docdb/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"sessions","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"DropDocDB deprovisions one Hanzo DocDB database."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"sessions","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"GetDocDB returns one Hanzo DocDB database's metadata."}},"/v1/docs/ingest":{"post":{"summary":"Unified RAG ingest: parse + chunk + embed documents and pipe them to BOTH Hanzo Vector (semantic) AND Hanzo Search (keyword) under the tenant index {owner}-{store}-docs — the same index /v1/chat retrieval reads."}},"/v1/documents":{"delete":{"summary":"Handles DELETE /v1/documents — a JSON array of file_ids."}},"/v1/documents/{file_id}/context":{"get":{"parameters":[{"in":"path","name":"file_id","required":true,"schema":{"type":"string"}}],"summary":"Handles GET /v1/documents/:file_id/context — every chunk of a file, as LangChain Documents (used when RAG_USE_FULL_CONTEXT is on)."}},"/v1/domain/availability":{"get":{"parameters":[{"description":"Domain is one name, or several comma-separated, to check in one call. Names\nare lowercased. It is required.","in":"query","name":"domain","required":true,"schema":{"type":"string"}}],"summary":"Checks exact names rather than searching for them, and answers the same quote shape search does — purchasable, premium, first-term and renewal price in cents."}},"/v1/domain/domains":{"get":{"summary":"Is the domains your org has bought here, newest registration first, each carrying the name, when it was registered, when it expires, what the org paid, the registrar order id and the nameservers it points at."}},"/v1/domain/health":{"get":{"summary":"Reports registrar reachability honestly: ok only when the wholesale credentials are present AND name.com accepted them on a live call made while you waited."}},"/v1/domain/register":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/order"}}}},"summary":"Buys a domain for your org and answers the ownership record together with the quote it was bought at."}},"/v1/domain/renew":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/renewReq"}}}},"summary":"Extends a domain your org already owns and answers the updated record with its new expiry alongside what was paid."}},"/v1/domain/search":{"get":{"parameters":[{"description":"Q is the keyword to build names from. It is required.","in":"query","name":"q","required":true,"schema":{"type":"string"}},{"description":"TLD narrows the search to a comma-separated set of top-level domains.","in":"query","name":"tld","required":false,"schema":{"type":"string"}}],"summary":"Finds names built from the keyword q, plus the registrar's alternate-TLD suggestions, and answers a quote for each: the name, whether it is purchasable, whether it is premium, the first-term and renewal price in cents, and the TLD."}},"/v1/domain/transfer":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/transferReq"}}}},"summary":"Moves a domain you own at another registrar onto your org here, using its authCode, and answers the same record-plus-quote a purchase does."}},"/v1/download/{wildcard1}":{"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Download a file from a session"}},"/v1/embed":{"get":{"parameters":[{"description":"App is the embedded app to report on: cms (Content Studio), erp or help.","example":"cms","in":"query","name":"app","required":false,"schema":{"type":"string"}}],"summary":"Reports whether one of this brand's shared embedded apps (cms, erp, help) may be framed by the caller and is actually running, so a console module can choose between the embed and the provision panel."}},"/v1/embeddings":{"post":{"summary":"Implements POST /v1/embeddings (OpenAI-compatible)."}},"/v1/enablement":{"get":{"summary":"Returns what the caller's org can actually use: every managed item with its global state, whether it is effective here, whether this org is already opted into its beta, and whether it may still opt in."}},"/v1/enablement/optin":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/enablementOptRef"}}}},"summary":"Opts the caller's OWN org into a beta item."}},"/v1/enablement/optout":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/enablementOptRef"}}}},"summary":"Removes the caller's OWN org from a beta item's grant list, the reverse of OptIntoBeta and idempotent."}},"/v1/engine/model":{"get":{"parameters":[{"description":"Model is the model id to inspect, exactly as the model list reports it.","example":"Qwen/Qwen3-4B","in":"query","name":"model","required":false,"schema":{"type":"string"}}],"summary":"Read one model's load state on the serving runtime"}},"/v1/engine/models":{"get":{"summary":"List the models the serving runtime holds, with each one's load state"}},"/v1/engine/status":{"get":{"summary":"Whether the serving runtime is reachable, and which build it runs"}},"/v1/engine/system":{"get":{"summary":"The serving host's own inventory: devices, memory and build capabilities"}},"/v1/entitlements":{"get":{"summary":"Projection reports which console apps the CALLER's org may open, and the plan slug that decides it."}},"/v1/environments":{"get":{"summary":"Returns your deploy targets, and what is running on each."}},"/v1/errors":{"get":{"parameters":[{"description":"Limit is how many rows to return, newest first. Default 50, maximum 200; a\nvalue at or below zero, or one that is not a number, takes the default.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Errors returns the caller org's most recently captured errors, newest first."}},"/v1/esign/documents":{"get":{"summary":"Your org's documents, newest first"},"post":{"summary":"Upload a PDF and open a draft ready for recipients and fields"}},"/v1/esign/documents/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"One document with its recipients and field layout"}},"/v1/esign/documents/{id}/audit":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"The document's full audit trail, oldest first"}},"/v1/esign/documents/{id}/download":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Download the document — the sealed PDF once it is complete"}},"/v1/esign/documents/{id}/fields":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Place a field on the page for one recipient to fill"}},"/v1/esign/documents/{id}/recipients":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Add someone to a draft and mint their signing token"}},"/v1/esign/documents/{id}/send":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Send the document out and get each signer's link"}},"/v1/esign/health":{"get":{"summary":"Whether the e-signature surface is mounted"}},"/v1/esign/o/{org}/sign/{token}":{"get":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"summary":"Open a document you were asked to sign, using your signing link"}},"/v1/esign/o/{org}/sign/{token}/complete":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"summary":"Finish signing — and seal the document if you were the last"}},"/v1/esign/o/{org}/sign/{token}/fields/{fieldId}":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"token","required":true,"schema":{"type":"string"}},{"in":"path","name":"fieldId","required":true,"schema":{"type":"string"}}],"summary":"Fill in one of your fields"}},"/v1/esign/o/{org}/sign/{token}/reject":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"summary":"Decline to sign, with an optional reason"}},"/v1/evals/datasets":{"get":{"parameters":[{"description":"Limit caps the rows returned. It defaults to 100 and is capped at 500; a\nnon-positive or unparseable value falls back to the default rather than\nfailing, because a typo about paging is not a reason to refuse a read.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the datasets your org has, each with its name, description, metadata and timestamps."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/datasetReq"}}}},"summary":"Writes a dataset — the named set of graded examples a run scores a model against — under the caller's org and answers 201 with it."}},"/v1/evals/datasets/{name}":{"delete":{"parameters":[{"description":"Name is the dataset the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes the named dataset of the caller's org AND all of its examples, in one transaction."},"get":{"parameters":[{"description":"Name is the dataset the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one dataset of the caller's org by name, together with its live item count — the one read that answers how big the set actually is."}},"/v1/evals/datasets/{name}/items":{"get":{"parameters":[{"description":"Dataset is the set to read, from the path — this collection only exists\ninside one.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the examples in one of your datasets — the set is named in the path, because this collection only exists inside one."},"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/itemReq"}}}},"summary":"Writes one graded example — its input, its expected output, free-form metadata and a status — into the dataset named in the path, and answers 201 with it."}},"/v1/evals/evaluators":{"get":{"parameters":[{"description":"Limit caps the rows returned. It defaults to 100 and is capped at 500; a\nnon-positive or unparseable value falls back to the default rather than\nfailing, because a typo about paging is not a reason to refuse a read.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the judges your org has defined, each with its judge model, criteria and the score name it writes under."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/evaluatorReq"}}}},"summary":"Saves a reusable judge for the caller's org — the judge model and the written criteria it grades against — and answers 201 with it."}},"/v1/evals/metrics":{"get":{"parameters":[{"description":"Range is 24h (the default), 7d or 30d. Anything else normalises to 24h\nrather than failing, so the board always has a valid window.","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Interval overrides the bucket the series is grouped into: \"hour\" or \"day\".\nAny other value leaves the range's own default in place.","in":"query","name":"interval","required":false,"schema":{"type":"string"}}],"summary":"Is your org's AI overview board over a window: totals (generations, prompt and completion tokens, cost in cents, errors, success rate, distinct models and users), a gap-filled time series, a per-model breakdown with the long tail folded into \"other\", and latency percentiles read from the GenAI spans."}},"/v1/evals/rubrics":{"get":{"parameters":[{"description":"Limit caps the rows returned. It defaults to 100 and is capped at 500; a\nnon-positive or unparseable value falls back to the default rather than\nfailing, because a typo about paging is not a reason to refuse a read.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the score shapes your org has declared — each name's data type, its numeric bounds and its allowed categories."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/scoreConfigReq"}}}},"summary":"Defines the shape of one score name for the caller's org and answers 201 with it."}},"/v1/evals/runs":{"get":{"parameters":[{"description":"Dataset narrows to the runs against one dataset.","in":"query","name":"datasetName","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is your past runs and how they scored — the dataset and model, the judge model, how many examples were attempted and how many scored, the average score, and when it happened."},"post":{"parameters":[{"in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/runRequest"}}}},"summary":"Runs a real evaluation and answers the summary when it is finished — this is synchronous work, not a job id."}},"/v1/evals/scores":{"get":{"parameters":[{"description":"Name narrows to one score name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"RunName narrows to the scores of one run.","in":"query","name":"runName","required":false,"schema":{"type":"string"}},{"description":"TraceID narrows to the scores on one model call.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the score events your org has recorded, narrowed by any of name, runName and traceId."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/scoreReq"}}}},"summary":"Files one score event for the caller's org and answers 201 with it."}},"/v1/evals/traces":{"get":{"parameters":[{"description":"SessionID narrows to one session, which for an evaluation is one run.","in":"query","name":"sessionId","required":false,"schema":{"type":"string"}},{"description":"RunName narrows to the calls one run made.","in":"query","name":"runName","required":false,"schema":{"type":"string"}},{"description":"Dataset narrows to the calls made against one dataset.","in":"query","name":"datasetName","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the traces behind your evaluations — one per model call an evaluation made, carrying its input, output, model and timing — narrowed by any of sessionId, runName and datasetName."}},"/v1/event":{"post":{"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/Event"},{"items":{"$ref":"#/components/schemas/Event"},"type":"array"},{"$ref":"#/components/schemas/CaptureBatch"},{"$ref":"#/components/schemas/insightsBody"}]}}}},"summary":"Capture product events into your org's warehouse"}},"/v1/event.js":{"get":{"summary":"The Hanzo event tag — the one-line install for a surface with no bundler"}},"/v1/event/{project}/envelope":{"post":{"parameters":[{"in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Sentry SDK envelope ingest — errors and traces from an unmodified Sentry client"}},"/v1/event/{project}/store":{"post":{"parameters":[{"in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Sentry SDK store ingest — the legacy single-event wire"}},"/v1/exec":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeRun"}}}},"summary":"Run a code snippet in a sandboxed interpreter"}},"/v1/exec/programmatic":{"post":{"summary":"Programmatic tool calling (not served here)"}},"/v1/experiments":{"get":{"summary":"Is every experiment in the caller's org, with its variants, status and decision, ordered by project then id."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createBody"}}}},"summary":"Registers a controlled experiment AND puts its assignment flag live, in that order, so the arms start bucketing subjects the moment this returns 201 — the flag is created active at 100% rollout, with each variant weighted as declared."}},"/v1/experiments/health":{"get":{"summary":"Is whether the experiments subsystem is mounted and serving in this process."}},"/v1/experiments/{id}":{"get":{"parameters":[{"description":"ID is the experiment the URL names.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Is one experiment's definition and lifecycle: variants, weights, control arm, status and winner."}},"/v1/experiments/{id}/analyze":{"post":{"parameters":[{"description":"ID is the experiment the URL names.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/analyzeQuery"}}}},"summary":"Is per-variant conversion, lift and statistical significance against the control arm."}},"/v1/experiments/{id}/assign":{"get":{"parameters":[{"description":"ID is the experiment the URL names.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Subject is the unit to bucket — a user, org, session or audience key,\nmatching the experiment's subjectKind.","in":"query","name":"subject","required":true,"schema":{"type":"string"}},{"description":"Props is a JSON object of person properties for targeting. A value that is\nnot valid JSON is dropped rather than refused, so a malformed one changes\nthe bucketing without saying so.","in":"query","name":"props","required":false,"schema":{"type":"string"}}],"summary":"Is the variant one subject is bucketed into, and the payload that variant carries."}},"/v1/experiments/{id}/decide":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/decideBody"}}}},"summary":"Promotes one variant to the whole rollout and records who decided."}},"/v1/feedback":{"post":{"summary":"Attaches a per-request outcome reward to the routing decision that served request_id — the enso training loop's quality signal."}},"/v1/files/{sid}":{"get":{"parameters":[{"in":"path","name":"sid","required":true,"schema":{"type":"string"}}],"summary":"List the files in an execution session"}},"/v1/finance/accounts":{"get":{"parameters":[{"description":"Scope is \"house\" to read the reserve/revenue/payout house accounts. SuperAdmin only.","in":"query","name":"scope","required":false,"schema":{"type":"string"}},{"description":"Org names another tenant to read. SuperAdmin only; ignored when scope=house.","in":"query","name":"org","required":false,"schema":{"type":"string"}}],"summary":"Returns the ledger accounts the caller may see, with their balances."}},"/v1/finance/balance":{"get":{"summary":"Answers the org's spendable prepaid balance typed for the finance surfaces: `availableCents`, `pendingCents`, `dueCents` and the `asOf` instant it was read."}},"/v1/finance/credits":{"get":{"summary":"Answers the money PUT IN to the org's wallet — each staff grant, promo and settled top-up as a positive row with its id, label, cents and grant time."}},"/v1/finance/invoices":{"get":{"summary":"Answers an empty typed array, always."}},"/v1/finance/ledger":{"get":{"parameters":[{"description":"Range is the window: 24h, 7d, 30d or 90d. Anything else — including\nabsent — is 30d, so a typo silently widens the window to a month rather\nthan failing.","example":"30d","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Answers the org's own postings inside `range=`, each as a signed entry: a DEPOSIT CREDITS the wallet (positive, account `credits:<org>`) and every other posting DEBITS it (negative, account `usage:<org>`), described by its notes or its tags."}},"/v1/finance/payment-methods":{"get":{"summary":"Answers the masked card descriptors for the caller's resolved WALLET — id, brand, last four, expiry, default flag — reshaped into the finance contract."}},"/v1/finance/treasury":{"get":{"summary":"Returns the reserve fund's health and the current revenue-share policy for any validated caller."}},"/v1/finance/usage":{"get":{"parameters":[{"description":"Range is the window: 24h, 7d, 30d or 90d. Anything else — including\nabsent — is 30d, so a typo silently widens the window to a month rather\nthan failing.","example":"24h","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Answers metered spend inside `range=`: the window total, a time series to plot, and one line per usage TAG."}},"/v1/finetune/cancel":{"post":{"summary":"Deletes the TrainJob CR, meters the GPU-hours used so far, and marks the job cancelled."}},"/v1/finetune/deploy":{"post":{"summary":"Serves a completed job's checkpoints and registers the result as a routable model on api.hanzo.ai."}},"/v1/finetune/hf/datasets":{"get":{"summary":"Proxies a HuggingFace dataset search (dataset picker)."}},"/v1/finetune/hf/models":{"get":{"summary":"Proxies a HuggingFace model search (base-model picker)."}},"/v1/finetune/hf/repo":{"get":{"summary":"Returns a repo's detail (files, gated/private state)."}},"/v1/finetune/job":{"get":{"summary":"Returns one job with refreshed live status."}},"/v1/finetune/jobs":{"get":{"summary":"Returns the org's jobs, refreshing live status for active ones."},"post":{"summary":"Validates the request, resolves efficient defaults, persists the job, and submits a real TrainJob CR."}},"/v1/finetune/presets":{"get":{"summary":"Returns the new-job catalog plus, when a selection is passed (?baseModel&method&task&preset[&datasetExamples]), the recommended config so the console can render \"Recommended\" as a one-click, ready-to-run default."}},"/v1/flags":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/evaluateIn"}}}},"summary":"Evaluate runs the caller's flag definitions for one identity and returns the flag verdict: which flags are on (or which variant), their payloads, and whether any definition failed to compute."}},"/v1/flags/activity":{"get":{"parameters":[{"description":"Limit caps the rows returned. 1–500; anything else takes the default 100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller's flag change log newest-first: every create, update and delete, with the actor and the time."}},"/v1/flags/decide":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/evaluateIn"}}}},"summary":"Evaluate runs the caller's flag definitions for one identity and returns the flag verdict: which flags are on (or which variant), their payloads, and whether any definition failed to compute."}},"/v1/flags/defs":{"get":{"summary":"Returns every flag definition in the caller's (org, project) store, by key, with its version and who last changed it."}},"/v1/flags/defs/{key}":{"delete":{"parameters":[{"description":"Key is the flag key to act on, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Removes one flag definition by key and records the deletion in the change log."},"get":{"parameters":[{"description":"Key is the flag key to act on, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Returns one flag definition by key, or 404 when the caller's store has none under that key."},"put":{"parameters":[{"description":"Key is the flag key to write, from the path.","example":"new-editor","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Creates or replaces the flag definition at the path's key and returns the stored row."}},"/v1/flags/health":{"get":{"summary":"Health reports that the flag engine is serving."}},"/v1/flags/waitlist":{"get":{"parameters":[{"description":"Host is the host to resolve, e.g. \"chat.hanzo.ai\". Defaults to the request's\nown Host header when omitted, which is what lets a guard running on the\ngoverned host ask about itself with no argument.","in":"query","name":"host","required":false,"schema":{"type":"string"}}],"summary":"Reports whether ONE host is currently gated by the launch waitlist."}},"/v1/fleet":{"get":{"summary":"Returns every compute unit the caller's org has, from every source, each carrying its latest utilization: agent run-targets, the BYO machines that dialed in, attached BYO clusters and Visor-provisioned machines."}},"/v1/fleet/jobs":{"get":{"parameters":[{"description":"GPU selects one node's lane: jobs TARGETED at it (gpu:<node>) or CLAIMED by\nit. The literal \"shared\" selects the any-GPU lane — no target, no claimant.\nMatched case-insensitively.","in":"query","name":"gpu","required":false,"schema":{"type":"string"}},{"description":"Status selects one lifecycle state: queued, running, stalled, completed,\nfailed or canceled.","in":"query","name":"status","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's gpu-jobs render queue, each row tagged with the GPU it targets (empty = the shared any-GPU lane) and the node claiming it, optionally narrowed to one GPU's queue and/or one status."}},"/v1/fleet/jobs/{id}/cancel":{"post":{"parameters":[{"description":"ID is the job (activity) id, from the URL path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/jobCancel"}}}},"summary":"Cancels a queued or running render in the caller's org."}},"/v1/fleet/samples":{"get":{"parameters":[{"description":"Unit selects one compute unit's series by its source-local id.","in":"query","name":"unit","required":false,"schema":{"type":"string"}},{"description":"Source selects one plane: \"agent\", \"byo\" or \"visor\".","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Range is the lookback window (e.g. \"1h\", \"24h\", \"7d\"); empty takes the\nwarehouse default.","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's utilization series, oldest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/sampleIngest"}}}},"summary":"Records a BYO worker's live GPU utilization into the SAME series the fleet board overlays."}},"/v1/fleet/workers":{"get":{"summary":"Returns the caller org's BYO machines — the ones that dialed in via `hanzo link` — with everything each host reported about itself."}},"/v1/flow/runs":{"get":{"parameters":[{"description":"Workflow is the UUID of the workflow whose run records to read. It rides\nthe query string.","in":"query","name":"workflow","required":false,"schema":{"type":"string"}}],"summary":"Runs reads one workflow's recorded runs: every component build with its result, keyed by component."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/flowRun"}}}},"summary":"Run executes one of the caller's workflows synchronously: the graph runs in the flow service and the response carries the run's session and outputs."}},"/v1/flow/status":{"get":{"summary":"Status reports whether the flow service is reachable and which version it runs."}},"/v1/flow/workflows":{"get":{"parameters":[{"description":"Page is the 1-based page of workflows to return.","in":"query","name":"page","required":false,"schema":{"type":"string"}},{"description":"Size is how many workflows one page holds (the product caps it at 100).","in":"query","name":"size","required":false,"schema":{"type":"string"}}],"summary":"Workflows lists the caller's workflows, paged."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/flowCreate"}}}},"summary":"Creates a workflow in the caller's org."}},"/v1/flow/workflows/{workflow}":{"delete":{"parameters":[{"description":"Workflow is the workflow's UUID, taken from the path.","in":"path","name":"workflow","required":true,"schema":{"type":"string"}}],"summary":"Deletes one of the caller's workflows and its runs."},"get":{"parameters":[{"description":"Workflow is the workflow's UUID, taken from the path.","in":"path","name":"workflow","required":true,"schema":{"type":"string"}}],"summary":"Workflow reads one of the caller's workflows — the full record, graph included."},"patch":{"parameters":[{"description":"Workflow is the workflow's UUID, taken from the path.","in":"path","name":"workflow","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/flowUpdate"}}}},"summary":"Patches one of the caller's workflows: name, description, graph, or the locked flag — only the stated fields move."}},"/v1/framework/doctypes":{"get":{"summary":"Returns every DocType defined in the caller's org."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocType"}}}},"summary":"Defines a DocType in the caller's org: the metadata that gives a document surface its fields, its naming rule, whether it has a submit/cancel lifecycle, and which role may do what to it."}},"/v1/framework/doctypes/{name}":{"delete":{"parameters":[{"description":"Name is the DocType's name, from the path. A name containing a space\n(\"Sales Invoice\") arrives percent-encoded and is decoded before it is\nmatched against the stored one.","example":"Task","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes a DocType and every document stored under it."},"get":{"parameters":[{"description":"Name is the DocType's name, from the path. A name containing a space\n(\"Sales Invoice\") arrives percent-encoded and is decoded before it is\nmatched against the stored one.","example":"Task","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one DocType definition — its fields, naming rule, permissions and lifecycle flags."},"put":{"parameters":[{"example":"Task","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocType"}}}},"summary":"Replaces a DocType definition wholesale (PUT semantics): the stored definition becomes the body."}},"/v1/framework/modules":{"get":{"summary":"Returns every app lane compiled into this deployment and the DocTypes each one installs."}},"/v1/framework/modules/{module}":{"get":{"parameters":[{"description":"Module is the lane's registered name (\"cms\", \"erp\"), from the path.","example":"cms","in":"path","name":"module","required":true,"schema":{"type":"string"}}],"summary":"Returns one app lane's install state for the caller's org: the DocTypes the lane declares, and which of them already exist in the org."}},"/v1/framework/modules/{module}/install":{"post":{"parameters":[{"description":"Module is the lane's registered name (\"cms\", \"erp\"), from the path.","example":"cms","in":"path","name":"module","required":true,"schema":{"type":"string"}}],"summary":"Creates an app lane's DocTypes in the caller's org."}},"/v1/framework/roles":{"get":{"summary":"Returns every (user, role) assignment in the caller's org."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleAssignment"}}}},"summary":"Grants one user one role in the caller's org — how a member gains rights on a DocType, since permissions name roles and never users."}},"/v1/framework/roles/{user}/{role}":{"delete":{"parameters":[{"description":"User is the assignee whose grant is being revoked, from the path.","example":"u_alice","in":"path","name":"user","required":true,"schema":{"type":"string"}},{"description":"Role is the role to revoke, from the path. A role name containing a space\n(\"System Manager\") arrives percent-encoded and is decoded before it is\nmatched against the stored assignment.","example":"System Manager","in":"path","name":"role","required":true,"schema":{"type":"string"}}],"summary":"Removes one (user, role) grant in the caller's org."}},"/v1/framework/summary":{"get":{"summary":"Reports how much of the DocType surface the caller's org uses: how many DocTypes it has defined, and how many documents exist across them."}},"/v1/framework/{doctype}":{"get":{"parameters":[{"description":"DocType is the DocType to list, from the path.","example":"Task","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Filters is a JSON object of equality matches, e.g. {\"priority\":\"High\"}.\nEvery key must be a field the DocType declares (or the managed name /\ndocstatus); an undeclared one is refused rather than silently ignored.","example":"{\"priority\":\"High\"}","in":"query","name":"filters","required":false,"schema":{"type":"string"}},{"description":"Fields projects the response to a subset — a JSON array [\"a\",\"b\"] or a\ncomma list \"a,b\". The envelope keys are always returned.","in":"query","name":"fields","required":false,"schema":{"type":"string"}},{"description":"OrderBy is \"<field> [asc|desc]\". Empty means most-recently-updated first.","example":"estimate asc","in":"query","name":"order_by","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned. Anything that is not a positive integer\nleaves the engine's default in place.","example":"20","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's documents of one DocType, filtered, ordered and projected by the query."},"post":{"parameters":[{"in":"path","name":"doctype","required":true,"schema":{"type":"string"}}],"summary":"Create one document of a DocType, from that DocType's own fields."}},"/v1/framework/{doctype}/{name}":{"delete":{"parameters":[{"description":"DocType is the document's DocType, from the path.","example":"Task","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Name is the document's name — its key within the DocType — from the path.\nA name containing a space arrives percent-encoded and is decoded before it\nis matched against the stored one.","example":"TASK-00001","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes one document, after its on_trash hooks agree."},"get":{"parameters":[{"description":"DocType is the document's DocType, from the path.","example":"Task","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Name is the document's name — its key within the DocType — from the path.\nA name containing a space arrives percent-encoded and is decoded before it\nis matched against the stored one.","example":"TASK-00001","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one document by name, with Password fields redacted."},"put":{"parameters":[{"in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Replace a draft document's field data wholesale."}},"/v1/framework/{doctype}/{name}/cancel":{"post":{"parameters":[{"description":"DocType is the document's DocType, from the path.","example":"Task","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Name is the document's name — its key within the DocType — from the path.\nA name containing a space arrives percent-encoded and is decoded before it\nis matched against the stored one.","example":"TASK-00001","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Moves a submitted document to cancelled (docstatus 1 → 2) after its on_cancel hooks agree."}},"/v1/framework/{doctype}/{name}/submit":{"post":{"parameters":[{"description":"DocType is the document's DocType, from the path.","example":"Task","in":"path","name":"doctype","required":true,"schema":{"type":"string"}},{"description":"Name is the document's name — its key within the DocType — from the path.\nA name containing a space arrives percent-encoded and is decoded before it\nis matched against the stored one.","example":"TASK-00001","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Moves a draft to submitted (docstatus 0 → 1) after its on_submit hooks agree."}},"/v1/functions":{"get":{"summary":"Is every serverless function the caller's org has published, each with its real 7-day rollup."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/definition"}}}},"summary":"Publishes a serverless function under the caller's org and answers 201 with it."}},"/v1/functions/deployments":{"get":{"summary":"Is what is live right now — each function's current record IS its live deployment, so this is the deployment inventory."}},"/v1/functions/metrics":{"get":{"parameters":[{"description":"Range is 1H, 6H, 24H (the default), 7D or 30D. Anything else falls back to\n24H rather than failing.","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Is the org's serverless dashboard over a window: a per-function invocation costLine and how those invocations ended."}},"/v1/functions/secrets":{"get":{"summary":"Is the NAMES of the secrets the caller org's functions mount."}},"/v1/functions/triggers":{"get":{"summary":"Is what calls the caller org's functions — one row per function."}},"/v1/functions/{name}":{"delete":{"parameters":[{"description":"Name is the function the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's functions and answers 204."},"get":{"parameters":[{"description":"Name is the function the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Is one function with everything a detail page needs in one round-trip: its definition, its 7-day rollup, its trigger, its twenty most recent invocations and the NAMES of the secrets it mounts."}},"/v1/functions/{name}/invocations":{"get":{"parameters":[{"description":"Name is the function the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Limit caps the page, defaulting to 100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is one function's past runs, newest first — each with its status, HTTP code, method, time and duration."}},"/v1/functions/{name}/invoke":{"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/invokeReq"}}}},"summary":"Runs a function and records a REAL invocation."}},"/v1/functions/{name}/logs":{"get":{"parameters":[{"description":"Name is the function the URL names.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Is the output of a function's most recent run — its error text when that run failed, else what it printed."}},"/v1/gateway/config":{"get":{"summary":"Read returns the EFFECTIVE edge policy the caller is subject to: the platform CORS allowlist and pre-auth per-IP flood cap in force, plus the caller's own authenticated rate ceiling, edge-cache TTLs and accepted-method allowlist."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Policy"}}}},"summary":"Write updates one policy scope and returns the policy in force after the write."}},"/v1/gateway/traffic":{"get":{"summary":"Report who is calling this org's API right now"}},"/v1/generate-text-to-speech-audio":{"post":{"summary":"Convert text to speech"}},"/v1/generate-text-to-speech-audio-stream":{"get":{"summary":"Convert text to speech with streaming"}},"/v1/git-webhook":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/push"}}}},"summary":"Receive a push from the forge and trigger its build"}},"/v1/git/keys":{"get":{"summary":"Returns the SSH public keys registered to the caller's org — the keys that authenticate `git clone git@<host>:<org>/<repo>.git`."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/registerKeyReq"}}}},"summary":"Registers an SSH public key so it can authenticate `git clone git@<host>:<org>/<repo>.git` for the caller's org."}},"/v1/git/keys/{id}":{"delete":{"parameters":[{"description":"ID is the key's identifier (\"gitkey_…\"), from the :id path segment.","example":"gitkey_4a1b","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a registered SSH key, scoped to the caller's org: an org can only delete its own, and a key id it does not own is not found."}},"/v1/git/repos":{"get":{"summary":"Returns the repos in the caller's scope, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createReq"}}}},"summary":"Provisions an empty bare repository in the caller's scope and returns it with its clone URLs."}},"/v1/git/repos/{name}":{"delete":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes a repo's metadata and purges its storage."},"get":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one repo with its live ref state: every branch name and the resolved HEAD commit."},"patch":{"parameters":[{"description":"Name is the repo to update, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchIn"}}}},"summary":"Flips a repo's public bit, the one mutable repo setting today."}},"/v1/git/repos/{name}/blob":{"get":{"parameters":[{"description":"Name is the repo to read, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Ref is a branch, tag or commit; empty means the repo's HEAD.","example":"main","in":"query","name":"ref","required":false,"schema":{"type":"string"}},{"description":"Path is repo-relative; empty is the tree root. Traversal is stripped.","example":"go.mod","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"summary":"Returns one file's bytes at one revision."}},"/v1/git/repos/{name}/commits":{"get":{"parameters":[{"description":"Name is the repo to read, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Ref is the branch, tag or commit to walk back from; empty means HEAD.","example":"main","in":"query","name":"ref","required":false,"schema":{"type":"string"}},{"description":"Path narrows the history to commits touching it; empty walks the whole ref.","in":"query","name":"path","required":false,"schema":{"type":"string"}},{"description":"Limit caps the page. Anything not positive means 50; the cap is 100.","example":2,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Walks a ref's history newest first, or one path's history when a path is given."}},"/v1/git/repos/{name}/files":{"get":{"parameters":[{"description":"Name is the repo to read, from the :name path segment.","example":"universe","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Ref is a branch, tag or commit; empty means the repo's HEAD.","example":"main","in":"query","name":"ref","required":false,"schema":{"type":"string"}},{"description":"Glob selects files, matched segment by segment so `*` never crosses a `/`.\n`**` matches zero or more whole segments.","example":"charts/app/values/*/*.yaml","in":"query","name":"glob","required":false,"schema":{"type":"string"}}],"summary":"Returns every file a glob selects at one revision, WITH its bytes and the revision they came from."}},"/v1/git/repos/{name}/gc":{"post":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Repacks a repo into one bitmapped pack and rewrites its commit-graph, so the next clone reuses the bitmap instead of walking the whole object graph."}},"/v1/git/repos/{name}/mirror":{"post":{"parameters":[{"description":"Name is the local repo to mirror into, from the :name path segment. It is\nCREATED on first use.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/mirrorReq"}}}},"summary":"Imports an external git repository into the caller's repo, provisioning it on first use."}},"/v1/git/repos/{name}/mirrors":{"get":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns a repo's outbound mirror targets — the downstream remotes the mirror reactor pushes to whenever a push lands here."},"post":{"parameters":[{"description":"Name is the repo whose advanced refs are pushed downstream, from the :name\npath segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/mirrorTargetReq"}}}},"summary":"Registers a downstream remote the repo's advanced refs are pushed to whenever a push lands here."}},"/v1/git/repos/{name}/mirrors/{id}":{"delete":{"parameters":[{"description":"Name is the repo, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"ID is the row to remove, from the :id path segment.","example":"mir_2d90","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one outbound mirror target; later pushes stop being forwarded to it."}},"/v1/git/repos/{name}/pulls":{"get":{"parameters":[{"description":"Name is the repo, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"State narrows the list to \"open\" or \"merged\". Omit it for every proposal.","example":"open","in":"query","name":"state","required":false,"schema":{"type":"string"}}],"summary":"Returns a repo's pull requests, newest number first — what is waiting to be reviewed, and what has already landed."},"post":{"parameters":[{"description":"Name is the repo the proposal belongs to, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/openReq"}}}},"summary":"Proposes a branch for merging and returns it with its number."}},"/v1/git/repos/{name}/pulls/{number}":{"get":{"parameters":[{"description":"Name is the repo, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Number is the proposal's per-repo number, from the :number path segment.","example":4,"in":"path","name":"number","required":true,"schema":{"type":"integer"}}],"summary":"Returns one pull request by its per-repo number."}},"/v1/git/repos/{name}/pulls/{number}/merge":{"post":{"parameters":[{"description":"Name is the repo, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Number is the proposal's per-repo number, from the :number path segment.","example":4,"in":"path","name":"number","required":true,"schema":{"type":"integer"}}],"summary":"Merges an open pull request by FAST-FORWARDING base to head, and answers the proposal in its merged state with the revision base now points at."}},"/v1/git/repos/{name}/push":{"post":{"parameters":[{"description":"Name is the repo to push into, from the :name path segment. It is CREATED\non first push if it does not exist.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pushReq"}}}},"summary":"Lands a set of files as one commit without a git client — the hanzo.app builder's push."}},"/v1/git/repos/{name}/readme":{"get":{"parameters":[{"description":"Name is the repo to read, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Ref is a branch, tag or commit; empty means the repo's HEAD.","example":"main","in":"query","name":"ref","required":false,"schema":{"type":"string"}}],"summary":"Returns the README at the tree root as plain text — unrendered, so the caller decides how to present it."}},"/v1/git/repos/{name}/refs":{"get":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Lists a repo's branches, tags and default branch — what a branch picker needs in one call."}},"/v1/git/repos/{name}/subscriptions":{"get":{"parameters":[{"description":"Name is the repo's org-unique handle, from the :name path segment. A\ntrailing \".git\" is stripped.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns a repo's Slack subscriptions — which channels the lifecycle notifier posts this repo's push and deploy events to."},"post":{"parameters":[{"description":"Name is the repo to subscribe, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/subscribeReq"}}}},"summary":"Binds a Slack channel to a repo, so the lifecycle notifier posts that repo's push and deploy events there."}},"/v1/git/repos/{name}/subscriptions/{id}":{"delete":{"parameters":[{"description":"Name is the repo, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"ID is the row to remove, from the :id path segment.","example":"sub_7c2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one Slack subscription from a repo; the notifier stops posting that repo's events to that channel."}},"/v1/git/repos/{name}/tree":{"get":{"parameters":[{"description":"Name is the repo to read, from the :name path segment.","example":"widgets","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Ref is a branch, tag or commit; empty means the repo's HEAD.","example":"main","in":"query","name":"ref","required":false,"schema":{"type":"string"}},{"description":"Path is repo-relative; empty is the tree root. Traversal is stripped.","example":"cmd","in":"query","name":"path","required":false,"schema":{"type":"string"}}],"summary":"Lists the immediate children of one directory at one revision, directories before files."}},"/v1/git/usage":{"get":{"summary":"Returns per-repo and total storage bytes for the caller's org — the queryable, per-tenant number commerce and o11y meter on."}},"/v1/git/webhook":{"post":{"summary":"Retired — forge pushes build via platform.hanzo.ai"}},"/v1/git/zap/createRepo":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/zapProcReq"}}}},"summary":"Create a repository over the ZAP transport"}},"/v1/git/zap/deleteRepo":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/zapProcReq"}}}},"summary":"Delete a repository over the ZAP transport"}},"/v1/git/zap/getRepo":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/zapProcReq"}}}},"summary":"Read one repository over the ZAP transport"}},"/v1/git/zap/listRepos":{"post":{"summary":"List your repositories over the ZAP transport"}},"/v1/git/zap/usage":{"post":{"summary":"Report your org's git storage footprint over the ZAP transport"}},"/v1/git/{org}/{project}/{repo}/git-receive-pack":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"project","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Accept a push, and turn it into a build"}},"/v1/git/{org}/{project}/{repo}/git-upload-pack":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"project","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Serve a clone or fetch"}},"/v1/git/{org}/{project}/{repo}/info/refs":{"get":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"project","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Advertise a repository's refs to a git client"}},"/v1/git/{org}/{repo}/git-receive-pack":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Accept a push, and turn it into a build"}},"/v1/git/{org}/{repo}/git-upload-pack":{"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Serve a clone or fetch"}},"/v1/git/{org}/{repo}/info/refs":{"get":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}},{"in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Advertise a repository's refs to a git client"}},"/v1/gpus":{"get":{"summary":"Returns one row per physical accelerator the caller's org has, derived from its real GPU machines (the size slug says how many cards a node holds) and from the accelerators BYO workers report through nvidia-smi."}},"/v1/gpus/alerts":{"get":{"summary":"Is an HONEST empty surface: Visor exposes no GPU alert inventory, so this returns [] rather than fabricating alerts."}},"/v1/guide":{"get":{"summary":"Overview returns the caller org's launch journey: the active curriculum's version and title, every step with its state, whether it is available, what blocks it and whether the Business AI can run it, the done/total/percent progress with the next step to take, and the org's analytics funnel folded in."}},"/v1/guide/actions":{"get":{"summary":"Returns the caller org's Business AI action ledger, most recent first: every \"do it for me\" tool call, the arguments it ran with, its result and whether it succeeded."}},"/v1/guide/analytics":{"get":{"summary":"Analytics returns the caller org's funnel from the analytics lens plus the GTM recommendations derived from it."}},"/v1/guide/blueprint":{"get":{"summary":"Returns the FULL authored brand blueprint — every principle, section, step, strategy and template WITH its enabled flag made explicit, including the disabled items the org-facing reads never see — plus the active version number, the brand key it is stored under and the item counts."},"put":{"summary":"Publish a new version of the brand blueprint"}},"/v1/guide/blueprint/versions":{"get":{"summary":"Returns the brand blueprint's version history — every stored version's number and edit time, newest first — which is the point-in-time-recovery and audit trail behind the authoring plane."}},"/v1/guide/blueprint/{collection}/{id}":{"patch":{"parameters":[{"in":"path","name":"collection","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Edit — or retire — one item of the brand blueprint"}},"/v1/guide/chat":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/chatRequest"}}}},"summary":"Chat answers a founder's question about their launch journey as the Business AI coach: it grounds the reply in the org's REAL progress, its ranked available quests and its analytics funnel, and returns those candidate quests alongside so the caller can act on one."}},"/v1/guide/curriculum":{"delete":{"summary":"Clears the caller org's curriculum override and returns the journey it falls back to — the brand blueprint, else the embedded fixture."},"get":{"summary":"Returns the journey the caller's org is actually running, and whether it comes from the org's OWN override (custom) or from the platform default — the brand blueprint, else the embedded fixture."},"put":{"summary":"Replace your org's journey with a curriculum you author"}},"/v1/guide/profile":{"get":{"summary":"Profile returns the caller org's OBSERVED growth profile — the signal set, the classified growth stage, and the org's own key metrics."}},"/v1/guide/steps/{id}/do":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Have the Business AI actually do the step for you"}},"/v1/guide/steps/{id}/done":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Mark a step of your org's journey finished"}},"/v1/guide/steps/{id}/reset":{"post":{"parameters":[{"description":"ID is the step's id, as it appears in the journey (e.g. \"gsuite\").","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one step of the caller org's journey to todo — clearing a manual mark or a skip — and returns the refreshed journey."}},"/v1/guide/steps/{id}/skip":{"post":{"parameters":[{"description":"ID is the step's id, as it appears in the journey (e.g. \"gsuite\").","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Marks one step of the caller org's journey skipped and returns the refreshed journey."}},"/v1/guide/steps/{id}/start":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Mark a step of your org's journey started"}},"/v1/guide/strategies":{"get":{"parameters":[{"description":"Category filters to tactics in exactly this category.","example":"viral-coefficient","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Stage previews the corpus at a chosen growth stage\n(research|formed|launched|activated|scaling), overriding the org's observed\none. An unknown value is ignored and the observed stage stands.","example":"scaling","in":"query","name":"stage","required":false,"schema":{"type":"string"}},{"description":"Workload filters to tactics with exactly this workload.","in":"query","name":"workload","required":false,"schema":{"type":"string"}}],"summary":"Strategies returns the ENABLED tactics corpus for the caller's org: the tactics library narrowed by the explicit category/workload filters AND by the org's OBSERVED growth stage and capability signals (a tactic's tags are preconditions, so it surfaces only once the org can act on it)."}},"/v1/guide/suggest":{"get":{"summary":"Suggest returns the caller org's next-best quests: the available, non-terminal steps of its journey ranked by how much downstream work each unblocks, each with the grounded reason it is a good next move and whether the Business AI can run it, plus the org's funnel and the GTM recommendations derived from it."}},"/v1/health":{"get":{"summary":"Check if the system is live"}},"/v1/help/articles":{"get":{"parameters":[{"description":"Category narrows the list to one knowledge-base section, matched against\nthe article's category by exact name. Empty lists every section.","in":"query","name":"category","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many articles are returned. Anything that is not a positive\ninteger uses 50, and values above 200 are clamped to 200.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the public knowledge base: the help center's Published, publicly-visible articles as cards."}},"/v1/help/articles/{slug}":{"get":{"parameters":[{"description":"Slug is the article's public identifier, from the path. It IS the document\nname in the help center's store.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns one public article by slug, with its body."}},"/v1/help/categories":{"get":{"summary":"Returns the knowledge-base sections for the public center's navigation — but ONLY the sections that front at least one Published, public article, so an internal (agent-only) category name or description never leaks."}},"/v1/help/tickets":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/helpTicketIntake"}}}},"summary":"Files a customer support ticket into the public help center."}},"/v1/iam/.well-known/jwks":{"get":{"summary":"Publishes the public keys that verify the tokens issued here — the one URL you point a service at so it can check a token itself, offline, without calling back and without holding any secret of ours."}},"/v1/iam/.well-known/oauth-authorization-server":{"get":{"summary":"Returns the OpenID Connect discovery document — the one URL you point a standards-compliant client at so it can find every other endpoint on its own, instead of you configuring them by hand."}},"/v1/iam/.well-known/openid-configuration":{"get":{"summary":"Returns the OpenID Connect discovery document — the one URL you point a standards-compliant client at so it can find every other endpoint on its own, instead of you configuring them by hand."}},"/v1/iam/account":{"get":{"summary":"Returns the signed-in person's own account and the organization they belong to — what a console reads to draw the account menu."}},"/v1/iam/add-membership":{"post":{"summary":"Lets a person or an application act in an organization."}},"/v1/iam/admin/applications/upsert":{"post":{"parameters":[{"in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.registration"}}}},"summary":"Creates an application or updates it in place, so a deployment can declare the applications it needs and run the same declaration on every environment and on every redeploy."}},"/v1/iam/admin/provision":{"post":{"summary":"Sets up an account on someone's behalf — the same onboarding a person gets themselves, driven by one of your own services instead of by them."}},"/v1/iam/admin/users/upsert":{"post":{"parameters":[{"in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.person"}}}},"summary":"Creates a person or updates them in place, so a deployment can declare the accounts it needs and re-run that declaration safely."}},"/v1/iam/applications":{"get":{"parameters":[{"in":"query","name":"owner","required":true,"schema":{"type":"string"}}],"summary":"Returns the applications in one organization, newest first — each product or site your people sign in to, with the sign-in methods and redirect URIs it allows."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Application"}}}},"summary":"Registers an application in your organization — one product or site your people sign in to, with its own client credentials, sign-in methods and allowed redirect URIs."}},"/v1/iam/applications/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.ApplicationRef"}}}},"summary":"Removes an application."}},"/v1/iam/applications/get":{"get":{"parameters":[{"in":"query","name":"owner","required":true,"schema":{"type":"string"}},{"in":"query","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one application: its sign-in methods, its allowed redirect URIs and the client credentials your integration authenticates with."}},"/v1/iam/applications/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Application"}}}},"summary":"Changes an application's display, its sign-in methods and the redirect URIs it may return to — the call that makes login work from a new host."}},"/v1/iam/audit-logs":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's audit trail, newest first — who did what, when, and from where."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.auditlogs.Input"}}}},"summary":"Records an audit entry, so activity from your own systems lands in the same trail as everything the Hanzo Cloud records for you."}},"/v1/iam/audit-logs/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Ref"}}}},"summary":"Removes an audit entry."}},"/v1/iam/audit-logs/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Ref"}}}},"summary":"Returns one audit entry in full: the action, the person or key behind it, and the request it came in on."}},"/v1/iam/audit-logs/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.auditlogs.Input"}}}},"summary":"Corrects an audit entry."}},"/v1/iam/auth/application":{"get":{"parameters":[{"description":"ClientId is the application's OAuth client id — the one field that selects\nwhich login screen this is.","in":"query","name":"clientId","required":false,"schema":{"type":"string"}},{"description":"ResponseType is the OAuth response type the screen will ask for. Only \"code\"\nis served; anything else is refused here rather than at the authorize leg,\nwhere the person has already typed a password.","in":"query","name":"responseType","required":false,"schema":{"type":"string"}}],"summary":"Returns everything a login screen needs to draw itself for one application: its branding, and each sign-in method it offers with the provider details that method needs."}},"/v1/iam/auth/methods":{"get":{"parameters":[{"description":"ClientId is the application's OAuth client id.","in":"query","name":"clientId","required":false,"schema":{"type":"string"}}],"summary":"Returns the sign-in methods one application actually has switched on, so a login screen can render the right buttons for it without you hard-coding a list that drifts the moment you add a provider."}},"/v1/iam/certs":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's signing certificates, newest first — the keys the tokens your applications verify are signed with."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Cert"}}}},"summary":"Adds a signing certificate your applications can verify tokens against — the call you make to bring your own key, or to stage the next one before a rotation."}},"/v1/iam/certs/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.certs.Ref"}}}},"summary":"Removes a signing certificate."}},"/v1/iam/certs/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.certs.Ref"}}}},"summary":"Returns one signing certificate — its algorithm, its validity window and its public half."}},"/v1/iam/certs/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Cert"}}}},"summary":"Changes a signing certificate's settings."}},"/v1/iam/consent":{"get":{"summary":"Returns the calling person's own privacy and communication choices."},"put":{"summary":"Records the calling person's privacy and communication choices."}},"/v1/iam/delete-membership":{"post":{"summary":"Takes away a person's or an application's right to act in an organization."}},"/v1/iam/delete-mfa":{"post":{"summary":"Turns a factor off, so sign-in stops asking for it."}},"/v1/iam/get-account":{"get":{"summary":"Returns the signed-in person's own account and the organization they belong to — what a console reads to draw the account menu."}},"/v1/iam/get-app-login":{"get":{"parameters":[{"description":"ClientId is the application's OAuth client id — the one field that selects\nwhich login screen this is.","in":"query","name":"clientId","required":false,"schema":{"type":"string"}},{"description":"ResponseType is the OAuth response type the screen will ask for. Only \"code\"\nis served; anything else is refused here rather than at the authorize leg,\nwhere the person has already typed a password.","in":"query","name":"responseType","required":false,"schema":{"type":"string"}}],"summary":"Returns everything a login screen needs to draw itself for one application: its branding, and each sign-in method it offers with the provider details that method needs."}},"/v1/iam/get-application":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-applications":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-cert":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-certs":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-global-users":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-invitations":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-memberships":{"get":{"parameters":[{"description":"User is \"<homeOrg>/<username>\" — which organizations that identity may act in.","in":"query","name":"user","required":false,"schema":{"type":"string"}},{"description":"Org is an organization — who may act in it.","in":"query","name":"org","required":false,"schema":{"type":"string"}}],"summary":"Answers either question about who belongs where: which organizations one person can act in, or who can act in one organization."}},"/v1/iam/get-organization":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-organization-projects":{"get":{"summary":"Returns one organization's projects — what a scope switcher lists so somebody can move between them."}},"/v1/iam/get-organization-workspaces":{"get":{"summary":"Returns one organization's workspaces — what a scope switcher lists so somebody can move between them."}},"/v1/iam/get-organizations":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-permission":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-permissions":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-provider":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-providers":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-records":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-role":{"get":{"summary":"Reads one record — the older spelling of the single reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-roles":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/get-user":{"get":{"summary":"Reads one person, two ways."}},"/v1/iam/get-users":{"get":{"summary":"Lists one kind of record in your organization — the older spelling of the collection reads on the REST surface, over the same data and the same permissions."}},"/v1/iam/invitations":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's invitations, newest first — who has been asked to join, on what terms, and how many seats each invitation still has left."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.invitations.Input"}}}},"summary":"Issues an invitation to join your organization — the code or link a new member redeems, with the role they arrive holding and the date it stops working."}},"/v1/iam/invitations/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.invitations.Ref"}}}},"summary":"Withdraws an invitation."}},"/v1/iam/invitations/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.invitations.Ref"}}}},"summary":"Returns one invitation: who it is for, what it grants on acceptance, and when it expires."}},"/v1/iam/invitations/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.invitations.Input"}}}},"summary":"Changes an invitation's terms — the role it grants, how many may redeem it, or when it expires."}},"/v1/iam/issue-user-token":{"post":{"summary":"Mints an access token for the `?id=<owner>/<name>` target user (optional `?aud=` resource, RFC 8707), issued by the authenticated + allow-listed confidential client."}},"/v1/iam/keys":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's API keys, newest first — what each is called, what it may reach, and its publishable half."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Key"}}}},"summary":"Issues an API key."}},"/v1/iam/keys/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.keys.Ref"}}}},"summary":"Revokes an API key."}},"/v1/iam/keys/get":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"in":"query","name":"name","required":false,"schema":{"type":"string"}}],"summary":"Returns one API key: what it is called, what it may reach, and when it was issued."}},"/v1/iam/keys/mint":{"post":{"summary":"(re)generates the target user's key of the requested TYPE and returns it once, over the shared authorizeMinter + mintTarget seam."}},"/v1/iam/keys/revoke":{"post":{"summary":"Clears the target user's key of the requested TYPE (immediate revoke)."}},"/v1/iam/keys/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Key"}}}},"summary":"Changes what a key is called or what it may reach."}},"/v1/iam/link":{"post":{"summary":"Starts connecting another sign-in identity to the account you are already signed in as."}},"/v1/iam/linked-accounts":{"get":{"summary":"Returns the sign-in identities linked to the calling person's account — every provider they can currently sign in with."}},"/v1/iam/login":{"post":{"summary":"Signs a person in with the credential they typed, and — when the request is part of an OAuth flow — hands back the one-time code that finishes it."}},"/v1/iam/memberships":{"get":{"parameters":[{"description":"User is \"<homeOrg>/<username>\" — which organizations that identity may act in.","in":"query","name":"user","required":false,"schema":{"type":"string"}},{"description":"Org is an organization — who may act in it.","in":"query","name":"org","required":false,"schema":{"type":"string"}}],"summary":"Answers either question about who belongs where: which organizations one person can act in, or who can act in one organization."},"post":{"summary":"Lets a person or an application act in an organization."}},"/v1/iam/mfa/disable":{"post":{"summary":"Turns a factor off, so sign-in stops asking for it."}},"/v1/iam/mfa/preferred":{"post":{"summary":"Picks which second factor an account is asked for first when it has more than one."}},"/v1/iam/mfa/setup/enable":{"post":{"summary":"Finishes the enrolment: from here the account's sign-ins ask for this factor."}},"/v1/iam/mfa/setup/initiate":{"post":{"summary":"Starts enrolling a factor and hands over whatever the person needs to prove they hold it: app a fresh secret and the otpauth:// URL to render as a QR code sms a code texted to the number on the account email a code mailed to the address on the account Nothing is switched on yet, so abandoning this step leaves the account exactly as it was."}},"/v1/iam/mint-user-keys":{"post":{"summary":"(re)generates the target user's key of the requested TYPE and returns it once, over the shared authorizeMinter + mintTarget seam."}},"/v1/iam/oauth/authorize":{"get":{"summary":"Starts a sign-in — the address you send a browser to, and the beginning of every OAuth and OpenID Connect flow."},"post":{"summary":"Starts a sign-in — the address you send a browser to, and the beginning of every OAuth and OpenID Connect flow."}},"/v1/iam/oauth/callback":{"get":{"summary":"Completes the round-trip: it resolves and burns the single-use transaction (checking expiry + browser binding), exchanges and verifies the IdP response, links or provisions the local user, and mints the iam authorization code the relying party expects — then redirects to the original redirect_uri with code + state."}},"/v1/iam/oauth/device":{"post":{"summary":"Starts a sign-in on a device with no browser and no keyboard — a TV, a CLI, a headless box."}},"/v1/iam/oauth/device/info":{"post":{"summary":"Answers \"what am I approving?\" for a pending device code."}},"/v1/iam/oauth/federation/mfa":{"post":{"summary":"Completes a sign-in that came in through another identity provider and still owes a second factor."}},"/v1/iam/oauth/introspect":{"post":{"summary":"Answers whether an access token is still good, and what it is good for — the check a resource server of yours makes before honouring a token it did not mint."}},"/v1/iam/oauth/logout":{"get":{"summary":"Ends a sign-in and sends the browser somewhere sensible."},"post":{"summary":"Ends a sign-in and sends the browser somewhere sensible."}},"/v1/iam/oauth/revoke":{"post":{"summary":"Retires a token before it expires — what you call when someone signs out or a credential may have leaked."}},"/v1/iam/oauth/token":{"post":{"summary":"Exchanges what your application is holding for the tokens it needs — the one-time code from a finished sign-in, a refresh token, or your own client credentials when the caller is a program rather than a person."}},"/v1/iam/oauth/userinfo":{"get":{"summary":"Returns the profile claims for whoever the access token belongs to — the standard OpenID Connect way to find out who is calling you without your application storing anything itself."},"post":{"summary":"Returns the profile claims for whoever the access token belongs to — the standard OpenID Connect way to find out who is calling you without your application storing anything itself."}},"/v1/iam/onboard":{"post":{"summary":"Finishes setting up the account of whoever is calling — it creates their organization if they have none and puts them in it, so a person who has just signed up lands somewhere they can work."}},"/v1/iam/organizations":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns the organizations you can see, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.CreateOrganizationInput"}}}},"summary":"Makes a new organization — the account your users, applications, roles, projects and workspaces are all named inside."}},"/v1/iam/organizations/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.DeleteOrganizationInput"}}}},"summary":"Removes an organization and everything named inside it."}},"/v1/iam/organizations/get":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"in":"query","name":"name","required":false,"schema":{"type":"string"}}],"summary":"Returns one organization: its display, its defaults and the sign-in rules everyone in it inherits."}},"/v1/iam/organizations/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.UpdateOrganizationInput"}}}},"summary":"Changes an organization's display, its defaults and the sign-in rules everyone in it inherits."}},"/v1/iam/password":{"put":{"parameters":[{"in":"header","name":"Cookie","required":false,"schema":{"type":"string"}},{"in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.passwordBody"}}}},"summary":"Replaces the calling person's password."}},"/v1/iam/permissions":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns the permissions in one organization, newest first — each one a grant saying which people or roles may do what, and to which resources."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Permission"}}}},"summary":"Grants a permission — the call that gives a person or a role the ability to do something."}},"/v1/iam/permissions/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.permission.Ref"}}}},"summary":"Revokes a permission."}},"/v1/iam/permissions/get":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"in":"query","name":"name","required":false,"schema":{"type":"string"}}],"summary":"Returns one permission: who it grants to, what it allows, and the resources it covers."}},"/v1/iam/permissions/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Permission"}}}},"summary":"Changes who a permission grants to, what it allows, or the resources it covers."}},"/v1/iam/preferences":{"post":{"summary":"Saves the calling person's own settings and returns the full set afterwards."}},"/v1/iam/projects":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's projects, newest first — the scope people pick between when their work is separated by product or client rather than by team."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Input"}}}},"summary":"Makes a project inside your organization — the scope people pick between when their work is separated by product or client rather than by team."}},"/v1/iam/projects/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.projects.Ref"}}}},"summary":"Removes a project."}},"/v1/iam/projects/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.projects.Ref"}}}},"summary":"Returns one project: what it is called and how it is set up."}},"/v1/iam/projects/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Input"}}}},"summary":"Changes a project's settings."}},"/v1/iam/providers":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's providers, newest first — the identity providers your people sign in with, and the senders and connectors your applications go through."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Provider"}}}},"summary":"Adds an identity provider your people can sign in with, or a service your applications send through — a social or enterprise login, an email or SMS sender, a storage or payment connector."}},"/v1/iam/providers/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.providerKey"}}}},"summary":"Removes a provider."}},"/v1/iam/providers/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.providerKey"}}}},"summary":"Returns one provider: what it connects to and how it is configured."}},"/v1/iam/providers/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Provider"}}}},"summary":"Changes a provider's settings or rotates the credentials it holds."}},"/v1/iam/registry/jwks":{"get":{"summary":"Publishes the public key your registry uses to verify the tokens issued above — the one URL to configure so the registry trusts logins without holding any secret of its own."}},"/v1/iam/registry/token":{"get":{"summary":"Signs a container client in to your registry."},"post":{"summary":"Signs a container client in to your registry."}},"/v1/iam/resolve-key":{"get":{"summary":"Answers which organization a PUBLISHABLE key belongs to — what a service of yours calls to attribute a request that arrived carrying a key shipped in a browser."}},"/v1/iam/revoke-user-keys":{"post":{"summary":"Clears the target user's key of the requested TYPE (immediate revoke)."}},"/v1/iam/roles":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's roles, newest first — each a named group of people that permissions are granted to."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.roles.Input"}}}},"summary":"Makes a role — a named group of people that permissions are granted to."}},"/v1/iam/roles/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.roles.Ref"}}}},"summary":"Removes a role."}},"/v1/iam/roles/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.roles.Ref"}}}},"summary":"Returns one role: who is in it, and the roles it includes."}},"/v1/iam/roles/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.roles.Input"}}}},"summary":"Changes who is in a role, or which roles it includes."}},"/v1/iam/scim/v2/ResourceTypes":{"get":{"summary":"Returns the kinds of record this directory provisions and the address of each, so your identity provider discovers them rather than having them configured by hand."}},"/v1/iam/scim/v2/ResourceTypes/{name}":{"get":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one provisionable record kind in full."}},"/v1/iam/scim/v2/Schemas":{"get":{"summary":"Returns the attribute definitions this directory understands, so your identity provider knows which fields it may send and what they mean before it sends any."}},"/v1/iam/scim/v2/Schemas/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one attribute definition in full."}},"/v1/iam/scim/v2/ServiceProviderConfig":{"get":{"summary":"Tells your identity provider which parts of SCIM this directory supports, so it configures itself instead of you filling in a form."}},"/v1/iam/scim/v2/Users":{"get":{"summary":"Returns the people in your organization to your identity provider, in the standard SCIM shape, so an IdP can reconcile its directory against ours."},"post":{"summary":"Provisions a person from your identity provider — how a new hire gets an account here automatically when they are added over there."}},"/v1/iam/scim/v2/Users/{owner}/{name}":{"delete":{"parameters":[{"in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deprovisions a person — how removing someone in your identity provider removes their access here."},"get":{"parameters":[{"in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one person in the standard SCIM shape."},"patch":{"parameters":[{"in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Applies a partial change from your identity provider — one attribute moved, not the whole record resent."},"put":{"parameters":[{"in":"path","name":"owner","required":true,"schema":{"type":"string"}},{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Overwrites a person's SCIM attributes with what your identity provider sends — how a change made there lands here."}},"/v1/iam/send-verification-code":{"post":{"summary":"Validates the request and asks otp to get a code to the person."}},"/v1/iam/service-accounts":{"get":{"parameters":[{"description":"Organization is the organization whose service accounts to list. Required.","in":"query","name":"organization","required":false,"schema":{"type":"string"}},{"description":"P is the 1-indexed page to return. Paging takes both p and pageSize —\nleave either out, or send something that is not a number, and the whole\nlist comes back.","in":"query","name":"p","required":false,"schema":{"type":"integer"}},{"description":"Size is how many accounts a page holds.","in":"query","name":"pageSize","required":false,"schema":{"type":"integer"}}],"summary":"Returns your organization's service accounts — what each is called and when it was created."},"post":{"summary":"Makes a service account — an identity for a program rather than a person, for a script, a bot or a deployment that has to authenticate on its own."}},"/v1/iam/service-accounts/{name}":{"delete":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Serves DELETE /v1/iam/service-accounts/:name."}},"/v1/iam/service-accounts/{name}/keys":{"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Serves POST /v1/iam/service-accounts/:name/keys: mint a fresh key, invalidating the prior one, and return the new raw secret exactly once."}},"/v1/iam/sessions/create":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.CreateSessionIn"}}}},"summary":"Records a sign-in."}},"/v1/iam/sessions/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.SessionRef"}}}},"summary":"Signs a person out of one application — the session ends and every browser carrying it stops being authenticated."}},"/v1/iam/sessions/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.SessionRef"}}}},"summary":"Returns one person's session in one application — when it began and which browsers or devices are still carrying it."}},"/v1/iam/sessions/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.ListSessionsIn"}}}},"summary":"Returns who is currently signed in to your organization, newest first, and can be narrowed to one person or one application."}},"/v1/iam/sessions/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.UpdateSessionIn"}}}},"summary":"Replaces the set of browsers a session covers — signing out the ones you leave off while the session itself stays live."}},"/v1/iam/set-preferred-mfa":{"post":{"summary":"Picks which second factor an account is asked for first when it has more than one."}},"/v1/iam/signin":{"post":{"summary":"Completes a sign-in: it exchanges the one-time code your application was handed at the end of the login flow for a live session, and returns the signed-in account."}},"/v1/iam/signup":{"post":{"summary":"Creates an account from the sign-up form and applies the application's own sign-up rules — whether self-service registration is open at all, and which fields it requires."}},"/v1/iam/tokens":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}},{"in":"query","name":"organization","required":false,"schema":{"type":"string"}}],"summary":"Returns the access tokens issued in your organization, newest first, and can be narrowed to one organization."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Token"}}}},"summary":"Records an access token — the credential an application or integration presents on a caller's behalf."}},"/v1/iam/tokens/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.tokenKey"}}}},"summary":"Revokes an access token."}},"/v1/iam/tokens/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.tokenKey"}}}},"summary":"Returns one access token: who and what it was issued to, and when it expires."}},"/v1/iam/tokens/issue":{"post":{"summary":"Mints an access token for the `?id=<owner>/<name>` target user (optional `?aud=` resource, RFC 8707), issued by the authenticated + allow-listed confidential client."}},"/v1/iam/tokens/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.Token"}}}},"summary":"Changes an access token's scope or expiry."}},"/v1/iam/unlink":{"post":{"summary":"Disconnects one sign-in identity from an account, so that provider can no longer be used to sign in as that person."}},"/v1/iam/update-preferences":{"post":{"summary":"Saves the calling person's own settings and returns the full set afterwards."}},"/v1/iam/users":{"get":{"parameters":[{"in":"query","name":"owner","required":true,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns a page of the people in your organization, with the total so you can page through the rest."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.CreateInput"}}}},"summary":"Adds a person to your organization."}},"/v1/iam/users/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.users.Ref"}}}},"summary":"Removes a person from your organization."}},"/v1/iam/users/get":{"get":{"parameters":[{"in":"query","name":"owner","required":true,"schema":{"type":"string"}},{"in":"query","name":"name","required":false,"schema":{"type":"string"}},{"in":"query","name":"email","required":false,"schema":{"type":"string"}}],"summary":"Returns one person in your organization, addressed by their username or by their email address."}},"/v1/iam/users/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.UpdateInput"}}}},"summary":"Changes a person's profile, their roles, or the credentials they sign in with."}},"/v1/iam/verification-codes":{"post":{"summary":"Validates the request and asks otp to get a code to the person."}},"/v1/iam/web3/nonce":{"get":{"summary":"Starts a wallet sign-in: it returns a one-time challenge for the wallet to sign."}},"/v1/iam/web3/verify":{"post":{"summary":"Completes a wallet sign-in: it verifies the signed challenge and, if it holds, signs the wallet's owner in."}},"/v1/iam/webauthn-credentials":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns the passkeys and security keys registered in your organization, newest first — which device each belongs to and when it was last used."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.WebauthnCredential"}}}},"summary":"Registers a passkey or security key for a person, so they can sign in with their device instead of a password."}},"/v1/iam/webauthn-credentials/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.webauthnCredentialKey"}}}},"summary":"Removes a passkey or security key — what you call when a device is lost."}},"/v1/iam/webauthn-credentials/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.webauthnCredentialKey"}}}},"summary":"Returns one passkey or security key: whose it is, what device it lives on, and when it was registered."}},"/v1/iam/webauthn-credentials/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.WebauthnCredential"}}}},"summary":"Renames a registered passkey or security key, so a person can tell their devices apart."}},"/v1/iam/whoami":{"get":{"summary":"Tells you who the current caller is — the lightweight check a page makes on load to decide whether to render signed-in or signed-out."}},"/v1/iam/workspaces":{"get":{"parameters":[{"in":"query","name":"owner","required":false,"schema":{"type":"string"}}],"summary":"Returns your organization's workspaces, newest first — the scope a team works in, alongside projects rather than instead of them."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.workspaces.Input"}}}},"summary":"Makes a workspace inside your organization — the scope a team works in, alongside projects rather than instead of them."}},"/v1/iam/workspaces/delete":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.workspaces.Ref"}}}},"summary":"Removes a workspace."}},"/v1/iam/workspaces/get":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.workspaces.Ref"}}}},"summary":"Returns one workspace: what it is called and how it is set up."}},"/v1/iam/workspaces/update":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/iam.workspaces.Input"}}}},"summary":"Changes a workspace's settings."}},"/v1/images/generations":{"post":{"summary":"Implements POST /v1/images/generations (OpenAI-compatible)."}},"/v1/index/health":{"get":{"summary":"Report whether the search plane can serve"}},"/v1/index/indexes":{"get":{"summary":"List the indexes your org holds"},"post":{"summary":"Create an index"}},"/v1/index/indexes/{uid}":{"delete":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Delete an index and everything in it"},"get":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Read one index's definition"}},"/v1/index/indexes/{uid}/documents":{"get":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Page through the documents in an index"},"post":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Add or replace documents in an index"},"put":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Add or update documents in an index"}},"/v1/index/indexes/{uid}/documents/delete-batch":{"post":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Delete many documents by primary key in one call"}},"/v1/index/indexes/{uid}/documents/{id}":{"delete":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Delete one document by its primary key"},"get":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one document by its primary key"}},"/v1/index/indexes/{uid}/search":{"post":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Search an index, forgiving typos"}},"/v1/index/indexes/{uid}/settings":{"get":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Read an index's filterable attributes"},"patch":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Set which attributes an index can be filtered on"}},"/v1/index/stats":{"get":{"summary":"Count the documents in each of your indexes"}},"/v1/index/tasks/{uid}":{"get":{"parameters":[{"in":"path","name":"uid","required":true,"schema":{"type":"string"}}],"summary":"Check a write task, which has already finished"}},"/v1/index/version":{"get":{"summary":"Identify the search implementation answering"}},"/v1/indexers":{"get":{"summary":"Reports the deployment's chain indexer(s) and how far each has indexed."}},"/v1/ingress/middlewares":{"get":{"summary":"Returns every edge transform the caller's org has configured, ordered by id."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Middleware"}}}},"summary":"Creates or replaces one edge transform and hot-applies it."}},"/v1/ingress/middlewares/{id}":{"delete":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"strip-api","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's edge transforms and hot-applies the change."},"get":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"strip-api","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's edge transforms by id."},"put":{"parameters":[{"description":"ID identifies the transform within the org: [A-Za-z0-9-_.], at most 128\nchars. A create that omits it gets a generated one. Routes reference it by\nthis id.","example":"strip-api","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Middleware"}}}},"summary":"Creates or replaces one edge transform and hot-applies it."}},"/v1/ingress/routes":{"get":{"summary":"Returns every routing rule the caller's org has configured, ordered by id."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Route"}}}},"summary":"Creates or replaces one routing rule and hot-applies the new table — there is no config file and no restart."}},"/v1/ingress/routes/{id}":{"delete":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"web","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's routing rules and hot-applies the shrunken table, freeing its host for another claim."},"get":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"a1b2c3d4e5f60718","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's routing rules by id."},"put":{"parameters":[{"description":"ID identifies the route within the org: [A-Za-z0-9-_.], at most 128 chars.\nA create that omits it gets a generated one.","example":"web","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Route"}}}},"summary":"Creates or replaces one routing rule and hot-applies the new table — there is no config file and no restart."}},"/v1/ingress/services":{"get":{"summary":"Returns every backend pool the caller's org has configured, ordered by id."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upstream"}}}},"summary":"Creates or replaces one backend pool and hot-applies it."}},"/v1/ingress/services/{id}":{"delete":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"app-pool","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's backend pools and hot-applies the change."},"get":{"parameters":[{"description":"ID is the object to act on, from the path.","example":"app-pool","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's backend pools by id."},"put":{"parameters":[{"description":"ID identifies the pool within the org: [A-Za-z0-9-_.], at most 128 chars.\nA create that omits it gets a generated one. Routes reference it by this id.","example":"app-pool","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upstream"}}}},"summary":"Creates or replaces one backend pool and hot-applies it."}},"/v1/ingress/status":{"get":{"summary":"Status reports the ingress edge's live posture: the role this instance runs in (app or edge), whether its listeners are bound and on which addresses, the ACME posture (staging flag and certificate cache directory), how many hosts the compiled route table currently serves, and how many the ACME HostPolicy will issue a certificate for."}},"/v1/ingress/tls":{"get":{"summary":"GetTLS returns the caller org's ACME intent together with the edge-wide TLS facts it lands in: which role this instance runs in, whether its listeners are bound, every host the ACME HostPolicy will issue a certificate for (the union across ALL orgs of TLS-marked routes and configured extraHosts, because one process holds one certificate cache), and the ACME directory and account email the process was started with."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TLSConfig"}}}},"summary":"PutTLS replaces the caller org's ACME intent and hot-applies what can be hot-applied."}},"/v1/insights/events":{"get":{"parameters":[{"description":"Limit is how many rows to return, newest first. Default 50, maximum 200; a\nvalue at or below zero, or one that is not a number, takes the default.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's most recent product events, newest first."}},"/v1/insights/health":{"get":{"summary":"Reports that the unified insights surface is serving."}},"/v1/install-patch":{"post":{"summary":"Install an OS patch by patch ID (KB number or title) asynchronously"}},"/v1/integrations":{"get":{"summary":"Returns every registered integration provider together with THIS org's connection status for it — the catalog the console's Integrations page renders."}},"/v1/integrations/discord/interactions":{"post":{"summary":"Discord interactions endpoint"}},"/v1/integrations/discord/link":{"get":{"summary":"Begin linking a Hanzo account from Discord"}},"/v1/integrations/discord/link/callback":{"get":{"summary":"Complete the Discord account link"}},"/v1/integrations/discord/link/discord":{"get":{"summary":"Discord sign-in return leg"}},"/v1/integrations/github/claim":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubClaimIn"}}}},"summary":"Binds installations the App ALREADY holds to the org the caller is acting in — the reconciliation for a grant that happened outside our connect flow."}},"/v1/integrations/github/fork":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubForkReq"}}}},"summary":"Forks a granted repository."}},"/v1/integrations/github/installations":{"get":{"summary":"Lists the GitHub accounts the caller may see the App installed on, each confirmed against the App's own list, plus where to add another."}},"/v1/integrations/github/issues/backfill":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubBackfillIn"}}}},"summary":"Seeds the native todo with the EXISTING issues across the org's granted repos (default state=open); the webhook keeps them live thereafter."}},"/v1/integrations/github/repos":{"get":{"summary":"Lists the org's granted GitHub repositories, each annotated with its native import + sync status from the git object plane."}},"/v1/integrations/github/repos/import":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubImportIn"}}}},"summary":"Imports the selected (or all) granted repos into git.hanzo.ai."}},"/v1/integrations/github/repos/{repo}/pages":{"delete":{"parameters":[{"description":"Repo is the repository's short name within the org's installation, with no\nowner prefix (the owner is server-derived from the grant). A trailing \".git\"\nis stripped.","example":"widgets","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Deletes the repo's Pages site."},"get":{"parameters":[{"description":"Repo is the repository's short name within the org's installation, with no\nowner prefix (the owner is server-derived from the grant). A trailing \".git\"\nis stripped.","example":"widgets","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Returns the repo's Pages status, live URL, custom domain and build source."},"post":{"parameters":[{"description":"Repo is the repository, from the :repo path segment.","example":"widgets","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubPagesEnableReq"}}}},"summary":"Creates the repo's Pages site and answers 201 Created with it."},"put":{"parameters":[{"description":"Repo is the repository, from the :repo path segment.","example":"widgets","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubPagesUpdateReq"}}}},"summary":"Sets or clears the custom domain (cname) and updates HTTPS enforcement, build type, or source."}},"/v1/integrations/github/repos/{repo}/pages/builds":{"post":{"parameters":[{"description":"Repo is the repository's short name within the org's installation, with no\nowner prefix (the owner is server-derived from the grant). A trailing \".git\"\nis stripped.","example":"widgets","in":"path","name":"repo","required":true,"schema":{"type":"string"}}],"summary":"Requests a Pages rebuild and returns the queued build's status."}},"/v1/integrations/github/search":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/githubSearchReq"}}}},"summary":"Finds repositories on GitHub."}},"/v1/integrations/github/webhook":{"post":{"summary":"GitHub App webhook"}},"/v1/integrations/openrouter/webhook":{"post":{"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{},"type":"object"}}}},"summary":"Receive OpenRouter Broadcast traces as usage rows"}},"/v1/integrations/slack/commands":{"post":{"summary":"Slack slash command webhook"}},"/v1/integrations/slack/events":{"post":{"summary":"Slack Events API webhook"}},"/v1/integrations/slack/install":{"get":{"summary":"Install the Hanzo app into a Slack workspace"}},"/v1/integrations/slack/link":{"get":{"summary":"Begin linking a Hanzo account from Slack"}},"/v1/integrations/slack/link/callback":{"get":{"summary":"Complete the Slack account link"}},"/v1/integrations/slack/link/slack":{"get":{"summary":"Slack sign-in return leg"}},"/v1/integrations/teams/events":{"post":{"summary":"Microsoft Teams Bot Framework webhook"}},"/v1/integrations/teams/link":{"get":{"summary":"Begin linking a Hanzo account from Teams"}},"/v1/integrations/teams/link/aad":{"get":{"summary":"Microsoft sign-in return leg"}},"/v1/integrations/teams/link/callback":{"get":{"summary":"Complete the Teams account link"}},"/v1/integrations/telegram/connect":{"post":{"summary":"Mints a short, single-use deep-link code bound to the caller's org and returns the t.me link the console navigates to."}},"/v1/integrations/telegram/link":{"get":{"summary":"Begin linking a Hanzo account from Telegram"}},"/v1/integrations/telegram/link/auth":{"get":{"summary":"Telegram Login Widget return leg"}},"/v1/integrations/telegram/link/callback":{"get":{"summary":"Complete the Telegram account link"}},"/v1/integrations/telegram/webhook":{"post":{"summary":"Telegram Bot API webhook"}},"/v1/integrations/{provider}":{"get":{"parameters":[{"description":"Provider is the registry id of the connector — \"slack\", \"github\",\n\"cloudflare\". Unknown ids are 404, as are the user-plane (/v1/connectors)\nproviders, which this surface never resolves.","example":"slack","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Returns ONE provider with this org's connection status — the same view list carries, for a single id."}},"/v1/integrations/{provider}/callback":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"OAuth return for any connector"}},"/v1/integrations/{provider}/connect":{"post":{"parameters":[{"description":"Provider is the connector's registry id, from the :provider path segment.","example":"cloudflare","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/connectIn"}}}},"summary":"Acquires the org's credential for one provider."}},"/v1/integrations/{provider}/disconnect":{"post":{"parameters":[{"description":"Provider is the registry id of the connector — \"slack\", \"github\",\n\"cloudflare\". Unknown ids are 404, as are the user-plane (/v1/connectors)\nproviders, which this surface never resolves.","example":"slack","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Revokes (best-effort) and forgets an org's connection: it deletes every custodied KMS secret and the connection row."}},"/v1/integrations/{provider}/verify":{"post":{"parameters":[{"description":"Provider is the registry id of the connector — \"slack\", \"github\",\n\"cloudflare\". Unknown ids are 404, as are the user-plane (/v1/connectors)\nproviders, which this surface never resolves.","example":"cloudflare","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Re-checks a CONNECTED apikey connector's stored credential against the provider, live (`hanzo connector verify`)."}},"/v1/k8s/clusters":{"get":{"summary":"Lists the org's DOKS clusters (Visor, house account) folded with the org's BYO clusters — ONE fleet cluster view under the unified k8s noun."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createClusterReq"}}}},"summary":"Provisions a DOKS cluster for the caller's org and answers 201."}},"/v1/k8s/clusters/{id}":{"delete":{"parameters":[{"description":"ID is the provider's DOKS cluster id. Visor scopes the lookup to the caller's\norg, so another tenant's id resolves to not-found rather than their cluster.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Destroys a DOKS cluster by id and answers 204."},"get":{"parameters":[{"description":"ID is the provider's DOKS cluster id. Visor scopes the lookup to the caller's\norg, so another tenant's id resolves to not-found rather than their cluster.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one cluster's detail: node pools + worker nodes."}},"/v1/k8s/nodes":{"get":{"summary":"Returns every DOKS worker node in the org's clusters as a machine — the SAME set the fleet folds in (managedMachines), exposed directly under the k8s noun."}},"/v1/kb/connectors":{"get":{"summary":"Returns every supported knowledge connector with THIS org's connection state and the REAL number of documents each has ingested into the org's store."}},"/v1/kb/connectors/catalog":{"get":{"summary":"Returns the ONE catalog of everything a caller can connect: every first-party connector and every long-tail one, in a single list sorted by provider."}},"/v1/kb/connectors/{provider}":{"delete":{"parameters":[{"description":"Provider is the connector to act on: github, slack, google or notion.","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Revokes a connection: it tombstones the stored credential so a later sync cannot reuse it, purges this provider's points from the org's vector namespace, and marks the connector disconnected."}},"/v1/kb/connectors/{provider}/callback":{"get":{"parameters":[{"description":"Provider is the connector completing its flow, from the path.","in":"path","name":"provider","required":true,"schema":{"type":"string"}},{"description":"Code is the provider's authorization code, exchanged for a token.","in":"query","name":"code","required":false,"schema":{"type":"string"}},{"description":"State is the org-bound value this server signed at connect time.","in":"query","name":"state","required":false,"schema":{"type":"string"}},{"description":"Error is the provider's denial reason when the user refused consent.","in":"query","name":"error","required":false,"schema":{"type":"string"}}],"summary":"CompleteConnectorOAuth finishes an OAuth connection: it exchanges the provider's code for a token, seals that token in KMS, and records the connection."}},"/v1/kb/connectors/{provider}/connect":{"get":{"parameters":[{"description":"Provider is the connector to act on: github, slack, google or notion.","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"StartConnectorOAuth returns the provider authorize URL the console opens to connect this org's account."}},"/v1/kb/connectors/{provider}/sync":{"post":{"parameters":[{"description":"Provider is the connector to act on: github, slack, google or notion.","in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Pulls the provider's documents for the caller's org and files them as knowledge sources, which the store's own hook then indexes — so a synced document is retrievable exactly like a hand-written page."}},"/v1/kb/graph":{"get":{"parameters":[{"description":"Project narrows the graph to one project scope. Empty reads the whole org.","in":"query","name":"project","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's knowledge as a node/edge graph shaped for a force-directed renderer: pages, memories and synced sources as nodes; the page parent tree, the wikilinks between pages, and each source's connector provenance as edges."}},"/v1/kb/import":{"post":{"summary":"Import an Obsidian, Notion, Roam or Evernote export into the org's knowledge base"}},"/v1/kb/search":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/searchIn"}}}},"summary":"Runs a semantic search over the caller org's own knowledge — its wiki pages, its agent memories and everything its connectors have synced — and returns the matching passages."}},"/v1/keys":{"delete":{"parameters":[{"description":"Type is the key class to act on: \"secret\" (sk-, session-equivalent, belongs\non a server) or \"publishable\" (pk-, org-identifying, safe in a browser\nbundle). Omitted means secret, which is what every existing caller means.","example":"publishable","in":"query","name":"type","required":false,"schema":{"type":"string"}}],"summary":"Revokes the caller's own API key of the requested class."},"get":{"summary":"Returns the caller's own API keys — every type they hold, read AUTHORITATIVELY from IAM rather than from the session claim, which lags a key minted moments ago."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/keyTypeIn"}}}},"summary":"Creates — or rotates — the caller's API key of the requested type and returns it ONCE."}},"/v1/kms/auth/login":{"post":{"summary":"Exchange a machine credential for an IAM bearer token"}},"/v1/kms/config":{"get":{"summary":"Runtime configuration for the KMS console"}},"/v1/kms/health":{"get":{"summary":"Whether this broker can actually serve secrets"}},"/v1/kms/secrets":{"get":{"summary":"List the secrets your org holds, without their values"},"post":{"summary":"Store or replace one secret in your org"}},"/v1/kms/secrets/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Delete one secret from your org","x-catch-all":["wildcard1"]},"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Read one secret's value","x-catch-all":["wildcard1"]}},"/v1/kv":{"get":{"summary":"ListKV lists the caller org's Hanzo KV stores."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a key-value store for your org"}},"/v1/kv/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"sessions","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"DropKV deprovisions one Hanzo KV store."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"sessions","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"GetKV returns one Hanzo KV store's metadata."}},"/v1/legal/documents":{"get":{"parameters":[{"description":"Limit bounds the page. Absent or unparseable means the store's own default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's generated documents, newest first, WITHOUT their rendered content — fetch one document to read its body."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/generateRequest"}}}},"summary":"Renders a document from a template and the caller's own merge data, seals it in the org's store, and returns it with its rendered body."}},"/v1/legal/documents/{id}":{"get":{"parameters":[{"description":"ID is the document's server-minted handle, \"doc_\"-prefixed.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the org's documents WITH its rendered body."}},"/v1/legal/documents/{id}/sign":{"post":{"parameters":[{"description":"ID is the document to send for signature, from the path.","example":"doc_1f…","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/signRequest"}}}},"summary":"Opens an e-signature request over one document and moves it to out_for_signature, returning the provider's reference for the request."}},"/v1/legal/documents/{id}/sign/complete":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Record that a generated document's signature request completed"}},"/v1/legal/filings":{"get":{"parameters":[{"description":"Limit bounds the page. Absent or unparseable means the store's own default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's filing records, newest first — which documents were filed where, through which provider, and what the filing's honest status is."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/filingRequest"}}}},"summary":"Records a filing of one or more of the org's documents with a state or agency, and returns the tracking record."}},"/v1/legal/health":{"get":{"summary":"Reports that the legal subsystem is serving and how many built-in templates its catalog carries."}},"/v1/legal/templates":{"get":{"summary":"Returns the org's effective template catalog: every built-in template, with any the org has overridden replaced by its own latest version."}},"/v1/legal/templates/{id}":{"get":{"parameters":[{"description":"ID is the template's stable id, e.g. \"nda\" or \"safe\".","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one template resolved for the caller's org — the org's own override if it has saved one, else the built-in — with its full text/template body and its declared merge fields."},"put":{"parameters":[{"description":"ID is the template to override, from the path. Overriding a built-in id\ninherits that built-in's category, title and counsel-review posture.","example":"nda","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/templateOverride"}}}},"summary":"Saves the org's own version of a template — a custom NDA, a house MSA — and returns it with its new version number."}},"/v1/licensing/download/{release}":{"get":{"parameters":[{"in":"path","name":"release","required":true,"schema":{"type":"string"}},{"in":"header","name":"X-License-Token","required":false,"schema":{"type":"string"}},{"in":"query","name":"token","required":false,"schema":{"type":"string"}}],"summary":"Download resolves a release to its artifact, gated on a valid license."}},"/v1/licensing/fingerprint":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/licensing.FingerprintRequest"}}}},"summary":"Fingerprint turns raw device signals into the opaque value that binds a license to one machine."}},"/v1/licensing/healthz":{"get":{"summary":"Health reports which signer this deployment mints with, and in which env."}},"/v1/licensing/issue":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/licensing.IssueRequest"}}}},"summary":"Issue mints a signed license token for a product the caller's org already pays for."}},"/v1/licensing/jwks":{"get":{"summary":"Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks."}},"/v1/licensing/pubkey":{"get":{"summary":"Pubkey publishes the Ed25519 PUBLIC verification key, at both /pubkey and /jwks."}},"/v1/licensing/releases":{"get":{"summary":"Lists the signed binary releases this deployment can serve."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/licensing.Release"}}}},"summary":"Publishes a signed binary release, answering 201 Created."}},"/v1/licensing/releases/{release}":{"get":{"parameters":[{"in":"path","name":"release","required":true,"schema":{"type":"string"}}],"summary":"Reads one release's metadata: its product, version, platform and the cosign material a client verifies the binary against."}},"/v1/licensing/revoke":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/licensing.RevokeRequest"}}}},"summary":"Revoke turns off tokens that have already been issued."}},"/v1/licensing/verify":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/licensing.VerifyRequest"}}}},"summary":"Verify checks a license token online: signature, schema, expiry, app_id and the revocation list."}},"/v1/links":{"get":{"summary":"Lists your linked accounts and the devices they sit on."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/enrollReq"}}}},"summary":"Registers a signed-in AI provider account on a machine."}},"/v1/links/devices/{machine}":{"get":{"parameters":[{"description":"Machine is the machine to act on, from the path. It is scoped to the\ncaller, so a machine with none of the caller's accounts is a 404.","in":"path","name":"machine","required":true,"schema":{"type":"string"}}],"summary":"Shows one machine: its accounts, usage and live sessions."}},"/v1/links/devices/{machine}/revoke":{"post":{"parameters":[{"description":"Machine is the machine to act on, from the path. It is scoped to the\ncaller, so a machine with none of the caller's accounts is a 404.","in":"path","name":"machine","required":true,"schema":{"type":"string"}}],"summary":"Logs out every account on one machine and stops its sessions."}},"/v1/links/route":{"get":{"summary":"Gets the failover order across your linked accounts."}},"/v1/links/usage":{"get":{"parameters":[{"description":"Provider is the provider whose meter to read. Required.","in":"query","name":"provider","required":false,"schema":{"type":"string"}},{"description":"Account narrows to one account when a user has several with the provider.","in":"query","name":"account","required":false,"schema":{"type":"string"}},{"description":"Window selects a window class: 6h, day, week or month. Empty reads all.","in":"query","name":"window","required":false,"schema":{"type":"string"}},{"description":"Range is the period, one of 1h, 24h, 7d or 30d; empty means 24h, and an\nunknown label is 400, never a quiet fallback.","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Shows one provider account's own usage dashboard."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ingestReq"}}}},"summary":"Reports usage samples from the device collector."}},"/v1/links/usage/accounts":{"get":{"summary":"Breaks down what the gateway routed through each of your accounts."}},"/v1/links/usage/summary":{"get":{"parameters":[{"description":"Range is the period, one of 1h, 24h, 7d or 30d; empty means 24h, and an\nunknown label is 400, never a silent substitution.","in":"query","name":"range","required":false,"schema":{"type":"string"}}],"summary":"Shows plan consumption and Hanzo spend side by side."}},"/v1/links/{id}":{"delete":{"parameters":[{"description":"ID is the link to act on, from the path. It is scoped to the caller, so\nanother user's or org's id is a 404.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Logs out one account and stops the sessions it was running."},"get":{"parameters":[{"description":"ID is the link to act on, from the path. It is scoped to the caller, so\nanother user's or org's id is a 404.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Reads one linked account."}},"/v1/logs/health":{"get":{"summary":"How many log records this deployment holds for your org"}},"/v1/logs/query":{"get":{"summary":"Search your org's logs by label, time and substring"}},"/v1/logs/write":{"post":{"summary":"Append structured log records for your org"}},"/v1/machines":{"get":{"summary":"Returns every machine the caller's org has — Visor's registry, the live DigitalOcean droplets and the DOKS worker nodes (deduped into one union), plus the BYO machines that dialed in via `hanzo link` (provider \"byo\")."},"post":{"summary":"Launch a metered machine for your org, or price one first with dryRun"}},"/v1/machines/agents":{"get":{"summary":"Returns every agent↔machine binding in the caller's org — which machines are running which cloud Agent, with vm's own reconciled status."}},"/v1/machines/{id}":{"delete":{"parameters":[{"description":"ID is the machine's org-scoped NAME — the stable key Visor addresses a\nmachine by (owner/name), not the ephemeral provider id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Terminates one of the caller org's machines."},"get":{"parameters":[{"description":"ID is the machine's org-scoped NAME — the stable key Visor addresses a\nmachine by (owner/name), not the ephemeral provider id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's machines by its org-scoped name."}},"/v1/machines/{id}/agent":{"delete":{"parameters":[{"description":"ID is the machine's org-scoped NAME — the stable key Visor addresses a\nmachine by (owner/name), not the ephemeral provider id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Detaches the agent runtime from one of the caller org's machines."},"get":{"parameters":[{"description":"ID is the machine's org-scoped NAME — the stable key Visor addresses a\nmachine by (owner/name), not the ephemeral provider id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns the agent binding of one of the caller org's machines, or 404 when the machine runs no bot runtime."},"put":{"parameters":[{"description":"ID is the machine to bind, from the URL path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/bindAgentReq"}}}},"summary":"Binds a cloud Agent to one of the caller org's machines: the machine is recorded as running that Agent's @hanzo/bot runtime."}},"/v1/marketing/audiences":{"get":{"parameters":[{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's saved audiences, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Audience"}}}},"summary":"Saves a cohort filter for the caller's org."}},"/v1/marketing/audiences/{id}":{"delete":{"parameters":[{"description":"ID is the audience id from the path, as returned by create.","example":"aud_4c1e9b7a2d6f0538e4a7c9b1d3f5027a","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's audiences and answers 204."},"get":{"parameters":[{"description":"ID is the audience id from the path, as returned by create.","example":"aud_4c1e9b7a2d6f0538e4a7c9b1d3f5027a","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's saved audiences."}},"/v1/marketing/audiences/{id}/preview":{"get":{"parameters":[{"description":"ID is the audience id from the path, as returned by create.","example":"aud_4c1e9b7a2d6f0538e4a7c9b1d3f5027a","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Evaluates the cohort LIVE — the same resolution an enrollment would run — and reports how big it is and how many real mailboxes it reaches."}},"/v1/marketing/calendar":{"get":{"parameters":[{"description":"Status keeps only posts in that state (draft, scheduled, published,\nfailed, canceled). Empty means every post.","example":"scheduled","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's calendar, soonest scheduled first, optionally narrowed to one status."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarPost"}}}},"summary":"Adds a post to the content calendar."}},"/v1/marketing/calendar/{id}":{"delete":{"parameters":[{"description":"ID is the post id from the path, as returned by create.","example":"cal_1d7f3b9e5a2c8046f1b3d5a7c9e02468","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's posts and answers 204."},"get":{"parameters":[{"description":"ID is the post id from the path, as returned by create.","example":"cal_1d7f3b9e5a2c8046f1b3d5a7c9e02468","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's posts, including the exact error behind a failed publish."},"put":{"parameters":[{"description":"ID is the server-assigned post id (\"cal_\" + 128 random bits).","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalendarPost"}}}},"summary":"Replaces a post's editable fields."}},"/v1/marketing/calendar/{id}/publish":{"post":{"parameters":[{"description":"ID is the post id from the path, as returned by create.","example":"cal_1d7f3b9e5a2c8046f1b3d5a7c9e02468","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Publishes a post NOW, synchronously, whatever its schedule."}},"/v1/marketing/campaigns":{"get":{"parameters":[{"description":"Status keeps only campaigns in that lifecycle state (draft, scheduled,\nactive, paused, completed). Empty means every campaign.","example":"active","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":25,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's campaigns, most recently updated first, optionally narrowed to one lifecycle status."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}}},"summary":"Registers a campaign in the caller's org."}},"/v1/marketing/campaigns/{id}":{"delete":{"parameters":[{"description":"ID is the campaign id from the path, as returned by create.","example":"camp_9f2a1c7d4e8b0a6f3d2c5b1e7a9f4c60","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's campaigns and answers 204."},"get":{"parameters":[{"description":"ID is the campaign id from the path, as returned by create.","example":"camp_9f2a1c7d4e8b0a6f3d2c5b1e7a9f4c60","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's campaigns."},"put":{"parameters":[{"description":"ID is the server-assigned campaign id (\"camp_\" + 128 random bits).","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}}},"summary":"Replaces a campaign's editable fields."}},"/v1/marketing/campaigns/{id}/schedule":{"post":{"parameters":[{"description":"ID is the campaign id from the path.","example":"camp_9f2a1c7d4e8b0a6f3d2c5b1e7a9f4c60","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScheduleInput"}}}},"summary":"Sets a campaign's send time and moves it to \"scheduled\"."}},"/v1/marketing/promos":{"get":{"summary":"Returns every promo the deployment offers with its live counters: how many orgs have redeemed it and how many redemptions remain under the cap."}},"/v1/marketing/promos/{code}/eligibility":{"get":{"parameters":[{"description":"Code is the promo code from the path.","example":"first1000","in":"path","name":"code","required":true,"schema":{"type":"string"}},{"description":"Plan is the plan being priced: pro, max or team. Anything else (including\nthe free Developer plan) has no list price and so nothing to discount.","example":"team","in":"query","name":"plan","required":false,"schema":{"type":"string"}},{"description":"Seats is the Team seat count; 0 means 1, and it is ignored for the\nsingle-seat plans.","example":12,"in":"query","name":"seats","required":false,"schema":{"type":"integer"}}],"summary":"Prices a promo against a plan and seat count."}},"/v1/marketing/promos/{code}/redeem":{"post":{"parameters":[{"description":"Code is the promo code from the path.","example":"first1000","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemInput"}}}},"summary":"Records the caller org's claim on a promo."}},"/v1/marketing/promos/{code}/redemption":{"get":{"parameters":[{"description":"Code is the promo code from the path, e.g. \"first1000\".","example":"first1000","in":"path","name":"code","required":true,"schema":{"type":"string"}}],"summary":"Returns the caller org's OWN redemption of a promo — an org-scoped read, so it can never surface another tenant's."}},"/v1/marketing/sequences":{"get":{"parameters":[{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's drip sequences, most recently updated first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sequence"}}}},"summary":"Registers a drip sequence in the caller's org."}},"/v1/marketing/sequences/{id}":{"get":{"parameters":[{"description":"ID is the sequence id from the path, as returned by create.","example":"seq_7b3e5a1c9d024f68b0a3e7c5d9f1a248","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's sequences together with its steps in send order."}},"/v1/marketing/sequences/{id}/enroll":{"post":{"parameters":[{"description":"ID is the sequence id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollInput"}}}},"summary":"Adds one contact or a whole audience to a sequence and schedules the first step for each."}},"/v1/marketing/sequences/{id}/enrollments":{"get":{"parameters":[{"description":"ID is the sequence id from the path.","example":"seq_7b3e5a1c9d024f68b0a3e7c5d9f1a248","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns who is walking one sequence, most recently enrolled first, with each walk's current step and next due time."}},"/v1/marketing/sequences/{id}/enrollments/{eid}/cancel":{"post":{"parameters":[{"description":"ID is the sequence id from the path.","example":"seq_7b3e5a1c9d024f68b0a3e7c5d9f1a248","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"EID is the enrollment id from the path, as returned by a single-address\nenroll.","example":"enr_2a8d6f0b4c1e9375a0d2f6b8c4e19f73","in":"path","name":"eid","required":true,"schema":{"type":"string"}}],"summary":"Stops one walk mid-sequence and answers 204: no further step is sent, and steps already delivered are not recalled."}},"/v1/marketing/sequences/{id}/status":{"post":{"parameters":[{"description":"ID is the sequence id from the path.","example":"seq_7b3e5a1c9d024f68b0a3e7c5d9f1a248","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SequenceStatus"}}}},"summary":"Flips draft/active/archived — the activation gate for sending, since only an active sequence accepts enrollments."}},"/v1/marketing/sequences/{id}/steps":{"get":{"parameters":[{"description":"ID is the sequence id from the path, as returned by create.","example":"seq_7b3e5a1c9d024f68b0a3e7c5d9f1a248","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one sequence's steps in send order."},"post":{"parameters":[{"description":"SequenceID is the sequence id from the path (the route's :id).","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepInput"}}}},"summary":"Appends a message to the END of a sequence: the new step's idx is one past the last, so steps arrive in the order they are added."}},"/v1/marketing/summary":{"get":{"summary":"Rolls up the caller org's campaigns: how many there are, how many are active, and the summed budget and spend in cents."}},"/v1/marketing/suppressions":{"delete":{"parameters":[{"description":"Channel is the surface opted out of: email, sms, social, meta, google or\ntiktok. Empty means email. Opting out of one leaves the others reachable.","example":"email","in":"query","name":"channel","required":false,"schema":{"type":"string"}},{"description":"Address is the recipient, normalized (lower-cased, trimmed) so an opt-out\ncannot be slipped past on a case or whitespace difference. Required.","example":"[email protected]","in":"query","name":"address","required":false,"schema":{"type":"string"}},{"description":"Reason is a free-text note, capped at 1024 bytes. The public one-click\nendpoint records \"one-click unsubscribe\".","in":"query","name":"reason","required":false,"schema":{"type":"string"}},{"description":"CreatedAt is unix seconds, server-assigned.","in":"query","name":"createdAt","required":false,"schema":{"type":"integer"}}],"summary":"Re-subscribes an address on one channel and answers 204."},"get":{"parameters":[{"description":"Limit caps the rows returned; 0 means 200 and nothing above 1000 is honoured.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's opt-out list, newest first — everyone the send gate will refuse to deliver to."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Suppression"}}}},"summary":"Records an opt-out for the org (admin / self-service management)."}},"/v1/marketing/unsubscribe":{"get":{"parameters":[{"description":"Org is the org the link was minted for.","example":"acme","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Channel is the surface to opt out of.","example":"email","in":"query","name":"channel","required":false,"schema":{"type":"string"}},{"description":"Address is the recipient to opt out.","example":"[email protected]","in":"query","name":"address","required":false,"schema":{"type":"string"}},{"description":"Token is the HMAC over (org, channel, address). It is the ONLY authority\nhere — there is no principal — so it binds the request to one tuple and\nnothing else.","example":"9f2a…","in":"query","name":"token","required":false,"schema":{"type":"string"}}],"summary":"Is the PUBLIC one-click endpoint (no principal): a recipient clicks the signed link in an email footer."}},"/v1/marketplace":{"get":{"summary":"Discover lists every tool and agent the caller can reach in their own org and project, enriched with any public listing's title, category and price, and with installed=true on the ones already activated for that scope."}},"/v1/marketplace/install":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/installReq"}}}},"summary":"Install activates one tool for the caller's own org and project."}},"/v1/marketplace/listings":{"get":{"summary":"Returns the listings the caller's own org has published — what this org is offering, not what it can buy."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publishReq"}}}},"summary":"Publish offers one tool on the marketplace, optionally monetized."}},"/v1/marketplace/listings/{id}":{"delete":{"parameters":[{"description":"ID is the listing to unpublish, from the path.","example":"lst_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Unpublish withdraws one of the caller org's listings from the marketplace and answers 204."}},"/v1/marketplace/uninstall":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/installReq"}}}},"summary":"Uninstall deactivates one tool for the caller's own org and project, so it stops being dispatchable there."}},"/v1/mcp/servers":{"get":{"summary":"Lists the external MCP servers the caller's org has registered."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createServerReq"}}}},"summary":"Gives the caller's org one more external MCP server, so its tools join the org's tool plane and the fleet's MCP door."}},"/v1/mcp/servers/{id}":{"delete":{"parameters":[{"description":"ID is the server to deregister, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deregisters one of the caller org's external MCP servers, so its tools leave the registry."}},"/v1/meet/getToken":{"post":{"summary":"Mint a join token for one video room"}},"/v1/meet/health":{"get":{"summary":"Health reports whether the office can mint join tokens."}},"/v1/meet/session":{"get":{"summary":"What this caller may open a room in"}},"/v1/memory/delete":{"post":{"summary":"Delete one of the authenticated user's memories"}},"/v1/memory/facts":{"get":{"summary":"List the authenticated user's stored facts"}},"/v1/memory/list":{"get":{"summary":"List the authenticated user's memories, newest first"}},"/v1/memory/recall":{"get":{"summary":"Recall recent/relevant memories for context injection; with q it"}},"/v1/memory/remember":{"post":{"summary":"Store a memory for the authenticated user"}},"/v1/memory/search":{"get":{"summary":"Search the authenticated user's memories (semantic, text fallback)"}},"/v1/memory/update":{"post":{"summary":"Update one of the authenticated user's memories"}},"/v1/mesh/services":{"get":{"summary":"Returns the Zero Trust edge services the caller's org owns."}},"/v1/messages":{"post":{"summary":"Implements the Anthropic Messages API."}},"/v1/messages/count_tokens":{"post":{"summary":"Implements POST /v1/messages/count_tokens."}},"/v1/metrics/batch":{"post":{"summary":"Ingest a MetricBatch — the same payload the ZAP transport carries"}},"/v1/metrics/health":{"get":{"summary":"How many metric series this deployment holds for your org"}},"/v1/metrics/query":{"get":{"summary":"Read your org's series back over a time range"}},"/v1/metrics/write":{"post":{"summary":"Append samples to your org's named, labelled series"}},"/v1/ml/health":{"get":{"summary":"Whether model serving can actually work right now"}},"/v1/ml/models":{"get":{"summary":"Lists the inference models deployed in the caller's org."},"post":{"summary":"Deploy an inference model"}},"/v1/ml/models/{name}":{"delete":{"parameters":[{"description":"Name is the resource to act on, taken from the path. Lower-cased and\ntrimmed to the DNS-1123 label a CustomResource's metadata.name must be.","example":"sentiment","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deletes a deployed inference model."},"get":{"parameters":[{"description":"Name is the resource to act on, taken from the path. Lower-cased and\ntrimmed to the DNS-1123 label a CustomResource's metadata.name must be.","example":"sentiment","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one deployed inference model."},"patch":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Change a deployed model in place"}},"/v1/ml/models/{name}/predict":{"post":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Run inference against one of your deployed models"}},"/v1/models":{"get":{"summary":"Returns the list of available models from the routing table."}},"/v1/models/providers":{"get":{"summary":"Public, secret-free list of the providers serving the models that GET /v1/models lists — the same source, projected."}},"/v1/models/{model}/access":{"get":{"parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string"}}],"summary":"Returns the caller's own standing for a gated model: \"granted\", \"requested\", or empty when they have never asked."},"post":{"parameters":[{"in":"path","name":"model","required":true,"schema":{"type":"string"}}],"summary":"Records the caller's waitlist request for a gated model and answers their new standing."}},"/v1/mq/health":{"get":{"summary":"Reports whether the message plane behind this surface answers."}},"/v1/mq/info":{"get":{"summary":"Returns the broker's identity and the org's stream count."}},"/v1/mq/streams":{"get":{"parameters":[{"description":"Limit caps the streams returned (1–1000, default 100).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset skips that many streams, name-ordered.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns the org's streams, name-ordered, with their live state."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Config"}}}},"summary":"Creates a durable stream in the org's namespace and returns it."}},"/v1/mq/streams/{name}":{"delete":{"parameters":[{"description":"Name is the stream name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes a stream with all its messages and consumers."},"get":{"parameters":[{"description":"Name is the stream name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one stream's configuration and live state."},"put":{"parameters":[{"description":"Name is the stream name, unique within the org (alphanumeric, hyphens, underscores).","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Config"}}}},"summary":"Reconfigures an existing stream; the path names the stream, and the immutable fields (storage, retention) must restate what they are."}},"/v1/mq/streams/{name}/messages":{"get":{"parameters":[{"description":"Name is the stream name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Seq reads the message at this sequence (with next_by_subject: the walk's start).","in":"query","name":"seq","required":false,"schema":{"type":"integer"}},{"description":"LastBySubject reads the newest message on this org-relative subject.","in":"query","name":"last_by_subject","required":false,"schema":{"type":"string"}},{"description":"NextBySubject walks forward from seq collecting messages on this org-relative subject (wildcards supported).","in":"query","name":"next_by_subject","required":false,"schema":{"type":"string"}},{"description":"Limit caps a next_by_subject walk (1–1000, default 100).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Reads stored messages without a consumer: by sequence, by newest on a subject, or walking a subject forward from a sequence."}},"/v1/mq/streams/{name}/messages/{seq}":{"delete":{"parameters":[{"description":"Name is the stream name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Seq is the message's stream sequence, from the path.","in":"path","name":"seq","required":true,"schema":{"type":"integer"}}],"summary":"Erases one message by sequence; the sequence gap remains."}},"/v1/mq/streams/{name}/purge":{"post":{"parameters":[{"description":"Name is the stream name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Purge"}}}},"summary":"Removes messages from a stream, leaving its consumers in place."}},"/v1/mq/streams/{stream}/consumers":{"get":{"parameters":[{"description":"Stream is the stream name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Limit caps the consumers returned (1–1000, default 100).","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset skips that many consumers, name-ordered.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns a stream's consumers, name-ordered, with delivery state."},"post":{"parameters":[{"description":"Stream is the stream name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/makeIn"}}}},"summary":"Creates a durable pull consumer on a stream and returns it."}},"/v1/mq/streams/{stream}/consumers/{name}":{"delete":{"parameters":[{"description":"Stream is the stream name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes a consumer and its delivery state; unacknowledged messages stay in the stream."},"get":{"parameters":[{"description":"Stream is the stream name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one consumer's configuration and delivery state."}},"/v1/mq/streams/{stream}/consumers/{name}/next":{"post":{"parameters":[{"description":"Stream is the stream name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer name, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nextIn"}}}},"summary":"Pulls the consumer's next batch."}},"/v1/networks":{"get":{"summary":"Returns the caller's org overlay network on the Zero Trust fabric."}},"/v1/networks/routers":{"get":{"summary":"Returns the Zero Trust routers the caller's org owns."}},"/v1/networks/{id}":{"get":{"parameters":[{"description":"ID is the network id from the path. The URL is the addressing authority, so\nit binds from there whatever else the request carries.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one overlay network by id, scoped to the caller's org."}},"/v1/notify/health":{"get":{"summary":"Reports that the notify send surface is mounted."}},"/v1/notify/send":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/notifySend"}}}},"summary":"Delivers one transactional message by email or SMS through the caller org's own provider credential."}},"/v1/notify/send/email":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/notifySend"}}}},"summary":"Delivers one transactional email through the caller org's own provider credential."}},"/v1/notify/send/sms":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/notifySend"}}}},"summary":"Delivers one transactional SMS through the caller org's own provider credential."}},"/v1/o11y/alerts":{"get":{"summary":"Returns the org's current alerts."}},"/v1/o11y/alerts/last":{"get":{"summary":"Replay the alert records this process took"}},"/v1/o11y/alerts/{receiver}":{"post":{"parameters":[{"in":"path","name":"receiver","required":true,"schema":{"type":"string"}}],"summary":"Take an Alertmanager notification and page a human"}},"/v1/o11y/api/{project_id}/envelope/":{"post":{"parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"string"}}],"summary":"Receive a Sentry envelope on the SDK's own DSN path"}},"/v1/o11y/api/{project_id}/store/":{"post":{"parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"string"}}],"summary":"Receive a single Sentry event on the SDK's own DSN path"}},"/v1/o11y/authz/check":{"post":{"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/o11y.O11yTransaction"},"type":"array"}}}},"summary":"Evaluates a batch of transactions — relation plus object — for the authenticated caller and answers each with its authorization verdict, in the order they were asked."}},"/v1/o11y/auto_complete/attribute_values":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.FilterAttributeValueRequest"}}}},"summary":"Reads the attribute-value request from the body rather than off the query string — the spelling the newer builder uses to send its filters alongside the request."}},"/v1/o11y/autocomplete/aggregate_attributes":{"get":{"parameters":[{"description":"DataSource is the telemetry the attributes come from — traces, logs,\nmetrics or meter. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the attribute will be used under, e.g.\ncount, avg, sum. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the attributes to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many attributes come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the attributes usable as an aggregate target for the given telemetry and operator — what a filter builder offers after the aggregation is chosen."}},"/v1/o11y/autocomplete/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — traces, logs, metrics or\nmeter. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under. The\nruntime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the attribute keys available for filtering the given telemetry, each with its data type and whether it is a materialized column."}},"/v1/o11y/autocomplete/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — traces, logs or\nmetrics. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under. The\nruntime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64, float64\nor bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one attribute key has taken — string, number and bool values in their own lists — for completing a filter."}},"/v1/o11y/availability":{"get":{"parameters":[{"description":"Range is the trend window in seconds. Default 3600, capped at 604800 (7d).","example":3600,"in":"query","name":"range","required":false,"schema":{"type":"integer"}},{"description":"StepSec is the bucket width in seconds, clamped to [30, 3600]. Absent\npicks ~60 buckets across the range.","in":"query","name":"stepSec","required":false,"schema":{"type":"integer"}}],"summary":"Reports how much of the Hanzo fleet is up — the current per-service inventory plus an up-versus-reporting trend across the window."}},"/v1/o11y/channels":{"get":{"summary":"Lists the org's notification channels."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableChannel"}}}},"summary":"Creates a notification channel, answering with the stored channel."}},"/v1/o11y/channels/test":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.alertmanagertypes.Receiver"}}}},"summary":"Sends a test notification to the posted receiver."}},"/v1/o11y/channels/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a notification channel, by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one notification channel, by id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yChannelUpdateIn"}}}},"summary":"Replaces a notification channel's receiver, by id."}},"/v1/o11y/cloud-integrations/{cloud_provider}/agent-check-in":{"post":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yAgentCheckInIn"}}}},"summary":"Is the deployed agent's check-in on its original hyphenated path, kept for backward compatibility with agents already running."}},"/v1/o11y/cloud_integrations/{cloud_provider}/accounts":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}}],"summary":"Lists the cloud-integration accounts connected for the given provider."},"post":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yCreateAccountIn"}}}},"summary":"Connects a new cloud-integration account for the given provider from its posted config and credentials, answering with the account and the artifact the agent deploys to complete the connection."}},"/v1/o11y/cloud_integrations/{cloud_provider}/accounts/check_in":{"post":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yAgentCheckInIn"}}}},"summary":"Is the deployed agent's check-in — the path consistent with the account surface, reporting the agent's account and telemetry state so the connection can be tracked."}},"/v1/o11y/cloud_integrations/{cloud_provider}/accounts/{id}":{"delete":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Tears down a connected account for the given provider, by id."},"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one connected account for the given provider, by id."},"put":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdateAccountIn"}}}},"summary":"Changes a connected account's configuration for the given provider, by id."}},"/v1/o11y/cloud_integrations/{cloud_provider}/accounts/{id}/services":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Lists the services metadata for one connected account of the given provider, by account id."}},"/v1/o11y/cloud_integrations/{cloud_provider}/accounts/{id}/services/{service_id}":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"summary":"Returns one service and its configuration for a connected account of the given provider, by account id and service id."},"put":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"service_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdateServiceIn"}}}},"summary":"Changes a service's configuration for one connected account of the given provider, by account id and service id."}},"/v1/o11y/cloud_integrations/{cloud_provider}/credentials":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}}],"summary":"Returns the credentials the connecting agent needs to establish the cloud integration, for the given cloud provider."}},"/v1/o11y/cloud_integrations/{cloud_provider}/services":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"description":"CloudIntegrationID, when set, scopes the listing to one cloud integration.","in":"query","name":"cloud_integration_id","required":false,"schema":{"type":"string"}}],"summary":"Lists the services the given provider can collect from, optionally scoped to one cloud integration."}},"/v1/o11y/cloud_integrations/{cloud_provider}/services/{service_id}":{"get":{"parameters":[{"in":"path","name":"cloud_provider","required":true,"schema":{"type":"string"}},{"in":"path","name":"service_id","required":true,"schema":{"type":"string"}},{"description":"CloudIntegrationID, when set, scopes the service to one cloud integration.","in":"query","name":"cloud_integration_id","required":false,"schema":{"type":"string"}}],"summary":"Returns one service the given provider can collect from, by service id, optionally scoped to one cloud integration."}},"/v1/o11y/clusters/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes clusters report, for building cluster filters."}},"/v1/o11y/clusters/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one cluster attribute key has taken, for building cluster filters."}},"/v1/o11y/clusters/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.ClusterListRequest"}}}},"summary":"Lists Kubernetes clusters over a time range, each with its CPU and memory usage against allocatable capacity and its attributes; filterable, groupable and paginated."}},"/v1/o11y/complete/google":{"get":{"summary":"Complete a Google sign-in"}},"/v1/o11y/complete/oidc":{"get":{"summary":"Complete a generic OIDC sign-in"}},"/v1/o11y/complete/saml":{"post":{"summary":"Complete a SAML sign-in"}},"/v1/o11y/countErrors":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yErrorsCountIn"}}}},"summary":"Counts the grouped exceptions in the query window for the caller's org."}},"/v1/o11y/daemonsets/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes daemonsets report, for building daemonset filters."}},"/v1/o11y/daemonsets/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one daemonset attribute key has taken, for building daemonset filters."}},"/v1/o11y/daemonsets/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.DaemonSetListRequest"}}}},"summary":"Lists Kubernetes daemonsets over a time range, each with the CPU and memory its pods used against request and limit, desired and available node counts, restarts and attributes; filterable, groupable and paginated."}},"/v1/o11y/dashboard_views":{"get":{"summary":"Returns every saved view in the calling user's org."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardViewPostable"}}}},"summary":"Persists the calling user's dashboard-listing state (query, sort, order) as a named, reusable view shared across the org."}},"/v1/o11y/dashboard_views/{id}":{"delete":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a saved view."},"put":{"parameters":[{"description":"ID is the saved view id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardViewUpdateIn"}}}},"summary":"Replaces a saved view's name and data."}},"/v1/o11y/dashboards":{"get":{"parameters":[{"description":"Query is the filter DSL over dashboard columns and tags, e.g.\n`name:cpu source:user`. Empty lists everything.","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Sort is the sort field: updated_at, created_at or name. Empty sorts by\nupdated_at.","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Order is the sort direction: asc or desc. Empty orders desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many dashboards come back. Zero means the default of 20;\nthe runtime caps it at 200.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset is how many dashboards to skip for pagination.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Returns a page of v2-shape dashboards for the org."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardPostable"}}}},"summary":"Creates a dashboard in the v2 format that follows the Perses spec and answers with the stored dashboard."}},"/v1/o11y/dashboards/{id}":{"delete":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes a v2-shape dashboard along with its tag relations."},"get":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns a v2-shape dashboard."},"patch":{"parameters":[{"description":"ID is the dashboard id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardPatchIn"}}}},"summary":"Applies an RFC 6902 JSON Patch to a v2-shape dashboard."},"put":{"parameters":[{"description":"ID is the dashboard id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardUpdateIn"}}}},"summary":"Updates a v2-shape dashboard's metadata, spec and tag set."}},"/v1/o11y/dashboards/{id}/clone":{"post":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Clones an existing v2-shape dashboard."}},"/v1/o11y/dashboards/{id}/lock":{"delete":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Unlocks a v2-shape dashboard."},"put":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Locks a v2-shape dashboard."}},"/v1/o11y/dashboards/{id}/public":{"delete":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes the public-sharing config and disables public sharing of a dashboard."},"get":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns the public-sharing config for a dashboard."},"post":{"parameters":[{"description":"ID is the dashboard id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yPublicDashboardWriteIn"}}}},"summary":"Creates the public-sharing config for a dashboard and enables public sharing, answering with the new share's id."},"put":{"parameters":[{"description":"ID is the dashboard id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yPublicDashboardWriteIn"}}}},"summary":"Updates the public-sharing config for a dashboard."}},"/v1/o11y/dependency_graph":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDependencyGraphIn"}}}},"summary":"Returns the service dependency graph over the requested window: every parent→child edge observed, with call and error rates and latency percentiles per edge."}},"/v1/o11y/deployments/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes deployments report, for building deployment filters."}},"/v1/o11y/deployments/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one deployment attribute key has taken, for building deployment filters."}},"/v1/o11y/deployments/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.DeploymentListRequest"}}}},"summary":"Lists Kubernetes deployments over a time range, each with the CPU and memory its pods used against request and limit, desired and available replica counts, restarts and attributes; filterable, groupable and paginated."}},"/v1/o11y/disks":{"get":{"summary":"Lists the storage disks the datastore reports, with their names and types."}},"/v1/o11y/domains":{"get":{"summary":"Lists the org's auth domains — the email domains whose SSO configuration this org owns."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yPostableAuthDomain"}}}},"summary":"Claims an email domain for the org and configures how its users sign in; the answer is the new domain's id."}},"/v1/o11y/domains/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Releases an email domain and discards its SSO configuration, by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one auth domain with its SSO configuration, by id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdatableAuthDomain"}}}},"summary":"Replaces one auth domain's SSO configuration, by id."}},"/v1/o11y/downtime_schedules":{"get":{"parameters":[{"description":"Active, when \"true\" or \"false\", keeps only the active or inactive windows.\nAbsent lists all.","in":"query","name":"active","required":false,"schema":{"type":"string"}},{"description":"Recurring, when \"true\" or \"false\", keeps only the recurring or one-off\nwindows. Absent lists all.","in":"query","name":"recurring","required":false,"schema":{"type":"string"}}],"summary":"Lists all planned maintenance windows, optionally narrowed to the active ones or the recurring ones."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostablePlannedMaintenance"}}}},"summary":"Creates a planned maintenance window, answering with the stored schedule."}},"/v1/o11y/downtime_schedules/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a planned maintenance window, by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one planned maintenance window, by id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDowntimeUpdateIn"}}}},"summary":"Replaces a planned maintenance window, by id."}},"/v1/o11y/errorFromErrorID":{"get":{"parameters":[{"description":"Timestamp is the instance's time as a nanosecond epoch spelled as a\nstring. Required.","in":"query","name":"timestamp","required":true,"schema":{"type":"string"}},{"description":"GroupID is the exception group the instance belongs to. Required.","in":"query","name":"groupID","required":true,"schema":{"type":"string"}},{"description":"ErrorID is the exception instance id. Required by errorFromErrorID and\nnextPrevErrorIDs; unused by errorFromGroupID.","in":"query","name":"errorID","required":false,"schema":{"type":"string"}}],"summary":"Returns one exception instance and the span it happened on, by its error id within a group at a timestamp."}},"/v1/o11y/errorFromGroupID":{"get":{"parameters":[{"description":"Timestamp is the instance's time as a nanosecond epoch spelled as a\nstring. Required.","in":"query","name":"timestamp","required":true,"schema":{"type":"string"}},{"description":"GroupID is the exception group the instance belongs to. Required.","in":"query","name":"groupID","required":true,"schema":{"type":"string"}},{"description":"ErrorID is the exception instance id. Required by errorFromErrorID and\nnextPrevErrorIDs; unused by errorFromGroupID.","in":"query","name":"errorID","required":false,"schema":{"type":"string"}}],"summary":"Returns the representative exception instance of a group at a timestamp, and the span it happened on."}},"/v1/o11y/errortracking/issues":{"get":{"parameters":[{"description":"Status narrows to one lifecycle state: unresolved, resolved or ignored.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Level narrows to one severity, e.g. error, warning, info.","in":"query","name":"level","required":false,"schema":{"type":"string"}},{"description":"Environment narrows to one deployment environment.","in":"query","name":"environment","required":false,"schema":{"type":"string"}},{"description":"ServiceName narrows to one reporting service.","in":"query","name":"serviceName","required":false,"schema":{"type":"string"}},{"description":"Query narrows to issues whose text contains it.","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Sort orders the page, e.g. lastSeen, firstSeen, count.","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Offset is how many issues to skip. Zero starts at the first.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many issues come back. Zero means the default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the caller's org's grouped error issues (by fingerprint) with status, level, counts and first/last-seen."}},"/v1/o11y/errortracking/issues/{id}":{"get":{"parameters":[{"description":"ID is the issue id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one grouped issue with its latest occurrence sample."},"post":{"parameters":[{"description":"ID is the issue id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yErrorUpdateIssueIn"}}}},"summary":"Changes an issue's lifecycle — resolve, ignore, reopen or assign — and returns the updated issue."}},"/v1/o11y/event":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yEventIn"}}}},"summary":"Records one product-analytics event for the signed-in user — a track event with a name and free-form attributes."}},"/v1/o11y/explorer/views":{"get":{"parameters":[{"description":"SourcePage narrows the views to one source page, e.g. traces, logs.","in":"query","name":"sourcePage","required":false,"schema":{"type":"string"}},{"description":"Name narrows the views to one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Category narrows the views to one category.","in":"query","name":"category","required":false,"schema":{"type":"string"}}],"summary":"Lists the caller's org's saved explorer views, optionally narrowed to one source page, name or category."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.SavedView"}}}},"summary":"Saves a new explorer view for the caller's org and returns its id."}},"/v1/o11y/explorer/views/{viewId}":{"delete":{"parameters":[{"description":"ViewID is the view's id.","in":"path","name":"viewId","required":true,"schema":{"type":"string"}}],"summary":"Deletes one saved explorer view by id."},"get":{"parameters":[{"description":"ViewID is the view's id.","in":"path","name":"viewId","required":true,"schema":{"type":"string"}}],"summary":"Returns one saved explorer view by id."},"put":{"parameters":[{"description":"ViewID is the id of the view to replace, taken from the URL.","in":"path","name":"viewId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySavedViewUpdateIn"}}}},"summary":"Replaces one saved explorer view by id with the given view and echoes it back."}},"/v1/o11y/export_raw_data":{"post":{"summary":"Export raw telemetry rows as a file"}},"/v1/o11y/factor_password/forgot":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yForgotPasswordIn"}}}},"summary":"Starts the forgotten-password flow: the named user is mailed a reset link."}},"/v1/o11y/features":{"get":{"summary":"Returns the supported feature flags and their resolved values for the caller's org."}},"/v1/o11y/fields/keys":{"get":{"parameters":[{"description":"Signal is the telemetry to read the fields of — traces, logs or metrics.","in":"query","name":"signal","required":false,"schema":{"type":"string"}},{"description":"Source narrows the fields to one source within the signal.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"StartUnixMilli is the window start as a unix millisecond epoch. Zero reads\nas unset.","in":"query","name":"startUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"EndUnixMilli is the window end as a unix millisecond epoch. Zero reads as\nunset.","in":"query","name":"endUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"FieldContext narrows the keys to one context — resource, scope, attribute,\nspan, log or metric.","in":"query","name":"fieldContext","required":false,"schema":{"type":"string"}},{"description":"FieldDataType narrows the keys to one data type.","in":"query","name":"fieldDataType","required":false,"schema":{"type":"string"}},{"description":"MetricName narrows the keys to those on one metric.","in":"query","name":"metricName","required":false,"schema":{"type":"string"}},{"description":"MetricNamespace narrows the keys to one metric namespace.","in":"query","name":"metricNamespace","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}}],"summary":"Returns the telemetry field keys matching the selector — the signal's fields grouped by name, and whether the catalog is complete."}},"/v1/o11y/fields/values":{"get":{"parameters":[{"description":"Signal is the telemetry to read the field of — traces, logs or metrics.","in":"query","name":"signal","required":false,"schema":{"type":"string"}},{"description":"Source narrows the field to one source within the signal.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"StartUnixMilli is the window start as a unix millisecond epoch. Zero reads\nas unset.","in":"query","name":"startUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"EndUnixMilli is the window end as a unix millisecond epoch. Zero reads as\nunset.","in":"query","name":"endUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"FieldContext narrows the field to one context.","in":"query","name":"fieldContext","required":false,"schema":{"type":"string"}},{"description":"FieldDataType narrows the field to one data type.","in":"query","name":"fieldDataType","required":false,"schema":{"type":"string"}},{"description":"MetricName narrows the field to one metric.","in":"query","name":"metricName","required":false,"schema":{"type":"string"}},{"description":"MetricNamespace narrows the field to one metric namespace.","in":"query","name":"metricNamespace","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"Name is the field whose values to read.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"ExistingQuery is the query the field appears in, so related values can be\nsuggested for it.","in":"query","name":"existingQuery","required":false,"schema":{"type":"string"}}],"summary":"Returns the values one telemetry field has taken — string, bool, number and related values — and whether the value list is complete."}},"/v1/o11y/filter_suggestions":{"get":{"parameters":[{"description":"DataSource is the signal suggestions are drawn from; only logs is\nsupported today. Required.","in":"query","name":"dataSource","required":true,"schema":{"type":"string"}},{"description":"SearchText narrows attribute suggestions to keys containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"ExistingFilter is the current filter set, JSON base64url-encoded, so\nexample queries build on it rather than repeat it.","in":"query","name":"existingFilter","required":false,"schema":{"type":"string"}},{"description":"AttributesLimit caps how many attribute keys come back.","in":"query","name":"attributesLimit","required":false,"schema":{"type":"integer"}},{"description":"ExamplesLimit caps how many example queries come back.","in":"query","name":"examplesLimit","required":false,"schema":{"type":"integer"}}],"summary":"Suggests attribute keys and example filter queries for the query builder, seeded by what the org's own telemetry carries."}},"/v1/o11y/gateway/ingestion_keys":{"get":{"parameters":[{"description":"Page is the 1-based page number.","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"PerPage is the page size.","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}}],"summary":"Lists the workspace's ingestion keys, paginated."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableIngestionKey"}}}},"summary":"Mints an ingestion key for the workspace, answering with the created key."}},"/v1/o11y/gateway/ingestion_keys/limits/{limitId}":{"delete":{"parameters":[{"in":"path","name":"limitId","required":true,"schema":{"type":"string"}}],"summary":"Removes an ingestion key limit, by limit id."},"patch":{"parameters":[{"in":"path","name":"limitId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdateLimitIn"}}}},"summary":"Changes an ingestion key limit, by limit id."}},"/v1/o11y/gateway/ingestion_keys/search":{"get":{"parameters":[{"description":"Name is the substring to match ingestion-key names against.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page number.","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"PerPage is the page size.","in":"query","name":"per_page","required":false,"schema":{"type":"integer"}}],"summary":"Lists the workspace's ingestion keys whose name matches the search, paginated."}},"/v1/o11y/gateway/ingestion_keys/{keyId}":{"delete":{"parameters":[{"in":"path","name":"keyId","required":true,"schema":{"type":"string"}}],"summary":"Removes an ingestion key, by id."},"patch":{"parameters":[{"in":"path","name":"keyId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdateIngestionKeyIn"}}}},"summary":"Changes an ingestion key, by id."}},"/v1/o11y/gateway/ingestion_keys/{keyId}/limits":{"post":{"parameters":[{"in":"path","name":"keyId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yCreateLimitIn"}}}},"summary":"Sets a signal limit on an ingestion key, by key id, answering with the created limit."}},"/v1/o11y/getResetPasswordToken/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns a user's password-reset token, creating one if none is live."}},"/v1/o11y/global/config":{"get":{"summary":"Returns the deployment's global configuration: its public endpoints and which identity providers are enabled."}},"/v1/o11y/health":{"get":{"parameters":[{"description":"Live also checks the datastore connection; an unreachable store refuses\nwith 503.","in":"query","name":"live","required":false,"schema":{"type":"boolean"}}],"summary":"Reports service health."}},"/v1/o11y/healthz":{"get":{"summary":"Health of the observability runtime's services"}},"/v1/o11y/hosts/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys hosts report, for building host filters — each with its data type and whether it is a materialized column."}},"/v1/o11y/hosts/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one host attribute key has taken, for building host filters — string, number and bool values in their own lists."}},"/v1/o11y/hosts/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.HostListRequest"}}}},"summary":"Lists monitored hosts over a time range, each with its CPU, memory, I/O wait and 15-minute load, whether it is actively reporting, its OS and its attributes; filterable, groupable and paginated."}},"/v1/o11y/infra_monitoring/checks":{"get":{"parameters":[{"description":"Type is the section to check — hosts, processes, pods, nodes,\ndeployments, daemonsets, statefulsets, jobs, namespaces, clusters or\nvolumes. Required.","in":"query","name":"type","required":true,"schema":{"type":"string"}}],"summary":"Reports whether the metrics and attributes an infra-monitoring section needs are being received — for each collector receiver or processor involved, what is present and what is missing, with a user-facing message and a docs link per missing piece."}},"/v1/o11y/infra_monitoring/clusters":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableClusters"}}}},"summary":"Lists Kubernetes clusters with CPU and memory usage against allocatable capacity summed over their nodes, plus per-group node readiness and pod phase counts."}},"/v1/o11y/infra_monitoring/daemonsets":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableDaemonSets"}}}},"summary":"Lists Kubernetes daemonsets with the CPU and memory their pods used against request and limit, the latest desired and current scheduled NODE counts (node counts, not pod counts), and per-group pod phase counts."}},"/v1/o11y/infra_monitoring/deployments":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableDeployments"}}}},"summary":"Lists Kubernetes deployments with the CPU and memory their pods used against request and limit, the latest desired and available replica counts, and per-group pod phase counts."}},"/v1/o11y/infra_monitoring/hosts":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableHosts"}}}},"summary":"Lists hosts with key infrastructure metrics — CPU, memory, I/O wait and disk usage percentages and 15-minute load — plus an active/inactive status from whether the host reported in the last ten minutes."}},"/v1/o11y/infra_monitoring/jobs":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableJobs"}}}},"summary":"Lists Kubernetes jobs with the CPU and memory their pods used against request and limit, the latest desired-successful, active, failed and successful pod counters, and per-group pod phase counts — the phase counts are current state while the counters are cumulative over the job's life."}},"/v1/o11y/infra_monitoring/namespaces":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableNamespaces"}}}},"summary":"Lists Kubernetes namespaces with the CPU and memory their pods used and per-group pod phase counts."}},"/v1/o11y/infra_monitoring/nodes":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableNodes"}}}},"summary":"Lists Kubernetes nodes with CPU and memory usage against allocatable capacity, per-group readiness counts and per-group phase counts for the pods scheduled on them."}},"/v1/o11y/infra_monitoring/pods":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostablePods"}}}},"summary":"Lists Kubernetes pods with CPU and memory usage against request and limit, the pod's phase and its age, plus its namespace, node, owning workload and cluster attributes."}},"/v1/o11y/infra_monitoring/pvcs":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableVolumes"}}}},"summary":"Lists Kubernetes persistent volume claims with available, capacity and used bytes and inode counts, plus the claim's pod, namespace, node, statefulset and cluster attributes."}},"/v1/o11y/infra_monitoring/statefulsets":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableStatefulSets"}}}},"summary":"Lists Kubernetes statefulsets with the CPU and memory their pods used against request and limit, the latest desired and current replica counts, and per-group pod phase counts."}},"/v1/o11y/infra_onboarding/k8s/status":{"get":{"summary":"Reports how far Kubernetes infra onboarding has progressed: which metric families have arrived and, per pod, which required metadata labels are present."}},"/v1/o11y/integrations":{"get":{"parameters":[{"description":"IsInstalled, when \"true\" or \"false\", keeps only integrations in that\ninstalled state; empty lists them all.","in":"query","name":"is_installed","required":false,"schema":{"type":"string"}}],"summary":"Lists the available integrations and whether each is installed in the caller's org, optionally narrowed to installed or not-installed."}},"/v1/o11y/integrations/install":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.InstallIntegrationRequest"}}}},"summary":"Installs an integration into the caller's org from its id and configuration, answering with the installed catalog item."}},"/v1/o11y/integrations/uninstall":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.UninstallIntegrationRequest"}}}},"summary":"Removes an integration from the caller's org by id."}},"/v1/o11y/integrations/{integrationId}":{"get":{"parameters":[{"in":"path","name":"integrationId","required":true,"schema":{"type":"string"}}],"summary":"Returns one integration's full detail — its overview, configuration steps, collected data and assets — together with its installation record when the org has installed it."}},"/v1/o11y/integrations/{integrationId}/connection_status":{"get":{"parameters":[{"in":"path","name":"integrationId","required":true,"schema":{"type":"string"}},{"description":"LookbackSeconds is how far back to look for received telemetry, in\nseconds.","in":"query","name":"lookback_seconds","required":false,"schema":{"type":"integer"}}],"summary":"Reports whether the integration's logs and metrics have been received over the lookback window, so the console can show a live connection state."}},"/v1/o11y/invite":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yInviteIn"}}}},"summary":"Invites one person to the caller's org by email, with the role they will hold when they accept."}},"/v1/o11y/invite/bulk":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yBulkInviteIn"}}}},"summary":"Invites several people to the caller's org in one call, refusing the whole batch when any email repeats."}},"/v1/o11y/jobs/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes jobs report, for building job filters."}},"/v1/o11y/jobs/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one job attribute key has taken, for building job filters."}},"/v1/o11y/jobs/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.JobListRequest"}}}},"summary":"Lists Kubernetes jobs over a time range, each with the CPU and memory its pods used against request and limit, desired-successful, active, failed and successful pod counts, restarts and attributes; filterable, groupable and paginated."}},"/v1/o11y/licenses":{"get":{"summary":"Lists the org's licenses."}},"/v1/o11y/licenses/active":{"get":{"summary":"Activates the enterprise license."}},"/v1/o11y/listErrors":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yErrorsListIn"}}}},"summary":"Lists the grouped exceptions in the query window — each an exception type with its message, count, service and first/last-seen — for the caller's org."}},"/v1/o11y/livez":{"get":{"summary":"Liveness of the observability process"}},"/v1/o11y/llm/annotation":{"get":{"parameters":[{"description":"TraceID narrows to annotations on one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"Queue narrows to one review queue.","in":"query","name":"queue","required":false,"schema":{"type":"string"}},{"description":"Status narrows to one review status, e.g. PENDING.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists human annotations on traces and observations, optionally scoped to one review queue."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yLLMIngestAnnotation"}}}},"summary":"Adds a human annotation to a trace or observation, optionally in a review queue."}},"/v1/o11y/llm/observations":{"get":{"parameters":[{"description":"Start is the start of the window as a unix-millisecond epoch. Zero means\n24h before the end.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a unix-millisecond epoch. Zero means now.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"TraceID narrows the view to one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"SessionID narrows the view to one conversation.","in":"query","name":"sessionId","required":false,"schema":{"type":"string"}},{"description":"UserID narrows the view to one end user.","in":"query","name":"userId","required":false,"schema":{"type":"string"}},{"description":"Name narrows the view to observations of one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Model narrows the view to one model.","in":"query","name":"model","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists gen_ai spans as LLM observations — each an LLM call with its model, token counts, cost and latency projected from gen_ai.* attributes, newest first, over the query window."}},"/v1/o11y/llm/score/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Hard-deletes a score by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns a single score by id."}},"/v1/o11y/llm/scores":{"get":{"parameters":[{"description":"TraceID narrows to scores on one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"ObservationID narrows to scores on one observation.","in":"query","name":"observationId","required":false,"schema":{"type":"string"}},{"description":"Name narrows to scores of one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Source narrows to scores from one source, e.g. API, EVAL.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists eval scores and human-feedback signals attached to traces and observations, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yLLMIngestScore"}}}},"summary":"Attaches an eval score or human-feedback signal to a trace or a single observation."}},"/v1/o11y/llm/sessions":{"get":{"parameters":[{"description":"Start is the start of the window as a unix-millisecond epoch. Zero means\n24h before the end.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a unix-millisecond epoch. Zero means now.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"TraceID narrows the view to one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"SessionID narrows the view to one conversation.","in":"query","name":"sessionId","required":false,"schema":{"type":"string"}},{"description":"UserID narrows the view to one end user.","in":"query","name":"userId","required":false,"schema":{"type":"string"}},{"description":"Name narrows the view to observations of one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Model narrows the view to one model.","in":"query","name":"model","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists conversations — gen_ai spans grouped by session.id, with their trace and observation counts, tokens and cost."}},"/v1/o11y/llm/traces":{"get":{"parameters":[{"description":"Start is the start of the window as a unix-millisecond epoch. Zero means\n24h before the end.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a unix-millisecond epoch. Zero means now.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"TraceID narrows the view to one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"SessionID narrows the view to one conversation.","in":"query","name":"sessionId","required":false,"schema":{"type":"string"}},{"description":"UserID narrows the view to one end user.","in":"query","name":"userId","required":false,"schema":{"type":"string"}},{"description":"Name narrows the view to observations of one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Model narrows the view to one model.","in":"query","name":"model","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists LLM traces — gen_ai spans grouped by trace_id, with cost, tokens and latency rolled up across each trace."}},"/v1/o11y/llm/users":{"get":{"parameters":[{"description":"Start is the start of the window as a unix-millisecond epoch. Zero means\n24h before the end.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a unix-millisecond epoch. Zero means now.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"TraceID narrows the view to one trace.","in":"query","name":"traceId","required":false,"schema":{"type":"string"}},{"description":"SessionID narrows the view to one conversation.","in":"query","name":"sessionId","required":false,"schema":{"type":"string"}},{"description":"UserID narrows the view to one end user.","in":"query","name":"userId","required":false,"schema":{"type":"string"}},{"description":"Name narrows the view to observations of one name.","in":"query","name":"name","required":false,"schema":{"type":"string"}},{"description":"Model narrows the view to one model.","in":"query","name":"model","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists end users — gen_ai spans grouped by user.id, with their session, trace and observation counts, tokens and cost."}},"/v1/o11y/llm_pricing_rules":{"get":{"parameters":[{"description":"Search matches rules by model or provider.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"IsOverride, when \"true\" or \"false\", narrows to user-pinned rules or to\nsynced ones; empty returns both. It is a string because a query param is a\nstring on the wire, and the runtime reads absent as \"no filter\".","in":"query","name":"isOverride","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rows to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rows come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the LLM pricing rules for the caller's org, with pagination and an optional search and override filter."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yLLMUpdatablePricingRules"}}}},"summary":"Writes the pricing-rule batch — the single write endpoint used by both the user and the Zeus sync job."}},"/v1/o11y/llm_pricing_rules/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Hard-deletes a pricing rule by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns a single LLM pricing rule by id."}},"/v1/o11y/login":{"get":{"summary":"Report why an observability sign-in did not complete"}},"/v1/o11y/logs":{"get":{"parameters":[{"description":"Limit caps how many records come back. Zero means the default of 100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"TimestampStart is the start of the window as a nanosecond epoch. Zero\nmeans fifteen minutes before the end.","in":"query","name":"timestampStart","required":false,"schema":{"type":"integer"}},{"description":"TimestampEnd is the end of the window as a nanosecond epoch. Zero means\nnow.","in":"query","name":"timestampEnd","required":false,"schema":{"type":"integer"}}],"summary":"Returns the most recent log records in the query window, newest first — each record an open object carrying its nanosecond timestamp and whatever fields the record was ingested with."}},"/v1/o11y/logs/aggregate":{"get":{"summary":"Returns the logs aggregate buckets for the query window."}},"/v1/o11y/logs/fields":{"get":{"summary":"Returns the log field catalog: the fields already selected as indexed columns, and the interesting ones seen in the data that could be."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFieldSetting"}}}},"summary":"Changes how one log field is stored — selects or deselects it as a materialized column and tunes its index — and echoes the setting back."}},"/v1/o11y/logs/livetail":{"get":{"summary":"Follow log records as they arrive"}},"/v1/o11y/logs/pipelines":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yLogPipelineCreateIn"}}}},"summary":"Saves the given log parsing pipelines as the new config version for the caller's org and starts deploying it."}},"/v1/o11y/logs/pipelines/preview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yLogPipelinePreviewIn"}}}},"summary":"Runs the given log parsing pipelines over the given sample records without saving anything, and returns the transformed records plus whatever the collector logged while simulating them."}},"/v1/o11y/logs/pipelines/{version}":{"get":{"parameters":[{"description":"Version is the config version to read — a positive number, or \"latest\".","in":"path","name":"version","required":true,"schema":{"type":"string"}}],"summary":"Returns the caller's org's log parsing pipelines at one config version — \"latest\" for the newest — along with that version's deployment record and the recent version history."}},"/v1/o11y/logs/promote_paths":{"get":{"summary":"Lists the log body paths already promoted or indexed, with the indexes each carries."},"post":{"requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/o11y.O11yLogPromotePath"},"type":"array"}}}},"summary":"Promotes and indexes log body paths: each named path is lifted out of the JSON body into its own column, with the indexes the caller asked for."}},"/v1/o11y/messaging-queues/kafka/consumer-lag/consumer-details":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the consumer side of a consumer-lag view: the consumer groups reading the topic/partition named in variables, with their throughput and latency over the window."}},"/v1/o11y/messaging-queues/kafka/consumer-lag/network-latency":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns consumer network latency correlated per client: a throughput pass over the window finds the consumer clients, then their fetch latency joins in as a latency column per client/instance/service."}},"/v1/o11y/messaging-queues/kafka/consumer-lag/producer-details":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the producer side of a consumer-lag view: the producers writing to the topic/partition named in variables, with their throughput and latency over the window."}},"/v1/o11y/messaging-queues/kafka/onboarding/consumers":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Checks whether the spans the Kafka consumer views need are arriving, row for row like producersOnboarding."}},"/v1/o11y/messaging-queues/kafka/onboarding/kafka":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Checks whether Kafka's own metrics — consumer lag and partition telemetry — are arriving, so the lag views can be lit up."}},"/v1/o11y/messaging-queues/kafka/onboarding/producers":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Checks whether the spans the Kafka producer views need are arriving — one row per required span attribute, with a pass/fail status and, on failure, what is missing from the instrumentation."}},"/v1/o11y/messaging-queues/kafka/partition-latency/consumer":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the consumer-group latency detail for the topic and partition named in the request's variables."}},"/v1/o11y/messaging-queues/kafka/partition-latency/overview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the per-partition latency overview for the window — each topic/partition with its throughput and latency profile."}},"/v1/o11y/messaging-queues/kafka/span/evaluation":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Correlates producer and consumer spans over the evaluation window (eval_time bounds the scan) and returns the pairings with their end-to-end delay — the check that messages produced are being consumed."}},"/v1/o11y/messaging-queues/kafka/topic-throughput/consumer":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the consumer topic-throughput overview for the window — what each consumer group read, per topic."}},"/v1/o11y/messaging-queues/kafka/topic-throughput/consumer-details":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Breaks one consumer topic's throughput down using the topic and service named in variables."}},"/v1/o11y/messaging-queues/kafka/topic-throughput/producer":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Returns the producer topic-throughput overview for the window — what each producer service wrote, per topic."}},"/v1/o11y/messaging-queues/kafka/topic-throughput/producer-details":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueIn"}}}},"summary":"Breaks one producer topic's throughput down using the topic and service named in variables."}},"/v1/o11y/messaging-queues/queue-overview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueueListIn"}}}},"summary":"Lists the messaging destinations observed in the window — one row per queue/destination/service combination with its throughput and latency columns."}},"/v1/o11y/metric/metric_metadata":{"get":{"parameters":[{"description":"MetricName is the metric to read.","in":"query","name":"metricName","required":false,"schema":{"type":"string"}},{"description":"ServiceName scopes the metadata to the metric as one service reports it.","in":"query","name":"serviceName","required":false,"schema":{"type":"string"}}],"summary":"Serves the OLDER /metric/metric_metadata route."}},"/v1/o11y/metric_reduction_rules":{"get":{"parameters":[{"description":"OrderBy sorts the page: metric, ingested_volume, reduced_volume or\nlast_updated. Unset means ingested_volume.","in":"query","name":"orderBy","required":false,"schema":{"type":"string"}},{"description":"Order is asc or desc. Unset means desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"Search narrows the page to rules whose metric name contains it.","in":"query","name":"search","required":false,"schema":{"type":"string"}},{"description":"MetricName narrows the page to one metric's rule.","in":"query","name":"metricName","required":false,"schema":{"type":"string"}},{"description":"Offset is how many rules to skip, for paging.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many rules come back, at most 1000. Unset means 10.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the org's metric volume-control (label reduction) rules, pageable and sortable by name, volume or recency."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yReductionRuleCreateIn"}}}},"summary":"Creates a volume-control rule for a metric and returns it with its id; a metric that already has a rule is refused."}},"/v1/o11y/metric_reduction_rules/preview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yReductionRulePreviewIn"}}}},"summary":"Estimates the series reduction and the dashboards and alerts a candidate volume-control rule would touch, without persisting it."}},"/v1/o11y/metric_reduction_rules/stats":{"get":{"summary":"Returns total ingested vs retained series and samples and the estimated monthly savings across all volume-control rules."}},"/v1/o11y/metric_reduction_rules/timeseries":{"get":{"summary":"Returns ingested vs retained series over time across all volume-control rules, in hourly buckets, in the query-range time-series response shape."}},"/v1/o11y/metric_reduction_rules/{id}":{"delete":{"parameters":[{"description":"ID is the rule's id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes a volume-control rule by its id."},"get":{"parameters":[{"description":"ID is the rule's id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one volume-control rule by its id."},"put":{"parameters":[{"description":"ID is the rule's id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yReductionRuleSaveIn"}}}},"summary":"Updates the match type and labels of a volume-control rule by its id; the metric name is immutable."}},"/v1/o11y/metrics":{"get":{"parameters":[{"description":"Start is the start of the window as a Unix timestamp in milliseconds.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a Unix timestamp in milliseconds.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many metrics come back; unset means 100, at most 5000.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"SearchText narrows the page to metric names containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"Source narrows the page by ingestion source.","in":"query","name":"source","required":false,"schema":{"type":"string"}}],"summary":"Lists the distinct metric names seen in a time range, each with its description, type, unit, temporality and monotonicity."}},"/v1/o11y/metrics/alerts":{"get":{"parameters":[{"description":"MetricName is the metric's name; it may contain slashes, e.g.\nrun.googleapis.com/request_latencies. Required.","in":"query","name":"metricName","required":true,"schema":{"type":"string"}}],"summary":"Lists the alert rules that reference a metric."}},"/v1/o11y/metrics/attributes":{"get":{"parameters":[{"description":"MetricName is the metric's name; it may contain slashes. Required.","in":"query","name":"metricName","required":true,"schema":{"type":"string"}},{"description":"Start is the start of the window as a Unix timestamp in milliseconds.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the end of the window as a Unix timestamp in milliseconds.","in":"query","name":"end","required":false,"schema":{"type":"integer"}}],"summary":"Returns one metric's attribute keys, each with its unique values and their count."}},"/v1/o11y/metrics/dashboards":{"get":{"parameters":[{"description":"MetricName is the metric's name; it may contain slashes, e.g.\nrun.googleapis.com/request_latencies. Required.","in":"query","name":"metricName","required":true,"schema":{"type":"string"}}],"summary":"Lists the dashboard panels that reference a metric."}},"/v1/o11y/metrics/highlights":{"get":{"parameters":[{"description":"MetricName is the metric's name; it may contain slashes, e.g.\nrun.googleapis.com/request_latencies. Required.","in":"query","name":"metricName","required":true,"schema":{"type":"string"}}],"summary":"Returns one metric's headline numbers: data points, total and active time series, and when it was last received."}},"/v1/o11y/metrics/inspect":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yMetricInspectIn"}}}},"summary":"Returns one metric's raw time series over a window of at most thirty minutes — each series with its labels and timestamp/value pairs."}},"/v1/o11y/metrics/metadata":{"get":{"parameters":[{"description":"MetricName is the metric's name; it may contain slashes, e.g.\nrun.googleapis.com/request_latencies. Required.","in":"query","name":"metricName","required":true,"schema":{"type":"string"}}],"summary":"Returns one metric's metadata: description, type, unit, temporality and monotonicity."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yMetricMetadataSaveIn"}}}},"summary":"Updates one metric's metadata — description, type, unit, temporality, monotonicity — and answers with the bare success envelope."}},"/v1/o11y/metrics/onboarding":{"get":{"summary":"Reports whether any non-O11y metrics have been ingested — the lightweight check onboarding polls."}},"/v1/o11y/metrics/stats":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yMetricStatsIn"}}}},"summary":"Lists metrics with their sample and time-series counts for a time range — the volume view of the metrics explorer, pageable and sortable."}},"/v1/o11y/metrics/treemap":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yMetricTreemapIn"}}}},"summary":"Returns the proportional distribution of metrics by sample count or time-series count, as the entries of a treemap."}},"/v1/o11y/namespaces/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes namespaces report, for building namespace filters."}},"/v1/o11y/namespaces/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one namespace attribute key has taken, for building namespace filters."}},"/v1/o11y/namespaces/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.NamespaceListRequest"}}}},"summary":"Lists Kubernetes namespaces over a time range, each with the CPU and memory its pods used, their phase counts and its attributes; filterable, groupable and paginated."}},"/v1/o11y/nextPrevErrorIDs":{"get":{"parameters":[{"description":"Timestamp is the instance's time as a nanosecond epoch spelled as a\nstring. Required.","in":"query","name":"timestamp","required":true,"schema":{"type":"string"}},{"description":"GroupID is the exception group the instance belongs to. Required.","in":"query","name":"groupID","required":true,"schema":{"type":"string"}},{"description":"ErrorID is the exception instance id. Required by errorFromErrorID and\nnextPrevErrorIDs; unused by errorFromGroupID.","in":"query","name":"errorID","required":false,"schema":{"type":"string"}}],"summary":"Returns the ids of the exception instances immediately after and before a given one within its group — the paging cursor the error detail view walks."}},"/v1/o11y/nodes/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes nodes report, for building node filters."}},"/v1/o11y/nodes/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one node attribute key has taken, for building node filters."}},"/v1/o11y/nodes/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.NodeListRequest"}}}},"summary":"Lists Kubernetes nodes over a time range, each with its CPU and memory usage against allocatable capacity, readiness condition counts and attributes; filterable, groupable and paginated."}},"/v1/o11y/org/preferences":{"get":{"summary":"Lists every org-scoped preference, each with its current and default value."}},"/v1/o11y/org/preferences/{name}":{"get":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one org-scoped preference, by name."},"put":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdatablePreference"}}}},"summary":"Sets one org-scoped preference, by name."}},"/v1/o11y/orgs/me":{"get":{"summary":"Returns the caller's own organization."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yOrganization"}}}},"summary":"Rewrites the caller's own organization record — display name, name, alias — always addressed as \"me\", never by id."}},"/v1/o11y/orgs/me/filters":{"get":{"summary":"Returns the org's quick filters for every signal — the attribute shortlists its explorers offer as one-click filters."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdatableQuickFilters"}}}},"summary":"Replaces the org's quick filters for one signal with the attribute list given."}},"/v1/o11y/orgs/me/filters/{signal}":{"get":{"parameters":[{"in":"path","name":"signal","required":true,"schema":{"type":"string"}}],"summary":"Returns the org's quick filters for one signal — traces, logs, metrics, exceptions or api_monitoring."}},"/v1/o11y/pods/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes pods report, for building pod filters."}},"/v1/o11y/pods/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one pod attribute key has taken, for building pod filters."}},"/v1/o11y/pods/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PodListRequest"}}}},"summary":"Lists Kubernetes pods over a time range, each with its CPU and memory usage against request and limit, restart count, phase counts and attributes; filterable, groupable and paginated."}},"/v1/o11y/processes/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys processes report, for building process filters."}},"/v1/o11y/processes/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one process attribute key has taken, for building process filters."}},"/v1/o11y/processes/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.ProcessListRequest"}}}},"summary":"Lists monitored processes over a time range, each with its name, PID, command line and CPU and memory usage; filterable, groupable and paginated."}},"/v1/o11y/product/metrics":{"get":{"parameters":[{"description":"Product is the console product slug to read, e.g. \"kms\". Required.","example":"kms","in":"query","name":"product","required":false,"schema":{"type":"string"}},{"description":"Range is the window in seconds. Default 3600, capped at 604800 (7d).","example":3600,"in":"query","name":"range","required":false,"schema":{"type":"integer"}},{"description":"StepSec is the bucket width in seconds, clamped to [30, 3600]. Absent\npicks ~60 buckets across the range.","in":"query","name":"stepSec","required":false,"schema":{"type":"integer"}}],"summary":"Returns one product's RED series — request rate, errors, p50 and p95 latency — for the caller's org, plus that org's LLM usage rollup over the same window."}},"/v1/o11y/public/dashboards/{id}":{"get":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns the sanitized dashboard data for public access — the read a shared dashboard's public page makes."}},"/v1/o11y/public/dashboards/{id}/widgets/{idx}/query_range":{"get":{"parameters":[{"description":"ID is the public dashboard id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Idx is the widget's index from the path.","in":"path","name":"idx","required":true,"schema":{"type":"string"}},{"description":"StartTime is the window start as a millisecond epoch. Used only when the\nshare enables a caller-chosen time range.","in":"query","name":"startTime","required":false,"schema":{"type":"string"}},{"description":"EndTime is the window end as a millisecond epoch. Used only when the share\nenables a caller-chosen time range.","in":"query","name":"endTime","required":false,"schema":{"type":"string"}}],"summary":"Returns the query-range result for one widget of a public dashboard."}},"/v1/o11y/pvcs/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys persistent volume claims report, for building volume filters."}},"/v1/o11y/pvcs/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one persistent-volume-claim attribute key has taken, for building volume filters."}},"/v1/o11y/pvcs/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.VolumeListRequest"}}}},"summary":"Lists Kubernetes persistent volume claims over a time range, each with its available, capacity and used bytes, inode counts and attributes; filterable, groupable and paginated."}},"/v1/o11y/query":{"get":{"parameters":[{"description":"Query is the PromQL expression to evaluate. Required.","in":"query","name":"query","required":true,"schema":{"type":"string"}},{"description":"Time is the evaluation timestamp — epoch seconds or RFC3339. Empty\nevaluates at now.","in":"query","name":"time","required":false,"schema":{"type":"string"}},{"description":"Stats set to any non-empty value includes query statistics in the answer.","in":"query","name":"stats","required":false,"schema":{"type":"string"}},{"description":"Timeout caps evaluation time, as a duration in seconds.","in":"query","name":"timeout","required":false,"schema":{"type":"string"}}],"summary":"Evaluates one instant PromQL query against the org's metrics and returns the result at a single point in time."}},"/v1/o11y/query_filter/analyze":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yAnalyzeIn"}}}},"summary":"Analyzes a query and extracts the metric names it reads and the columns it groups by."}},"/v1/o11y/query_progress":{"get":{"summary":"Watch one running query's progress"}},"/v1/o11y/query_range":{"get":{"parameters":[{"description":"Start is the window start — a unix timestamp (seconds, with optional\nfraction) or an RFC 3339 time. Required.","in":"query","name":"start","required":true,"schema":{"type":"string"}},{"description":"End is the window end, in the same form as Start, and not before it.\nRequired.","in":"query","name":"end","required":true,"schema":{"type":"string"}},{"description":"Step is the query resolution, e.g. 60s, 1m, 1h — a positive duration.\nRequired.","in":"query","name":"step","required":true,"schema":{"type":"string"}},{"description":"Query is the PromQL expression to evaluate. Required.","in":"query","name":"query","required":true,"schema":{"type":"string"}},{"description":"Stats, when \"all\", asks for query statistics alongside the result.","in":"query","name":"stats","required":false,"schema":{"type":"string"}},{"description":"Timeout caps how long the query may run, e.g. 30s, 1m — a positive\nduration. Absent means the server default.","in":"query","name":"timeout","required":false,"schema":{"type":"string"}}],"summary":"Runs a Prometheus-style range query over metrics — the legacy read that predates the v5 querier — and returns the matrix, vector or scalar the query resolved to."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.QueryRangeRequest"}}}},"summary":"Executes a composite query over a time range: builder queries over traces, logs and metrics, formulas, trace operators, PromQL and Datastore SQL, answering time series, scalars or raw records as the request type asks."}},"/v1/o11y/query_range/format":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.QueryRangeParamsV3"}}}},"summary":"Parses a builder query and echoes it back normalized to the v3 shape — the endpoint the UI uses to canonicalize a query without running it."}},"/v1/o11y/query_range/preview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yQueryRangePreviewIn"}}}},"summary":"Validates a composite query and renders the Datastore statements it would run WITHOUT executing it — a dry run for agentic and tooling use."}},"/v1/o11y/readyz":{"get":{"summary":"Readiness of the observability runtime to serve"}},"/v1/o11y/register":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRegisterIn"}}}},"summary":"Creates the FIRST organization and its admin user."}},"/v1/o11y/resetPassword":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yResetPasswordIn"}}}},"summary":"Sets a new password for whoever the reset token was minted for, consuming the token."}},"/v1/o11y/reset_password_tokens/verify":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yResetTokenRef"}}}},"summary":"Checks that a reset-password token exists and has not expired, without consuming it."}},"/v1/o11y/reviews":{"get":{"parameters":[{"description":"Page is the 1-based page to read. Default 1.","example":1,"in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Limit is how many rows to return. Default 20, capped at 100.","example":20,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns a page of the caller org's human-review queues, newest first, narrowed to the caller's project."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.createQueueReq"}}}},"summary":"Creates a human-review queue in the caller's org and project."}},"/v1/o11y/reviews/{id}":{"delete":{"parameters":[{"description":"ID is the annotation queue to act on, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one review queue and every item in it."},"get":{"parameters":[{"description":"ID is the annotation queue to act on, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one review queue with its pending and completed counts and its first page of items."},"patch":{"parameters":[{"description":"ID is the annotation queue to update, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.updateQueueIn"}}}},"summary":"Changes a review queue's name, description or score-config set."}},"/v1/o11y/reviews/{id}/items":{"get":{"parameters":[{"description":"ID is the annotation queue whose items to list, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Status filters to PENDING or COMPLETED items. Absent returns both.","example":"PENDING","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Page is the 1-based page to read. Default 1.","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Limit is how many rows to return. Default 20, capped at 100.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns a page of one review queue's items, newest first, optionally filtered to PENDING or COMPLETED."},"post":{"parameters":[{"description":"ID is the annotation queue to add to, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.addItemsIn"}}}},"summary":"Enqueues traces, observations or sessions on a review queue."}},"/v1/o11y/reviews/{id}/items/{itemId}":{"patch":{"parameters":[{"description":"ID is the annotation queue the item belongs to, from the path.","example":"annq_1","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"ItemID is the item to update, from the path.","example":"annqi_1","in":"path","name":"itemId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.updateItemIn"}}}},"summary":"Moves one queue item between PENDING and COMPLETED and sets its assignee."}},"/v1/o11y/roles":{"get":{"summary":"Lists every role in the caller's org — the managed ones the platform seeds and the custom ones its admins created."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRoleCreateIn"}}}},"summary":"Creates a custom role in the caller's org from a name, an optional description and the transaction groups it grants, answering the new role's id."}},"/v1/o11y/roles/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes a custom role."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one role with the transaction groups it grants."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRoleUpdateIn"}}}},"summary":"Replaces a custom role's description and transaction groups."}},"/v1/o11y/roles/{id}/users":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns every org member holding a role, by role id."}},"/v1/o11y/route_policies":{"get":{"summary":"Lists the org's route policies."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableRoutePolicy"}}}},"summary":"Creates a route policy, answering with the stored policy."}},"/v1/o11y/route_policies/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes a route policy, by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one route policy, by id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRoutePolicyUpdateIn"}}}},"summary":"Replaces a route policy, by id, answering with the stored policy."}},"/v1/o11y/rules":{"get":{"summary":"Lists all alert rules with their current evaluation state."},"post":{"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Creates a new alert rule and answers with the stored rule."}},"/v1/o11y/rules/test":{"post":{"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Fires a test notification for a rule definition without saving it, answering with how many series would alert."}},"/v1/o11y/rules/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes an alert rule, by id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one alert rule with its evaluation state, by id."},"patch":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Applies a partial update to an alert rule, by id, answering with the stored rule — the common toggle for enabling or muting a rule."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Replaces an alert rule's definition, by id."}},"/v1/o11y/rules/{id}/history/filter_keys":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"StartUnixMilli is the window start, unix milliseconds.","in":"query","name":"startUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"EndUnixMilli is the window end, unix milliseconds.","in":"query","name":"endUnixMilli","required":false,"schema":{"type":"integer"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50, capped at 200.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Returns the distinct label keys present in a rule's history entries over the selected range, for building history filters."}},"/v1/o11y/rules/{id}/history/filter_values":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"query","name":"startUnixMilli","required":false,"schema":{"type":"integer"}},{"in":"query","name":"endUnixMilli","required":false,"schema":{"type":"integer"}},{"in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Name is the label key whose values to list. Required.","in":"query","name":"name","required":true,"schema":{"type":"string"}},{"description":"ExistingQuery is a filter expression scoping which values appear.","in":"query","name":"existingQuery","required":false,"schema":{"type":"string"}}],"summary":"Returns the distinct values a given label key has taken across a rule's history entries."}},"/v1/o11y/rules/{id}/history/overall_status":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Start is the window start, unix milliseconds. Required by the runtime.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the window end, unix milliseconds. Required by the runtime.","in":"query","name":"end","required":false,"schema":{"type":"integer"}}],"summary":"Returns the overall firing/inactive intervals for a rule over the selected range."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRuleHistoryQueryIn"}}}},"summary":"Returns the overall firing/inactive windows for a rule, for the posted query range."}},"/v1/o11y/rules/{id}/history/stats":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Start is the window start, unix milliseconds. Required by the runtime.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the window end, unix milliseconds. Required by the runtime.","in":"query","name":"end","required":false,"schema":{"type":"integer"}}],"summary":"Returns trigger and resolution statistics for a rule over the selected time range, current window against the prior one."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRuleHistoryQueryIn"}}}},"summary":"Returns trigger and resolution statistics for a rule, current window against the prior one, for the posted query range."}},"/v1/o11y/rules/{id}/history/timeline":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Start is the window start, unix milliseconds. Required by the runtime.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the window end, unix milliseconds. Required by the runtime.","in":"query","name":"end","required":false,"schema":{"type":"integer"}},{"description":"State keeps only entries in one alert state, e.g. firing or normal.","in":"query","name":"state","required":false,"schema":{"type":"string"}},{"description":"FilterExpression narrows entries to those whose labels match it.","in":"query","name":"filterExpression","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many entries come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Order sorts by time, asc or desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"Cursor resumes a previous page; opaque, returned as nextCursor.","in":"query","name":"cursor","required":false,"schema":{"type":"string"}}],"summary":"Returns paginated timeline entries for a rule's state transitions, filterable by state and a label expression, cursor-paginated."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRuleHistoryQueryIn"}}}},"summary":"Returns a rule's state-transition timeline for the posted query range, each entry carrying its related-logs or related-traces link."}},"/v1/o11y/rules/{id}/history/top_contributors":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Start is the window start, unix milliseconds. Required by the runtime.","in":"query","name":"start","required":false,"schema":{"type":"integer"}},{"description":"End is the window end, unix milliseconds. Required by the runtime.","in":"query","name":"end","required":false,"schema":{"type":"integer"}}],"summary":"Returns the label combinations that contributed most to a rule firing over the selected range."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRuleHistoryQueryIn"}}}},"summary":"Returns the label combinations that contributed most to a rule firing, for the posted query range."}},"/v1/o11y/service/entry_point_operations":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yOperationsIn"}}}},"summary":"Returns one service's entry-point operations with the same latency and error profile topOperations reports."}},"/v1/o11y/service/top_level_operations":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yTopLevelOpsIn"}}}},"summary":"Maps each service to its entry-point span names — for the one service named in the request, or for every service when none is."}},"/v1/o11y/service/top_operations":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yOperationsIn"}}}},"summary":"Returns one service's heaviest operations in the window, each with p50/p95/p99 latency, how often it ran and how often it errored."}},"/v1/o11y/service_accounts":{"get":{"summary":"Lists the caller's org's service accounts."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yServiceAccountCreateIn"}}}},"summary":"Creates a service account in the caller's org, answering its id."}},"/v1/o11y/service_accounts/me":{"get":{"summary":"Returns the calling service account itself, with the roles it holds — the self-inspection read for a key-authenticated caller."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yMyServiceAccountUpdateIn"}}}},"summary":"Renames the calling service account."}},"/v1/o11y/service_accounts/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes a service account and revokes every key it holds."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one service account with the roles it holds."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yServiceAccountUpdateIn"}}}},"summary":"Renames a service account."}},"/v1/o11y/service_accounts/{id}/keys":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Lists a service account's API keys — metadata only, never the secrets."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yAPIKeyCreateIn"}}}},"summary":"Mints an API key for a service account and answers the key's id and its secret — the one time the secret is ever shown."}},"/v1/o11y/service_accounts/{id}/keys/{fid}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"fid","required":true,"schema":{"type":"string"}}],"summary":"Revokes an API key."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"fid","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yAPIKeyUpdateIn"}}}},"summary":"Renames an API key or moves its expiry."}},"/v1/o11y/service_accounts/{id}/roles":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Lists the roles a service account holds."},"post":{"parameters":[{"description":"RoleID is the id of the role to assign. Required.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yServiceAccountRoleGrantIn"}}}},"summary":"Assigns a role, named by its id, to a service account."}},"/v1/o11y/service_accounts/{id}/roles/{rid}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"rid","required":true,"schema":{"type":"string"}}],"summary":"Removes a role from a service account."}},"/v1/o11y/services":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yServicesIn"}}}},"summary":"Lists the instrumented services seen in the window, each with the request profile of its entry-point spans: p99 and average latency, call and error rates, and the entry-point operations the numbers were computed over."}},"/v1/o11y/services/list":{"get":{"summary":"Lists the name of every service the trace store holds, with no window applied — the complete catalog, for pickers and autocomplete."}},"/v1/o11y/sessions":{"delete":{"summary":"Signs the calling session out, invalidating its tokens."},"get":{"summary":"List the caller org's LLM sessions"}},"/v1/o11y/sessions/context":{"get":{"parameters":[{"description":"Email is the address about to sign in. Required.","in":"query","name":"email","required":false,"schema":{"type":"string"}},{"description":"Ref is the page the sign-in started from, carried into SSO redirects.","in":"query","name":"ref","required":false,"schema":{"type":"string"}}],"summary":"Tells a sign-in page what an email address can do: which orgs the address belongs to and, per org, which password and SSO routes are open to it."}},"/v1/o11y/sessions/email_password":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yEmailPasswordSessionIn"}}}},"summary":"Signs a user in with email and password and answers with the session's token pair."}},"/v1/o11y/sessions/rotate":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRotateSessionIn"}}}},"summary":"Exchanges a refresh token for a fresh token pair, retiring the old pair."}},"/v1/o11y/settings/apdex":{"get":{"parameters":[{"description":"Services are the service names, comma separated.","in":"query","name":"services","required":false,"schema":{"type":"string"}}],"summary":"Returns apdex settings for the named services."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yApdexSetIn"}}}},"summary":"Sets one service's apdex threshold and the status codes excluded from its score."}},"/v1/o11y/settings/ttl":{"get":{"summary":"Returns the org's current retention policy: default TTL, custom per-label rules, and cold-storage settings where configured."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yRetentionSetIn"}}}},"summary":"Sets the org's retention policy for one signal: the default TTL in days, ordered per-label retention rules, and optional cold-storage settings."}},"/v1/o11y/span_mapper_groups":{"get":{"parameters":[{"in":"query","name":"enabled","required":false,"schema":{"type":"boolean"}}],"summary":"Lists the caller's org's mapping groups, optionally only the enabled ones."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableSpanMapperGroup"}}}},"summary":"Creates a mapping group: the name it is known by, the span and resource attributes whose presence selects a span into it, and whether it is on."}},"/v1/o11y/span_mapper_groups/{groupId}":{"delete":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"summary":"Deletes a mapping group and every mapper under it."},"patch":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySpanMapperGroupUpdateIn"}}}},"summary":"Changes a group's name, condition or enabled state."}},"/v1/o11y/span_mapper_groups/{groupId}/span_mappers":{"get":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"summary":"Lists the mappers belonging to one group, in the order they are applied."},"post":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySpanMapperCreateIn"}}}},"summary":"Adds a mapper to a group: which field context it reads, the move or copy it performs, and whether it is on."}},"/v1/o11y/span_mapper_groups/{groupId}/span_mappers/{mapperId}":{"delete":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"in":"path","name":"mapperId","required":true,"schema":{"type":"string"}}],"summary":"Deletes one mapper from a group."},"patch":{"parameters":[{"in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"in":"path","name":"mapperId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySpanMapperUpdateIn"}}}},"summary":"Changes a mapper's field context, config or enabled state."}},"/v1/o11y/span_percentile":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySpanPercentileIn"}}}},"summary":"Places one span's duration among its peers: the p50/p90/p99 durations of like spans, and the percentile the given duration lands at."}},"/v1/o11y/statefulsets/attribute_keys":{"get":{"parameters":[{"description":"DataSource is the telemetry the keys come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the keys will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the keys must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the keys to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the keys to one kind — tag or resource. Empty means all;\nan invalid value reads as empty.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many keys come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the metric attribute keys Kubernetes statefulsets report, for building statefulset filters."}},"/v1/o11y/statefulsets/attribute_values":{"get":{"parameters":[{"description":"DataSource is the telemetry the values come from — metrics for the infra\nfaces. The runtime requires it.","in":"query","name":"dataSource","required":false,"schema":{"type":"string"}},{"description":"AggregateOperator is the aggregation the values will be used under, e.g.\nnoop, count, avg. The runtime requires it for non-metrics sources.","in":"query","name":"aggregateOperator","required":false,"schema":{"type":"string"}},{"description":"AggregateAttribute is the metric the values must appear on.","in":"query","name":"aggregateAttribute","required":false,"schema":{"type":"string"}},{"description":"AttributeKey is the key whose values to list.","in":"query","name":"attributeKey","required":false,"schema":{"type":"string"}},{"description":"FilterAttributeKeyDataType is the key's data type — string, int64,\nfloat64 or bool. Empty means unspecified.","in":"query","name":"filterAttributeKeyDataType","required":false,"schema":{"type":"string"}},{"description":"SearchText narrows the values to those containing it.","in":"query","name":"searchText","required":false,"schema":{"type":"string"}},{"description":"TagType narrows the search to one kind of key — tag or resource.","in":"query","name":"tagType","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many values come back. Absent means 50.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the values one statefulset attribute key has taken, for building statefulset filters."}},"/v1/o11y/statefulsets/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.StatefulSetListRequest"}}}},"summary":"Lists Kubernetes statefulsets over a time range, each with the CPU and memory its pods used against request and limit, desired and available replica counts, restarts and attributes; filterable, groupable and paginated."}},"/v1/o11y/stats":{"get":{"summary":"Returns the collected usage statistics for the caller's org, as the stats reporter aggregates them — a map whose keys are the reporter's own counter names."}},"/v1/o11y/status":{"get":{"parameters":[{"description":"Product is the console product slug to probe, e.g. \"kms\". Required.","example":"kms","in":"query","name":"product","required":false,"schema":{"type":"string"}}],"summary":"Reports whether a product's service is live: an in-cluster health probe with its measured latency, fused with the per-replica up inventory."}},"/v1/o11y/substitute_vars":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.QueryRangeRequest"}}}},"summary":"Substitutes a query's variables and returns the resolved request, without running it — what a dashboard does before it queries."}},"/v1/o11y/testChannel":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.alertmanagertypes.Receiver"}}}},"summary":"Sends a test notification to the posted receiver."}},"/v1/o11y/testRule":{"post":{"requestBody":{"content":{"application/json":{"schema":{}}}},"summary":"Fires a test notification for the posted rule definition and answers with how many series alerted and a status message."}},"/v1/o11y/third-party-apis/overview/domain":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDomainsIn"}}}},"summary":"Returns one external domain's endpoint-level breakdown — each endpoint with its rate, error and latency columns over the window."}},"/v1/o11y/third-party-apis/overview/list":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDomainsIn"}}}},"summary":"Lists the external domains the instrumented services call, with request rate, error percentage and latency per domain."}},"/v1/o11y/trace-funnels/analytics/error-traces":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Returns the errored traces through a step transition of a funnel described inline."}},"/v1/o11y/trace-funnels/analytics/overview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Returns the conversion overview of a funnel described inline."}},"/v1/o11y/trace-funnels/analytics/slow-traces":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Returns the slowest traces through a step transition of a funnel described inline."}},"/v1/o11y/trace-funnels/analytics/steps":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Returns the per-step metrics of a funnel described inline."}},"/v1/o11y/trace-funnels/analytics/steps/overview":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Returns the conversion between two steps of a funnel described inline."}},"/v1/o11y/trace-funnels/analytics/validate":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDraftFunnelIn"}}}},"summary":"Lists the traces that match a funnel described inline — the builder's \"try this\" before anything is saved."}},"/v1/o11y/trace-funnels/list":{"get":{"summary":"Lists the caller's org's funnels, each with its steps and who last touched it."}},"/v1/o11y/trace-funnels/new":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelCreateIn"}}}},"summary":"Creates an empty funnel with a name, answering the funnel it created."}},"/v1/o11y/trace-funnels/steps/update":{"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelStepsUpdateIn"}}}},"summary":"Replaces a funnel's steps — the funnel is named in the body rather than the path — and answers the funnel as it now stands."}},"/v1/o11y/trace-funnels/{funnel_id}":{"delete":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"summary":"Deletes a funnel."},"get":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"summary":"Returns one funnel with its steps."},"put":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelUpdateIn"}}}},"summary":"Renames a funnel or rewrites its description, answering the funnel as it now stands."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/error-traces":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelStepWindowIn"}}}},"summary":"Returns the errored traces through a step transition of a saved funnel — the entry point for \"why is this step failing\"."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/overview":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelStepWindowIn"}}}},"summary":"Returns a saved funnel's conversion overview over a window: how many entered, how many converted, the rate and the latency."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/slow-traces":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelStepWindowIn"}}}},"summary":"Returns the slowest traces through a step transition of a saved funnel — the entry point for \"why is this step slow\"."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/steps":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelWindowIn"}}}},"summary":"Returns a saved funnel's per-step metrics over a window — the counts and latencies at each step, in step order."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/steps/overview":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelStepWindowIn"}}}},"summary":"Returns the conversion between two named steps of a saved funnel — the step-to-step drill-down behind the overview."}},"/v1/o11y/trace-funnels/{funnel_id}/analytics/validate":{"post":{"parameters":[{"in":"path","name":"funnel_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFunnelWindowIn"}}}},"summary":"Lists the traces that match a saved funnel over a window — the read that answers \"is this funnel finding anything at all\"."}},"/v1/o11y/traces":{"get":{"parameters":[{"description":"Range is the window in seconds, counted back from now over each trace's\nlast activity. Default 3600, capped at 604800 (7d).","example":3600,"in":"query","name":"range","required":false,"schema":{"type":"integer"}},{"description":"Limit is how many traces to return. Default 50, capped at 500.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"MinDurationMs keeps only traces that lasted at least this many\nmilliseconds. Zero or absent keeps every trace in the window.","in":"query","name":"minDurationMs","required":false,"schema":{"type":"integer"}}],"summary":"Lists the caller org's recent traces — one row per trace with its span count and wall-clock duration, most recently active first."}},"/v1/o11y/traces/fields":{"get":{"summary":"Returns the trace field catalog: the span fields already selected as indexed columns, and the interesting ones seen in the data that could be."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yFieldSetting"}}}},"summary":"Changes how one span field is stored — selects or deselects it as a materialized column and tunes its index — and echoes the setting back."}},"/v1/o11y/traces/{traceId}":{"get":{"parameters":[{"in":"path","name":"traceId","required":true,"schema":{"type":"string"}},{"in":"query","name":"spanId","required":false,"schema":{"type":"string"}},{"in":"query","name":"levelUp","required":false,"schema":{"type":"integer"}},{"in":"query","name":"levelDown","required":false,"schema":{"type":"integer"}},{"in":"query","name":"spanRenderLimit","required":false,"schema":{"type":"integer"}}],"summary":"Returns one trace's spans as a column/row table, optionally centred on a span and walked a fixed number of levels up and down from it — the read the trace explorer opens a trace with."}},"/v1/o11y/traces/{traceId}/aggregations":{"post":{"parameters":[{"in":"path","name":"traceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yTraceAggregationsIn"}}}},"summary":"Computes span aggregations over one trace — span count, duration or share of execution time — grouped by the resource field each aggregation names."}},"/v1/o11y/traces/{traceId}/flamegraph":{"post":{"parameters":[{"in":"path","name":"traceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yTraceFlamegraphIn"}}}},"summary":"Returns a trace's flamegraph: spans bucketed by depth level, each level ordered as it is drawn, around the selected span."}},"/v1/o11y/traces/{traceId}/waterfall":{"post":{"parameters":[{"in":"path","name":"traceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yTraceWaterfallIn"}}}},"summary":"Returns a trace's waterfall: every span when the trace is small enough, a capped window around the selected span when it is not, with the uncollapsed subtrees the caller asked to keep open."}},"/v1/o11y/usage":{"get":{"parameters":[{"description":"Start is the window start, as epoch nanoseconds. Required.","in":"query","name":"start","required":true,"schema":{"type":"string"}},{"description":"End is the window end, as epoch nanoseconds. Required.","in":"query","name":"end","required":true,"schema":{"type":"string"}},{"description":"Step is the bucket width in seconds. The runtime requires it.","in":"query","name":"step","required":false,"schema":{"type":"integer"}},{"description":"Service narrows usage to one service. Empty covers all.","in":"query","name":"service","required":false,"schema":{"type":"string"}}],"summary":"Returns ingestion usage counts bucketed over the requested window, optionally narrowed to one service."}},"/v1/o11y/user":{"get":{"summary":"Lists the org's members with their single legacy role."}},"/v1/o11y/user/me":{"get":{"summary":"Returns the calling user with their single legacy role."}},"/v1/o11y/user/preferences":{"get":{"summary":"Lists every preference of the calling user, each with its current and default value."}},"/v1/o11y/user/preferences/{name}":{"get":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one preference of the calling user, by name."},"put":{"parameters":[{"in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdatablePreference"}}}},"summary":"Sets one preference of the calling user, by name."}},"/v1/o11y/user/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one org member, by user id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one org member with their single legacy role, by user id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDeprecatedUserUpdate"}}}},"summary":"Renames one org member and may move their legacy role, answering with the updated record."}},"/v1/o11y/users":{"get":{"summary":"Lists the caller's org members."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yPostableUser"}}}},"summary":"Creates a member of the caller's org in the pending-invite state and mails them their invitation; the answer is the new user's id."}},"/v1/o11y/users/me":{"get":{"summary":"Returns the calling user together with every role they hold."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUpdatableUser"}}}},"summary":"Renames the calling user."}},"/v1/o11y/users/me/dashboards":{"get":{"parameters":[{"description":"Query is the filter DSL over dashboard columns and tags, e.g.\n`name:cpu source:user`. Empty lists everything.","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Sort is the sort field: updated_at, created_at or name. Empty sorts by\nupdated_at.","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Order is the sort direction: asc or desc. Empty orders desc.","in":"query","name":"order","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many dashboards come back. Zero means the default of 20;\nthe runtime caps it at 200.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset is how many dashboards to skip for pagination.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Is dashboardListV2 personalized for the calling user: each dashboard carries the caller's pinned state, and pinned dashboards float to the top of the requested ordering."}},"/v1/o11y/users/me/dashboards/{id}/pins":{"delete":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes the caller's pin for a dashboard."},"put":{"parameters":[{"description":"ID is the resource id from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Pins a dashboard for the calling user."}},"/v1/o11y/users/me/factor_password":{"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yChangePasswordIn"}}}},"summary":"Replaces the calling user's password, refusing when the old one does not match."}},"/v1/o11y/users/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one org member, by user id."},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one org member together with every role they hold, by user id."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yUserUpdate"}}}},"summary":"Renames one org member, by user id — someone else, never the caller, who renames themselves through updateMyUser."}},"/v1/o11y/users/{id}/reset_password_tokens":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns the reset-password token a user already has; absent one, the answer is a not-found rather than a fresh token."},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Creates or regenerates a user's reset-password token: a live token is returned as it is, an expired one is replaced."}},"/v1/o11y/users/{id}/roles":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns every role one org member holds, by user id."},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySetRoleIn"}}}},"summary":"Assigns a role, by role name, to one org member — someone else, never the caller."}},"/v1/o11y/users/{id}/roles/{roleId}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"path","name":"roleId","required":true,"schema":{"type":"string"}}],"summary":"Takes a role away from one org member, by user id and role id — someone else, never the caller."}},"/v1/o11y/variables/query":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDashboardVarsIn"}}}},"summary":"Evaluates a dashboard variable query and returns the values the variable may take."}},"/v1/o11y/version":{"get":{"summary":"Reports the running build: its version, whether an enterprise edition is present (\"N\" in this build), and whether first-user setup has completed."}},"/v1/o11y/zeus/hosts":{"get":{"summary":"Returns the deployment's host info from Zeus."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableHost"}}}},"summary":"Records the deployment's host in Zeus, overwriting any prior one."}},"/v1/o11y/zeus/profiles":{"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.PostableProfile"}}}},"summary":"Records the deployment's profile in Zeus — how the team uses observability today and what they plan — overwriting any prior one."}},"/v1/openapi.json":{"get":{"summary":"The API description this SDK was generated from"}},"/v1/oracles":{"get":{"summary":"Reports the on-chain price/data oracles from the graph's O-Chain PriceFeed registry."}},"/v1/org/settings":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/org/settings/list":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/orgs":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/onboardReq"}}}},"summary":"Onboard creates the caller's organization."}},"/v1/orgs/{org}/entitlements":{"get":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}}],"summary":"Get lists the products an org has ENABLED — its own intent, which the console's paid-product sidebar reads to decide what to show."},"post":{"parameters":[{"in":"path","name":"org","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/mutateReq"}}}},"summary":"Post turns products on or off for an org and returns the enabled set afterwards."}},"/v1/payments":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIn"}}}},"summary":"Take a card payment and credit the org's balance"}},"/v1/payments/{id}":{"get":{"parameters":[{"description":"ID is the ledger transaction id a payment returned.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one settled payment by its id"}},"/v1/pipelines":{"get":{"summary":"Returns one build-and-deploy pipeline per app, with its latest run."}},"/v1/plans":{"get":{"summary":"Returns the Hanzo cloud plan catalog: every cloud tier with its price, included capacity, limits and feature list, scoped to the caller's catalog."}},"/v1/plans/blockchain":{"get":{"summary":"Returns the blockchain RPC plan catalog: the tiers metered in monthly compute units, with their prices, limits and overage terms."}},"/v1/plans/cloud":{"get":{"summary":"Returns the cloud plan catalog."}},"/v1/plans/dns":{"get":{"summary":"ListDNSPlans returns the DNS plan catalog: the tiers priced on zones, records per zone and queries per day."}},"/v1/plans/entitlements/{id}":{"get":{"parameters":[{"description":"ID is the plan's catalog id or slug — \"pro\", \"team\", \"world-enterprise\",\n\"rpc-growth\". Both are matched, so a slug resolves the plan it names.","example":"team","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns what one plan GRANTS and not what it costs: the canonical namespaced entitlement block and the flat license-feature list derived from it."}},"/v1/plans/entries":{"get":{"summary":"The raw plan authority rows"},"post":{"summary":"Add a subscription plan"}},"/v1/plans/entries/{slug}":{"delete":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Remove a plan from the authority"},"put":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Edit a plan, leaving the fields you omit alone"}},"/v1/plans/gpu":{"get":{"summary":"ListGPUTiers returns the rentable GPU configurations, each with its accelerator count and model, VRAM, vCPUs, host memory and hourly price."}},"/v1/plans/health":{"get":{"summary":"Health reports that the plans subsystem is mounted and serving."}},"/v1/plans/policy":{"get":{"summary":"Returns the published pricing policy: whether pricing is transparent, the revenue-sharing terms (idle compute resale and the open-source share) and the principles the catalog is priced by."}},"/v1/plans/regions":{"get":{"summary":"Returns the regions cloud capacity is offered in, each with its display name and physical location."}},"/v1/plans/resolve/{id}":{"get":{"parameters":[{"description":"ID is the plan's catalog id or slug — \"pro\", \"team\", \"world-enterprise\",\n\"rpc-growth\". Both are matched, so a slug resolves the plan it names.","example":"pro","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Resolves one plan to everything a consumer of the catalog needs at once: its canonical entitlement block, the flat license-feature list a signed license carries, its billing reference, and the catalog it came from."}},"/v1/plans/schema":{"get":{"summary":"Returns the two JSON Schema documents this surface speaks: entitlements.schema.json, which declares every entitlement key with its type, unit and enum, and plan.schema.json, which a catalog plan record conforms to."}},"/v1/plans/seed":{"post":{"summary":"Seed the embedded plan catalog, without overwriting administrative edits"}},"/v1/plans/storage":{"get":{"summary":"Returns the block-storage price block: the price per GB per month and the volume size bounds a cloud plan may attach."}},"/v1/plans/subscriptions":{"get":{"summary":"Returns the subscription ladder — the personal and team tiers a customer buys to use the cloud, each with its monthly and annual price, seat rules, limits and billing reference."}},"/v1/plans/tools":{"get":{"summary":"Returns the per-use price of every metered tool — web search, code interpreter, image generation, speech — each with the unit it is billed in."}},"/v1/plans/vocab":{"get":{"summary":"Returns the entitlement key vocabulary: every key with its namespace, JSON type, nullability, unit, enum and title, the list of namespaces, and the engine features a license can grant."}},"/v1/platform/apps":{"get":{"summary":"What this organization has declared, and what CD did with it"},"post":{"summary":"Deploy an app through cd.hanzo.ai"}},"/v1/platform/apps/{app}":{"get":{"parameters":[{"in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"One declaration"}},"/v1/platform/apps/{app}/cd":{"get":{"parameters":[{"in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"One app's reconciliation"}},"/v1/platform/cd":{"get":{"summary":"The delivery plane"}},"/v1/platform/ci":{"get":{"summary":"Continuous integration (not wired)"}},"/v1/platform/fleet":{"get":{"parameters":[{"description":"Env narrows to one lifecycle env: main, test or dev.","in":"query","name":"env","required":false,"schema":{"type":"string"}},{"description":"Health narrows to one health colour: green, yellow or red.","in":"query","name":"health","required":false,"schema":{"type":"string"}},{"description":"Org narrows to one image namespace.","in":"query","name":"org","required":false,"schema":{"type":"string"}},{"description":"Drift is `1` or `true` to show only rows that have actually drifted. It is\na STRING and not a bool because those two spellings are exactly what the\nboard has always accepted, and a bool would silently widen that to `?drift`\nalone and to `TRUE` — a behaviour change wearing a type change's clothes.","in":"query","name":"drift","required":false,"schema":{"type":"string"}}],"summary":"Returns the platform's own service tier, and where it has drifted."}},"/v1/platform/fleet/{app}":{"get":{"parameters":[{"description":"App is the service's CR name, from the path. It must be a DNS-1123 label.","in":"path","name":"app","required":true,"schema":{"type":"string"}},{"description":"Env narrows the scan to one lifecycle env: main, test or dev. Omitted, the\nnamespaces are scanned in lifecycle order and the first match wins, so a\nbare name resolves to PRODUCTION.","in":"query","name":"env","required":false,"schema":{"type":"string"}}],"summary":"Returns one platform service, resolved to production by default."}},"/v1/platform/fleet/{app}/deploy":{"post":{"parameters":[{"description":"App is the service's CR name, from the path. It must be a DNS-1123 label.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/restartRef"}}}},"summary":"Rolls a platform service's pods, in a named environment."}},"/v1/platform/health":{"get":{"summary":"Reports whether this control plane can actually deploy anything."}},"/v1/platform/projects":{"get":{"summary":"Returns your org's projects, each with how many apps live under it."}},"/v1/platform/projects/{project}":{"get":{"parameters":[{"description":"Project is the project's name, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Returns one project and its app count."}},"/v1/platform/projects/{project}/apps":{"get":{"parameters":[{"description":"Project is the project's name, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Returns the applications in one project, with what the cluster says about them."},"post":{"parameters":[{"description":"Project is the project to create the application under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createAppReq"}}}},"summary":"Creates an application from a git repo or a container image."}},"/v1/platform/projects/{project}/apps/{app}":{"delete":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Deletes an application and tears down what it runs."},"get":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Returns one application, with its live phase, health and secret sync."}},"/v1/platform/projects/{project}/apps/{app}/deploy":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/deployReq"}}}},"summary":"Deploys the app — building it first if it comes from git."}},"/v1/platform/projects/{project}/apps/{app}/deployments":{"get":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Returns an app's deployment history."}},"/v1/platform/projects/{project}/apps/{app}/deployments/{id}":{"get":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}},{"description":"ID is the deployment's id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one deployment of one app."}},"/v1/platform/projects/{project}/apps/{app}/deployments/{id}/logs":{"get":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}},{"description":"ID is the deployment's id, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns real logs for a deployment — the build's, then the app's."}},"/v1/platform/projects/{project}/apps/{app}/domains":{"get":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Returns every hostname this app answers on."},"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/addDomainReq"}}}},"summary":"Attaches a hostname — instantly if you already own it, otherwise with a DNS challenge."}},"/v1/platform/projects/{project}/apps/{app}/domains/{host}":{"delete":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}},{"description":"Host is the hostname, from the path.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Detaches a hostname and releases the claim."}},"/v1/platform/projects/{project}/apps/{app}/domains/{host}/verify":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}},{"description":"Host is the hostname, from the path.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Checks a custom domain's DNS and turns it on if it passes."}},"/v1/platform/projects/{project}/apps/{app}/env":{"put":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/setEnvReq"}}}},"summary":"Replaces an app's environment variables."}},"/v1/platform/projects/{project}/apps/{app}/preview":{"post":{"parameters":[{"description":"Project is the project the parent application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the parent application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/previewReq"}}}},"summary":"Puts a branch on its own URL."}},"/v1/platform/projects/{project}/apps/{app}/promote":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/promoteReq"}}}},"summary":"Promotes an already-built release to the app."}},"/v1/platform/projects/{project}/apps/{app}/rollback":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/rollbackReq"}}}},"summary":"Goes back to the previous release."}},"/v1/platform/projects/{project}/apps/{app}/start":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Starts a stopped app back up."}},"/v1/platform/projects/{project}/apps/{app}/stop":{"post":{"parameters":[{"description":"Project is the project the application lives under, from the path.","in":"path","name":"project","required":true,"schema":{"type":"string"}},{"description":"App is the application's slug, from the path.","in":"path","name":"app","required":true,"schema":{"type":"string"}}],"summary":"Stops an app without deleting it."}},"/v1/platform/sites":{"get":{"summary":"Returns every project your org owns."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsCreate"}}}},"summary":"Creates a project — the handle a site is deployed and served under — and answers 201 with it in `draft`."}},"/v1/platform/sites/{slug}":{"delete":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Deletes a project and takes its site off the internet."},"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns one project of yours by slug — its settings, its live URL and the deployment currently serving it."},"patch":{"parameters":[{"description":"Slug is the project to update, from the path. The URL is the addressing\nauthority — a `slug` in the body cannot move the write to another project.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsUpdate"}}}},"summary":"Changes a project's settings, and only the settings you send."}},"/v1/platform/sites/{slug}/deploy":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Upload a built site as one archive and serve it"}},"/v1/platform/sites/{slug}/deployments":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns a project's deploy history, newest version first."},"post":{"parameters":[{"description":"Slug is the site to deploy, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDeployStart"}}}},"summary":"Opens a deployment and hands back a short-lived, prefix-scoped grant to write its bytes straight to object storage."}},"/v1/platform/sites/{slug}/deployments/{id}":{"get":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the deployment id, from the path. A deployment of another project —\nor of another tenant's project — is not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one deployment of a project by id."}},"/v1/platform/sites/{slug}/deployments/{id}/complete":{"post":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the queued deployment to complete, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsComplete"}}}},"summary":"CompleteDeployment is the CI completion hook that flips a queued git deployment to live (or error) once CI has synced the built site to S3."}},"/v1/platform/sites/{slug}/domains":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns every custom hostname this site holds: the live ones, plus any pending claim with the DNS records it still owes."},"post":{"parameters":[{"description":"Slug is the site the hosts attach to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDomainsBind"}}}},"summary":"Attaches one or more CUSTOM public hostnames to this org's site."}},"/v1/platform/sites/{slug}/domains/{host}":{"delete":{"parameters":[{"description":"Slug is the project the host is attached to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Host is the custom hostname, from the path. It is cleaned to its canonical\nform (lowercased, trailing dot dropped) before anything is looked up.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Gives a custom hostname back, so the name is free to reuse."}},"/v1/platform/sites/{slug}/domains/{host}/verify":{"post":{"parameters":[{"description":"Slug is the project the host is attached to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Host is the custom hostname, from the path. It is cleaned to its canonical\nform (lowercased, trailing dot dropped) before anything is looked up.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Checks the DNS challenge for a pending custom hostname and, when it passes, promotes the host so it begins routing at the edge."}},"/v1/platform/sites/{slug}/publish":{"post":{"parameters":[{"description":"Slug is the site to publish, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsPublish"}}}},"summary":"Promotes a build output into a new release AND goes live with it — create+activate in one call, which is the 99% path."}},"/v1/platform/sites/{slug}/purge":{"post":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Flushes the site's edge cache without redeploying anything."}},"/v1/platform/sites/{slug}/releases":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns a site's releases newest-first, marking the active one — the rollback menu."},"post":{"parameters":[{"description":"Slug is the site to publish, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsPublish"}}}},"summary":"Promotes a build output into a new immutable release WITHOUT serving it — the staged half of publishing, for when you want to check a release before it goes live."}},"/v1/platform/sites/{slug}/releases/{release}/activate":{"post":{"parameters":[{"description":"Slug is the site the release belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Release is the content-addressed release id (\"rel_\" + 32 hex chars), from\nthe path. Anything that is not that shape is not found, rather than being\ninterpolated into a storage prefix.","in":"path","name":"release","required":true,"schema":{"type":"string"}}],"summary":"Points the site at an existing release — the go-live, and equally the ROLLBACK."}},"/v1/plugins":{"get":{"parameters":[{"description":"All includes the configured-but-disabled subsystems too, but only when it is\nexactly the string \"true\". Otherwise only the running ones are reported.","in":"query","name":"all","required":false,"schema":{"type":"string"}}],"summary":"Reports what this deployment actually mounted: every subsystem the composition root declared and whether it is switched on."}},"/v1/plugins/authored":{"get":{"summary":"Lists the plugins the caller's org BUILT, newest first, each with the TypeScript as authored."}},"/v1/plugins/authored/{id}":{"delete":{"parameters":[{"description":"ID is the plugin to remove, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's built plugins, so the runtime can no longer load it."}},"/v1/plugins/build":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/buildRequest"}}}},"summary":"Build a plugin for your org from TypeScript, or from an API spec a model writes it from"}},"/v1/prefs":{"get":{"summary":"Returns the signed-in caller's OWN preference document — the theme, density and pinned nav that follow them across every Hanzo surface."},"patch":{"summary":"Save the preference keys your surface owns, leaving every other key alone"}},"/v1/pricing":{"get":{"summary":"Returns the whole pricing catalog in one document: Zen and third-party models, providers, model families, the free-model list, plan and infrastructure pricing."}},"/v1/pricing/base":{"get":{"summary":"Returns the Hanzo Base plans — the managed-instance tiers, each with its monthly and annual price, storage and request allowances and feature list."}},"/v1/pricing/blockchain":{"get":{"summary":"Returns the blockchain access plans — the RPC and node tiers, each with its monthly price, compute-unit allowance and feature list."}},"/v1/pricing/cloud":{"get":{"summary":"Returns the public cloud section of the catalog in one document: its instance plans, its regions and its block-storage prices."}},"/v1/pricing/cloud/plans":{"get":{"summary":"Returns just the cloud instance plans — each with its vCPU, memory, disk, CPU type, VM allowance, feature list and monthly and hourly price."}},"/v1/pricing/cloud/regions":{"get":{"summary":"Returns the regions a cloud instance can be placed in, each with its id, display name and physical location."}},"/v1/pricing/cloud/storage":{"get":{"summary":"Returns the block-storage prices of the cloud section: the per-GB monthly rate and the volume size bounds a caller may ask for."}},"/v1/pricing/compute":{"get":{"summary":"Returns the compute section of the catalog: the cloud provider and region the prices are quoted for, the monthly markup applied to them, the full instance-size tier list and the named presets."}},"/v1/pricing/compute/presets":{"get":{"summary":"Returns just the named compute sizes — the short, human-labelled list (\"Starter\", \"Pro\") a size picker renders, each carrying its provider slug, vCPU, memory, disk and price."}},"/v1/pricing/datastore":{"get":{"summary":"Returns the Hanzo Datastore rate card: the tier list, the per-GB storage and egress usage rates, the annual discount and the trial."}},"/v1/pricing/featured":{"get":{"summary":"Returns the models the catalog highlights, filtered to what the caller's org may see."}},"/v1/pricing/free":{"get":{"summary":"Returns the models that cost nothing to call, filtered to what the caller's org may see."}},"/v1/pricing/gpu":{"get":{"summary":"ListGPUTiers returns the rentable GPU configurations, each with its accelerator count and model, VRAM, vCPU, host memory and hourly price."}},"/v1/pricing/health":{"get":{"summary":"Health reports that the pricing subsystem is mounted and serving."}},"/v1/pricing/iam":{"get":{"summary":"ListIAMPlans returns the identity plans — the Hanzo IAM tiers, each with its monthly and annual price, monthly-active-user allowance and feature list."}},"/v1/pricing/model/{name}":{"get":{"parameters":[{"description":"Name is the model's name or its slugged id (\"zen4\",\n\"acme/some-model-1\"), matched case-insensitively. It comes from\nthe path: the URL is the addressing authority.","example":"zen4","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one model's catalog entry — its pricing, context window and capabilities as the pricing source records them."}},"/v1/pricing/models":{"get":{"summary":"Returns the whole model catalog — every model the gateway serves, Zen and third-party alike — filtered to what the caller's org may see."}},"/v1/pricing/paas":{"get":{"summary":"ListPaaSPlans returns the application-hosting plans — the deploy-and-host tiers, each with its monthly and annual price, app and memory allowances and feature list."}},"/v1/pricing/policy":{"get":{"summary":"Returns the pricing policy document: the revenue-sharing terms (the idle-resale share and the open-source share, each with its percentage and who is eligible) and the commitments Hanzo makes about how it bills — no hidden fees, no egress charges, no surprise bills."}},"/v1/pricing/providers":{"get":{"summary":"Returns the model providers the catalog knows, each with its info object, filtered to what the caller's org may see."}},"/v1/pricing/services":{"get":{"summary":"Returns the managed-service rate cards — Search, Crawl, Vector, Console and Managed Services — each with its own tiers, and some with usage rates or a comparison table."}},"/v1/pricing/subscriptions":{"get":{"summary":"Returns the API subscription plans — the account-level tiers a customer subscribes to, each with its monthly and annual price, included credit, rate limits and feature list."}},"/v1/pricing/summary":{"get":{"summary":"Returns the catalog's headline statistics — model counts by family and the provider directory."}},"/v1/pricing/sync":{"post":{"summary":"Refreshes the third-party section of the catalog from its upstream listings and returns the time the refreshed catalog was stamped with."}},"/v1/pricing/tools":{"get":{"summary":"Returns the per-use tool prices — web search, code interpreter, file storage, image generation, speech-to-text and text-to-speech — each with the unit it is billed by and its price in that unit."}},"/v1/process-speech-to-text":{"post":{"summary":"Convert speech to text"}},"/v1/projects":{"get":{"summary":"Returns every project your org owns."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsCreate"}}}},"summary":"Creates a project — the handle a site is deployed and served under — and answers 201 with it in `draft`."}},"/v1/projects/fork":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsFork"}}}},"summary":"Creates a project seeded from a PUBLISHED EXAMPLE — either a starter-kit template from the ONE embedded gallery catalog, or any live project on the platform (an example a seeded creator published, or another org's app serving at <slug>.hanzo.app)."}},"/v1/projects/{slug}":{"delete":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Deletes a project and takes its site off the internet."},"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns one project of yours by slug — its settings, its live URL and the deployment currently serving it."},"patch":{"parameters":[{"description":"Slug is the project to update, from the path. The URL is the addressing\nauthority — a `slug` in the body cannot move the write to another project.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsUpdate"}}}},"summary":"Changes a project's settings, and only the settings you send."}},"/v1/projects/{slug}/deploy":{"post":{"parameters":[{"in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Upload a built site as one archive and serve it"}},"/v1/projects/{slug}/deployments":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns a project's deploy history, newest version first."},"post":{"parameters":[{"description":"Slug is the site to deploy, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDeployStart"}}}},"summary":"Opens a deployment and hands back a short-lived, prefix-scoped grant to write its bytes straight to object storage."}},"/v1/projects/{slug}/deployments/{id}":{"get":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the deployment id, from the path. A deployment of another project —\nor of another tenant's project — is not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one deployment of a project by id."}},"/v1/projects/{slug}/deployments/{id}/complete":{"post":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the queued deployment to complete, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsComplete"}}}},"summary":"CompleteDeployment is the CI completion hook that flips a queued git deployment to live (or error) once CI has synced the built site to S3."}},"/v1/projects/{slug}/domains":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns every custom hostname this site holds: the live ones, plus any pending claim with the DNS records it still owes."},"post":{"parameters":[{"description":"Slug is the site the hosts attach to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDomainsBind"}}}},"summary":"Attaches one or more CUSTOM public hostnames to this org's site."}},"/v1/projects/{slug}/domains/{host}":{"delete":{"parameters":[{"description":"Slug is the project the host is attached to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Host is the custom hostname, from the path. It is cleaned to its canonical\nform (lowercased, trailing dot dropped) before anything is looked up.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Gives a custom hostname back, so the name is free to reuse."}},"/v1/projects/{slug}/domains/{host}/verify":{"post":{"parameters":[{"description":"Slug is the project the host is attached to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Host is the custom hostname, from the path. It is cleaned to its canonical\nform (lowercased, trailing dot dropped) before anything is looked up.","in":"path","name":"host","required":true,"schema":{"type":"string"}}],"summary":"Checks the DNS challenge for a pending custom hostname and, when it passes, promotes the host so it begins routing at the edge."}},"/v1/projects/{slug}/purge":{"post":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Flushes the site's edge cache without redeploying anything."}},"/v1/prompts":{"get":{"summary":"List returns the caller org's prompt library as one row per prompt: its name, type, every version number it has, its taxonomy and when it last changed."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/promptReq"}}}},"summary":"Create records a prompt for the caller's org and answers 201 with it."}},"/v1/prompts/catalog":{"get":{"summary":"Catalog returns the read-only starter prompt library shipped with the binary — reference content every tenant sees the same, NOT the caller's own prompts and never mixed into them."}},"/v1/prompts/metrics":{"get":{"summary":"Metrics returns real per-prompt statistics for the caller's org: how many versions each prompt has, which one is current, and when it was created and last changed."}},"/v1/prompts/{name}":{"delete":{"parameters":[{"description":"Name is the prompt to act on, from the path.","example":"greeting","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Delete removes one of the caller org's prompts and every version of it, answering 204."},"get":{"parameters":[{"description":"Name is the prompt to act on, from the path.","example":"greeting","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Get returns one of the caller org's prompts: its CURRENT template text plus the metadata of every version it has had."}},"/v1/pubsub/jetstream/streams":{"get":{"summary":"Returns the org's streams, sorted by name."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/streamWrite"}}}},"summary":"Creates a durable stream capturing the given subjects and returns it."}},"/v1/pubsub/jetstream/streams/{stream}":{"delete":{"parameters":[{"description":"Stream is the stream's name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"summary":"Removes one stream of the caller's org — its retained messages and its consumers with it — and answers 204 with no body."},"get":{"parameters":[{"description":"Stream is the stream's name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"summary":"Returns one stream of the caller's org — its configuration and its live state (messages, bytes, sequence range, consumer count)."},"put":{"parameters":[{"description":"Stream is the stream to update, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/streamUpdate"}}}},"summary":"Rewrites a stream's configuration — subjects, limits, discard — and returns the updated stream."}},"/v1/pubsub/jetstream/streams/{stream}/consumers":{"get":{"parameters":[{"description":"Stream is the stream's name, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"summary":"Returns one stream's consumers, sorted by name."},"post":{"parameters":[{"description":"Stream is the stream to consume, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/consumerWrite"}}}},"summary":"Creates a durable consumer on one stream and returns it."}},"/v1/pubsub/jetstream/streams/{stream}/consumers/{name}":{"delete":{"parameters":[{"description":"Stream is the stream, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Removes one consumer — its cursor, not the stream's messages — and answers 204 with no body."},"get":{"parameters":[{"description":"Stream is the stream, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one consumer of one org stream — its configuration and its cursor: delivered and acknowledged sequences, pending and redelivered counts."}},"/v1/pubsub/jetstream/streams/{stream}/consumers/{name}/next":{"post":{"parameters":[{"description":"Stream is the stream, from the path.","in":"path","name":"stream","required":true,"schema":{"type":"string"}},{"description":"Name is the consumer, from the path.","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/fetchQuery"}}}},"summary":"Fetch pulls the next batch from a consumer and acknowledges it — the request/response way to consume a stream."}},"/v1/pubsub/kv/{bucket}":{"delete":{"parameters":[{"description":"Bucket is the bucket's name, from the path.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"summary":"Removes one bucket of the caller's org — every key and every revision with it — and answers 204 with no body."},"post":{"parameters":[{"description":"Bucket is the bucket's name within the org, from the path: 1–64 of\n[A-Za-z0-9_], no dash.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/bucketWrite"}}}},"summary":"Creates a KV bucket and returns it."}},"/v1/pubsub/kv/{bucket}/{key}":{"delete":{"parameters":[{"description":"Bucket is the bucket, from the path.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"description":"Key is the key, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Delete removes one key — a delete marker in the key's history, so watchers see it and Get answers 404 — and answers 204 with no body."},"get":{"parameters":[{"description":"Bucket is the bucket, from the path.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"description":"Key is the key, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Get returns one key's current value and revision."},"put":{"parameters":[{"description":"Bucket is the bucket, from the path.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"description":"Key is the key, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/kvWrite"}}}},"summary":"Put sets one key to one value and returns the revision the write created."}},"/v1/pubsub/kv/{bucket}/{key}/history":{"get":{"parameters":[{"description":"Bucket is the bucket, from the path.","in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"description":"Key is the key, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"History returns one key's retained revisions, oldest first — every put and every delete marker up to the bucket's History depth."}},"/v1/pubsub/publish":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/busPublish"}}}},"summary":"Publish puts one message on the org's bus."}},"/v1/pubsub/request":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/busRequest"}}}},"summary":"Request sends one request on the org's bus and waits for one reply — the synchronous half of pub/sub, for callers speaking to a responder subscribed on the NATS port."}},"/v1/query":{"post":{"summary":"Handles POST /v1/query — {file_id,query,k}."}},"/v1/query_multiple":{"post":{"summary":"Handles POST /v1/query_multiple — {file_ids,query,k}."}},"/v1/rag/context":{"get":{"summary":"Return every stored chunk of one file_id (full document context)."}},"/v1/rag/delete":{"post":{"summary":"Delete all chunks of one or more uploaded files (by file_id) from the owner's Search+Vector index."}},"/v1/rag/embed":{"post":{"summary":"Parse, chunk, and embed one uploaded file under its file_id into the unified Search+Vector index, scoped to the authenticated owner."}},"/v1/rag/query":{"post":{"summary":"Retrieve the top-K chunks relevant to a query, scoped to a single uploaded file (`file_id`)."}},"/v1/rag/query-multiple":{"post":{"summary":"Retrieve the top-K chunks relevant to a query, scoped to a SET of uploaded files (`file_ids`)."}},"/v1/referrals":{"get":{"summary":"Returns the caller's referral code, share link and the referrals they have made."}},"/v1/referrals/claim":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/claimRequest"}}}},"summary":"Records that the caller's org signed up through a referral code."}},"/v1/registry/images":{"get":{"summary":"Images lists the org's container repositories, read live from the OCI catalog and filtered server-side to the org's namespace — the page can only ever hold the caller's own images."}},"/v1/registry/packages":{"get":{"parameters":[{"description":"Query narrows the listing within the org's scope when present; the org\nboundary itself is never widened by it. It rides the query string.","in":"query","name":"query","required":false,"schema":{"type":"string"}}],"summary":"Packages lists the org's npm packages — `<org>` and `@<org>/…` — from the npm registry's search index, optionally narrowed by a query within that scope."}},"/v1/registry/projects":{"get":{"summary":"Projects lists the namespaces the caller can see with what each holds: the org's slug, its repository count on the OCI catalog, and its package count on the npm registry."}},"/v1/registry/status":{"get":{"summary":"Status reports whether the OCI and npm registries are reachable and, when the OCI half is auth-gated, which token realm its challenge advertises — an honest lens for \"is the registry plane up\", never a fabricated ok."}},"/v1/registry/tags":{"get":{"parameters":[{"description":"Image is the repository name inside the org's namespace, as returned by\nthe images op. It rides the query string.","in":"query","name":"image","required":false,"schema":{"type":"string"}}],"summary":"Tags lists one org-owned repository's tags, read live from the OCI registry."}},"/v1/registry/token":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/registryMint"}}}},"summary":"Token mints a short-lived, pull-only registry token for exactly one of the org's images, through the same IAM realm the docker CLI authenticates against."}},"/v1/releases":{"get":{"summary":"Returns the versions that actually reached the cluster."}},"/v1/replay":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/replayBody"}}}},"summary":"Record a session-replay snapshot batch"}},"/v1/rerank":{"post":{"summary":"Implements POST /v1/rerank (Cohere/Jina-compatible)."}},"/v1/research/artifacts":{"get":{"parameters":[{"description":"Project narrows to one project. Empty takes the caller's project scope.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Run narrows to one run's artifacts by its stable id.","in":"query","name":"run","required":false,"schema":{"type":"string"}},{"description":"Since bounds the feed to artifacts recorded at or after this unix second.","in":"query","name":"since","required":false,"schema":{"type":"integer"}}],"summary":"Returns the caller org's research-diary feed newest-first — the snapshots and reports tied to its runs, as metadata and content addresses; the bytes themselves are fetched by hash."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResearchArtifact"}}}},"summary":"Records one research-diary artifact — a board snapshot or a generated report — CONTENT-ADDRESSED inside the trust boundary."}},"/v1/research/artifacts/{sha256}":{"get":{"parameters":[{"in":"path","name":"sha256","required":true,"schema":{"type":"string"}}],"summary":"Fetch one recorded artifact's bytes by its content hash."}},"/v1/research/experiments":{"get":{"parameters":[{"description":"Project narrows to one project. Empty reads the org's whole set across projects.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Kind narrows to one discriminator: benchmark, kernel-perf, training, ablation or policy-eval.","in":"query","name":"kind","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's CANONICAL experiments — the deterministic deduped view over the versioned history."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IngestRequest"}}}},"summary":"Appends one batch of experiment and attempt versions to the caller org's evidence store, idempotently by content, then rolls it up to the analytics plane best-effort."}},"/v1/research/grants":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequest"}}}},"summary":"Records the SEPARATE authorization an upload never implies: a record's visibility (private, org or public) and, for a run, its training and commons-publication consent."}},"/v1/research/projects":{"get":{"summary":"Returns every research project in the caller's org with its real totals — canonical and retained side by side — which is the ops board's \"every project + real totals\" view."}},"/v1/research/totals":{"get":{"parameters":[{"description":"Project narrows the aggregate to one project. Empty aggregates the whole org.","in":"query","name":"project","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's headline aggregate plus a per-kind breakdown — the observatory's poll target."}},"/v1/responses":{"post":{"summary":"Implements POST /v1/responses."}},"/v1/risk/datasets":{"get":{"summary":"List this org's datasets"},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskDatasetSpec"}}}},"summary":"Declare the next version of a dataset"}},"/v1/risk/datasets/{name}":{"delete":{"parameters":[{"description":"Name is the dataset, from the path.","example":"signups","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Dispose of one dataset and every version of it"},"get":{"parameters":[{"description":"Name is the dataset, from the path.","example":"signups","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Describe every version of one dataset"}},"/v1/risk/datasets/{name}/export":{"get":{"parameters":[{"description":"Name is the dataset, from the path.","example":"signups","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Version is the version to read. Zero takes the newest published one.","example":1,"in":"query","name":"version","required":false,"schema":{"type":"integer"}},{"description":"Split narrows to train, val or test. Empty reads every split.","example":"train","in":"query","name":"split","required":false,"schema":{"type":"string"}},{"description":"Offset is where the page starts, in the version's own row order (by id,\nwhich is derived from the row and therefore stable forever).","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit is how many rows to return. Zero and anything above the plane's bound\ntake the bound.","example":500,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Read a version's rows back, one page at a time"}},"/v1/risk/datasets/{name}/lineage":{"get":{"parameters":[{"description":"Name is the dataset, from the path.","example":"signups","in":"path","name":"name","required":true,"schema":{"type":"string"}},{"description":"Version is the version to trace. Zero takes the newest published one.","example":1,"in":"query","name":"version","required":false,"schema":{"type":"integer"}}],"summary":"Show where a version's rows came from, and whether that can still be demonstrated"}},"/v1/risk/datasets/{name}/materialize":{"post":{"parameters":[{"description":"Name is the dataset, from the path.","example":"signups","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Materialise the declared version into immutable rows"}},"/v1/risk/features":{"get":{"parameters":[{"description":"Days is how far back to measure the organisation's own coverage, 1 to 400.\nZero takes thirty.","example":30,"in":"query","name":"days","required":false,"schema":{"type":"integer"}}],"summary":"The feature catalogue: what the model reads, and what your surface carries"}},"/v1/risk/health":{"get":{"summary":"Whether the risk model plane can actually work right now"}},"/v1/risk/labels":{"get":{"parameters":[{"description":"Kind and Subject narrow to one entity.","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"in":"query","name":"subject","required":false,"schema":{"type":"string"}},{"description":"Source narrows to one asserter — the read that answers \"what has commerce\ntold us\", separately from \"what has an analyst told us\".","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"From and To bound the EVENT time, half-open, RFC 3339.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Limit caps the page. Out of range takes the plane's own bound.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Read the assertions this tenant has recorded"},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskLabelIn"}}}},"summary":"Assert ground truth about events"}},"/v1/risk/labels/coverage":{"get":{"parameters":[{"description":"From and To bound the EVENT window, half-open, RFC 3339.\n\nUnstated, the window is the 90 days ENDING where maturity begins — `to` is\nthe horizon ago, not now. A default window running to now under a default\nhorizon could not contain one matured event, so every count below it would\nbe zero however much ground truth the tenant held.","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"in":"query","name":"to","required":false,"schema":{"type":"string"}},{"description":"Horizon is the maturity horizon in days the coverage is measured under.\nUnstated takes 120. It also moves the default window, which ends where\nmaturity begins.","in":"query","name":"horizon","required":false,"schema":{"type":"integer"}}],"summary":"How much of the window has matured, and how much of that is judged"}},"/v1/risk/labels/dispose":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskDisposeIn"}}}},"summary":"Dispose of this tenant's expired assertions, whole records only"}},"/v1/risk/labels/hold":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskHoldIn"}}}},"summary":"Place or release a litigation hold on named records"}},"/v1/risk/labels/resolve":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskResolveIn"}}}},"summary":"Resolve the label in force for named events, as of each event's own horizon"}},"/v1/risk/labels/vocabulary":{"get":{"summary":"The closed vocabularies and the precedence rule that resolves a conflict"}},"/v1/risk/learn":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskLearnIn"}}}},"summary":"Teach your organisation's own model from its own events"}},"/v1/risk/policy":{"get":{"summary":"Your organisation's decision-regime history, and which version is in force"},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskAppetiteIn"}}}},"summary":"State the decision regime: the appetite, the sample, and whether the model is live"}},"/v1/risk/reference":{"get":{"summary":"Lists every set this plane publishes, with its version and how fresh it is."}},"/v1/risk/reference/refresh":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshReferenceIn"}}}},"summary":"Takes a new version of one set."}},"/v1/risk/reference/resolve":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveReferenceIn"}}}},"summary":"Looks keys up against the reference plane."}},"/v1/risk/reference/{set}":{"delete":{"parameters":[{"example":"domain","in":"path","name":"set","required":true,"schema":{"type":"string"}},{"example":"partner.example","in":"query","name":"key","required":false,"schema":{"type":"string"}}],"summary":"Removes one of your organisation's overrides."},"get":{"parameters":[{"example":"domain","in":"path","name":"set","required":true,"schema":{"type":"string"}},{"description":"After pages the override listing: the last key of the previous page.","in":"query","name":"after","required":false,"schema":{"type":"string"}},{"description":"Limit caps the override listing: default 200, maximum 1000.","example":50,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Reference describes one set and lists your org's overrides in it."},"put":{"parameters":[{"example":"domain","in":"path","name":"set","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetReferenceIn"}}}},"summary":"Writes your organisation's own allow and deny entries over a set."}},"/v1/risk/score":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskScoreIn"}}}},"summary":"Score one event against your organisation's own model"}},"/v1/risk/search":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskSearchIn"}}}},"summary":"Search exhaustively for the model shape that fits your own history"}},"/v1/risk/search/{id}":{"get":{"parameters":[{"description":"ID is the run, taken from the path. A run another organisation started is\nsimply not there — the same answer an unknown id gives.","example":"srch_2f6a1c","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read back one exhaustive search"}},"/v1/risk/state":{"get":{"summary":"Report your organisation's model: what it learned, and what it realised"}},"/v1/risk/state/model":{"post":{"summary":"Publish your organisation's model as a named, immutable value"},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/riskAdoptIn"}}}},"summary":"Put one of your organisation's own published model values in force"}},"/v1/router/artifact-meta":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/router/data":{"delete":{"summary":"Data"},"get":{"summary":"Data"}},"/v1/router/defaults":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/router/history":{"get":{"summary":"Returns the router-improvement time-series."}},"/v1/router/judge-panel":{"get":{"summary":"Returns the LIVE Mean-Field Judge Panel state: the configured panel + dynamic judge posture (enabled/sample) resolved from the \"*\" GlobalDefaultOwner row, the live in-process per-judge calibration (weight/mean/n), and the static published benchmark."}},"/v1/router/ledger":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/router/policy":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/router/rewards":{"delete":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"get":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"patch":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"post":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."},"put":{"summary":"The HTTP transport binding for the RESTful router-config nouns (/v1/router/{policy,defaults,ledger,rewards,artifact-meta} and /v1/org/settings[/list])."}},"/v1/router/stats":{"get":{"summary":"Returns the router observability aggregate."}},"/v1/rpc/{chain}":{"post":{"parameters":[{"description":"Chain is the registry id, from the URL.","in":"path","name":"chain","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/rpcIn"}}}},"summary":"Forwards a JSON-RPC call to the named chain and returns its answer unchanged."}},"/v1/run":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/runReq"}}}},"summary":"Runs a container image and gives back a URL."}},"/v1/runner":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/runnerBuildReq"}}}},"summary":"Triggers a native build — an image, or the binaries a repo declares."}},"/v1/runner/releases":{"get":{"summary":"Lists the self-publish releases this process has run."}},"/v1/runner/releases/{id}":{"get":{"parameters":[{"description":"ID is the build id the release trigger answered with, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one self-publish release by the id its 202 returned."}},"/v1/s3":{"get":{"summary":"Lists the caller org's object-storage buckets."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision an object storage bucket for your org"}},"/v1/s3/buckets":{"get":{"summary":"List your org's buckets"},"post":{"summary":"Create a bucket in your org"}},"/v1/s3/buckets/{bucket}":{"delete":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"summary":"Delete an empty bucket"}},"/v1/s3/buckets/{bucket}/objects":{"get":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"summary":"Browse one level of a bucket"},"post":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}}],"summary":"Get a URL to upload one object directly"}},"/v1/s3/buckets/{bucket}/objects/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Delete one object","x-catch-all":["wildcard1"]},"get":{"parameters":[{"in":"path","name":"bucket","required":true,"schema":{"type":"string"}},{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Get a URL to download one object directly","x-catch-all":["wildcard1"]}},"/v1/s3/health":{"get":{"summary":"Whether object storage is usable here"}},"/v1/s3/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"uploads","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deletes one bucket from the shared object store and removes its metadata row."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"uploads","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one bucket's metadata."}},"/v1/sandboxes":{"get":{"summary":"The sandboxes this org holds"},"post":{"summary":"Lease a sandbox"}},"/v1/sandboxes/end":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EndIn"}}}},"summary":"End a sandbox and release it"}},"/v1/sandboxes/lease":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeaseIn"}}}},"summary":"Lease a sandbox — a real computer — or resume one you hold"}},"/v1/sandboxes/read":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PathIn"}}}},"summary":"Read a file from a sandbox you hold"}},"/v1/sandboxes/run":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunIn"}}}},"summary":"Run a command in a sandbox you hold and read its output"}},"/v1/sandboxes/stop":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StopIn"}}}},"summary":"Stop what a sandbox is running, and keep the sandbox"}},"/v1/sandboxes/write":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteIn"}}}},"summary":"Write a file into a sandbox you hold"}},"/v1/sandboxes/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"End a sandbox"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"One sandbox"}},"/v1/sandboxes/{id}/exec":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Run a command in a sandbox"}},"/v1/sandboxes/{id}/fs":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read a file, or list a directory"},"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Write a file"}},"/v1/sandboxes/{id}/screen":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"The screen, as a page"}},"/v1/sandboxes/{id}/screen/ticket":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Open a screen"}},"/v1/sandboxes/{id}/screen/ws":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"The screen, as a socket"}},"/v1/sandboxes/{id}/terminal":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"The terminal, as a page"}},"/v1/sandboxes/{id}/terminal/ticket":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Open a terminal"}},"/v1/sandboxes/{id}/terminal/ws":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"The terminal, as a socket"}},"/v1/sbom":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SbomIngest"}}}},"summary":"Ingest persists a CycloneDX SBOM's components keyed by image digest."}},"/v1/sbom/health":{"get":{"summary":"Health is a pure liveness probe: the service is up; datastore reflects whether the datastore store is connected."}},"/v1/sbom/{wildcard1}":{"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Resolve everything inside a container image"}},"/v1/scrape":{"post":{"summary":"Fetch one page and get its extracted markdown, in the firecrawl envelope."}},"/v1/search":{"get":{"summary":"Lists the caller org's search indexes."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a search index for your org"}},"/v1/search/indexes":{"get":{"parameters":[{"description":"Authorization carries the surface's bearer key (`Bearer <key>`); the bare\nkey is accepted too. Search and vector are two surfaces with two keys.\nIt is not `validate:\"required\"` on purpose: requireKey answers absence\nitself, so an unconfigured surface 503s and a missing bearer 401s — a\nvalidation refusal would rewrite both statuses.","in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"summary":"Lists the search indexes with their document counts and timestamps."}},"/v1/search/stats":{"get":{"parameters":[{"description":"Authorization carries the surface's bearer key (`Bearer <key>`); the bare\nkey is accepted too. Search and vector are two surfaces with two keys.\nIt is not `validate:\"required\"` on purpose: requireKey answers absence\nitself, so an unconfigured surface 503s and a missing bearer 401s — a\nvalidation refusal would rewrite both statuses.","in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"summary":"Totals the documents across every search index."}},"/v1/search/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"products","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deletes one search index from the shared backend and removes its metadata row."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"products","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one search index's metadata."}},"/v1/security/findings":{"get":{"parameters":[{"description":"ScanID narrows to a single scan.","in":"query","name":"scanId","required":false,"schema":{"type":"string"}},{"description":"MinSeverity drops everything below that rank: critical, high, medium or low.\nA value outside that set is refused rather than quietly ignored, so a filter\ntypo cannot read as \"no findings\".","in":"query","name":"minSeverity","required":false,"schema":{"type":"string"}},{"description":"Limit caps the page.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the org's findings — rule, severity, path, line, masked preview and fingerprint — newest first, across scans or within one."}},"/v1/security/findings/{id}":{"get":{"parameters":[{"description":"ID is the finding the URL names.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns a single finding: which rule fired, where (path and line), the masked preview and the SHA-256 fingerprint of the secret — the raw secret is not stored and cannot be read back."}},"/v1/security/health":{"get":{"summary":"Reports that the scanning subsystem is serving and how many secret-detection rules the engine holds."}},"/v1/security/rules":{"get":{"summary":"Is the secret-detection catalog the engine scans with."}},"/v1/security/scans":{"get":{"parameters":[{"description":"Limit caps the page.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Is the org's scan history, newest first, each as the same summary the submission answered — files read, findings fired, tally by severity."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/submitReq"}}}},"summary":"Runs the detection engine over a batch of files and answers 201 with the scan summary: how many files were read, how many findings fired, and the tally by severity."}},"/v1/security/scans/{id}":{"get":{"parameters":[{"description":"ID is the scan the URL names.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one scan together with every finding on it, so the detail view is one round-trip rather than a list call per scan."}},"/v1/sentry/discover":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11yDiscoverIn"}}}},"summary":"Aggregates a project's captured errors into a table — the caller names the filters, the groupings and the aggregations, and gets back the columns and rows they asked for."}},"/v1/sentry/events/{id}":{"get":{"parameters":[{"description":"ID is the event id.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Project is the project the event belongs to, by its id. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Returns one captured error event of a project, by its id."}},"/v1/sentry/issues":{"get":{"parameters":[{"description":"Status narrows to one lifecycle state: unresolved, resolved or ignored.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Level narrows to one severity, e.g. error, warning, info.","in":"query","name":"level","required":false,"schema":{"type":"string"}},{"description":"Environment narrows to one deployment environment.","in":"query","name":"environment","required":false,"schema":{"type":"string"}},{"description":"ServiceName narrows to one reporting service.","in":"query","name":"serviceName","required":false,"schema":{"type":"string"}},{"description":"Query narrows to issues whose text contains it.","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Sort orders the page, e.g. lastSeen, firstSeen, count.","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Offset is how many issues to skip. Zero starts at the first.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}},{"description":"Limit caps how many issues come back. Zero means the default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Project narrows the org's issues to one project, by its id.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Period is the window to read, relative to now — 1h, 24h, 7d, 14d, 30d.","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"summary":"Lists the caller's org's grouped error issues, optionally narrowed to one project and one time window, and filtered by status, level, environment, service, a free-text query and a sort."}},"/v1/sentry/issues/{id}":{"get":{"parameters":[{"description":"ID is the issue id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one grouped issue of the caller's org with its latest occurrence sample."},"put":{"parameters":[{"description":"ID is the issue id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySentryUpdateIssueIn"}}}},"summary":"Changes an issue's lifecycle — resolve, ignore, reopen or assign — and returns the updated issue."}},"/v1/sentry/issues/{id}/events":{"get":{"parameters":[{"description":"ID is the issue id.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Project is the project whose occurrences to read, by its id. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}},{"description":"Limit caps how many occurrences come back. Zero means the default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists one issue's captured occurrences, scoped to a project — a project is an isolation unit, so the caller declares which project's occurrences to read."}},"/v1/sentry/logs":{"get":{"parameters":[{"description":"Project is the project to read, as its id. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}},{"description":"Query narrows the page to events whose text contains it.","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Period is the window to read, relative to now — 1h, 24h, 7d, 14d, 30d.","in":"query","name":"period","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many events come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists a project's captured error events, newest first, optionally narrowed to those whose message or exception text contains a search string."}},"/v1/sentry/projects":{"get":{"summary":"Lists the caller's org's Sentry projects, each with its freshly-derived DSN."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/o11y.O11ySentryPostableProject"}}}},"summary":"Creates a Sentry project under the caller's org and returns it, DSN included."}},"/v1/sentry/projects/{id}":{"delete":{"parameters":[{"description":"ID is the project id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Deletes one Sentry project of the caller's org."},"get":{"parameters":[{"description":"ID is the project id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one Sentry project of the caller's org, DSN included."}},"/v1/sentry/projects/{id}/keys/rotate":{"post":{"parameters":[{"description":"ID is the project id.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Rotates a project's DSN key — bumping its rotation watermark so keys below it stop verifying — and returns the project with its new DSN."}},"/v1/sentry/stats":{"get":{"parameters":[{"description":"Project is the project to read, as its id. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}},{"description":"Field is the dimension to count over. Empty counts all events.","in":"query","name":"field","required":false,"schema":{"type":"string"}},{"description":"Period is the window to read, relative to now — 1h, 24h, 7d, 14d, 30d.","in":"query","name":"period","required":false,"schema":{"type":"string"}}],"summary":"Returns a project's event-rate timeseries: one bucket per interval over the requested period, counting the events in it."}},"/v1/sentry/traces":{"get":{"parameters":[{"description":"Project is the project to read, as its id. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}},{"description":"Period is the window to read, relative to now — 1h, 24h, 7d, 14d, 30d.","in":"query","name":"period","required":false,"schema":{"type":"string"}},{"description":"Limit caps how many traces come back.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Lists the traces a project's captured errors reference, each with how many errors landed on it, when they started and stopped, and the latest message seen — the entry point for \"which requests are failing\"."}},"/v1/sentry/traces/{id}":{"get":{"parameters":[{"description":"ID is the trace id.","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Project is the project the trace's errors belong to. Required.","in":"query","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Returns one trace's captured errors for a project — every error event that carried the trace id, in the order the events plane holds them."}},"/v1/sentry/{project}/envelope/":{"post":{"parameters":[{"in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Receive a Sentry envelope on the clean root"}},"/v1/sentry/{project}/store/":{"post":{"parameters":[{"in":"path","name":"project","required":true,"schema":{"type":"string"}}],"summary":"Receive a single Sentry event on the clean root"}},"/v1/sentry/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Delete a Sentry project"},"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Read the caller org's errors on the Sentry surface"},"patch":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Not served — the Sentry surface has no partial update"},"post":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Send events to the Sentry surface, or write on it"},"put":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Move an error issue through its lifecycle"}},"/v1/settings/{product}":{"get":{"parameters":[{"description":"Product is the catalog slug, from the path. Must match ^[a-z0-9][a-z0-9._-]{0,62}$.","in":"path","name":"product","required":true,"schema":{"type":"string"}}],"summary":"Reads the caller org's configuration for one product, with every secret field MASKED — only the names of the set secrets come back, never their values, which live in KMS."},"put":{"parameters":[{"description":"Product is the catalog slug, from the PATH. zip binds the path last, so the\nURL names the product being written whatever a body field claims.","in":"path","name":"product","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/settingsReq"}}}},"summary":"Writes the caller org's configuration for one product and answers the stored result, secrets masked."}},"/v1/share":{"get":{"summary":"Returns the tunnel shares the caller's org currently has open, across every environment that org has enabled."}},"/v1/share/enable":{"post":{"summary":"Enable provisions the caller org's tunnel account and returns the credential the `hanzo share` CLI needs to run a tunnel."}},"/v1/sites":{"get":{"summary":"Returns the org's deployed sites at the pretty URLs they serve at."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsBuildSite"}}}},"summary":"Generates a self-contained, mobile-responsive static site from a natural-language brief and deploys it live in one call."}},"/v1/sites/deploy":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDeploySite"}}}},"summary":"Deploys a caller-supplied file manifest — the deploy_site capability an agent calls — and answers with where it went live."}},"/v1/sites/{slug}":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns one site — the same row ListSites carries, for one slug."}},"/v1/sites/{slug}/deployments":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns a project's deploy history, newest version first."},"post":{"parameters":[{"description":"Slug is the site to deploy, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsDeployStart"}}}},"summary":"Opens a deployment and hands back a short-lived, prefix-scoped grant to write its bytes straight to object storage."}},"/v1/sites/{slug}/deployments/{id}":{"get":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the deployment id, from the path. A deployment of another project —\nor of another tenant's project — is not found.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one deployment of a project by id."}},"/v1/sites/{slug}/deployments/{id}/complete":{"post":{"parameters":[{"description":"Slug is the project the deployment belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"ID is the queued deployment to complete, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsComplete"}}}},"summary":"CompleteDeployment is the CI completion hook that flips a queued git deployment to live (or error) once CI has synced the built site to S3."}},"/v1/sites/{slug}/publish":{"post":{"parameters":[{"description":"Slug is the site to publish, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsPublish"}}}},"summary":"Promotes a build output into a new release AND goes live with it — create+activate in one call, which is the 99% path."}},"/v1/sites/{slug}/releases":{"get":{"parameters":[{"description":"Slug is the project to act on, from the path. It is unique within the\ncaller's org and nowhere else, so another tenant's slug is a 404.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns a site's releases newest-first, marking the active one — the rollback menu."},"post":{"parameters":[{"description":"Slug is the site to publish, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/projectsPublish"}}}},"summary":"Promotes a build output into a new immutable release WITHOUT serving it — the staged half of publishing, for when you want to check a release before it goes live."}},"/v1/sites/{slug}/releases/{release}/activate":{"post":{"parameters":[{"description":"Slug is the site the release belongs to, from the path.","in":"path","name":"slug","required":true,"schema":{"type":"string"}},{"description":"Release is the content-addressed release id (\"rel_\" + 32 hex chars), from\nthe path. Anything that is not that shape is not found, rather than being\ninterpolated into a storage prefix.","in":"path","name":"release","required":true,"schema":{"type":"string"}}],"summary":"Points the site at an existing release — the go-live, and equally the ROLLBACK."}},"/v1/skills":{"get":{"parameters":[{"description":"Activated keeps only the tools activated for the caller's org and project,\nand only when it is exactly the string \"true\".","in":"query","name":"activated","required":false,"schema":{"type":"string"}}],"summary":"Lists the skills the caller's org can reach — the brand's embedded catalogue plus the org's own authored ones — with each one's activation flag."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/skillIn"}}}},"summary":"Adds or revises one of the caller org's own skills, and answers 201 with the stored record."}},"/v1/skills/authored":{"get":{"summary":"Lists the caller org's OWN skills with their SKILL.md bodies."}},"/v1/skills/{id}":{"delete":{"parameters":[{"description":"ID is the skill to remove, from the path. It is the skill's name.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's authored skills."}},"/v1/social/accounts":{"get":{"summary":"List the social accounts connected to your org"},"post":{"summary":"Connect a social account to your org"}},"/v1/social/accounts/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Disconnect one account"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one connected account"},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Replace one connected account"}},"/v1/social/posts":{"get":{"summary":"List your org's posts"},"post":{"summary":"Create a post, and publish it if it is already due"}},"/v1/social/posts/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Delete one post"},"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Read one post"},"put":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Replace one post"}},"/v1/social/posts/{id}/publish":{"post":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Publish one post now"}},"/v1/social/providers":{"get":{"summary":"Which networks this deployment can actually publish to"}},"/v1/social/summary":{"get":{"summary":"Counts across your org's social presence"}},"/v1/sql":{"get":{"summary":"ListSQL lists the caller org's Hanzo SQL databases."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a PostgreSQL database for your org"}},"/v1/sql/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"orders","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"DropSQL deprovisions one Hanzo SQL database."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"orders","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"GetSQL returns one Hanzo SQL database's metadata."}},"/v1/store/":{"get":{"summary":"List your org's storefronts as a page"},"post":{"summary":"Create a storefront"}},"/v1/store/access":{"get":{"summary":"Whether a store is entitled to trade, and why"}},"/v1/store/current":{"get":{"summary":"Resolve your org's active storefront without naming an id"}},"/v1/store/token":{"post":{"summary":"Mint your org's least-privilege storefront read key"}},"/v1/store/{storeid}":{"delete":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Delete a storefront, keeping a recoverable copy"},"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Fetch one storefront"},"patch":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Change part of a storefront"},"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Method-override tunnel for clients that cannot send PUT, PATCH or DELETE"},"put":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Replace a storefront outright"}},"/v1/store/{storeid}/authorize":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Authorize a new order against a storefront, holding the funds without settling them"}},"/v1/store/{storeid}/authorize/{orderid}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"orderid","required":true,"schema":{"type":"string"}}],"summary":"Authorize an order that already exists, holding the funds without settling them"}},"/v1/store/{storeid}/bundle/{key}":{"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Fetch a bundle as this storefront sells it"}},"/v1/store/{storeid}/capture/{orderid}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"orderid","required":true,"schema":{"type":"string"}}],"summary":"Capture a previously authorized order and settle the payment"}},"/v1/store/{storeid}/charge":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Authorize and capture a new order in one call"}},"/v1/store/{storeid}/checkout/authorize":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Authorize a new order against a storefront, holding the funds — the checkout spelling"}},"/v1/store/{storeid}/checkout/authorize/{orderid}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"orderid","required":true,"schema":{"type":"string"}}],"summary":"Authorize an existing order, holding the funds — the checkout spelling"}},"/v1/store/{storeid}/checkout/capture/{orderid}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"orderid","required":true,"schema":{"type":"string"}}],"summary":"Capture a previously authorized order and settle it — the checkout spelling"}},"/v1/store/{storeid}/checkout/charge":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Authorize and capture a new order in one call — the checkout spelling"}},"/v1/store/{storeid}/checkout/paypal/cancel/{payKey}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"payKey","required":true,"schema":{"type":"string"}}],"summary":"PayPal cancel by pay key — refuses, exactly as the unprefixed address does"}},"/v1/store/{storeid}/checkout/paypal/confirm/{payKey}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"payKey","required":true,"schema":{"type":"string"}}],"summary":"PayPal confirm by pay key — refuses, exactly as the unprefixed address does"}},"/v1/store/{storeid}/checkout/paypal/pay":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Start a PayPal authorization for a new order — the checkout spelling"}},"/v1/store/{storeid}/listing":{"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"The storefront's whole listing override map"}},"/v1/store/{storeid}/listing/{key}":{"delete":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Remove a listing override"},"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Fetch one listing override, by item id or by its slug or SKU"},"patch":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Confirm a listing override exists and re-save the store"},"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Add a listing override under a new key"},"put":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Upsert a listing override"}},"/v1/store/{storeid}/paypal/cancel/{payKey}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"payKey","required":true,"schema":{"type":"string"}}],"summary":"PayPal cancel by pay key — refuses, because a pay key alone does not identify the order"}},"/v1/store/{storeid}/paypal/confirm/{payKey}":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"payKey","required":true,"schema":{"type":"string"}}],"summary":"PayPal confirm by pay key — refuses, because a pay key alone does not identify the order"}},"/v1/store/{storeid}/paypal/pay":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Start a PayPal authorization for a new order"}},"/v1/store/{storeid}/product/{key}":{"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Fetch a product as this storefront sells it"}},"/v1/store/{storeid}/trial":{"post":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}}],"summary":"Start this store's no-card trial on the entry plan"}},"/v1/store/{storeid}/variant/{key}":{"get":{"parameters":[{"in":"path","name":"storeid","required":true,"schema":{"type":"string"}},{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Fetch a variant as this storefront sells it"}},"/v1/summary":{"get":{"summary":"Reports whether the platform is up."}},"/v1/sync":{"get":{"summary":"List returns every sync link the caller's org has, each with its two endpoints, its direction and trigger policy, and the time it last reconciled."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/syncReq"}}}},"summary":"Create declares a sync between two endpoints and returns it."}},"/v1/sync/{id}":{"delete":{"parameters":[{"description":"ID is the sync to act on, from the path.","example":"sync_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Delete removes one sync and tears down the outbound mirror it derived, answering 204."},"get":{"parameters":[{"description":"ID is the sync to act on, from the path.","example":"sync_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Get returns one sync by id."},"patch":{"parameters":[{"description":"ID is the sync to update, from the path.","example":"sync_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/patchSyncIn"}}}},"summary":"Patch updates one sync's mutable policy — direction, trigger and actor — in place."}},"/v1/sync/{id}/run":{"post":{"parameters":[{"description":"ID is the sync to act on, from the path.","example":"sync_1","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Run reconciles one sync now — the manual re-sync, and the initial import for a link created without run=true."}},"/v1/tags":{"get":{"summary":"The site's browser tag set for the hosted tag — which pixels to inject, by publishable key"}},"/v1/tasks":{"delete":{"summary":"Redirect to the tasks API root"},"get":{"summary":"Redirect to the tasks API root"},"patch":{"summary":"Redirect to the tasks API root"},"post":{"summary":"Redirect to the tasks API root"},"put":{"summary":"Redirect to the tasks API root"}},"/v1/tasks/{wildcard1}":{"delete":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Delete an engine resource"},"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Read workflow state from the durable engine"},"patch":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Not served by the engine"},"post":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Start workflows and act on running ones"},"put":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Not served by the engine"}},"/v1/taxonomy":{"get":{"parameters":[{"description":"Brand returns only what that brand's console shows — the categories it\nadmits, and within them the taxa scoped to it. Empty returns everything.","in":"query","name":"brand","required":false,"schema":{"type":"string"}}],"summary":"Read returns the product catalogue as this caller sees it: the PLATFORM catalogue — Hanzo's own products, the part that is true for everyone — plus the caller's own org's rows, every category in display order and each carrying the products filed under it in theirs."}},"/v1/taxonomy/categories/{id}":{"delete":{"parameters":[{"description":"ID is the slug to act on, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one empty category."},"put":{"parameters":[{"description":"ID is the category slug to write, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/categoryIn"}}}},"summary":"Creates or replaces one category and returns it as stored."}},"/v1/taxonomy/taxa/{id}":{"delete":{"parameters":[{"description":"ID is the slug to act on, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one product from the catalogue."},"put":{"parameters":[{"description":"ID is the taxon slug to write, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/taxonIn"}}}},"summary":"Creates or replaces one product and returns it as stored."}},"/v1/team/account":{"post":{"summary":"Read the caller's account and switch workspace"}},"/v1/team/account/auth/{provider}":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Start a sign-in at hanzo.id"}},"/v1/team/account/auth/{provider}/callback":{"get":{"parameters":[{"in":"path","name":"provider","required":true,"schema":{"type":"string"}}],"summary":"Complete a sign-in and hand the browser its session"}},"/v1/team/account/cookie":{"delete":{"summary":"Signs this browser out of team by expiring the HttpOnly account-token cookie the OAuth callback set."},"put":{"summary":"Store the session token as this browser's cookie"}},"/v1/team/account/providers":{"get":{"summary":"Returns the identity providers this deployment starts a login with."}},"/v1/team/billing/plan":{"get":{"summary":"Returns the plan and seat counts for the caller's OWN org, resolved from the VERIFIED team session token — never a client header."}},"/v1/team/billing/ui":{"get":{"summary":"Open the wallet page"}},"/v1/team/billing/ui/{wildcard1}":{"get":{"parameters":[{"in":"path","name":"wildcard1","required":true,"schema":{"type":"string"}}],"summary":"Load an asset of the wallet page","x-catch-all":["wildcard1"]}},"/v1/team/bots":{"get":{"summary":"Returns the caller org's bot members — the org's agents projected as the workspace Employees they become, each with the member account uuid and Person reference the roster addresses it by."}},"/v1/team/bots/sync":{"post":{"summary":"SyncBots re-projects the caller org's agents as workspace members into EVERY workspace of the org, and removes the ones whose agent is gone."}},"/v1/team/files/{workspace}":{"post":{"parameters":[{"in":"path","name":"workspace","required":true,"schema":{"type":"string"}}],"summary":"Upload a file into a workspace"}},"/v1/team/files/{workspace}/{filename}":{"delete":{"parameters":[{"description":"Workspace is the workspace uuid the blob belongs to, from the path.","example":"6579…","in":"path","name":"workspace","required":true,"schema":{"type":"string"}},{"description":"Filename is the last path segment, which the front sets to the blob id\nwhen it sends no explicit `file`.","in":"path","name":"filename","required":true,"schema":{"type":"string"}},{"description":"File is the blob id, and wins over the path segment when both are present.","example":"0d4f…","in":"query","name":"file","required":false,"schema":{"type":"string"}}],"summary":"Removes one blob from a workspace's file store."},"get":{"parameters":[{"in":"path","name":"workspace","required":true,"schema":{"type":"string"}},{"in":"path","name":"filename","required":true,"schema":{"type":"string"}}],"summary":"Download a workspace file"}},"/v1/team/transactor/api/v1/statistics":{"get":{"parameters":[{"description":"Token is the workspace token minted by selectWorkspace.","example":"eyJhbGciOiJIUzI1NiJ9…","in":"query","name":"token","required":false,"schema":{"type":"string"}}],"summary":"Statistics returns the transactor's live sessions for the workspace the caller's credential names — the endpoint the front's workspace switcher and server panel poll on the transactor base."}},"/v1/team/transactor/statistics":{"get":{"parameters":[{"description":"Token is the workspace token minted by selectWorkspace.","example":"eyJhbGciOiJIUzI1NiJ9…","in":"query","name":"token","required":false,"schema":{"type":"string"}}],"summary":"Statistics returns the transactor's live sessions for the workspace the caller's credential names — the endpoint the front's workspace switcher and server panel poll on the transactor base."}},"/v1/team/transactor/{token}":{"get":{"parameters":[{"in":"path","name":"token","required":true,"schema":{"type":"string"}}],"summary":"Open the workspace data-plane socket"}},"/v1/tel/calls":{"get":{"summary":"Lists the calls this org has placed or received, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/callInput"}}}},"summary":"Dials."}},"/v1/tel/calls/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Ends a call this org placed."}},"/v1/tel/messages":{"get":{"summary":"Lists the messages this org has sent or received, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/messageInput"}}}},"summary":"Sends a message from one of this org's own numbers."}},"/v1/tel/numbers":{"get":{"summary":"Lists the phone numbers this org HOLDS — the ones it has bought and not released."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/buyInput"}}}},"summary":"Provisions with the carrier FIRST and records second."}},"/v1/tel/numbers/available":{"get":{"parameters":[{"in":"query","name":"Country","required":false,"schema":{"type":"string"}},{"in":"query","name":"Area","required":false,"schema":{"type":"string"}},{"in":"query","name":"Type","required":false,"schema":{"type":"string"}},{"in":"query","name":"Limit","required":false,"schema":{"type":"integer"}}],"summary":"Asks the carrier what is available to buy."}},"/v1/tel/numbers/{id}":{"delete":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Checks the holding is THIS org's before it reaches the carrier."}},"/v1/tel/summary":{"get":{"summary":"Counts what this org holds on the telephony plane: its numbers, its calls and its messages."}},"/v1/templates":{"get":{"summary":"Lists the public starter-kit catalog plus, for a validated caller, that org's own private kits."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/publishKitIn"}}}},"summary":"Creates a starter kit PRIVATE to the caller's org and answers 201 with the stored kit."}},"/v1/templates/{slug}":{"delete":{"parameters":[{"description":"Slug is the starter kit to act on, from the path.","example":"acme-portal","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Deletes the caller org's OWN starter kit."},"get":{"parameters":[{"description":"Slug is the starter kit to act on, from the path.","example":"folio","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"summary":"Returns one starter kit: the caller org's own by that slug, else the public catalog's."},"put":{"parameters":[{"description":"Slug is the kit to replace, from the path.","example":"acme-portal","in":"path","name":"slug","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/replaceKitIn"}}}},"summary":"Overwrites the caller org's OWN starter kit at the path slug, answering the stored kit."}},"/v1/todo/board":{"get":{"parameters":[{"description":"Key is the project whose issues to list, from the path. EMPTY means every\nproject in the org — the global board. It is a filter like the rest of\nthis struct rather than an address, which is what lets one op answer both\n\"this board\" and \"all the work\" without a second surface disagreeing with\nthe first about what a column is.","in":"query","name":"key","required":false,"schema":{"type":"string"}},{"description":"Status keeps only issues in that board column: backlog, todo, in_progress,\ndone or canceled. An unknown value is refused with 400.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Kind keeps only work items of that shape: issue, pr or epic. An unknown\nvalue is refused with 400.","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Repo keeps only issues bound to that git repository.","in":"query","name":"repo","required":false,"schema":{"type":"string"}},{"description":"Label keeps only issues carrying that label, compared case-insensitively.\n\nThis is how a board narrows to something SMALLER than a repository — the\none mechanism for it. An estate whose apps are directories inside one\nrepository (hanzoai/cloud carries ~140 of them) has no repository per app\nto address, so the app is a label: `label=app/meet` is the meet board.\nNothing is provisioned to make one exist; a board is the query.","in":"query","name":"label","required":false,"schema":{"type":"string"}},{"description":"Source keeps only issues opened from that surface: team, git, crm,\nhelpdesk, cms or agent. An unknown value is refused with 400.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Scheduled keeps only issues that carry a date — a start, a due date or\nboth. This is the timeline's slice of the board: pass scheduled=true to\nget exactly the rows a gantt has somewhere to draw, instead of fetching\nevery issue and discarding the undated ones client-side.","in":"query","name":"scheduled","required":false,"schema":{"type":"boolean"}}],"summary":"Returns a board's issues — work items with their column, priority, assignee, labels and schedule."}},"/v1/todo/issues":{"get":{"parameters":[{"description":"Q matches an issue's title or description. A word from the issue, which is\nwhat someone remembers — not its number, which is what they are looking up.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Project narrows to one team key; \"\" searches every project in the org,\nwhich is the point of this op.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Status keeps one board column: backlog, todo, in_progress, done, canceled.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Kind keeps one shape: issue, pr, epic.","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Repo keeps issues bound to one git repository.","in":"query","name":"repo","required":false,"schema":{"type":"string"}},{"description":"Source keeps one origin: team, git, crm, helpdesk, cms, agent. \"git\" is\nhow you ask for the mirrored GitHub issues specifically.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Assignee keeps issues held by one person. Pass \"me\" for yourself.","in":"query","name":"assignee","required":false,"schema":{"type":"string"}},{"description":"Limit caps the answer; 0 means the default, and anything above the ceiling\nis clamped rather than refused — a search that errors on being too broad\nteaches people to guess.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Answers across every project in the org."}},"/v1/todo/projects":{"get":{"summary":"Returns the boards of your org — the places your work actually is."},"post":{"summary":"Refused — a board is a repository on the forge"}},"/v1/todo/projects/{key}":{"delete":{"parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Refused — a board is a repository on the forge"},"get":{"parameters":[{"description":"Key is the project's org-unique handle: 2-8 uppercase alphanumerics starting\nwith a letter (\"ENG\", \"OPS2\"). Matched case-insensitively.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Returns one board of your org by its key — the repository name."},"patch":{"parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"}}],"summary":"Refused — a board is a repository on the forge"}},"/v1/todo/projects/{key}/issues":{"get":{"parameters":[{"description":"Key is the project whose issues to list, from the path. EMPTY means every\nproject in the org — the global board. It is a filter like the rest of\nthis struct rather than an address, which is what lets one op answer both\n\"this board\" and \"all the work\" without a second surface disagreeing with\nthe first about what a column is.","in":"path","name":"key","required":true,"schema":{"type":"string"}},{"description":"Status keeps only issues in that board column: backlog, todo, in_progress,\ndone or canceled. An unknown value is refused with 400.","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Kind keeps only work items of that shape: issue, pr or epic. An unknown\nvalue is refused with 400.","in":"query","name":"kind","required":false,"schema":{"type":"string"}},{"description":"Repo keeps only issues bound to that git repository.","in":"query","name":"repo","required":false,"schema":{"type":"string"}},{"description":"Label keeps only issues carrying that label, compared case-insensitively.\n\nThis is how a board narrows to something SMALLER than a repository — the\none mechanism for it. An estate whose apps are directories inside one\nrepository (hanzoai/cloud carries ~140 of them) has no repository per app\nto address, so the app is a label: `label=app/meet` is the meet board.\nNothing is provisioned to make one exist; a board is the query.","in":"query","name":"label","required":false,"schema":{"type":"string"}},{"description":"Source keeps only issues opened from that surface: team, git, crm,\nhelpdesk, cms or agent. An unknown value is refused with 400.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Scheduled keeps only issues that carry a date — a start, a due date or\nboth. This is the timeline's slice of the board: pass scheduled=true to\nget exactly the rows a gantt has somewhere to draw, instead of fetching\nevery issue and discarding the undated ones client-side.","in":"query","name":"scheduled","required":false,"schema":{"type":"boolean"}}],"summary":"Returns a board's issues — work items with their column, priority, assignee, labels and schedule."},"post":{"parameters":[{"description":"Key is the board — the repository name, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/newIssue"}}}},"summary":"Opens a work item on the board — an issue on that repository on the deployment's forge, filed as YOU."}},"/v1/todo/projects/{key}/issues/{num}":{"get":{"parameters":[{"description":"Key is the board — the repository name, or an index board's key.","in":"path","name":"key","required":true,"schema":{"type":"string"}},{"description":"Num is the issue's number on that board.","in":"path","name":"num","required":true,"schema":{"type":"integer"}}],"summary":"Returns ONE work item in full — its description included."},"patch":{"parameters":[{"description":"Key is the board — the repository name, from the path.","in":"path","name":"key","required":true,"schema":{"type":"string"}},{"description":"Num is the issue number on that repository, from the path.","in":"path","name":"num","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/issueEdit"}}}},"summary":"Edits a work item — rename it, rewrite it, move it to another column, or re-prioritise it."}},"/v1/todo/projects/{key}/issues/{num}/claim":{"post":{"parameters":[{"in":"path","name":"key","required":true,"schema":{"type":"string"}},{"in":"path","name":"num","required":true,"schema":{"type":"integer"}}],"summary":"Takes an issue: it becomes yours and it moves to in_progress."}},"/v1/tokens/{chain}/{address}":{"get":{"parameters":[{"description":"Chain is the registry id.","in":"path","name":"chain","required":true,"schema":{"type":"string"}},{"description":"Address is the account, 0x-prefixed.","in":"path","name":"address","required":true,"schema":{"type":"string"}}],"summary":"Reads an address's native balance on a chain."}},"/v1/tools":{"get":{"parameters":[{"description":"Source keeps only tools from one source — connector, function, zap-service,\nagent, skill or mcp. Empty keeps every source.","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Activated keeps only the tools activated for the caller's org and project,\nand only when it is exactly the string \"true\".","in":"query","name":"activated","required":false,"schema":{"type":"string"}}],"summary":"Lists every tool the caller's org and project can reach, from every source, each flagged with whether it is activated."}},"/v1/tools/activation":{"get":{"summary":"Reports which tools are switched on for the caller's org and project."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/activationReq"}}}},"summary":"Switches tools on and off for the caller's org and project, and answers with the resulting activated set."}},"/v1/tools/call":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/toolCall"}}}},"summary":"Runs one of the caller's activated tools and answers with its output."}},"/v1/tools/catalog":{"get":{"parameters":[{"description":"Q matches the name, title or description, case-insensitively.","in":"query","name":"q","required":false,"schema":{"type":"string"}},{"description":"Featured keeps only the listings we put on the front of the shelf, and only\nwhen it is exactly the string \"true\".","in":"query","name":"featured","required":false,"schema":{"type":"string"}},{"description":"Official keeps only the vendors' OWN servers — not third-party copies of\nthem — and only when it is exactly the string \"true\".","in":"query","name":"official","required":false,"schema":{"type":"string"}},{"description":"Limit bounds the page: default 50, maximum 200. A value that is not a\npositive integer reads as the default.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Offset skips that many listings.","in":"query","name":"offset","required":false,"schema":{"type":"integer"}}],"summary":"Lists the MCP servers the public registries publish, as we hold them: our canonical copy of registry.modelcontextprotocol.io, plus what we decided about each entry."}},"/v1/tools/catalog/sync":{"post":{"summary":"Pulls the public MCP registry into our canonical copy and reports what changed."}},"/v1/tools/catalog/{id}":{"get":{"parameters":[{"description":"ID is the listing, from the path. It is the publisher's reverse-DNS name\nwith its one slash written as an underscore — \"com.stripe_mcp\".","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one catalog entry in full: the publisher's description, its repository and site, every package form with the runtime that launches it, and every hosted endpoint."},"patch":{"parameters":[{"description":"ID is the listing to curate, from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/curateReq"}}}},"summary":"Sets what WE say about one catalog entry — hidden, featured, official, logo — and answers with the stored listing."}},"/v1/traces/health":{"get":{"summary":"How many spans this deployment holds for your org"}},"/v1/traces/query":{"get":{"summary":"Recent spans for your org over a time range"}},"/v1/traces/trace":{"get":{"summary":"Every span of one trace — the waterfall"}},"/v1/traces/write":{"post":{"summary":"Append spans for your org"}},"/v1/traffic/globe":{"get":{"summary":"Returns the PUBLIC live request-geo aggregate for the world.hanzo.ai \"Hanzo mode\" globe: WHERE requests to api.hanzo.ai are coming from, as country/region points with per-service-class counts, plus headline throughput rates."}},"/v1/translate":{"post":{"summary":"Translate a string or a batch into one target language"}},"/v1/translate/memory":{"get":{"parameters":[{"description":"Target narrows to one target language tag (BCP-47, e.g. \"es\" or \"pt-BR\").","in":"query","name":"target","required":false,"schema":{"type":"string"}},{"description":"State narrows to one position on the review ladder: machine, suggested,\napproved or published.","in":"query","name":"state","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned. Non-positive or unparseable means the server\ndefault (200); the ceiling is 1000.","in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"List returns the org's own translation-memory entries, newest first, optionally narrowed to one target language and/or one position on the review ladder."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"summary":"Review records a human decision on one translation-memory entry, and returns the entry as stored."}},"/v1/upload":{"post":{"summary":"Upload a file into an execution session"}},"/v1/usage":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/reportReq"}}}},"summary":"Ingests a batch of account-usage samples — what a developer's OWN AI accounts have consumed of their OWN plans, metered from each provider's own login — and appends them to the warehouse series."}},"/v1/usage/activity":{"get":{"parameters":[{"description":"Subject is what the series is about: \"user\" (default), \"org\" or \"project\".","example":"user","in":"query","name":"subject","required":false,"schema":{"type":"string"}},{"description":"ID names the subject within what the caller is entitled to see. Omitted (or\n\"me\") it is the caller themselves, or their own org. Another user requires org\nadmin and must belong to the caller's org; another org requires a SuperAdmin.","in":"query","name":"id","required":false,"schema":{"type":"string"}},{"description":"From is the first day of the range, \"2006-01-02\". Defaults to 90 days back.","example":"2026-01-01","in":"query","name":"from","required":false,"schema":{"type":"string"}},{"description":"To is the last day of the range, \"2006-01-02\". Defaults to today; the span is\nclamped to 366 days.","example":"2026-03-31","in":"query","name":"to","required":false,"schema":{"type":"string"}}],"summary":"Activity returns the per-day usage series for ONE authorized subject — the points a contribution heatmap and a timeline are drawn from, gap-filled so every day in the range is present."}},"/v1/usage/analytics":{"get":{"parameters":[{"description":"End is the exclusive window end, RFC3339. Read only when Range is custom.","in":"query","name":"end","required":false,"schema":{"type":"string"}},{"description":"Plan is the plan id whose entitlement decides access and retention. INTERIM:\ncloud has no org-to-plan resolver yet, so the caller names the plan; when\nthat resolver lands this becomes the caller org's own plan.","in":"query","name":"plan","required":false,"schema":{"type":"string"}},{"description":"Range is the window: a count and a unit — 24h, 7d, 90d, any <N>h or <N>d —\nor day, week, month, all, custom. Empty means 24h. The window is then\nclamped forward to the plan's retention entitlement.","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is the inclusive window start, RFC3339. Read only when Range is\ncustom, and clamped forward to the plan's retention floor.","in":"query","name":"start","required":false,"schema":{"type":"string"}}],"summary":"Is the entitlement-GATED per-provider breakdown of the caller org's LLM usage — the paid lens over the same warehouse ledger GET /v1/usage/summary reads its totals from."}},"/v1/usage/analytics/access":{"get":{"parameters":[{"description":"Plan is a plan id from the live @hanzo/plans catalog. Empty resolves the\nfree floor, and so does an id the catalog does not know — this never fails\non an unknown plan.","in":"query","name":"plan","required":false,"schema":{"type":"string"}}],"summary":"Echoes a plan's resolved analytics entitlement so a dashboard can configure itself against the LIVE catalog instead of hardcoding tier numbers."}},"/v1/usage/leaderboard":{"get":{"parameters":[{"description":"Scope picks the board: \"personal\" (default) ranks the caller among their own\norg's users, \"org\" is that same org board named for an admin, \"global\" ranks\norganizations against each other.","example":"personal","in":"query","name":"scope","required":false,"schema":{"type":"string"}},{"description":"Metric is the value ranked: tokens (default), requests, or cost.","example":"tokens","in":"query","name":"metric","required":false,"schema":{"type":"string"}},{"description":"Period is the window ranked: day, week, month (default) or all.","example":"week","in":"query","name":"period","required":false,"schema":{"type":"string"}},{"description":"Limit caps the rows returned, clamped to 100. Defaults to 10, which is also\nwhat a non-positive or unparseable value takes.","example":10,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}}],"summary":"Leaderboard ranks AI usage over a window, either the users of the caller's own org or organizations against each other, and always reports the caller's own standing even when it falls outside the returned page."}},"/v1/usage/leaderboard/optin":{"get":{"summary":"Returns the caller's own public-listing preference and their org's, each with whether the caller may change it."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/userOptinReq"}}}},"summary":"Sets the CALLER's own public-listing preference on the leaderboard."}},"/v1/usage/leaderboard/optin/org":{"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/orgOptinReq"}}}},"summary":"Sets the ORG's listing on the cross-org global board."}},"/v1/usage/rollup/backfill":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/backfillQuery"}}}},"summary":"Backfill seeds the derived usage rollup from ledger history — the rows written before the incremental view existed, which that view can never capture."}},"/v1/usage/samples":{"get":{"parameters":[{"description":"Account narrows to ONE linked account of that provider. Empty covers every\naccount the caller has linked there.","in":"query","name":"account","required":false,"schema":{"type":"string"}},{"description":"Provider is the upstream to read, e.g. anthropic. Required.","in":"query","name":"provider","required":false,"schema":{"type":"string"}},{"description":"Range is the window to read: a count and a unit — 1h, 24h, 90d, any <N>h or\n<N>d — or day, week, month, all. Empty means 24h. A label that is not a\ncount, or one reaching past the 730-day horizon, is refused rather than\nsilently replaced.","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Window narrows to ONE window class: 6h, day, week or month. Empty covers\nevery class.","in":"query","name":"window","required":false,"schema":{"type":"string"}}],"summary":"Is the PER-PROVIDER view: one connected account's own consumption of its own plan — \"my plan is 47% through its 6h window, resets at 14:20\"."}},"/v1/usage/summary":{"get":{"parameters":[{"description":"Range is the window: a count and a unit — 24h, 7d, 90d, any <N>h or <N>d —\nor day, week, month, all, custom. Empty means 24h. A label this surface\ndoes not know, or one reaching past the 730-day horizon, is refused rather\nthan silently replaced.","in":"query","name":"range","required":false,"schema":{"type":"string"}},{"description":"Start is the inclusive window start, RFC3339. Read only when Range is\ncustom.","in":"query","name":"start","required":false,"schema":{"type":"string"}},{"description":"End is the exclusive window end, RFC3339. Read only when Range is custom.","in":"query","name":"end","required":false,"schema":{"type":"string"}}],"summary":"Answers GET /v1/usage/summary: the caller's own usage footprint over one window — the categorized spend roll-up from the commerce ledger, the org's LLM usage totals from the warehouse, and the caller's OWN linked provider accounts beside the org's Hanzo-routed usage."}},"/v1/validators":{"get":{"parameters":[{"description":"Limit is how many slots to return, as a decimal string in the `?limit=`\nquery. Absent, unparseable or non-positive means 200; over 1000 is clamped\nto 1000. It is a string rather than a number because the parse that has\nalways served this route trims surrounding whitespace, and one parse rule is\nbetter than two.","in":"query","name":"limit","required":false,"schema":{"type":"string"}}],"summary":"Returns the validator slots the caller's org has claimed."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/validatorClaim"}}}},"summary":"Claims a validator slot and provisions its node, after proving the caller's wallet owns the slot's NFT."}},"/v1/validators/challenge":{"get":{"parameters":[{"description":"TokenID is the Validator-tier GenesisNFT token id, as a decimal string in\nthe `?tokenId=` query. A value that is not a positive integer is 400. It is\na string rather than a number because the parse that has always served this\nroute trims surrounding whitespace, and one parse rule is better than two.","in":"query","name":"tokenId","required":false,"schema":{"type":"string"}}],"summary":"Issues the single-use nonce and the exact message a wallet must sign to claim a validator slot."}},"/v1/validators/{tokenId}":{"get":{"parameters":[{"description":"TokenID is the slot's GenesisNFT token id, from the path, as a decimal\nstring. A value that is not a positive integer is 400. It is a string\nrather than a number because the parse that has always served this route\ntrims surrounding whitespace, and one parse rule is better than two.","in":"path","name":"tokenId","required":true,"schema":{"type":"string"}}],"summary":"Returns one claimed validator slot, scoped to the caller's org."}},"/v1/vector":{"get":{"summary":"Lists the caller org's vector collections."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/provisionRequest"}}}},"summary":"Provision a vector collection for your org"}},"/v1/vector/collections":{"get":{"parameters":[{"description":"Authorization carries the surface's bearer key (`Bearer <key>`); the bare\nkey is accepted too. Search and vector are two surfaces with two keys.\nIt is not `validate:\"required\"` on purpose: requireKey answers absence\nitself, so an unconfigured surface 503s and a missing bearer 401s — a\nvalidation refusal would rewrite both statuses.","in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"summary":"Lists the vector collections with their size and geometry."}},"/v1/vector/stats":{"get":{"parameters":[{"description":"Authorization carries the surface's bearer key (`Bearer <key>`); the bare\nkey is accepted too. Search and vector are two surfaces with two keys.\nIt is not `validate:\"required\"` on purpose: requireKey answers absence\nitself, so an unconfigured surface 503s and a missing bearer 401s — a\nvalidation refusal would rewrite both statuses.","in":"header","name":"Authorization","required":false,"schema":{"type":"string"}}],"summary":"Totals the collections, vectors and storage across the vector store."}},"/v1/vector/{name}":{"delete":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"embeddings","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Deletes one vector collection from the shared backend and removes its metadata row."},"get":{"parameters":[{"description":"Name is the resource's org-unique slug, from the path. Lower-cased and\ntrimmed before lookup, exactly as it was at create.","example":"embeddings","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"summary":"Returns one vector collection's metadata."}},"/v1/videos/generations":{"post":{"summary":"Implements POST /v1/videos/generations — the ASYNC create."}},"/v1/videos/{id}":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Implements GET /v1/videos/{id} — poll a job's status."}},"/v1/videos/{id}/content":{"get":{"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Implements GET /v1/videos/{id}/content — download the finished MP4."}},"/v1/vpcs":{"get":{"summary":"Returns every VPC the caller's org owns, under the friendly names the org created them with."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createVPCReq"}}}},"summary":"Creates a VPC in the caller's org namespace and answers 201 with it."}},"/v1/vpcs/{id}":{"delete":{"parameters":[{"description":"ID is the DigitalOcean resource id (a UUID), from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's VPCs and answers 204."},"get":{"parameters":[{"description":"ID is the DigitalOcean resource id (a UUID), from the path.","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's VPCs by id."}},"/v1/wallets":{"get":{"parameters":[{"description":"Project narrows to wallets scoped to one project. Must be a url-safe segment.","in":"query","name":"project","required":false,"schema":{"type":"string"}},{"description":"Agent narrows to wallets scoped to one agent. Must be a url-safe segment.","in":"query","name":"agent","required":false,"schema":{"type":"string"}},{"description":"Account narrows to wallets under one account id. Must be a url-safe segment.","example":"acct_9f8c1d","in":"query","name":"account","required":false,"schema":{"type":"string"}}],"summary":"Returns the caller org's wallets, newest first, optionally NARROWED within the org by project, agent or account."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createWalletIn"}}}},"summary":"Provisions a new signing identity under one of the caller org's accounts and answers the stored wallet including its on-chain address."}},"/v1/wallets/accounts":{"get":{"summary":"Returns the caller org's wallet accounts, newest first."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createAccountIn"}}}},"summary":"Opens a named wallet account for the caller's org."}},"/v1/wallets/{id}":{"get":{"parameters":[{"example":"wal_4b1e77","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's wallets: its scope, custody kind, tier, chain and on-chain address."}},"/v1/wallets/{id}/keys":{"post":{"parameters":[{"example":"wal_4b1e77","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Rolls one wallet's signing material through its own custody backend and answers the wallet with whatever address that produced."}},"/v1/wallets/{id}/sign":{"post":{"parameters":[{"example":"wal_4b1e77","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/signIn"}}}},"summary":"Produces a secp256k1 signature from one of the caller org's wallets over a 32-byte digest, through whichever custody backend that wallet uses."}},"/v1/wallets/{id}/transactions":{"post":{"parameters":[{"example":"wal_4b1e77","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/safeTxIn"}}}},"summary":"Composes a Safe transaction on the MPC ring and answers its EIP-712 hash together with the owner approval the ring's threshold signature produced."}},"/v1/webhooks":{"get":{"summary":"Returns every webhook endpoint the caller's org has registered, newest first, each with its 7-day delivery and failure counts."},"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/createEndpointIn"}}}},"summary":"Registers a new webhook subscription for the caller's org and answers 201 with the endpoint INCLUDING its freshly minted signing secret."}},"/v1/webhooks/{id}":{"delete":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Removes one of the caller org's webhook endpoints and answers 204 with no body."},"get":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Returns one of the caller org's webhook endpoints with its 7-day delivery and failure counts, signing secret redacted."},"put":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/updateEndpointIn"}}}},"summary":"Replaces the editable fields of one of the caller org's endpoints — url, events, status and description — and answers the stored row with its secret redacted."}},"/v1/webhooks/{id}/deliveries":{"get":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Limit caps how many attempts come back: default 50, maximum 200. A value\nthat is not a positive integer reads as the default.","example":100,"in":"query","name":"limit","required":false,"schema":{"type":"integer"}},{"description":"Status narrows the log to one outcome: \"ok\", \"retrying\" or \"failed\".\nEmpty returns every attempt.","example":"failed","in":"query","name":"status","required":false,"schema":{"type":"string"}}],"summary":"Returns one endpoint's per-attempt delivery log, newest first — the record of what was sent, what the subscriber answered, and how long it took."}},"/v1/webhooks/{id}/secret":{"post":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Mints a NEW HMAC signing secret for the endpoint and answers the endpoint WITH it — the only other response besides create that ever carries a secret."}},"/v1/webhooks/{id}/test":{"post":{"parameters":[{"example":"wh_9f8c1d2e","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Sends ONE signed test event to the endpoint right now and answers the outcome inline, so the console can show whether the subscriber is reachable without waiting for real traffic."}},"/v1/websearch":{"post":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/webSearchQuery"}}}},"summary":"Search the live web"}},"/v1/websearch/search":{"delete":{"summary":"Keyless web meta-search, in the SearXNG JSON envelope."},"get":{"summary":"Keyless web meta-search, in the SearXNG JSON envelope."},"patch":{"summary":"Keyless web meta-search, in the SearXNG JSON envelope."},"post":{"summary":"Keyless web meta-search, in the SearXNG JSON envelope."},"put":{"summary":"Keyless web meta-search, in the SearXNG JSON envelope."}},"/v1/wecom-bot/callback/{botId}":{"get":{"parameters":[{"in":"path","name":"botId","required":true,"schema":{"type":"string"}}],"summary":"Verify WeChat work bot callback URL"},"post":{"parameters":[{"in":"path","name":"botId","required":true,"schema":{"type":"string"}}],"summary":"Process WeChat work bot messages"}},"/v1/world":{"get":{"summary":"Answers GET /v1/world — the product's front door, naming every wire this surface answers on."}},"/v1/world/limits":{"get":{"parameters":[{"description":"Plan is a World plan id from the live @hanzo/plans catalog, e.g. world-pro.\nEmpty means world-free, and so does an id the catalog does not know — this\nnever fails on an unknown plan.","in":"query","name":"plan","required":false,"schema":{"type":"string"}}],"summary":"Echoes a World plan's rate limits, alert quota and model-API grant, read straight from the live @hanzo/plans catalog, so agents and dashboards configure themselves against the catalog instead of hardcoding tier numbers."}},"/v1/world/news":{"get":{"summary":"Returns the caller's merged world-news feed: every source their project's pipeline names — GDELT once per keyword, plus each allowlisted RSS or Atom feed — fetched concurrently, narrowed by the pipeline's keyword/region/source filters, deduplicated by link and sorted freshest first, capped at 50 items."}},"/v1/world/pipeline":{"get":{"summary":"Returns the caller project's news pipeline: which feeds it reads and how the merged result is filtered."},"put":{"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/pipelineReq"}}}},"summary":"Replaces the caller project's news pipeline and returns what was stored."}},"/v1/world/stream":{"get":{"summary":"Live news refreshes for the caller's org and project, as Server-Sent Events."}},"/v1/x402/settlements/{id}":{"get":{"parameters":[{"description":"ID is the settlement id from the URL — the deterministic keccak(from|nonce)\nkey an x402 receipt is issued under (the `id` field of a Receipt, and the\n`transaction` of the SettlementResponse on the PAYMENT-RESPONSE header a paid\nrequest answers with).","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"summary":"Settlement reads one x402 payment receipt by id."}}},"tags":[{"description":"Package admin is the operator's view of the fleet: orgs, users, roles, spend and system health.","name":"admin"},{"description":"Package ads is your paid ad campaigns, launched and paused from one place.","name":"ads"},{"description":"Package affiliates is a partner program that pays commission on what your referrals spend.","name":"affiliates"},{"description":"Package agents is autonomous agents for your org: define them, run them, keep every run.","name":"agent"},{"description":"Package agents is autonomous agents for your org: define them, run them, keep every run.","name":"agents"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"ai"},{"description":"Package analytics is product analytics: send an event, read back who did what.","name":"analytics"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"appearance"},{"description":"Package ask is a plain-language question about your business, answered with real numbers.","name":"ask"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"audio"},{"description":"Package auditlog is your org's tamper-evident audit trail: every security-relevant event, hash-chained and readable.","name":"audit"},{"description":"Package authors is a royalty for open-source work: your repo runs, you get paid.","name":"authors"},{"description":"Package auto is Hanzo Auto: build a flow from triggers and actions, publish it, and watch every run.","name":"auto"},{"description":"Package automations is workflows that run themselves, on a schedule or a webhook.","name":"automations"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"avatar"},{"description":"Package do is the org-scoped private-network surface — /v1/vpcs and /v1/balancers — carved out of Hanzo's OWN house DigitalOcean account.","name":"balancers"},{"description":"Package base is managed Hanzo Base: a hosted backend for your app — collections, records, access rules and sign-in.","name":"base"},{"description":"Package benchmark is one honest score for any model, on the tests everyone quotes.","name":"benchmark"},{"description":"Package billing is your org's balance, what it has spent, and the cards it pays with.","name":"billing"},{"description":"Package blueprint is what a template costs to run, worked out before you deploy.","name":"blueprint"},{"description":"Package books is double-entry accounting: chart of accounts, ledger, bank reconciliation, and the reports that prove the books balance.","name":"books"},{"description":"Package bot is your own machines, connected and ready to take a command.","name":"bot"},{"description":"Package bots is a bot doing your work on a real desktop, live, while you watch.","name":"bots"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"builds"},{"description":"Package campaign is one go-to-market push across paid, organic and email at once.","name":"campaign"},{"description":"Package captable is your cap table: stakeholders, share classes, grants, SAFEs, rounds, and who owns what.","name":"captable"},{"description":"Package commerce is selling: checkout, subscriptions, invoices, spend alerts, payment webhooks and the storefront catalog.","name":"cart"},{"description":"Package catalog is one place to browse every project, app and site built here.","name":"catalog"},{"description":"Package web3 is the chain-access surface: which chains this deployment can reach, a JSON-RPC door onto each, and the two token reads every wallet UI needs.","name":"chains"},{"description":"Package channels is one inbox for the chat apps you connect — Discord, Slack, Teams, Telegram.","name":"channels"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"chat"},{"description":"Package venue is bring your own cloud: link a DigitalOcean, AWS or GCP account and its clusters show up ready to run work.","name":"cloud"},{"description":"Package cloudflare is your Cloudflare account, managed from Hanzo: zones, Pages, Workers, Workers AI, R2, KV and D1.","name":"cloudflare"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"clusters"},{"description":"Package code is search and symbols across your repos, for you and your agents.","name":"code"},{"description":"Package agents is autonomous agents for your org: define them, run them, keep every run.","name":"coding"},{"description":"Package commerce is selling: checkout, subscriptions, invoices, spend alerts, payment webhooks and the storefront catalog.","name":"commerce"},{"description":"Package company is incorporation end to end: pick a structure, add founders, pay, file, and e-sign.","name":"company"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"completions"},{"description":"Package compliance is your KYC/KYB onboarding, accreditation records, and the evidence trail behind them.","name":"compliance"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"compute"},{"description":"Package integrations is how your org connects third-party accounts like Slack, and revokes them.","name":"connectors"},{"description":"Package content is marketing content from draft to published, on every channel.","name":"content"},{"description":"Package crawl is any web page turned into clean markdown a model can read.","name":"crawl"},{"description":"Package crm is your sales pipeline: the companies, the people, the deals in play.","name":"crm"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"csrf"},{"description":"Package dataroom is a secure document room you share by link and watch page by page.","name":"dataroom"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"datastore"},{"description":"Package deploy is Hanzo CD: see what each app is running, sync it, and roll back a bad release.","name":"deploy"},{"description":"Package destinations is your events forwarded to the ad and analytics tools you use.","name":"destinations"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"dev-bridge"},{"description":"Package dns is your DNS records: the zones and records behind every name you point at Hanzo.","name":"dns"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"docdb"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"docs"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"documents"},{"description":"Package domain is Hanzo Domains: search a name, see the price, buy it from your prepaid wallet.","name":"domain"},{"description":"Package exec is the code interpreter: run a snippet in a sandbox, and move files in and out of the session that sandbox IS.","name":"download"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"embed"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"embeddings"},{"description":"Package pricing is the price list: what every model, provider, GPU tier, tool and hosting plan costs.","name":"enablement"},{"description":"Package engine is Hanzo Engine: which models the serving runtime has loaded, and the GPUs under it.","name":"engine"},{"description":"Package entitlements is what your org may run: what the plan grants, and which of those products are switched on.","name":"entitlements"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"environments"},{"description":"Package analytics is product analytics: send an event, read back who did what.","name":"errors"},{"description":"Package esign is a document out for signature, signed and filed with an audit trail.","name":"esign"},{"description":"Package eval is scoring a model on your own data, with a judge you choose.","name":"evals"},{"description":"Package analytics is product analytics: send an event, read back who did what.","name":"event"},{"description":"Package exec is the code interpreter: run a snippet in a sandbox, and move files in and out of the session that sandbox IS.","name":"exec"},{"description":"Package experiments is A/B testing anything: a flag, an ad, a subject line, a model.","name":"experiments"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"feedback"},{"description":"Package exec is the code interpreter: run a snippet in a sandbox, and move files in and out of the session that sandbox IS.","name":"files"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"finetune"},{"description":"Package flags is feature flags: ship it dark, then turn it on for who you pick.","name":"flags"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"fleet"},{"description":"Package flow is Hanzo Flow: build an agent workflow on a visual canvas, run it, and read every run.","name":"flow"},{"description":"Package framework is document types you define: describe a record once, then create, list, submit and cancel documents against it.","name":"framework"},{"description":"Package functions is your serverless code: publish it, call it over HTTP, watch every run and what it cost.","name":"functions"},{"description":"Package gateway is live control of the policy your API applies to every incoming request: CORS, rate limits, cache TTL and allowed methods, changed without a redeploy.","name":"gateway"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"generate-text-to-speech-audio"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"generate-text-to-speech-audio-stream"},{"description":"Package git is Git hosting for your org: create repos, clone, push, and see what they cost.","name":"git"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"git-webhook"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"gpus"},{"description":"Package guide is a step-by-step checklist that gets your business running on AI.","name":"guide"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"health"},{"description":"Package help is a support desk: customers file tickets, your team answers them.","name":"help"},{"description":"Package iam is Hanzo's identity provider: users, organizations, applications, and the OIDC/OAuth2 endpoints every Hanzo service authenticates against.","name":"iam"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"images"},{"description":"Package index is fast full-text search over your own data, typos forgiven.","name":"index"},{"description":"Package explorer is chain data: your block indexers and how far each has caught up, plus the on-chain price feeds.","name":"indexers"},{"description":"Package ingress is your front door: automatic TLS certificates and hostname routing to any backend, changed live.","name":"ingress"},{"description":"Package analytics is product analytics: send an event, read back who did what.","name":"insights"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"install-patch"},{"description":"Package integrations is how your org connects third-party accounts like Slack, and revokes them.","name":"integrations"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"k8s"},{"description":"Package knowledge is your team's wiki and your agents' memory, searchable by meaning.","name":"kb"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"keys"},{"description":"Package kms is secret custody: your org's secrets sealed at rest, plus threshold signing.","name":"kms"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"kv"},{"description":"Package legal is the paperwork your company needs, drafted, signed and filed.","name":"legal"},{"description":"Package link is the unified AI login manager's registry: the org+user-scoped record of WHICH provider accounts (Claude Max, ChatGPT Plus, a Hanzo API key, a raw provider key) a developer has signed into, ON WHICH MACHINES, with each account's latest usage snapshot.","name":"links"},{"description":"Package visor is the compute you rent from Hanzo: machines, GPUs and clusters — launch one, resize it, tear it down.","name":"machines"},{"description":"Package marketing is lifecycle email: drip sequences that reach the right people.","name":"marketing"},{"description":"Package marketplace is the shop for tools and agents: browse, install into your project, publish your own free or priced.","name":"marketplace"},{"description":"Package tools is everything your org can call, in one list: connector actions, functions, agents, skills and your own MCP servers.","name":"mcp"},{"description":"Package meet is the virtual office: it decides who may join a room and mints the short-lived token that lets them in.","name":"meet"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"memory"},{"description":"Package zt mounts the Hanzo Cloud NETWORKING surface: the tenant's Hanzo Zero Trust footprint — overlay networks, their routers and mesh services — served as clean, org-scoped REST off the unified cloud binary and fronting the Hanzo Zero Trust controller (hanzoai/zt, an OpenZiti-based fabric).","name":"mesh"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"messages"},{"description":"Package ml is model serving: deploy a model behind an endpoint and call it.","name":"ml"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"models"},{"description":"Package mq is queue and stream admin for your org: create them, watch them drain, ack what you pulled.","name":"mq"},{"description":"Package zt mounts the Hanzo Cloud NETWORKING surface: the tenant's Hanzo Zero Trust footprint — overlay networks, their routers and mesh services — served as clean, org-scoped REST off the unified cloud binary and fronting the Hanzo Zero Trust controller (hanzoai/zt, an OpenZiti-based fabric).","name":"networks"},{"description":"Package notify is transactional email and SMS, sent through your org's own provider credential.","name":"notify"},{"description":"Package o11y is your logs, metrics and traces: ship them in, query them, chart them.","name":"o11y"},{"description":"Package explorer is chain data: your block indexers and how far each has caught up, plus the on-chain price feeds.","name":"oracles"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"org"},{"description":"Package account is your own account: API keys you mint and revoke, and org onboarding.","name":"orgs"},{"description":"Package commerce is selling: checkout, subscriptions, invoices, spend alerts, payment webhooks and the storefront catalog.","name":"payments"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"pipelines"},{"description":"Package plan is the plan catalog: every tier you can buy, what it costs, and what it grants.","name":"plans"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"platform"},{"description":"Package plugin is what each host is running, and how to change it: enable, disable, reload, or pin a service to a version.","name":"plugins"},{"description":"Package prefs is your own settings — theme, density, pinned nav — following you across every Hanzo app.","name":"prefs"},{"description":"Package pricing is the price list: what every model, provider, GPU tier, tool and hosting plan costs.","name":"pricing"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"process-speech-to-text"},{"description":"Package projects is where your sites live: create one, deploy a build, roll back to any release.","name":"projects"},{"description":"Package prompts is your prompt library, versioned, so nothing changes silently.","name":"prompts"},{"description":"Package pubsub is your message bus: publish, subscribe, and durable streams your apps read at their own pace.","name":"pubsub"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"query"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"query_multiple"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"rag"},{"description":"Package referrals is referral ATTRIBUTION: who referred whom, and whether that referee ever became a real customer.","name":"referrals"},{"description":"Package registry is your container and package registry: push images, pull them back, see what you store.","name":"registry"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"releases"},{"description":"Package analytics is product analytics: send an event, read back who did what.","name":"replay"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"rerank"},{"description":"Package research is every experiment you have ever run, kept and comparable.","name":"research"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"responses"},{"description":"Package risk is HANZO RISK's model plane: the per-organisation feature surface and the per-organisation models trained on it.","name":"risk"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"router"},{"description":"Package web3 is the chain-access surface: which chains this deployment can reach, a JSON-RPC door onto each, and the two token reads every wallet UI needs.","name":"rpc"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"run"},{"description":"Package platform is Hanzo PaaS: deploy containers to your own tenant namespace — builds, releases, environments, logs, custom domains.","name":"runner"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"s3"},{"description":"Package sandbox is the ONE compute primitive: a sandbox is a gVisor pod that runs somebody else's code, and every lifetime is the same object.","name":"sandboxes"},{"description":"Package sbom is what is inside a container image: every component, resolvable by digest or image ref.","name":"sbom"},{"description":"Package websearch is a web search and a page fetch your agents can call.","name":"scrape"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"search"},{"description":"Package security is secret scanning for your code: submit sources, get findings, masked never raw.","name":"security"},{"description":"Package o11y is your logs, metrics and traces: ship them in, query them, chart them.","name":"sentry"},{"description":"Package settings is how an org configures each product it uses, secret fields included.","name":"settings"},{"description":"Package share is a public URL for a service on your own machine, and a list of what you have open.","name":"share"},{"description":"Package projects is where your sites live: create one, deploy a build, roll back to any release.","name":"sites"},{"description":"Package skills is the skill catalogue an AI client reads to learn what it can do.","name":"skills"},{"description":"Package social is posting to every social account you own, now or on a schedule.","name":"social"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"sql"},{"description":"Package commerce is selling: checkout, subscriptions, invoices, spend alerts, payment webhooks and the storefront catalog.","name":"store"},{"description":"Package o11y is your logs, metrics and traces: ship them in, query them, chart them.","name":"summary"},{"description":"Package sync is data sync: link two endpoints and keep them in step, on a webhook, on a schedule, or on demand.","name":"sync"},{"description":"Package projects is where your sites live: create one, deploy a build, roll back to any release.","name":"tags"},{"description":"Package tasks is Hanzo Tasks: durable workflows that survive a crash, with every run visible and replayable.","name":"tasks"},{"description":"Package taxonomy is the product catalogue's shape: which categories exist, what each product is called, which category it sits in, what it is tagged with, and the order the two are shown in.","name":"taxonomy"},{"description":"Package team is your org's shared workspace: documents edited together, files, seats, and agents as teammates.","name":"team"},{"description":"Package tel is the telecommunications surface: phone numbers, calls and messages, on whatever carrier the deployment is configured for.","name":"tel"},{"description":"Package templates is a gallery of starter kits you can deploy as they come.","name":"templates"},{"description":"Package todo is Hanzo Todo: boards, the work items on them, and the filters that make a board.","name":"todo"},{"description":"Package web3 is the chain-access surface: which chains this deployment can reach, a JSON-RPC door onto each, and the two token reads every wallet UI needs.","name":"tokens"},{"description":"Package tools is everything your org can call, in one list: connector actions, functions, agents, skills and your own MCP servers.","name":"tools"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"traffic"},{"description":"Package translate is text in, the same text out in the language you asked for.","name":"translate"},{"description":"Package exec is the code interpreter: run a snippet in a sandbox, and move files in and out of the session that sandbox IS.","name":"upload"},{"description":"Package usage is what your org ran and what it cost, broken down per account.","name":"usage"},{"description":"Package validators is one-click validator onboarding: prove your Genesis NFT, get a node provisioned, queue its registration.","name":"validators"},{"description":"Package provisioning is one-click data add-ons: a SQL, key-value, document, vector, search or object store, wired straight into your app.","name":"vector"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"videos"},{"description":"Package do is the org-scoped private-network surface — /v1/vpcs and /v1/balancers — carved out of Hanzo's OWN house DigitalOcean account.","name":"vpcs"},{"description":"Package wallets is blockchain key custody: create wallets, rotate their keys, and sign with them.","name":"wallets"},{"description":"Package webhooks is how your app hears about events: register an endpoint, pick the events, get each one delivered and signed.","name":"webhooks"},{"description":"Package websearch is a web search and a page fetch your agents can call.","name":"websearch"},{"description":"Package ai is Hanzo AI — the model API on /v1 (/v1/chat/completions, /v1/messages, /v1/models and the rest of hanzoai/ai's surface) — mounted into a cloud binary with the money, ingest and telemetry callbacks cloud BUILDS but cannot INSTALL.","name":"wecom-bot"},{"description":"Package world is a live news feed filtered to what your project cares about.","name":"world"},{"description":"Package x402 is pay-per-request over HTTP 402: quote a price, take the payment, serve the resource.","name":"x402"}]}