{"openapi":"3.1.0","info":{"title":"yaya Public API","version":"0.1.0","description":"Tenant-scoped HTTPS API contract for yaya integrators. Paths cover the here.now parity benchmark plus yaya-native routes shipped on the Worker. x-yaya-status is derived from the route handlers under apps/web/app/api: live means the handler ships today, deferred marks a parity slot without a handler yet."},"x-yaya-implementation-map":{"parityReference":"https://here.now/openapi.json","parityPathCount":89,"yayaNativePaths":["/api/v1/account","/api/v1/account/deletion","/api/v1/account/deletion/confirm","/api/v1/account/email-change","/api/v1/account/email-change/confirm","/api/v1/account/keys","/api/v1/account/keys/{keyId}","/api/v1/agents/signup","/api/v1/anonymous-publishes","/api/v1/delegated-mail-zones","/api/v1/delegated-mail-zones/{zoneId}","/api/v1/delegated-mail-zones/{zoneId}/mail","/api/v1/delegated-mail-zones/{zoneId}/mailboxes","/api/v1/delegated-mail-zones/{zoneId}/mailboxes/{mailboxId}","/api/v1/dns-zones","/api/v1/domains/check","/api/v1/domains/checkout","/api/v1/domains/checkout/status","/api/v1/domains/checkout/webhook","/api/v1/domains/exit-choices","/api/v1/domains/primary","/api/v1/domains/search","/api/v1/domains/transfers","/api/v1/domains/transfers/start","/api/v1/domains/{domainId}/dns-records","/api/v1/domains/{domainId}/dns-records/{recordId}","/api/v1/domains/{domainId}/exit-choice","/api/v1/domains/{domainId}/mail","/api/v1/domains/{domainId}/mailboxes","/api/v1/domains/{domainId}/mailboxes/{mailboxId}","/api/v1/domains/{domainId}/renew","/api/v1/domains/{domainId}/transfer-out","/api/v1/me/analytics","/api/v1/me/profile","/api/v1/tenants","/api/v1/tenants/{tenantId}","/api/v1/tenants/{tenantId}/access","/api/v1/tenants/{tenantId}/access/invites","/api/v1/tenants/{tenantId}/agent-actions","/api/v1/tenants/{tenantId}/agent-actions/{actionId}/approve","/api/v1/tenants/{tenantId}/analytics","/api/v1/tenants/{tenantId}/blog","/api/v1/tenants/{tenantId}/blog/{postId}","/api/v1/tenants/{tenantId}/contacts","/api/v1/tenants/{tenantId}/contacts/custom-fields","/api/v1/tenants/{tenantId}/contacts/custom-fields/{fieldId}","/api/v1/tenants/{tenantId}/contacts/import","/api/v1/tenants/{tenantId}/contacts/messages","/api/v1/tenants/{tenantId}/contacts/{contactId}","/api/v1/tenants/{tenantId}/contacts/{contactId}/messages/read","/api/v1/tenants/{tenantId}/contacts/{contactId}/notes","/api/v1/tenants/{tenantId}/delete","/api/v1/tenants/{tenantId}/domain-path","/api/v1/tenants/{tenantId}/draft","/api/v1/tenants/{tenantId}/draft/pages","/api/v1/tenants/{tenantId}/draft/pages/{slug}","/api/v1/tenants/{tenantId}/export","/api/v1/tenants/{tenantId}/folder","/api/v1/tenants/{tenantId}/live","/api/v1/tenants/{tenantId}/metadata","/api/v1/tenants/{tenantId}/places","/api/v1/tenants/{tenantId}/publish","/api/v1/tenants/{tenantId}/site-data/{collection}","/api/v1/tenants/{tenantId}/site-data/{collection}/{recordId}","/api/v1/tenants/{tenantId}/site-document","/api/v1/tenants/{tenantId}/site-document/sections","/api/v1/tenants/{tenantId}/site-document/staged-commit","/api/v1/tenants/{tenantId}/site-status","/api/v1/tenants/{tenantId}/site-versions","/api/v1/tenants/{tenantId}/site-versions/{versionId}","/api/v1/tenants/{tenantId}/site-versions/{versionId}/restore","/api/v1/tenants/{tenantId}/template","/api/v1/tenants/{tenantId}/theme","/api/v1/tenants/{tenantId}/visitor-tracking"],"liveOperations":168,"deferredOperations":85,"statusSource":"scripts/openapi/live-routes.mjs — exported handlers in apps/web/app/api/**/route.ts","liveBootstrapOnly":[{"route":"GET /openapi.json","host":"web Worker (#16)"}]},"servers":[{"url":"https://api.staging.yaya.page","description":"Staging"},{"url":"https://api.yaya.page","description":"Production"}],"tags":[{"name":"parity","description":"here.now-aligned surface (see handoff/competitor-parity.md)"}],"paths":{"/api/auth/agent/request-code":{"post":{"operationId":"requestAgentAuthCode","summary":"Request an email sign-in code","x-yaya-status":"live","x-yaya-authorization-scopes":["auth:agent"],"responses":{"200":{"description":"Code sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAuthRequestCodeResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"client":{"type":"string"}}}}}}}},"/api/auth/agent/verify-code":{"post":{"operationId":"verifyAgentAuthCode","summary":"Verify an email code and receive an API key","x-yaya-status":"live","x-yaya-authorization-scopes":["auth:agent"],"responses":{"200":{"description":"API key issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentAuthVerifyCodeResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","code"],"properties":{"email":{"type":"string"},"code":{"type":"string"},"keyName":{"type":"string"}}}}}}}},"/api/v1/accounts":{"get":{"operationId":"listAccounts","summary":"List accounts available to the caller","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"includeJoinable","in":"query","required":false,"description":"When set to 1, include a joinable array: workspaces with an active auto-join rule matching the caller's email domain (not already a member, not suppressed). Join one with POST /api/v1/accounts/{accountId}/domain-rules/apply.","schema":{"type":"string","enum":["1","true"]}}]},"post":{"operationId":"createWorkspace","summary":"Create a workspace","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/subdomain-availability":{"get":{"operationId":"checkWorkspaceSubdomainAvailability","summary":"Check workspace subdomain availability","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"subdomain","in":"query","required":true,"description":"Candidate workspace subdomain (the {subdomain}.here.now label).","schema":{"type":"string","minLength":3,"maxLength":30}}]}},"/api/v1/accounts/{accountId}":{"patch":{"operationId":"updateWorkspace","summary":"Rename a workspace or set its icon","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteWorkspace","summary":"Delete a workspace","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/domain-rules":{"get":{"operationId":"listWorkspaceDomainRules","summary":"List auto-join domain rules","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createWorkspaceDomainRule","summary":"Create an auto-join domain rule","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/domain-rules/apply":{"post":{"operationId":"applyWorkspaceDomainRule","summary":"Join a workspace via a matching domain rule","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/domain-rules/{ruleId}":{"delete":{"operationId":"disableWorkspaceDomainRule","summary":"Disable an auto-join domain rule","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"ruleId","in":"path","required":true,"description":"Domain rule UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/invites":{"get":{"operationId":"listWorkspaceInvites","summary":"List pending workspace invites","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"createWorkspaceInvite","summary":"Send a workspace invite","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/invites/{inviteId}":{"delete":{"operationId":"revokeWorkspaceInvite","summary":"Revoke a workspace invite","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"inviteId","in":"path","required":true,"description":"Invite UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/invites/{inviteId}/accept":{"post":{"operationId":"acceptWorkspaceInvite","summary":"Accept a workspace invite","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"inviteId","in":"path","required":true,"description":"Invite UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/invites/{inviteId}/decline":{"post":{"operationId":"declineWorkspaceInvite","summary":"Decline a workspace invite","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"inviteId","in":"path","required":true,"description":"Invite UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/members":{"get":{"operationId":"listWorkspaceMembers","summary":"List workspace members","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"addWorkspaceMember","summary":"Add a workspace member directly","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/members/{userId}":{"patch":{"operationId":"updateWorkspaceMemberRole","summary":"Change a member's role","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"userId","in":"path","required":true,"description":"Member user UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"removeWorkspaceMember","summary":"Remove a member or leave the workspace","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"userId","in":"path","required":true,"description":"Member user UUID (your own id to leave).","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/provisioning":{"post":{"operationId":"provisionWorkspaceSubdomain","summary":"Provision a workspace subdomain","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/site-labels":{"get":{"operationId":"listWorkspaceSiteLabels","summary":"List workspace Site labels","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}}]},"post":{"operationId":"assignWorkspaceSiteLabel","summary":"Assign a workspace Site label","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/accounts/{accountId}/site-labels/{label}":{"patch":{"operationId":"renameWorkspaceSiteLabel","summary":"Rename a workspace Site label","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"label","in":"path","required":true,"description":"Current active workspace label.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"removeWorkspaceSiteLabel","summary":"Remove a workspace Site label","x-yaya-status":"deferred","x-yaya-authorization-scopes":["workspace:read","workspace:admin"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"accountId","in":"path","required":true,"description":"Workspace account UUID.","schema":{"type":"string","format":"uuid"}},{"name":"label","in":"path","required":true,"description":"Active workspace label to remove.","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/analytics":{"get":{"operationId":"getAccountAnalytics","summary":"Get account analytics","x-yaya-status":"deferred","x-yaya-authorization-scopes":["analytics:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"range","in":"query","required":false,"description":"Analytics time range. Defaults to 30d when omitted or invalid.","schema":{"$ref":"#/components/schemas/AnalyticsRange"}}]}},"/api/v1/domains":{"get":{"operationId":"listDomains","summary":"List custom domains","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Domains","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"}]},"post":{"operationId":"createDomain","summary":"Add a custom domain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"201":{"description":"Created"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId","hostname"],"properties":{"tenantId":{"type":"string"},"hostname":{"type":"string"}}}}}}}},"/api/v1/domains/{domain}":{"get":{"operationId":"getDomain","summary":"Get custom domain status","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"yaya domain id"},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"}]},"delete":{"operationId":"deleteDomain","summary":"Remove a custom domain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Domain removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"yaya domain id"},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives":{"get":{"operationId":"listDrives","summary":"List account Drives","x-yaya-status":"deferred","x-yaya-authorization-scopes":["suite:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createDrive","summary":"Create a Drive","x-yaya-status":"deferred","x-yaya-authorization-scopes":["suite:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives/default":{"get":{"operationId":"getDefaultDrive","summary":"Get or create the default Drive","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"200":{"description":"Default Drive","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]}},"/api/v1/drives/{driveId}":{"get":{"operationId":"getDrive","summary":"Get Drive details","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}}]},"patch":{"operationId":"patchDrive","summary":"Patch Drive metadata","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteDrive","summary":"Soft-delete a Drive","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives/{driveId}/files":{"get":{"operationId":"listDriveFiles","summary":"List Drive files","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"200":{"description":"Files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveFileListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]},"patch":{"operationId":"applyDriveFileBatch","summary":"Apply a batch of Drive file operations","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives/{driveId}/files/finalize":{"post":{"operationId":"finalizeDriveFileUpload","summary":"Finalize a staged Drive upload","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"200":{"description":"Upload finalized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DriveBatchResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["uploadId"],"properties":{"uploadId":{"type":"string"},"path":{"type":"string"}}}}}}}},"/api/v1/drives/{driveId}/files/move":{"post":{"operationId":"moveDriveFile","summary":"Move a Drive file","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives/{driveId}/files/uploads":{"post":{"operationId":"createDriveFileUpload","summary":"Stage a Drive file write","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"201":{"description":"Created"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["path","file"],"properties":{"path":{"type":"string"},"file":{"type":"string","format":"binary"}}}}}}}},"/api/v1/drives/{driveId}/files/{path}":{"get":{"operationId":"readDriveFile","summary":"Read a Drive file","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"200":{"description":"File bytes","content":{"text/plain":{"schema":{"type":"string","format":"binary"}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]},"head":{"operationId":"headDriveFile","summary":"Read a Drive file's headers","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}]},"delete":{"operationId":"deleteDriveFile","summary":"Delete a Drive file or prefix","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}},{"name":"recursive","in":"query","required":false,"schema":{"type":"boolean"}},{"name":"baseVersionId","in":"query","required":false,"schema":{"type":"string"}},{"name":"If-Match","in":"header","required":false,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/drives/{driveId}/tokens":{"get":{"operationId":"listDriveTokens","summary":"List Drive tokens","x-yaya-status":"deferred","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"description":"Drive identifier.","schema":{"type":"string","minLength":1,"example":"drv_01j..."}}]},"post":{"operationId":"createDriveToken","summary":"Create a scoped Drive token","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"201":{"description":"Created"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["ttl"],"properties":{"ttl":{"type":"string"},"perms":{"type":"array","items":{"type":"string"}},"pathPrefix":{"type":"string"},"label":{"type":"string"}}}}}}}},"/api/v1/drives/{driveId}/tokens/{tokenId}":{"delete":{"operationId":"revokeDriveToken","summary":"Revoke a Drive token","x-yaya-status":"live","x-yaya-authorization-scopes":["drive:read","drive:write"],"responses":{"200":{"description":"Token revoked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"driveId","in":"path","required":true,"schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/folders":{"get":{"operationId":"listFolders","summary":"List the account's folders","x-yaya-status":"live","x-yaya-authorization-scopes":["inventory:read","inventory:write"],"responses":{"200":{"description":"Folders","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createFolder","summary":"Create a folder","x-yaya-status":"live","x-yaya-authorization-scopes":["inventory:read","inventory:write"],"responses":{"201":{"description":"Folder created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name"],"properties":{"name":{"type":"string"}}}}}}}},"/api/v1/folders/{id}":{"patch":{"operationId":"renameFolder","summary":"Rename a folder","x-yaya-status":"deferred","x-yaya-authorization-scopes":["inventory:read","inventory:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"id","in":"path","required":true,"description":"Folder id (from GET /api/v1/folders or a Site's folder.id).","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteFolder","summary":"Delete a folder","x-yaya-status":"deferred","x-yaya-authorization-scopes":["inventory:read","inventory:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"id","in":"path","required":true,"description":"Folder id (from GET /api/v1/folders or a Site's folder.id).","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/handle":{"get":{"operationId":"getHandle","summary":"Get the vanity subdomain and its mounts","x-yaya-status":"deferred","x-yaya-authorization-scopes":["profile:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createHandle","summary":"Turn on the vanity subdomain (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["profile:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteHandle","summary":"Release the vanity subdomain (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["profile:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/links":{"get":{"operationId":"listLinks","summary":"List subdomain handle or domain links (deprecated alias of /api/v1/mounts)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"query","required":false,"description":"Target a custom domain connected to the selected account (personal or workspace). Omit to target the personal subdomain handle.","schema":{"type":"string","example":"example.com"}}]},"post":{"operationId":"createLink","summary":"Create a link (deprecated alias of POST /api/v1/mounts)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/links/{location}":{"get":{"operationId":"getLink","summary":"Get a link (deprecated alias of GET /api/v1/mounts/{mount_path})","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"location","in":"path","required":true,"description":"Mount location (this deprecated alias calls it a link location). Use __root__ for the root (empty-string) location.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Target a custom domain connected to the selected account (personal or workspace). Omit to target the personal subdomain handle.","schema":{"type":"string","example":"example.com"}}]},"patch":{"operationId":"updateLink","summary":"Update a link (deprecated alias of PATCH /api/v1/mounts/{mount_path})","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"location","in":"path","required":true,"description":"Mount location (this deprecated alias calls it a link location). Use __root__ for the root (empty-string) location.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Target a custom domain connected to the selected account (personal or workspace). Omit to target the personal subdomain handle.","schema":{"type":"string","example":"example.com"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteLink","summary":"Delete a link (deprecated alias of DELETE /api/v1/mounts/{mount_path})","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"location","in":"path","required":true,"description":"Mount location (this deprecated alias calls it a link location). Use __root__ for the root (empty-string) location.","schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"description":"Target a custom domain connected to the selected account (personal or workspace). Omit to target the personal subdomain handle.","schema":{"type":"string","example":"example.com"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/email-change":{"get":{"operationId":"getEmailChangeRequest","summary":"Pending account email change","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Current email and pending request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangeStatusResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"requestEmailChange","summary":"Start moving the account to a new email address","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"202":{"description":"Confirmation sent to the new address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangePendingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["newEmail"],"properties":{"newEmail":{"type":"string"}}}}}}},"delete":{"operationId":"cancelEmailChange","summary":"Cancel the pending email change","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Cancelled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangeCancelResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/email-change/confirm":{"post":{"operationId":"confirmEmailChange","summary":"Confirm the email change with the emailed code","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Email changed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailChangeConfirmResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}}}}}}},"/api/v1/me/invites":{"get":{"operationId":"listMyWorkspaceInvites","summary":"List the caller's pending workspace invites","x-yaya-status":"deferred","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/me/keys":{"get":{"operationId":"listApiKeys","summary":"List API keys","x-yaya-status":"deferred","x-yaya-authorization-scopes":["keys:read","keys:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"createApiKey","summary":"Create a named API key","x-yaya-status":"deferred","x-yaya-authorization-scopes":["keys:read","keys:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/keys/{id}":{"delete":{"operationId":"revokeApiKey","summary":"Revoke an API key","x-yaya-status":"deferred","x-yaya-authorization-scopes":["keys:read","keys:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/payment-methods":{"get":{"operationId":"listPaymentMethods","summary":"Saved payment methods and the account default","x-yaya-status":"live","x-yaya-authorization-scopes":["billing:read","billing:write"],"responses":{"200":{"description":"Saved methods","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"createCardSetupPage","summary":"Get a hosted page where the user saves a card","x-yaya-status":"live","x-yaya-authorization-scopes":["billing:read","billing:write"],"responses":{"200":{"description":"Hosted card setup page","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrarPaymentMethodSetupResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/payment-methods/default":{"put":{"operationId":"setDefaultPaymentMethod","summary":"Make a saved method the account default","x-yaya-status":"live","x-yaya-authorization-scopes":["billing:read","billing:write"],"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodsMutationResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["paymentMethodId"],"properties":{"paymentMethodId":{"type":"string"}}}}}}}},"/api/v1/me/payment-methods/{id}":{"delete":{"operationId":"removePaymentMethod","summary":"Remove a saved payment method","x-yaya-status":"live","x-yaya-authorization-scopes":["billing:read","billing:write"],"responses":{"200":{"description":"Removed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodsMutationResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"Billing not configured","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pm_[A-Za-z0-9]+$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/variables":{"get":{"operationId":"listVariables","summary":"List service variables","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Variables","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]}},"/api/v1/me/variables/{name}":{"put":{"operationId":"setVariable","summary":"Create or update a service variable","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Variable stored","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VariableResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["value"],"properties":{"value":{"type":"string"},"allowedUpstreams":{"type":"array","items":{"type":"string"}}}}}}}},"delete":{"operationId":"deleteVariable","summary":"Delete a service variable","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Variable deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_me_variables_name_","summary":"GET /api/v1/me/variables/{name}","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/mounts":{"get":{"operationId":"listMounts","summary":"List vanity subdomain or domain mounts","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:write","site:publish"],"responses":{"200":{"description":"Mounts","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MountListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]},"post":{"operationId":"createMount","summary":"Mount a Site at a vanity subdomain/domain path","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:write","site:publish"],"responses":{"200":{"description":"Mount created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MountResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug","mount_path"],"properties":{"slug":{"type":"string"},"mount_path":{"type":"string"},"domain":{"type":["string","null"]},"namespace_id":{"type":["string","null"]}}}}}}}},"/api/v1/mounts/{mount_path}":{"get":{"operationId":"getMount","summary":"Get a mount","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:write","site:publish"],"responses":{"200":{"description":"Mount","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MountResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"mount_path","in":"path","required":true,"schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]},"patch":{"operationId":"updateMount","summary":"Update a mount","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:write","site:publish"],"responses":{"200":{"description":"Mount updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MountResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"mount_path","in":"path","required":true,"schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"},"domain":{"type":["string","null"]},"namespace_id":{"type":["string","null"]}}}}}}},"delete":{"operationId":"deleteMount","summary":"Delete a mount","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:write","site:publish"],"responses":{"200":{"description":"Mount deleted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteMountResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"mount_path","in":"path","required":true,"schema":{"type":"string"}},{"name":"domain","in":"query","required":false,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/profile":{"get":{"operationId":"getProfile","summary":"Get profile settings","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Profile settings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"patch":{"operationId":"patchProfile","summary":"Update profile settings","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Profile settings updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"enabled":{"type":"boolean"},"addNewSitesToProfile":{"type":"boolean"},"bio":{"type":["string","null"]},"link":{"type":["string","null"]}},"minProperties":1}}}}}},"/api/v1/profile/sites":{"get":{"operationId":"listProfileSites","summary":"List Sites on profile","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Profile Sites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSitesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"post":{"operationId":"addProfileSite","summary":"Add Site to profile","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Site added to profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSitesMutationResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug"],"properties":{"slug":{"type":"string"}}}}}}}},"/api/v1/profile/sites/{slug}":{"delete":{"operationId":"removeProfileSite","summary":"Remove Site from profile","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Site removed from profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSitesMutationResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/profile/username":{"patch":{"operationId":"patchProfileUsername","summary":"Change profile username","x-yaya-status":"live","x-yaya-authorization-scopes":["profile:read","profile:write"],"responses":{"200":{"description":"Profile username updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["username"],"properties":{"username":{"type":"string"}}}}}}}},"/api/v1/publish":{"post":{"operationId":"createSite","summary":"Create a Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"X-HereNow-Client","in":"header","required":false,"description":"Identifies the agent platform the caller runs in, as <harness>/<detail> (e.g. cursor/direct-api, claude-code/publish-sh, instinct/agent). Use the platform's name, not a bot or persona name. Send it on every here.now call including finalize: each published version records who published it, and the owner's dashboard shows \"Published with <agent>\" from the version. A finalize without it inherits the token from the create/update call that staged the version. Lowercase a-z 0-9 . _ / - only; invalid values are ignored.","schema":{"type":"string","example":"cursor/direct-api"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/from-drive":{"post":{"operationId":"publishFromDrive","summary":"Publish a Drive version as a Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}":{"get":{"operationId":"getSite","summary":"Get Site details","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}}]},"put":{"operationId":"updateSite","summary":"Update an existing Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"X-HereNow-Client","in":"header","required":false,"description":"Identifies the agent platform the caller runs in, as <harness>/<detail> (e.g. cursor/direct-api, claude-code/publish-sh, instinct/agent). Use the platform's name, not a bot or persona name. Send it on every here.now call including finalize: each published version records who published it, and the owner's dashboard shows \"Published with <agent>\" from the version. A finalize without it inherits the token from the create/update call that staged the version. Lowercase a-z 0-9 . _ / - only; invalid values are ignored.","schema":{"type":"string","example":"cursor/direct-api"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteSite","summary":"Delete a Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/access":{"get":{"operationId":"getSiteAccess","summary":"Read the Site access policy","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}}]},"patch":{"operationId":"patchSiteAccess","summary":"Update Site access mode and allowlists","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/access/invites":{"post":{"operationId":"sendSiteAccessInvites","summary":"Send invite emails for an existing access policy","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/claim":{"post":{"operationId":"claimAnonymousSite","summary":"Claim an anonymous Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/duplicate":{"post":{"operationId":"duplicateSite","summary":"Duplicate a Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/files":{"get":{"operationId":"listSiteFiles","summary":"List the live version's files","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"Current files","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteFilesResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"head":{"operationId":"head__api_v1_publish_slug_files","summary":"HEAD /api/v1/publish/{slug}/files","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/publish/{slug}/files/{path}":{"get":{"operationId":"getSiteFile","summary":"Read one file from the live version","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"File bytes","content":{"text/plain":{"schema":{"type":"string","format":"binary"}},"application/octet-stream":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"path","in":"path","required":true,"schema":{"type":"string"}}]},"head":{"operationId":"headSiteFile","summary":"Read one file's headers from the live version","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"File headers"},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"path","in":"path","required":true,"description":"Site-relative file path, percent-encoded per segment (slashes kept).","schema":{"type":"string","minLength":1}}]}},"/api/v1/publish/{slug}/finalize":{"post":{"operationId":"finalizeSiteVersion","summary":"Finalize a pending Site version","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"X-HereNow-Client","in":"header","required":false,"description":"Identifies the agent platform the caller runs in, as <harness>/<detail> (e.g. cursor/direct-api, claude-code/publish-sh, instinct/agent). Use the platform's name, not a bot or persona name. Send it on every here.now call including finalize: each published version records who published it, and the owner's dashboard shows \"Published with <agent>\" from the version. A finalize without it inherits the token from the create/update call that staged the version. Lowercase a-z 0-9 . _ / - only; invalid values are ignored.","schema":{"type":"string","example":"cursor/direct-api"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/metadata":{"patch":{"operationId":"patchSiteMetadata","summary":"Patch Site metadata and access controls","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/primary-domain":{"get":{"operationId":"getPrimaryDomain","summary":"Get a Site's primary domain","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"setPrimaryDomain","summary":"Set or clear a Site's primary domain","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/uploads/refresh":{"post":{"operationId":"refreshSiteUploadUrls","summary":"Refresh upload URLs for a pending Site version","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/versions":{"get":{"operationId":"listSiteVersions","summary":"List a Site's published versions","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}}]}},"/api/v1/publish/{slug}/versions/{versionId}":{"delete":{"operationId":"deleteSiteVersion","summary":"Permanently delete a recorded version","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string"},"description":"A content version id from the versions list."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publish/{slug}/versions/{versionId}/restore":{"post":{"operationId":"restoreSiteVersion","summary":"Restore a recorded version as the live Site","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string"},"description":"A content version id from the versions list (restore events cannot be restored)."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publishes":{"get":{"operationId":"listSites","summary":"List account Sites","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"Sites","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishListResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"folder","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}]}},"/api/v1/publishes/search":{"get":{"operationId":"searchSites","summary":"Search account Sites","x-yaya-status":"live","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"200":{"description":"Search results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiteSearchResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Publish search string"},{"name":"limit","in":"query","required":false,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"}}]}},"/api/v1/publishes/{slug}/analytics":{"get":{"operationId":"getSiteAnalytics","summary":"Get Site analytics","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"range","in":"query","required":false,"description":"Analytics time range. Defaults to 30d when omitted or invalid.","schema":{"$ref":"#/components/schemas/AnalyticsRange"}}]}},"/api/v1/publishes/{slug}/data/{collection}":{"get":{"operationId":"listSiteDataRecords","summary":"List Site Data records","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"collection","in":"path","required":true,"description":"Site Data collection name from the Site's .herenow/data.json manifest.","schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return. Defaults to 50 and is capped at 100.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","required":false,"description":"Opaque pagination cursor returned as nextCursor from a previous response.","schema":{"type":"string"}}]},"post":{"operationId":"createSiteDataRecord","summary":"Create a Site Data record","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"collection","in":"path","required":true,"description":"Site Data collection name from the Site's .herenow/data.json manifest.","schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$"}},{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional key for retry-safe record creation. Keys are scoped to the account, Site, and collection for a short window.","schema":{"type":"string","minLength":1,"maxLength":200}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/publishes/{slug}/data/{collection}/{recordId}":{"get":{"operationId":"getSiteDataRecord","summary":"Get a Site Data record","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"collection","in":"path","required":true,"description":"Site Data collection name from the Site's .herenow/data.json manifest.","schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$"}},{"name":"recordId","in":"path","required":true,"description":"Site Data record id.","schema":{"type":"string","pattern":"^rec_[0-9A-HJKMNP-TV-Z]{26}$"}}]},"patch":{"operationId":"patchSiteDataRecord","summary":"Patch a Site Data record","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"collection","in":"path","required":true,"description":"Site Data collection name from the Site's .herenow/data.json manifest.","schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$"}},{"name":"recordId","in":"path","required":true,"description":"Site Data record id.","schema":{"type":"string","pattern":"^rec_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"delete":{"operationId":"deleteSiteDataRecord","summary":"Delete a Site Data record","x-yaya-status":"deferred","x-yaya-authorization-scopes":["publish:read","publish:write","site:publish"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"slug","in":"path","required":true,"description":"here.now Site slug.","schema":{"type":"string","minLength":1}},{"name":"collection","in":"path","required":true,"description":"Site Data collection name from the Site's .herenow/data.json manifest.","schema":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[a-z][a-z0-9_]*$"}},{"name":"recordId","in":"path","required":true,"description":"Site Data record id.","schema":{"type":"string","pattern":"^rec_[0-9A-HJKMNP-TV-Z]{26}$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/check/{domain}":{"get":{"operationId":"checkDomainToBuy","summary":"Authoritative availability and price for one domain","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Apex domain, e.g. jellyfishtacos.com."},{"name":"years","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":10},"description":"Registration term. Must be one of the TLD's allowed terms; omit for the minimum."}]}},"/api/v1/registrar/domains":{"get":{"operationId":"listPurchasedDomains","summary":"List domains bought through here.now","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}}]}},"/api/v1/registrar/payment-method":{"get":{"operationId":"getRegistrarPaymentMethod","summary":"Saved card and accepted payment methods for domain purchases (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}}]},"post":{"operationId":"createRegistrarCardSetupPage","summary":"Get a hosted page where the user saves a card (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"put":{"operationId":"setRegistrarPaymentMethod","summary":"Make a saved method the account default (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/payment-method/{id}":{"delete":{"operationId":"removeRegistrarPaymentMethod","summary":"Remove a saved payment method (alias)","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","pattern":"^pm_[A-Za-z0-9]+$"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/purchase":{"post":{"operationId":"purchaseDomain","summary":"Buy a domain and connect it","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/search":{"get":{"operationId":"searchDomainsToBuy","summary":"Search domains to buy","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":100},"description":"Keyword(s) or an exact domain."},{"name":"tlds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated TLDs to search (up to 25, leading dots optional). Omit for the default list (com, ai, dev, io, app, co, net, org, me, xyz, sh, so, studio, design, blog, shop, fun, lol)."}]}},"/api/v1/registrar/{domain}":{"get":{"operationId":"getPurchasedDomain","summary":"One purchased domain","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"updatePurchasedDomain","summary":"Turn auto-renew on or off","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/{domain}/records":{"get":{"operationId":"listPurchasedDomainRecords","summary":"DNS records at the registrar","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"replacePurchasedDomainRecords","summary":"Replace the editable DNS records","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/registrar/{domain}/transfer":{"get":{"operationId":"getPurchasedDomainTransferCode","summary":"Transfer-out authorization code","x-yaya-status":"deferred","x-yaya-authorization-scopes":["registrar:read","registrar:write"],"responses":{"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"501":{"description":"Not implemented in yaya yet"},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"X-HereNow-Account","in":"header","required":false,"description":"Which of the caller's accounts the request acts as: a workspace subdomain or account UUID (GET /api/v1/accounts lists them and the current selection). Omit for the personal account. Required to address workspace-owned Sites and workspace domains, mounts, and variables; refused with 403 (code account_forbidden) when the caller is not an active member. When the request body also carries `account`, the two must agree.","schema":{"type":"string","example":"acme"}},{"name":"domain","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/support":{"post":{"operationId":"createSupportRequest","summary":"Send an authenticated support request","x-yaya-status":"live","x-yaya-authorization-scopes":["support:write"],"responses":{"200":{"description":"Support request sent","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OkResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportRequest"}}}}}},"/api/v1/vanity-urls":{"get":{"operationId":"getVanityUrls","summary":"Both vanity roots at a glance","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity URL roots","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanityUrlsResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]}},"/api/v1/vanity-urls/domain":{"get":{"operationId":"getVanityDomain","summary":"Vanity domain state","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanityDomainResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"put":{"operationId":"claimVanityDomain","summary":"Turn on the vanity domain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity domain (claimed; provisioning)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanityDomainResponse"}}}},"400":{"description":"vanity_domain_not_apex or invalid_request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"vanity_urls_plan_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"vanity_urls_personal_only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"registration_not_found (not this account's, or not bought through here.now)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"vanity_domain_limit, vanity_domain_apex_missing, or vanity_domain_taken","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limit_exceeded (provisioning admission)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"not_yet_available or service_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["domain"],"properties":{"domain":{"type":"string"}}}}}}},"delete":{"operationId":"releaseVanityDomain","summary":"Turn off the vanity domain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Turned off","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/vanity-urls/domain/provisioning":{"post":{"operationId":"retryVanityDomainProvisioning","summary":"Retry vanity domain provisioning","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity domain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanityDomainResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/vanity-urls/name-existing-sites":{"post":{"operationId":"nameExistingSites","summary":"Name the Sites that predate the vanity subdomain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"202":{"description":"Naming started","content":{"application/json":{"schema":{"type":"object","properties":{"job":{"type":"object","properties":{"id":{"type":"string"},"total":{"type":"integer"}}}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"No vanity subdomain, or it is not serving yet","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"slugs":{"type":"array","items":{"type":"string"},"maxItems":200}}}}}}}},"/api/v1/vanity-urls/subdomain":{"get":{"operationId":"getVanitySubdomain","summary":"Vanity subdomain state","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity subdomain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]},"put":{"operationId":"claimVanitySubdomain","summary":"Turn on the vanity subdomain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity subdomain (claimed; provisioning)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainResponse"}}}},"400":{"description":"subdomain_invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"402":{"description":"vanity_urls_plan_required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"vanity_urls_personal_only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"subdomain_unavailable, or username_locked_by_vanity_subdomain (the subdomain must be the username)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"rate_limit_exceeded (provisioning admission)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"503":{"description":"not_yet_available or service_unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"subdomain":{"type":"string"}}}}}}},"delete":{"operationId":"releaseVanitySubdomain","summary":"Release the vanity subdomain","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Released","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"},"nameStillReservedByUsername":{"type":"boolean"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/vanity-urls/subdomain/availability":{"get":{"operationId":"checkVanitySubdomainAvailability","summary":"Is a vanity subdomain name available","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Availability","content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"available":{"type":"boolean"},"reason":{"type":"string","description":"When unavailable: invalid, taken, retiring, held, or username_locked."},"message":{"type":"string"}},"required":["name","available"]}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string"}},{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"}]}},"/api/v1/vanity-urls/subdomain/provisioning":{"post":{"operationId":"retryVanitySubdomainProvisioning","summary":"Retry vanity subdomain provisioning","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Vanity subdomain","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VanitySubdomainResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"403":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"parameters":[{"name":"X-Yaya-Tenant","in":"header","required":false,"schema":{"type":"string"},"description":"Tenant id or slug selecting the workspace for cookie-session callers; API keys are tenant-bound already"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/account/deletion/confirm":{"post":{"operationId":"post__api_v1_account_deletion_confirm","summary":"POST /api/v1/account/deletion/confirm","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}}}}}}},"/api/v1/account/deletion":{"post":{"operationId":"post__api_v1_account_deletion","summary":"POST /api/v1/account/deletion","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/account/email-change/confirm":{"post":{"operationId":"post__api_v1_account_email_change_confirm","summary":"POST /api/v1/account/email-change/confirm","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string"}}}}}}}},"/api/v1/account/email-change":{"delete":{"operationId":"delete__api_v1_account_email_change","summary":"DELETE /api/v1/account/email-change","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_account_email_change","summary":"GET /api/v1/account/email-change","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"post__api_v1_account_email_change","summary":"POST /api/v1/account/email-change","x-yaya-status":"live","x-yaya-authorization-scopes":["email:write"],"responses":{"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["newEmail"],"properties":{"newEmail":{"type":"string"}}}}}}}},"/api/v1/account/keys/{keyId}":{"delete":{"operationId":"delete__api_v1_account_keys_keyId_","summary":"DELETE /api/v1/account/keys/{keyId}","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"keyId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/account/keys":{"get":{"operationId":"get__api_v1_account_keys","summary":"GET /api/v1/account/keys","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"post__api_v1_account_keys","summary":"POST /api/v1/account/keys","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","scopes"],"properties":{"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"},"minItems":1},"expiresAt":{"type":["string","null"],"description":"Future ISO 8601 expiry, or null"}}}}}}}},"/api/v1/account":{"get":{"operationId":"get__api_v1_account","summary":"GET /api/v1/account","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/agents/signup":{"get":{"operationId":"get__api_v1_agents_signup","summary":"GET /api/v1/agents/signup","x-yaya-status":"live","x-yaya-authorization-scopes":[],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"security":[],"parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_agents_signup","summary":"POST /api/v1/agents/signup","x-yaya-status":"live","x-yaya-authorization-scopes":[],"responses":{"200":{"description":"Inbox proof consumed; scoped workspace credentials returned"},"201":{"description":"Inbox confirmation requested","content":{"application/json":{"schema":{"type":"object","required":["success","next"],"additionalProperties":false,"properties":{"success":{"const":true},"next":{"type":"string"}}}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"security":[],"description":"Without token, returns a uniform receipt and emails inbox proof. POST with the emailed token consumes it once and returns a new workspace's scoped key. Old claim links must be requested again.","requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string"},"client":{"type":"string"},"keyName":{"type":"string"}}}}}}}},"/api/v1/anonymous-publishes":{"post":{"operationId":"post__api_v1_anonymous_publishes","summary":"POST /api/v1/anonymous-publishes","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/delegated-mail-zones/{zoneId}/mail":{"get":{"operationId":"get__api_v1_delegated_mail_zones_zoneId_mail","summary":"GET /api/v1/delegated-mail-zones/{zoneId}/mail","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_delegated_mail_zones_zoneId_mail","summary":"POST /api/v1/delegated-mail-zones/{zoneId}/mail","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/delegated-mail-zones/{zoneId}/mailboxes/{mailboxId}":{"delete":{"operationId":"delete__api_v1_delegated_mail_zones_zoneId_mailboxes_mailboxId_","summary":"DELETE /api/v1/delegated-mail-zones/{zoneId}/mailboxes/{mailboxId}","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}},{"name":"mailboxId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/delegated-mail-zones/{zoneId}/mailboxes":{"get":{"operationId":"get__api_v1_delegated_mail_zones_zoneId_mailboxes","summary":"GET /api/v1/delegated-mail-zones/{zoneId}/mailboxes","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_delegated_mail_zones_zoneId_mailboxes","summary":"POST /api/v1/delegated-mail-zones/{zoneId}/mailboxes","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/delegated-mail-zones/{zoneId}":{"delete":{"operationId":"delete__api_v1_delegated_mail_zones_zoneId_","summary":"DELETE /api/v1/delegated-mail-zones/{zoneId}","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_delegated_mail_zones_zoneId_","summary":"GET /api/v1/delegated-mail-zones/{zoneId}","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"zoneId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/delegated-mail-zones":{"get":{"operationId":"get__api_v1_delegated_mail_zones","summary":"GET /api/v1/delegated-mail-zones","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"post__api_v1_delegated_mail_zones","summary":"POST /api/v1/delegated-mail-zones","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/dns-zones":{"get":{"operationId":"get__api_v1_dns_zones","summary":"GET /api/v1/dns-zones","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"post__api_v1_dns_zones","summary":"POST /api/v1/dns-zones","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/dns-records/{recordId}":{"delete":{"operationId":"delete__api_v1_domains_domainId_dns_records_recordId_","summary":"DELETE /api/v1/domains/{domainId}/dns-records/{recordId}","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"patch":{"operationId":"patch__api_v1_domains_domainId_dns_records_recordId_","summary":"PATCH /api/v1/domains/{domainId}/dns-records/{recordId}","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/dns-records":{"get":{"operationId":"get__api_v1_domains_domainId_dns_records","summary":"GET /api/v1/domains/{domainId}/dns-records","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_domains_domainId_dns_records","summary":"POST /api/v1/domains/{domainId}/dns-records","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/exit-choice":{"post":{"operationId":"post__api_v1_domains_domainId_exit_choice","summary":"POST /api/v1/domains/{domainId}/exit-choice","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/mail":{"get":{"operationId":"get__api_v1_domains_domainId_mail","summary":"GET /api/v1/domains/{domainId}/mail","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"}]},"post":{"operationId":"post__api_v1_domains_domainId_mail","summary":"POST /api/v1/domains/{domainId}/mail","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId"],"properties":{"tenantId":{"type":"string"}}}}}}}},"/api/v1/domains/{domainId}/mailboxes/{mailboxId}":{"delete":{"operationId":"delete__api_v1_domains_domainId_mailboxes_mailboxId_","summary":"DELETE /api/v1/domains/{domainId}/mailboxes/{mailboxId}","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"mailboxId","in":"path","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/mailboxes":{"get":{"operationId":"get__api_v1_domains_domainId_mailboxes","summary":"GET /api/v1/domains/{domainId}/mailboxes","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"tenantId","in":"query","required":true,"schema":{"type":"string"},"description":"Tenant the request acts on"}]},"post":{"operationId":"post__api_v1_domains_domainId_mailboxes","summary":"POST /api/v1/domains/{domainId}/mailboxes","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId","name"],"properties":{"tenantId":{"type":"string"},"name":{"type":"string"}}}}}}}},"/api/v1/domains/{domainId}/renew":{"post":{"operationId":"post__api_v1_domains_domainId_renew","summary":"POST /api/v1/domains/{domainId}/renew","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/{domainId}/transfer-out":{"post":{"operationId":"post__api_v1_domains_domainId_transfer_out","summary":"POST /api/v1/domains/{domainId}/transfer-out","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"domainId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/check":{"get":{"operationId":"get__api_v1_domains_check","summary":"GET /api/v1/domains/check","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"host","in":"query","required":true,"schema":{"type":"string"},"description":"Hostname to check"}]}},"/api/v1/domains/checkout":{"post":{"operationId":"post__api_v1_domains_checkout","summary":"POST /api/v1/domains/checkout","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId","hostname","expectedAmountCents","currency"],"properties":{"tenantId":{"type":"string"},"hostname":{"type":"string"},"expectedAmountCents":{"type":"integer"},"currency":{"type":"string"},"fulfillmentMode":{"type":"string","enum":["connect_existing_test","register_namecom_sandbox_test"]},"preferRegistration":{"type":"boolean"}}}}}}}},"/api/v1/domains/checkout/status":{"get":{"operationId":"get__api_v1_domains_checkout_status","summary":"GET /api/v1/domains/checkout/status","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string"},"description":"Checkout session id returned by the purchase"}]}},"/api/v1/domains/checkout/webhook":{"post":{"operationId":"post__api_v1_domains_checkout_webhook","summary":"POST /api/v1/domains/checkout/webhook","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Stripe-Signature","in":"header","required":true,"schema":{"type":"string"},"description":"Stripe webhook signature over the raw body"},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/exit-choices":{"get":{"operationId":"get__api_v1_domains_exit_choices","summary":"GET /api/v1/domains/exit-choices","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}}},"/api/v1/domains/primary":{"put":{"operationId":"put__api_v1_domains_primary","summary":"PUT /api/v1/domains/primary","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["tenantId","domainId"],"properties":{"tenantId":{"type":"string"},"domainId":{"type":"string"}}}}}}}},"/api/v1/domains/search":{"get":{"operationId":"get__api_v1_domains_search","summary":"GET /api/v1/domains/search","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"Domain search string"},{"name":"tlds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated TLD filter"}]}},"/api/v1/domains/transfers":{"post":{"operationId":"post__api_v1_domains_transfers","summary":"POST /api/v1/domains/transfers","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/domains/transfers/start":{"post":{"operationId":"post__api_v1_domains_transfers_start","summary":"POST /api/v1/domains/transfers/start","x-yaya-status":"live","x-yaya-authorization-scopes":["domains:read","domains:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/me/analytics":{"get":{"operationId":"get__api_v1_me_analytics","summary":"GET /api/v1/me/analytics","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string"},"description":"Rollup window like 7d (default 30d)"}]}},"/api/v1/me/profile":{"patch":{"operationId":"patch__api_v1_me_profile","summary":"PATCH /api/v1/me/profile","x-yaya-status":"live","x-yaya-authorization-scopes":["account:read","account:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/access/invites":{"post":{"operationId":"post__api_v1_tenants_tenantId_access_invites","summary":"POST /api/v1/tenants/{tenantId}/access/invites","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["emails"],"properties":{"emails":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":200}}}}}}}},"/api/v1/tenants/{tenantId}/access":{"get":{"operationId":"get__api_v1_tenants_tenantId_access","summary":"GET /api/v1/tenants/{tenantId}/access","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_access","summary":"PATCH /api/v1/tenants/{tenantId}/access","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}}}}}}},"/api/v1/tenants/{tenantId}/agent-actions/{actionId}/approve":{"post":{"operationId":"post__api_v1_tenants_tenantId_agent_actions_actionId_approve","summary":"POST /api/v1/tenants/{tenantId}/agent-actions/{actionId}/approve","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"actionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/agent-actions":{"get":{"operationId":"get__api_v1_tenants_tenantId_agent_actions","summary":"GET /api/v1/tenants/{tenantId}/agent-actions","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_tenants_tenantId_agent_actions","summary":"POST /api/v1/tenants/{tenantId}/agent-actions","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["actionId"],"properties":{"actionId":{"type":"string"}}}}}}}},"/api/v1/tenants/{tenantId}/analytics":{"get":{"operationId":"get__api_v1_tenants_tenantId_analytics","summary":"GET /api/v1/tenants/{tenantId}/analytics","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/blog/{postId}":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_blog_postId_","summary":"DELETE /api/v1/tenants/{tenantId}/blog/{postId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_tenants_tenantId_blog_postId_","summary":"GET /api/v1/tenants/{tenantId}/blog/{postId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_blog_postId_","summary":"PATCH /api/v1/tenants/{tenantId}/blog/{postId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"postId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/blog":{"get":{"operationId":"get__api_v1_tenants_tenantId_blog","summary":"GET /api/v1/tenants/{tenantId}/blog","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_tenants_tenantId_blog","summary":"POST /api/v1/tenants/{tenantId}/blog","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"put":{"operationId":"put__api_v1_tenants_tenantId_blog","summary":"PUT /api/v1/tenants/{tenantId}/blog","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/{contactId}/messages/read":{"post":{"operationId":"post__api_v1_tenants_tenantId_contacts_contactId_messages_read","summary":"POST /api/v1/tenants/{tenantId}/contacts/{contactId}/messages/read","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/{contactId}/notes":{"post":{"operationId":"post__api_v1_tenants_tenantId_contacts_contactId_notes","summary":"POST /api/v1/tenants/{tenantId}/contacts/{contactId}/notes","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/{contactId}":{"get":{"operationId":"get__api_v1_tenants_tenantId_contacts_contactId_","summary":"GET /api/v1/tenants/{tenantId}/contacts/{contactId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_contacts_contactId_","summary":"PATCH /api/v1/tenants/{tenantId}/contacts/{contactId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"contactId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/custom-fields/{fieldId}":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_contacts_custom_fields_fieldId_","summary":"DELETE /api/v1/tenants/{tenantId}/contacts/custom-fields/{fieldId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"fieldId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/custom-fields":{"get":{"operationId":"get__api_v1_tenants_tenantId_contacts_custom_fields","summary":"GET /api/v1/tenants/{tenantId}/contacts/custom-fields","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_tenants_tenantId_contacts_custom_fields","summary":"POST /api/v1/tenants/{tenantId}/contacts/custom-fields","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/import":{"post":{"operationId":"post__api_v1_tenants_tenantId_contacts_import","summary":"POST /api/v1/tenants/{tenantId}/contacts/import","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/contacts/messages":{"get":{"operationId":"get__api_v1_tenants_tenantId_contacts_messages","summary":"GET /api/v1/tenants/{tenantId}/contacts/messages","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/contacts":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_contacts","summary":"DELETE /api/v1/tenants/{tenantId}/contacts","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_tenants_tenantId_contacts","summary":"GET /api/v1/tenants/{tenantId}/contacts","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_tenants_tenantId_contacts","summary":"POST /api/v1/tenants/{tenantId}/contacts","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/delete":{"post":{"operationId":"post__api_v1_tenants_tenantId_delete","summary":"POST /api/v1/tenants/{tenantId}/delete","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"204":{"description":"No content"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"confirm":{"type":"string"},"confirmName":{"type":"string"},"confirmPhrase":{"type":"string"}},"anyOf":[{"required":["confirm"]},{"required":["confirmName","confirmPhrase"]}]}}}}}},"/api/v1/tenants/{tenantId}/domain-path":{"post":{"operationId":"post__api_v1_tenants_tenantId_domain_path","summary":"POST /api/v1/tenants/{tenantId}/domain-path","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/draft/pages/{slug}":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_draft_pages_slug_","summary":"DELETE /api/v1/tenants/{tenantId}/draft/pages/{slug}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_draft_pages_slug_","summary":"PATCH /api/v1/tenants/{tenantId}/draft/pages/{slug}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"post":{"operationId":"post__api_v1_tenants_tenantId_draft_pages_slug_","summary":"POST /api/v1/tenants/{tenantId}/draft/pages/{slug}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/draft/pages":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_draft_pages","summary":"DELETE /api/v1/tenants/{tenantId}/draft/pages","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_tenants_tenantId_draft_pages","summary":"GET /api/v1/tenants/{tenantId}/draft/pages","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_draft_pages","summary":"PATCH /api/v1/tenants/{tenantId}/draft/pages","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"post":{"operationId":"post__api_v1_tenants_tenantId_draft_pages","summary":"POST /api/v1/tenants/{tenantId}/draft/pages","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/draft":{"put":{"operationId":"put__api_v1_tenants_tenantId_draft","summary":"PUT /api/v1/tenants/{tenantId}/draft","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"homeHeadline":{"type":"string"},"expectedBase":{"type":"object","properties":{"draftVersionId":{"type":["string","null"]},"liveVersionId":{"type":["string","null"]}}},"files":{"type":"object","additionalProperties":{"type":"string"}}},"anyOf":[{"required":["homeHeadline","expectedBase"]},{"required":["files"]}]}}}}}},"/api/v1/tenants/{tenantId}/export":{"post":{"operationId":"post__api_v1_tenants_tenantId_export","summary":"POST /api/v1/tenants/{tenantId}/export","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/folder":{"patch":{"operationId":"patch__api_v1_tenants_tenantId_folder","summary":"PATCH /api/v1/tenants/{tenantId}/folder","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["folderId"],"properties":{"folderId":{"type":["string","null"]}}}}}}}},"/api/v1/tenants/{tenantId}/live":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_live","summary":"DELETE /api/v1/tenants/{tenantId}/live","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"204":{"description":"No content"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["expectedLiveVersionId"],"properties":{"expectedLiveVersionId":{"type":"string","description":"liveVersionId seen on site-status; a concurrent publish answers 409"}}}}}}},"post":{"operationId":"post__api_v1_tenants_tenantId_live","summary":"POST /api/v1/tenants/{tenantId}/live","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["versionId","expectedLiveVersionId"],"properties":{"versionId":{"type":"string"},"expectedLiveVersionId":{"type":"string","description":"liveVersionId seen on site-status; a concurrent publish answers 409"}}}}}}}},"/api/v1/tenants/{tenantId}/metadata":{"patch":{"operationId":"patch__api_v1_tenants_tenantId_metadata","summary":"PATCH /api/v1/tenants/{tenantId}/metadata","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}}}}}}},"/api/v1/tenants/{tenantId}/places":{"get":{"operationId":"get__api_v1_tenants_tenantId_places","summary":"GET /api/v1/tenants/{tenantId}/places","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/publish":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_publish","summary":"DELETE /api/v1/tenants/{tenantId}/publish","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"204":{"description":"No content"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["expectedLiveVersionId"],"properties":{"expectedLiveVersionId":{"type":"string","description":"liveVersionId seen on site-status; a concurrent publish answers 409"}}}}}}},"post":{"operationId":"post__api_v1_tenants_tenantId_publish","summary":"POST /api/v1/tenants/{tenantId}/publish","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"expectedDraftVersionId":{"type":["string","null"]}}}}}}}},"/api/v1/tenants/{tenantId}":{"get":{"operationId":"get__api_v1_tenants_tenantId_","summary":"GET /api/v1/tenants/{tenantId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"patch":{"operationId":"patch__api_v1_tenants_tenantId_","summary":"PATCH /api/v1/tenants/{tenantId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"name":{"type":"string"},"description":{"type":["string","null"]}},"anyOf":[{"required":["name"]},{"required":["description"]}]}}}}}},"/api/v1/tenants/{tenantId}/site-data/{collection}/{recordId}":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_data_collection_recordId_","summary":"GET /api/v1/tenants/{tenantId}/site-data/{collection}/{recordId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string"}},{"name":"recordId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/site-data/{collection}":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_data_collection_","summary":"GET /api/v1/tenants/{tenantId}/site-data/{collection}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"string"},"description":"Max records to return"},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Keyset cursor from the previous page"}]},"post":{"operationId":"post__api_v1_tenants_tenantId_site_data_collection_","summary":"POST /api/v1/tenants/{tenantId}/site-data/{collection}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"collection","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}}}}}}},"/api/v1/tenants/{tenantId}/site-document":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_document","summary":"GET /api/v1/tenants/{tenantId}/site-document","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"put__api_v1_tenants_tenantId_site_document","summary":"PUT /api/v1/tenants/{tenantId}/site-document","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/site-document/sections":{"post":{"operationId":"post__api_v1_tenants_tenantId_site_document_sections","summary":"POST /api/v1/tenants/{tenantId}/site-document/sections","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/site-document/staged-commit":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_document_staged_commit","summary":"GET /api/v1/tenants/{tenantId}/site-document/staged-commit","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"post":{"operationId":"post__api_v1_tenants_tenantId_site_document_staged_commit","summary":"POST /api/v1/tenants/{tenantId}/site-document/staged-commit","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/site-status":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_status","summary":"GET /api/v1/tenants/{tenantId}/site-status","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/site-versions/{versionId}/restore":{"post":{"operationId":"post__api_v1_tenants_tenantId_site_versions_versionId_restore","summary":"POST /api/v1/tenants/{tenantId}/site-versions/{versionId}/restore","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{"expectedLiveVersionId":{"type":["string","null"]}}}}}}}},"/api/v1/tenants/{tenantId}/site-versions/{versionId}":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_site_versions_versionId_","summary":"DELETE /api/v1/tenants/{tenantId}/site-versions/{versionId}","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"204":{"description":"No content"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"versionId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/site-versions":{"get":{"operationId":"get__api_v1_tenants_tenantId_site_versions","summary":"GET /api/v1/tenants/{tenantId}/site-versions","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]}},"/api/v1/tenants/{tenantId}/template":{"post":{"operationId":"post__api_v1_tenants_tenantId_template","summary":"POST /api/v1/tenants/{tenantId}/template","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]}},"/api/v1/tenants/{tenantId}/theme":{"get":{"operationId":"get__api_v1_tenants_tenantId_theme","summary":"GET /api/v1/tenants/{tenantId}/theme","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"put__api_v1_tenants_tenantId_theme","summary":"PUT /api/v1/tenants/{tenantId}/theme","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["theme"],"properties":{"theme":{"type":"object","description":"Theme tokens patch"}}}}}}}},"/api/v1/tenants/{tenantId}/visitor-tracking":{"delete":{"operationId":"delete__api_v1_tenants_tenantId_visitor_tracking","summary":"DELETE /api/v1/tenants/{tenantId}/visitor-tracking","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"204":{"description":"No content"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}]},"get":{"operationId":"get__api_v1_tenants_tenantId_visitor_tracking","summary":"GET /api/v1/tenants/{tenantId}/visitor-tracking","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}}]},"put":{"operationId":"put__api_v1_tenants_tenantId_visitor_tracking","summary":"PUT /api/v1/tenants/{tenantId}/visitor-tracking","x-yaya-status":"live","x-yaya-authorization-scopes":["site:publish","suite:read","publish:read","keys:read","keys:write"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"tenantId","in":"path","required":true,"schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":[],"properties":{}}}}}}},"/api/v1/tenants":{"get":{"operationId":"get__api_v1_tenants","summary":"GET /api/v1/tenants","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"200":{"description":"Successful response"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}}},"post":{"operationId":"post__api_v1_tenants","summary":"POST /api/v1/tenants","x-yaya-status":"live","x-yaya-authorization-scopes":["suite:read"],"responses":{"201":{"description":"Created"},"401":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"429":{"description":"Rate limit exceeded","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds until retry"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"default":{"description":"Structured yaya API error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string"},"description":"Optional idempotency key for safe retries"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["slug","businessName"],"properties":{"slug":{"type":"string"},"businessName":{"type":"string"},"businessDescription":{"type":"string"}}}}}}}}},"components":{"securitySchemes":{"yayaBearer":{"type":"http","scheme":"bearer","bearerFormat":"yaya_api_key","description":"Revocable yaya API key (#17). Worker middleware validates key + scopes (#79) and tenant (#41)."}},"schemas":{"ErrorResponse":{"type":"object","description":"Structured JSON error envelope. The `error` field is retained for backwards compatibility; agents should prefer `code`, `message`, `retry_after`, and `docs_url` when present.","properties":{"error":{"type":"string"},"code":{"type":"string","enum":["bad_request","invalid_json","invalid_request","too_many_files","unauthorized","forbidden","not_found","conflict","version_conflict","finalize_in_flight","gone","rate_limit_exceeded","storage_not_configured","service_unavailable","internal_error"]},"message":{"type":"string"},"details":{"description":"Optional route-specific details. May be a string, object, or array."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Also mirrored in the Retry-After header when present."},"docs_url":{"type":"string","format":"uri"}},"required":["error","code","message"],"additionalProperties":true},"SuccessResponse":{"type":"object","properties":{"success":{"type":"boolean","const":true}},"required":["success"],"additionalProperties":true},"OkResponse":{"type":"object","properties":{"ok":{"type":"boolean","const":true}},"required":["ok"]},"AgentAuthRequestCodeRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"client":{"type":["string","null"],"maxLength":64,"description":"Optional: the agent asking on the user's behalf (same vocabulary as X-HereNow-Client, e.g. \"cursor\", \"claude-code\"). Names the client in the code email's subject so the user recognizes the message. Falls back to the X-HereNow-Client header."}},"required":["email"]},"AgentAuthRequestCodeResponse":{"type":"object","properties":{"success":{"type":"boolean"},"requiresCodeEntry":{"type":"boolean"},"expiresAt":{"type":"string","format":"date-time"}},"required":["success","requiresCodeEntry","expiresAt"]},"AgentAuthVerifyCodeRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"code":{"type":"string","minLength":4,"maxLength":32},"keyName":{"type":"string","minLength":1,"maxLength":64,"description":"Optional per-tool key name (e.g. \"cli\"). When provided, the response's apiKey is a named hnk_ key for that tool instead of the account's legacy shared key — reusing the existing active key with that name (keyReused: true) or minting a new one. If minting fails (key cap or rate limit), the response falls back to the legacy key and sets keyMintError."}},"required":["email","code"]},"AgentAuthVerifyCodeResponse":{"type":"object","properties":{"success":{"type":"boolean"},"email":{"type":"string","format":"email"},"apiKey":{"type":"string"},"isNewUser":{"type":"boolean"},"apiKeyId":{"type":"string","description":"Present when keyName resolved to a named key (minted or reused)."},"apiKeyName":{"type":"string","description":"Present when keyName resolved to a named key (minted or reused)."},"keyReused":{"type":"boolean","description":"True when an existing active key with the same name was returned instead of minting a duplicate."},"keyMintError":{"type":"string","enum":["key_limit_reached","rate_limited","invalid_key_name","mint_failed"],"description":"Present when keyName was provided but minting failed; apiKey is then the legacy shared key."},"warning":{"type":"string"}},"required":["success","email","apiKey","isNewUser"]},"PublishFile":{"type":"object","properties":{"path":{"type":"string","minLength":1,"description":"Site-relative file path. Paths under .herenow/ are reserved configuration manifests processed by here.now rather than served to visitors: .herenow/data.json declares Site Data collections (https://here.now/docs#sitedata) and .herenow/proxy.json declares server-side proxy routes with variable-injected headers (https://here.now/docs#proxy-routes). A root 404.html is served as the body of every path that matches no file, with status 404 (https://here.now/docs#custom-404); it is otherwise an ordinary file."},"size":{"type":"integer","minimum":0},"contentType":{"type":"string","description":"Declared MIME type. here.now corrects generic or mismatched types for known extensions (an index.html declared as application/octet-stream is stored as text/html). Pre-compressed web build assets named *.wasm.br, *.js.br, *.mjs.br, *.css.br, *.data.br, *.pck.br, *.symbols.json.br, or the .gz equivalents are stored with the inner type and served with the matching Content-Encoding, whatever is declared; other .br/.gz files are kept as plain downloads. See /docs#wasm."},"hash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["path","size"]},"ViewerMetadata":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"description":{"type":"string","minLength":1,"maxLength":2000},"ogImagePath":{"type":"string","minLength":1}}},"ViewerMetadataPatch":{"type":["object","null"],"description":"Viewer metadata patch. On update: omitting the whole object preserves the existing viewer; null clears it; within the object, omitted fields preserve, null clears, values set (a title-only patch never erases an existing description).","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":200},"description":{"type":["string","null"],"minLength":1,"maxLength":2000},"ogImagePath":{"type":["string","null"],"minLength":1}}},"PublishStatus":{"type":"object","description":"Authoritative auth/ownership/persistence state. Clients must report from these fields and never infer them from request shape (an API key on an anonymous-Site update does not claim or convert the Site).","properties":{"requestAuth":{"type":"string","enum":["api_key","session","claim_token","none"],"description":"How this request authenticated."},"ownership":{"type":"string","enum":["anonymous","personal","workspace"]},"accountId":{"type":["string","null"]},"persistence":{"type":"string","enum":["permanent","expiring"],"description":"Effective post-finalize persistence. On pending responses this accounts for pendingTtl intent (a staged TTL reports expiring; a staged clear reports permanent) while expiresAt stays the currently live value."},"expiresAt":{"type":["string","null"],"format":"date-time"},"state":{"type":"string","enum":["pending","live"],"description":"pending: values describe intent until finalize. live: values describe the live Site (finalize responses are authoritative)."},"pendingTtl":{"type":"object","description":"Present on pending-state responses when a TTL change is staged; applied at finalize.","properties":{"action":{"type":"string","enum":["set","clear"]},"seconds":{"type":"integer"}},"required":["action"]}},"required":["requestAuth","ownership","accountId","persistence","expiresAt","state"]},"PublishCreateRequest":{"type":"object","properties":{"files":{"type":"array","minItems":1,"maxItems":2500,"items":{"$ref":"#/components/schemas/PublishFile"},"description":"At most 2,500 files per Site version on every plan (400 too_many_files above that, with details.limit and details.received); total size at most 10 GB. Split larger projects across multiple Sites."},"ttlSeconds":{"type":["integer","null"],"minimum":1,"description":"Authenticated only. On update: omitted preserves the current TTL, null clears it, a number stages a new TTL. Staged TTL changes apply at finalize (never at request time), with expiry running from the finalize timestamp."},"viewer":{"$ref":"#/components/schemas/ViewerMetadataPatch"},"claimToken":{"type":"string","minLength":1},"baseVersionId":{"type":"string","minLength":1,"maxLength":64,"description":"Update only (rejected on create). Optimistic concurrency: the currentVersionId these files were derived from. If the live version differs at update or finalize time, the request fails with 409 code version_conflict (details include currentVersionId and, when known, currentVersionSource/currentVersionCreatedAt). Omit for an unchecked full replacement."},"account":{"type":["string","null"],"minLength":1,"description":"Optional account selector for authenticated requests (workspace subdomain or account UUID). Must match X-HereNow-Account when both are provided. Selecting a workspace makes the Site workspace-owned."},"spaMode":{"type":"boolean"},"crossOriginIsolation":{"type":"boolean","description":"Cross-origin isolation for WebAssembly builds that use threads (SharedArrayBuffer: Emscripten -pthread, Godot with threads enabled, Unity multithreading, wllama, WebContainers). When true, every response of the Site carries Cross-Origin-Opener-Policy: same-origin and Cross-Origin-Embedder-Policy: require-corp. Single-threaded WASM needs nothing. Trade-off: require-corp blocks cross-origin subresources that send neither CORS nor Cross-Origin-Resource-Policy headers (third-party iframes such as YouTube embeds); Google Fonts and the major JS CDNs are fine. On update, omitted preserves the current value. Also settable later via PATCH metadata. See /docs#wasm."},"displayName":{"type":"string","minLength":1,"maxLength":80,"description":"Optional owner-facing Site title for dashboards, search, profile cards, and API responses."},"displayDescription":{"type":"string","minLength":1,"maxLength":280,"description":"Optional owner-facing Site summary for dashboards, search, and API responses."},"folder":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Dashboard folder to file the Site in, as a folder name or folder id within the target account. A name matches case-insensitively and is created if it does not exist yet (up to 50 folders per account; 409 folder_limit beyond that). An id must be one of the account's folders (404 folder_not_found). Omitted leaves the Site where it is; null moves it back to the root (unfiled). Authenticated requests only: anonymous Sites have no account and return 400. Filing changes nothing about the Site's URL or access."}},"required":["files"]},"UploadTarget":{"type":"object","properties":{"path":{"type":"string"},"method":{"type":"string","const":"PUT"},"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string"}}},"required":["path","method","url","headers"]},"PublishUpload":{"type":"object","properties":{"versionId":{"type":"string"},"uploads":{"type":"array","items":{"$ref":"#/components/schemas/UploadTarget"}},"skipped":{"type":"array","items":{"type":"string"}},"finalizeUrl":{"type":"string","format":"uri"},"expiresInSeconds":{"type":"integer"}},"required":["versionId","uploads","finalizeUrl","expiresInSeconds"]},"PublishCreateResponse":{"type":"object","properties":{"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"status":{"type":"string"},"isLive":{"type":"boolean"},"requiresFinalize":{"type":"boolean"},"note":{"type":"string"},"upload":{"$ref":"#/components/schemas/PublishUpload"},"claimToken":{"type":"string","description":"Anonymous Sites only. Returned exactly once and cannot be recovered. Compact tokens are 16 base64url characters; legacy 64-char hex tokens remain valid."},"claimUrl":{"type":"string","format":"uri","description":"Anonymous Sites only (https://here.now/c/<token>). Share with the user copied byte-for-byte as a clickable link — never shorten, redact, summarize, or replace any part of it with '...'. A modified claim link will not work."},"expiresAt":{"type":["string","null"],"format":"date-time"},"anonymous":{"type":"boolean"},"warning":{"type":"string"},"displayName":{"type":"string","maxLength":80},"displayDescription":{"type":"string","maxLength":280},"folder":{"type":["object","null"],"description":"The Site's dashboard folder within its owning account (docs: /docs#folders); null when the Site is at the account's root (unfiled).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]},"publishStatus":{"$ref":"#/components/schemas/PublishStatus"},"primaryUrl":{"type":"string","format":"uri","description":"Present when the Site serves on an additional root domain; equals siteUrl in that case. Report siteUrl once the Site is live."},"urls":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Every address the Site serves at, best first, when primaryUrl is present."},"partner":{"type":"object","description":"Present when the Site also serves on an additional root domain that here.now operates: { slug, root }. Informational.","properties":{"slug":{"type":"string"},"root":{"type":"string"}}}},"required":["slug","siteUrl","status","isLive","requiresFinalize","upload"],"additionalProperties":true},"FinalizePublishRequest":{"type":"object","properties":{"versionId":{"type":"string","minLength":1},"account":{"type":["string","null"],"minLength":1,"description":"Optional account selector for authenticated requests. Must match X-HereNow-Account when both are provided."},"workspaceLabel":{"type":["string","null"],"minLength":1,"maxLength":63,"description":"Optional exact DNS-safe label for beta workspace-owned Sites. When omitted, finalize derives a label from generated Site metadata with a deterministic fallback. Explicit labels stay strict: conflicts return 409 instead of auto-bumping."},"label":{"type":["string","null"],"minLength":1,"maxLength":63,"description":"General form of workspaceLabel: the readable name for the Site on every label root it has. For a workspace Site it is an alias of workspaceLabel. For a Site that serves on an additional root domain, it names the Site there ({label}.{root}); a taken name is bumped (-2, -3, ...) and the assigned name is returned in the response's label object. Ignored for other personal Sites."}},"required":["versionId"]},"FinalizePublishResponse":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri","description":"The address to share with the user, exactly as returned; do not construct a URL from the slug. Normally the {slug}.here.now address; for a Site that also serves on an additional root domain it is that address, and the {slug}.here.now form is the urls[] entry of kind \"slug\". Always serves."},"primaryUrl":{"type":"string","format":"uri","description":"The address to show first, on every finalize. Precedence: the custom domain flagged primary, the most recently connected custom domain, the Site's name on the owner's vanity URL roots, the workspace URL, a partner root address, the slug host. siteUrl stays the canonical {slug}.here.now address and never changes meaning."},"urls":{"type":"array","description":"Every address the Site serves at, best first.","items":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"kind":{"type":"string","enum":["domain","partner","partner_slug","label","slug","handle"]},"primary":{"type":"boolean","description":"True only for the custom domain flagged as the Site's primary (the primary-domain setting); the first entry is the preferred address regardless."}},"required":["url","kind"]}},"label":{"type":["object","null"],"description":"The Site's readable name on its label roots when it has one: { label, hosts: [{ root, url, kvSynced }], bumped?, requested? }. bumped is true when the requested name was taken and a numbered variant was assigned.","additionalProperties":true},"partner":{"type":"object","description":"Present when the Site also serves on an additional root domain that here.now operates: { slug, root }. Informational.","properties":{"slug":{"type":"string"},"root":{"type":"string"}}},"accountUrl":{"type":"string","format":"uri"},"workspaceLabel":{"type":"object","description":"Workspace label allocation details when finalizing a beta workspace-owned Site.","additionalProperties":true},"currentVersionId":{"type":"string"},"previousVersionId":{"type":["string","null"]},"unchanged":{"type":"boolean","description":"True when the finalized content was identical to the already-live version, so no new version was created. currentVersionId is the existing live versionId (it will differ from the versionId minted by create/update). Settings changes carried by the update (TTL, viewer, spaMode, crossOriginIsolation) are still applied."},"replayed":{"type":"boolean","description":"True when this versionId had already been finalized (finalize is idempotent by versionId; retries after timeouts and concurrent-finalize losers receive the authoritative live state instead of an error)."},"publishStatus":{"$ref":"#/components/schemas/PublishStatus"},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-fatal problems, present only when there are any. Reserved manifest files: a .herenow/proxy.json that is invalid JSON or does not match the required {\"proxies\": {\"/path\": {...}}} shape does NOT fail the publish — the Site goes live with proxy routes silently disabled, and the mistake surfaces here. Route keys that do not start with \"/\" also warn (they can never match a request). WebAssembly: a version that includes a .wasm module while the Site's crossOriginIsolation setting is off warns that threaded builds (SharedArrayBuffer) need crossOriginIsolation: true; single-threaded builds can ignore it. Always check this field after finalizing a Site that carries .herenow/ manifests or .wasm files."}},"required":["success","slug","siteUrl","currentVersionId"],"additionalProperties":true},"SiteVersionsResponse":{"type":"object","properties":{"slug":{"type":"string"},"currentVersionId":{"type":["string","null"]},"versions":{"type":"array","items":{"type":"object","properties":{"versionId":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"source":{"type":"string","description":"Pipeline that produced the version: publish-finalize, from-drive, console-save, console-chat, editor, editor-new-site, duplicate-site, dashboard-new-site, or backfill."},"fileCount":{"type":"integer"},"totalBytes":{"type":"integer"},"restoredFromVersionId":{"type":["string","null"],"description":"Set when this entry records a rollback to an earlier version."},"clientSource":{"type":["string","null"],"description":"Normalized client that published the version, from the X-HereNow-Client header (e.g. cursor, claude_code, codex, openclaw, bot, api, dashboard, herenow_cli). Null for versions that predate attribution capture."},"clientLabel":{"type":["string","null"],"description":"Human display label for clientSource: the agent's name (\"Cursor\"), a self-identified bot's name (\"henry\"), or \"API\" for bare HTTP clients. Null when the bucket has no display label."},"current":{"type":"boolean","description":"True for the version currently being served."},"thumbnailUrl":{"type":"string","description":"Relative URL of the version's screenshot; requires the same authentication as this endpoint."},"previewUrl":{"type":"string","format":"uri","description":"Owner-only preview of this version at {versionId}--{slug}.here.now. Opening it in a signed-in browser authenticates automatically; the preview is never publicly accessible or indexed."}},"required":["versionId","createdAt","source","fileCount","totalBytes","current"]}}},"required":["slug","versions"]},"DeleteSiteVersionResponse":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"deletedVersionId":{"type":"string"}},"required":["success","slug","deletedVersionId"]},"RestoreSiteVersionResponse":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"currentVersionId":{"type":"string","description":"The restored version, now live."},"restoredFromVersionId":{"type":"string"},"eventVersionId":{"type":"string","description":"Id of the restore event recorded in the version history."}},"required":["success","slug","siteUrl","currentVersionId"]},"PublishListResponse":{"type":"object","properties":{"publishes":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"updatedAt":{"type":"string","format":"date-time","description":"When the Site's record last changed for any reason (content, access mode, password, TTL, primary domain, staging a version)."},"expiresAt":{"type":["string","null"],"format":"date-time"},"status":{"type":"string"},"currentVersionId":{"type":["string","null"]},"pendingVersionId":{"type":["string","null"]},"contentUpdatedAt":{"type":"string","format":"date-time","description":"scope=all only: when the live content last changed (a new version went live, a restore, a duplicate, or the Site was claimed). Settings changes do not move it. The list is ordered by this value."},"primaryUrl":{"type":"string","format":"uri","description":"scope=all only: the Site's primary address — its primary custom domain if one is set, else its most recently connected custom domain, else the workspace label URL, else the canonical siteUrl. The same address the dashboard shows."},"displayName":{"type":["string","null"],"description":"scope=all only."},"displayDescription":{"type":["string","null"],"description":"scope=all only."},"ownership":{"type":"string","enum":["owned","shared","workspace"],"description":"scope=all only."},"sharedSource":{"type":["string","null"],"enum":["email","domain",null],"description":"scope=all only."},"workspace":{"type":["object","null"],"description":"scope=all only: the owning workspace for workspace rows.","properties":{"displayName":{"type":"string"},"subdomain":{"type":["string","null"]}}},"folder":{"type":["object","null"],"description":"The Site's dashboard folder within its owning account (docs: /docs#folders); null when the Site is at the account's root (unfiled).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]}},"required":["slug","siteUrl","updatedAt","expiresAt","status","currentVersionId","pendingVersionId","folder"]}},"scope":{"type":"string","enum":["all"],"description":"Present when the request used scope=all."},"nextCursor":{"type":["string","null"],"description":"scope=all only: opaque cursor for the next page; null on the last page."}},"required":["publishes"]},"Folder":{"type":"object","description":"A dashboard folder of one account (docs: /docs#folders). Flat; one folder per Site; shared by every member of a workspace; not part of any URL.","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60,"description":"Unique within the account, case-insensitively."},"siteCount":{"type":"integer","minimum":0,"description":"Live Sites currently filed in the folder (a version still pending finalize is not counted yet)."},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time","description":"Last rename."}},"required":["id","name","siteCount","createdAt","updatedAt"]},"FolderNameRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":60,"description":"Trimmed; internal whitespace collapsed; no control characters. Unique within the account, case-insensitively."}},"required":["name"]},"FolderListResponse":{"type":"object","properties":{"folders":{"type":"array","items":{"$ref":"#/components/schemas/Folder"},"description":"Alphabetical by name (case-insensitive)."}},"required":["folders"]},"FolderResponse":{"type":"object","properties":{"folder":{"$ref":"#/components/schemas/Folder"}},"required":["folder"]},"FolderDeleteResponse":{"type":"object","properties":{"removed":{"type":"boolean","const":true},"unfiled":{"type":"integer","minimum":0,"description":"Live Sites moved back to the root by the delete."}},"required":["removed","unfiled"]},"SiteSearchResult":{"type":"object","properties":{"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"primaryUrl":{"type":["string","null"],"format":"uri","description":"The Site's primary address as last indexed: primary custom domain, else its most recently connected custom domain, else the workspace label URL, else siteUrl."},"displayName":{"type":["string","null"],"maxLength":80},"displayDescription":{"type":["string","null"]},"ownership":{"type":"string","enum":["owned","shared","workspace"]},"sharedSource":{"type":["string","null"],"enum":["email","domain",null]},"workspace":{"type":["object","null"],"description":"Owning workspace, present on workspace-owned results.","properties":{"displayName":{"type":"string"},"subdomain":{"type":["string","null"]}},"required":["displayName","subdomain"]},"folder":{"type":["object","null"],"description":"The Site's dashboard folder within its owning account (docs: /docs#folders); null when the Site is at the account's root (unfiled).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]},"currentVersionId":{"type":["string","null"]},"indexedVersionId":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time","description":"When the Site's record last changed for any reason."},"contentUpdatedAt":{"type":"string","format":"date-time","description":"When the live content last changed (new version, restore, duplicate, or claim). Settings changes do not move it."},"matchedFields":{"type":"array","items":{"type":"string","examples":["slug","url","domain","display_name","viewer_title","viewer_description","content"]}},"matchedPaths":{"type":"array","items":{"type":"string"}},"snippet":{"type":["string","null"]}},"required":["slug","siteUrl","primaryUrl","ownership","sharedSource","workspace","folder","currentVersionId","indexedVersionId","updatedAt","contentUpdatedAt","matchedFields","matchedPaths","snippet"]},"SiteSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"nextCursor":{"type":["string","null"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/SiteSearchResult"}}},"required":["query","nextCursor","results"]},"SiteDataRecordInput":{"type":"object","description":"Record data validated against the target collection schema from .herenow/data.json. Allowed fields and value types depend on that collection.","additionalProperties":true},"SiteDataRecord":{"type":"object","properties":{"id":{"type":"string","pattern":"^rec_[0-9A-HJKMNP-TV-Z]{26}$"},"data":{"type":"object","description":"Projected record data after validation against the current collection schema.","additionalProperties":true},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","data","createdAt","updatedAt"]},"SiteDataRecordResponse":{"type":"object","properties":{"record":{"$ref":"#/components/schemas/SiteDataRecord"}},"required":["record"]},"SiteDataRecordListResponse":{"type":"object","properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/SiteDataRecord"}},"nextCursor":{"type":["string","null"]}},"required":["records","nextCursor"]},"SiteDataDeleteResponse":{"type":"object","properties":{"deleted":{"type":"boolean","const":true}},"required":["deleted"]},"ProfileSettings":{"type":"object","properties":{"profileFeedId":{"type":"string","pattern":"^pf_[a-z0-9]{10}$"},"username":{"type":"string","minLength":3,"maxLength":30},"enabled":{"type":"boolean"},"addNewSitesToProfile":{"type":"boolean"},"bio":{"type":["string","null"],"maxLength":160,"description":"One plain-text line shown under the username on the profile page. Null when unset."},"link":{"type":["string","null"],"format":"uri","description":"A single http(s) URL shown under the bio, stored normalized. Null when unset."},"url":{"type":"string","format":"uri"},"feedUrl":{"type":"string","format":"uri"},"updatedAt":{"type":"string","format":"date-time"}},"required":["profileFeedId","username","enabled","addNewSitesToProfile","bio","link","url","feedUrl","updatedAt"]},"ProfileSite":{"type":"object","properties":{"slug":{"type":"string"},"url":{"type":"string","format":"uri"},"thumbnailUrl":{"type":"string","format":"uri"},"addedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"profileUpdatedAt":{"type":"string","format":"date-time"}},"required":["slug","url","thumbnailUrl","addedAt","updatedAt","profileUpdatedAt"],"additionalProperties":true},"ProfileResponse":{"allOf":[{"$ref":"#/components/schemas/ProfileSettings"},{"type":"object","properties":{"sites":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSite"}}},"required":["sites"]}]},"ProfileSitesResponse":{"type":"object","properties":{"sites":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSite"}}},"required":["sites"]},"ProfileSitesMutationResponse":{"type":"object","properties":{"success":{"type":"boolean"},"sites":{"type":"array","items":{"$ref":"#/components/schemas/ProfileSite"}}},"required":["success","sites"]},"ProfileSettingsPatchRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"addNewSitesToProfile":{"type":"boolean"},"bio":{"type":["string","null"],"maxLength":160,"description":"Set the profile bio. Whitespace is collapsed to single spaces; an empty string or null clears it. Longer than 160 characters returns 400 invalid_bio."},"link":{"type":["string","null"],"maxLength":200,"description":"Set the profile link. A bare host like adam.com gets https://; the value must parse as an http(s) URL with a full domain and no credentials, else 400 invalid_link. An empty string or null clears it."}}},"ProfileUsernamePatchRequest":{"type":"object","properties":{"username":{"type":"string","minLength":1}},"required":["username"]},"ProfileSiteAddRequest":{"type":"object","properties":{"slug":{"type":"string","minLength":1}},"required":["slug"]},"PublishDetailsResponse":{"type":"object","properties":{"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"status":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"currentVersionId":{"type":["string","null"]},"currentVersionSource":{"type":["string","null"],"description":"What made the live version live: publish-finalize, editor, editor-new-site, duplicate-site, from-drive, dashboard-new-site, console-save, console-chat, or backfill; a restore reports the restore event. null when unattributed (versions that predate history)."},"currentVersionCreatedAt":{"type":["string","null"],"format":"date-time","description":"When the live version went live (the restore time after a restore). null when unattributed."},"pendingVersionId":{"type":["string","null"]},"displayName":{"type":["string","null"],"maxLength":80},"displayDescription":{"type":["string","null"],"maxLength":280},"metadata":{"type":"object","properties":{"displayName":{"type":["string","null"],"maxLength":80},"displayDescription":{"type":["string","null"],"maxLength":280},"displayNameSource":{"type":["string","null"],"enum":["caller","content_generated","fallback",null]},"displayDescriptionSource":{"type":["string","null"],"enum":["caller","content_generated","fallback",null]}}},"folder":{"type":["object","null"],"description":"The Site's dashboard folder within its owning account (docs: /docs#folders); null when the Site is at the account's root (unfiled).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]},"crossOriginIsolation":{"type":"boolean","description":"Whether the Site serves the cross-origin isolation headers (COOP same-origin + COEP require-corp) that multithreaded WebAssembly needs. Set on publish or via PATCH metadata. See /docs#wasm."},"manifest":{"type":"array","items":{"$ref":"#/components/schemas/PublishFile"}}},"required":["slug","siteUrl","status","createdAt","updatedAt","expiresAt","currentVersionId","currentVersionSource","currentVersionCreatedAt","pendingVersionId","folder","manifest"]},"SiteFilesResponse":{"type":"object","properties":{"slug":{"type":"string"},"currentVersionId":{"type":"string","description":"The live version the listing (and every url) reads from."},"files":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"size":{"type":"integer","minimum":0},"contentType":{"type":["string","null"]},"hash":{"type":["string","null"],"pattern":"^[a-f0-9]{64}$","description":"sha256 of the file bytes; also the ETag the read endpoint returns."},"url":{"type":"string","format":"uri","description":"GET this (with the same Authorization header) for the file bytes."}},"required":["path","size","contentType","hash","url"]}}},"required":["slug","currentVersionId","files"]},"AnalyticsRange":{"type":"string","enum":["24h","7d","30d","90d","all"],"default":"30d"},"AnalyticsSeriesPoint":{"type":"object","properties":{"bucket":{"type":"string","format":"date","description":"UTC day in YYYY-MM-DD format."},"views":{"type":"integer","minimum":0},"visitors":{"type":"integer","minimum":0}},"required":["bucket","views","visitors"]},"SiteAnalyticsResponse":{"type":"object","properties":{"slug":{"type":"string"},"analyticsStartedAt":{"type":["string","null"],"format":"date-time"},"lastEventAt":{"type":["string","null"],"format":"date-time"},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"totals":{"type":"object","properties":{"allTimeViews":{"type":"integer","minimum":0},"rangeViews":{"type":"integer","minimum":0},"rangeVisitors":{"type":"integer","minimum":0}},"required":["allTimeViews","rangeViews","rangeVisitors"]},"series":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsSeriesPoint"}},"topPaths":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"views":{"type":"integer","minimum":0}},"required":["path","views"]}},"topReferrers":{"type":"array","items":{"type":"object","properties":{"referrer":{"type":"string"},"views":{"type":"integer","minimum":0}},"required":["referrer","views"]}},"topCountries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"Coarse country code or Unknown."},"views":{"type":"integer","minimum":0}},"required":["country","views"]}},"topCrawlers":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"hits":{"type":"integer","minimum":0}},"required":["crawler","hits"]}},"top404Paths":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"referrer":{"type":"string"},"hits":{"type":"integer","minimum":0}},"required":["path","referrer","hits"]}}},"required":["slug","analyticsStartedAt","lastEventAt","range","totals","series","topPaths","topReferrers","topCountries","topCrawlers","top404Paths"]},"AccountAnalyticsResponse":{"type":"object","properties":{"analyticsStartedAt":{"type":["string","null"],"format":"date-time"},"lastEventAt":{"type":["string","null"],"format":"date-time"},"range":{"$ref":"#/components/schemas/AnalyticsRange"},"totals":{"type":"object","properties":{"allTimeViews":{"type":"integer","minimum":0},"rangeViews":{"type":"integer","minimum":0},"rangeVisitors":{"type":"integer","minimum":0},"assetHits":{"type":"integer","minimum":0},"notFoundHits":{"type":"integer","minimum":0},"botHits":{"type":"integer","minimum":0}},"required":["allTimeViews","rangeViews","rangeVisitors","assetHits","notFoundHits","botHits"]},"series":{"type":"array","items":{"$ref":"#/components/schemas/AnalyticsSeriesPoint"}},"topSites":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"label":{"type":["string","null"],"description":"Vanity label for workspace sites served at {label}.{subdomain} hosts."},"siteUrl":{"type":"string","format":"uri"},"views":{"type":"integer","minimum":0},"visitors":{"type":"integer","minimum":0}},"required":["slug","label","siteUrl","views","visitors"]}},"topReferrers":{"type":"array","items":{"type":"object","properties":{"referrer":{"type":"string"},"views":{"type":"integer","minimum":0}},"required":["referrer","views"]}},"topPaths":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"path":{"type":"string"},"views":{"type":"integer","minimum":0}},"required":["slug","path","views"]}},"topCountries":{"type":"array","items":{"type":"object","properties":{"country":{"type":"string","description":"Coarse country code or Unknown."},"views":{"type":"integer","minimum":0}},"required":["country","views"]}},"topCrawlers":{"type":"array","items":{"type":"object","properties":{"crawler":{"type":"string"},"hits":{"type":"integer","minimum":0}},"required":["crawler","hits"]}},"top404Paths":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"path":{"type":"string"},"hits":{"type":"integer","minimum":0}},"required":["slug","path","hits"]}}},"required":["analyticsStartedAt","lastEventAt","range","totals","series","topSites","topReferrers","topPaths","topCountries","topCrawlers","top404Paths"]},"ClaimSiteRequest":{"type":"object","properties":{"claimToken":{"type":"string","minLength":1,"description":"The complete, unmodified claimToken from the publish response."},"label":{"type":["string","null"],"minLength":1,"maxLength":63,"description":"Optional readable name for the Site on its additional root domain, when it has one. Same rules and bumping as finalize's label. Ignored for other Sites."}},"required":["claimToken"]},"ClaimSiteResponse":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri","description":"The address to share, exactly as returned; for a Site on an additional root domain it is that address, and the {slug}.here.now form is the urls[] entry of kind \"slug\"."},"primaryUrl":{"type":"string","format":"uri","description":"The address to show first (same precedence as finalize). siteUrl stays the canonical slug address."},"urls":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Every address the Site serves at, best first."},"label":{"type":["object","null"],"additionalProperties":true,"description":"The Site's readable name on its label roots, when present (same shape as finalize)."},"partner":{"type":"object","description":"Present when the Site also serves on an additional root domain that here.now operates: { slug, root }. Informational.","properties":{"slug":{"type":"string"},"root":{"type":"string"}}},"warnings":{"type":"array","items":{"type":"string"}},"expiresAt":{"type":"null"},"alreadyOwned":{"type":"boolean","description":"True when this account had already claimed the Site; the retry is reported as success."}},"required":["success","slug","siteUrl","expiresAt"]},"PublishMetadataPatchRequest":{"type":"object","properties":{"ttlSeconds":{"type":["integer","null"],"minimum":1},"viewer":{"$ref":"#/components/schemas/ViewerMetadata"},"password":{"type":["string","null"],"minLength":1,"maxLength":128,"description":"A string sets or changes the visitor password and puts the Site in password mode (clearing any restricted allowlists). null removes the password and returns the Site to anyone_with_link, on workspace Sites too (use the access endpoint with account_members for members-only). Omit for no change. Authenticated Sites only."},"spaMode":{"type":["boolean","null"]},"crossOriginIsolation":{"type":["boolean","null"],"description":"Turn the cross-origin isolation headers (COOP same-origin + COEP require-corp, needed by multithreaded WebAssembly) on or off for the Site without republishing; null is off. Takes effect at the edge within seconds. Personal Sites only via this route (workspace Sites set it through the publish flow). See /docs#wasm."},"displayName":{"type":"string","minLength":1,"maxLength":80,"description":"Owner-facing Site title for dashboards, search, profile cards, and API responses."},"displayDescription":{"type":"string","minLength":1,"maxLength":280,"description":"Owner-facing Site summary for dashboards, search, and API responses."},"folder":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Dashboard folder to file the Site in, as a folder name or folder id within the target account. A name matches case-insensitively and is created if it does not exist yet (up to 50 folders per account; 409 folder_limit beyond that). An id must be one of the account's folders (404 folder_not_found). Omitted leaves the Site where it is; null moves it back to the root (unfiled). Authenticated requests only: anonymous Sites have no account and return 400. Filing changes nothing about the Site's URL or access."}}},"PublishMetadataPatchResponse":{"type":"object","properties":{"success":{"type":"boolean"},"passwordProtected":{"type":"boolean"},"spaMode":{"type":"boolean"},"crossOriginIsolation":{"type":"boolean","description":"Returned when crossOriginIsolation was in the request: the setting after the patch."},"note":{"type":"string"},"metadata":{"type":"object","description":"Returned when displayName or displayDescription is updated.","additionalProperties":true},"folder":{"type":["object","null"],"description":"Returned when folder was in the request: the Site's folder after the patch (null at the root).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]}},"required":["success"],"additionalProperties":true},"SiteAccessPolicy":{"type":"object","properties":{"mode":{"type":"string","enum":["anyone_with_link","password","restricted","account_members"],"description":"Active access mode. anyone_with_link: anyone with the URL. password: anyone with the shared password. restricted: the allowlists (a personal Site with both empty is owner-only; a workspace Site admits members plus the listed guests). account_members: workspace members only."},"accessPolicyVersion":{"type":"integer","minimum":0,"description":"Increments on every access change. Changing the policy invalidates older viewer grants."},"allowedEmails":{"type":"array","items":{"type":"string","format":"email"},"description":"Exact-email allowlist. Empty unless mode is restricted."},"allowedDomains":{"type":"array","items":{"type":"string"},"description":"Email-domain allowlist. Empty unless mode is restricted."}},"required":["mode","accessPolicyVersion","allowedEmails","allowedDomains"]},"SiteAccessResponse":{"type":"object","properties":{"access":{"$ref":"#/components/schemas/SiteAccessPolicy"},"notifications":{"$ref":"#/components/schemas/SiteAccessNotifications","description":"Present on PATCH responses when notify is true and invite emails were sent or skipped."}},"required":["access"],"additionalProperties":true},"SiteAccessPatchRequest":{"type":"object","properties":{"mode":{"type":"string","enum":["anyone_with_link","restricted","account_members"],"description":"Target access mode. anyone_with_link: anyone with the URL. restricted: the allowlists below; on a personal Site with both empty, owner-only (the dashboard's \"Only you\"). account_members: workspace-owned Sites only, members-only. On workspace-owned Sites, restricted means workspace members plus the guest allowlists and requires at least one allowedEmails or allowedDomains entry (400 otherwise). Use the metadata endpoint to enable password mode (personal and workspace Sites)."},"allowedEmails":{"type":"array","items":{"type":"string","format":"email"},"maxItems":10000,"description":"Full replacement exact-email allowlist. Used only with restricted mode. Normalized to lowercase."},"allowedDomains":{"type":"array","items":{"type":"string"},"maxItems":10000,"description":"Full replacement email-domain allowlist (e.g. example.com). Used only with restricted mode. Normalized to lowercase."},"notify":{"type":"boolean","description":"When true, sends invite emails to exact-email addresses newly added by this request, up to 200 newly added addresses per request (400 and nothing saved beyond that; use notify false and the invites endpoint in batches). Confirm with the user before sending."}},"required":["mode"]},"SiteAccessInviteRequest":{"type":"object","properties":{"emails":{"type":"array","items":{"type":"string","format":"email"},"minItems":1,"maxItems":200}},"required":["emails"]},"SiteAccessNotifications":{"type":"object","properties":{"sent":{"type":"array","items":{"type":"string","format":"email"}},"failed":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"error":{"type":"string"}},"required":["email","error"]}},"skipped":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string","format":"email"},"reason":{"type":"string","enum":["not_allowed"]}},"required":["email","reason"]}}},"required":["sent","failed","skipped"]},"SiteAccessInviteResponse":{"type":"object","properties":{"notifications":{"$ref":"#/components/schemas/SiteAccessNotifications"}},"required":["notifications"]},"PublishFromDriveRequest":{"type":"object","properties":{"driveId":{"type":"string","minLength":1},"versionId":{"type":"string","minLength":1},"slug":{"type":"string","minLength":1},"spaMode":{"type":"boolean"},"crossOriginIsolation":{"type":"boolean","description":"Cross-origin isolation headers for threaded WebAssembly builds; same meaning as on publish create. See /docs#wasm."},"password":{"type":"string","minLength":1,"maxLength":128},"viewer":{"$ref":"#/components/schemas/ViewerMetadata"},"folder":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Dashboard folder to file the Site in, as a folder name or folder id within the target account. A name matches case-insensitively and is created if it does not exist yet (up to 50 folders per account; 409 folder_limit beyond that). An id must be one of the account's folders (404 folder_not_found). Omitted leaves the Site where it is; null moves it back to the root (unfiled). Authenticated requests only: anonymous Sites have no account and return 400. Filing changes nothing about the Site's URL or access."}},"required":["driveId"]},"PublishFromDriveResponse":{"type":"object","properties":{"success":{"type":"boolean"},"slug":{"type":"string"},"siteUrl":{"type":"string","format":"uri"},"driveId":{"type":"string"},"driveVersionId":{"type":"string"},"currentVersionId":{"type":"string"},"filesCount":{"type":"integer"},"addedToProfile":{"type":"boolean"},"folder":{"type":["object","null"],"description":"The Site's dashboard folder within its owning account (docs: /docs#folders); null when the Site is at the account's root (unfiled).","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","minLength":1,"maxLength":60}},"required":["id","name"]},"publishStatus":{"$ref":"#/components/schemas/PublishStatus"}},"required":["success","slug","siteUrl","driveId","driveVersionId","currentVersionId","filesCount"],"additionalProperties":true},"Drive":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":["string","null"]},"isDefault":{"type":"boolean"},"headVersionId":{"type":["string","null"]},"dashboardUrl":{"type":"string","format":"uri"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["id","name","isDefault","headVersionId","dashboardUrl","createdAt","updatedAt"],"additionalProperties":true},"DriveCreateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":["string","null"],"maxLength":2000},"isDefault":{"type":"boolean"}}},"DrivePatchRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":120},"description":{"type":["string","null"],"maxLength":2000},"isDefault":{"type":"boolean"}}},"DriveResponse":{"type":"object","properties":{"drive":{"$ref":"#/components/schemas/Drive"},"headVersionId":{"type":["string","null"]},"token":{"type":"object","properties":{"id":{"type":"string"},"perms":{"type":"string","enum":["read","write"]},"manageTokens":{"type":"boolean"},"pathPrefix":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"}}}},"required":["drive"],"additionalProperties":true},"DriveListResponse":{"type":"object","properties":{"drives":{"type":"array","items":{"$ref":"#/components/schemas/Drive"}}},"required":["drives"]},"DeleteDriveResponse":{"type":"object","properties":{"success":{"type":"boolean"},"recoverableUntil":{"type":"string","format":"date-time"}},"required":["success","recoverableUntil"]},"DriveFile":{"type":"object","properties":{"path":{"type":"string"},"etag":{"type":"string"},"versionId":{"type":["string","null"]},"size":{"type":"integer"},"contentType":{"type":"string"},"sha256":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"lastModifiedBy":{"type":["object","null"],"additionalProperties":true},"lastOperation":{"type":["string","null"]}},"required":["path","etag","versionId","size","contentType","sha256","updatedAt"]},"DriveFileListResponse":{"type":"object","properties":{"files":{"type":"array","items":{"$ref":"#/components/schemas/DriveFile"}},"nextCursor":{"type":["string","null"]}},"required":["files","nextCursor"]},"DriveUploadCreateRequest":{"type":"object","properties":{"path":{"type":"string","minLength":1},"size":{"type":"integer","minimum":0},"contentType":{"type":"string"},"sha256":{"type":"string","pattern":"^(sha256:)?[a-f0-9]{64}$"},"ifMatch":{"type":"string"},"ifNoneMatch":{"type":"string","const":"*"}},"required":["path","size"]},"DriveUploadCreateResponse":{"type":"object","properties":{"uploadId":{"type":"string"},"method":{"type":"string","const":"PUT"},"url":{"type":"string","format":"uri"},"headers":{"type":"object","additionalProperties":{"type":"string"}},"expiresInSeconds":{"type":"integer"}},"required":["uploadId","method","url","headers","expiresInSeconds"],"additionalProperties":true},"DriveFinalizeRequest":{"type":"object","properties":{"uploadId":{"type":"string","minLength":1},"path":{"type":"string","minLength":1}},"required":["uploadId"]},"DriveMoveRequest":{"type":"object","properties":{"from":{"type":"string","minLength":1},"to":{"type":"string","minLength":1},"ifMatch":{"type":"string","minLength":1},"overwriteIfMatch":{"type":"string","minLength":1}},"required":["from","to","ifMatch"]},"DriveBatchRequest":{"type":"object","properties":{"baseVersionId":{"type":"string"},"ops":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","properties":{"op":{"type":"string","enum":["write","create","delete","move"]},"path":{"type":"string"},"from":{"type":"string"},"to":{"type":"string"},"uploadId":{"type":"string"},"ifMatch":{"type":"string"},"ifNoneMatch":{"type":"string","const":"*"},"overwriteIfMatch":{"type":"string"}},"required":["op"],"additionalProperties":false}}},"required":["ops"]},"DriveBatchResponse":{"type":"object","properties":{"success":{"type":"boolean"},"driveId":{"type":"string"},"versionId":{"type":"string"},"files":{"type":"array","items":{"$ref":"#/components/schemas/DriveFile"}},"deleted":{"type":"boolean"}},"additionalProperties":true},"DriveTokenCreateRequest":{"type":"object","properties":{"perms":{"type":"string","enum":["read","write"]},"permissions":{"type":"string","enum":["read","write"]},"manageTokens":{"type":"boolean","default":false},"pathPrefix":{"type":["string","null"]},"ttl":{"type":["string","null"],"example":"7d"},"label":{"type":["string","null"],"maxLength":200}}},"DriveToken":{"type":"object","properties":{"id":{"type":"string"},"perms":{"type":"string","enum":["read","write"]},"manageTokens":{"type":"boolean"},"pathPrefix":{"type":["string","null"]},"label":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"}},"additionalProperties":true},"DriveTokenListResponse":{"type":"object","properties":{"tokens":{"type":"array","items":{"$ref":"#/components/schemas/DriveToken"}}},"required":["tokens"]},"DriveTokenCreateResponse":{"type":"object","properties":{"token":{"type":"string","description":"Secret token value. Returned only when created."},"drive":{"$ref":"#/components/schemas/Drive"}},"additionalProperties":true},"CreateDomainRequest":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]},"DnsInstruction":{"type":"object","properties":{"type":{"type":"string"},"host":{"type":"string"},"value":{"type":"string"}},"required":["type","host","value"]},"DomainResponse":{"type":"object","properties":{"domain":{"type":"string"},"namespace_id":{"type":"string"},"status":{"type":"string","enum":["pending","active","error"]},"ssl_status":{"type":["string","null"]},"is_apex":{"type":"boolean"},"dns_instructions":{"type":"array","items":{"$ref":"#/components/schemas/DnsInstruction"}},"verification":{"type":"object","description":"Verification progress, present while status is pending (detail endpoint only). state \"verifying\" means no action is needed as long as the DNS records match dns_instructions: verification normally completes within 20 minutes of the records being added, but Cloudflare retries on its own schedule and it can take a few hours when records or nameservers changed after the domain was connected, so keep polling rather than deleting and re-adding the domain (recreating restarts verification and disconnects mounted Sites). state \"action_required\" appears when verification is in a terminal state or has not completed after 24 hours; in either case compare the records against dns_instructions and fix any difference.","properties":{"state":{"type":"string","enum":["verifying","action_required"]},"message":{"type":"string"}},"required":["state","message"]},"verification_errors":{"type":"array","items":{"type":"string"},"deprecated":true,"description":"Deprecated. Actionable verification guidance, present only when verification.state is action_required. Use verification instead."},"www_companion":{"type":"object","additionalProperties":true},"dns":{"type":"string","enum":["managed"],"description":"Present on create when the domain (or its parent) was bought through here.now: the records were written for you; nothing to add."},"activation":{"type":"string","description":"Present with dns: managed. What happens next."},"mounts":{"type":"array","description":"Mounts serving Sites on this domain.","items":{"$ref":"#/components/schemas/DomainMountEntry"}}},"additionalProperties":true},"DomainMountEntry":{"type":"object","properties":{"mount_path":{"type":"string","description":"Path on the domain; empty string is the root mount."},"slug":{"type":"string"},"created_at":{"type":"string","format":"date-time"}},"required":["mount_path","slug"]},"DomainListResponse":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainResponse"}}},"required":["domains"]},"DomainQuote":{"type":"object","description":"Availability and price for one domain. From search the price is an estimate for the minimum term; from check it is authoritative for the requested term.","properties":{"domain":{"type":"string","description":"Lowercase apex domain."},"tld":{"type":"string","description":"Ending without the leading dot, e.g. com or co.uk."},"match":{"type":"string","enum":["exact","name","variant"],"description":"Search results only: how the result relates to the query."},"purchasable":{"type":"boolean"},"premium":{"type":"boolean","description":"Registry-priced name. Buying it requires acknowledgedPriceCents."},"years":{"type":"integer","description":"The term the price covers (the TLD minimum when not requested)."},"reason":{"type":["string","null"],"description":"Why the name is not purchasable: registrar text, \"<tld> is not offered through here.now\", or \"connected to another here.now account\"."},"price":{"type":["object","null"],"description":"Total for the term; null when not purchasable.","properties":{"totalCents":{"type":"integer"},"perYearCents":{"type":"integer"},"currency":{"type":"string","enum":["usd"]},"display":{"type":"string","example":"$12.99"}},"required":["totalCents","perYearCents","currency","display"]},"renewal":{"type":["object","null"],"description":"Per-year renewal price when the registrar quotes one. Show it next to the first-year price.","properties":{"perYearCents":{"type":"integer"},"currency":{"type":"string","enum":["usd"]},"display":{"type":"string","example":"$19.99/yr"}},"required":["perYearCents","currency","display"]},"acknowledgedPriceCentsRequired":{"type":["integer","null"],"description":"For premium names, the value POST /purchase needs as acknowledgedPriceCents."}},"required":["domain","tld","purchasable","premium","years","reason","price","renewal","acknowledgedPriceCentsRequired"]},"DomainSearchResponse":{"type":"object","properties":{"query":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DomainQuote"}},"note":{"type":"string"}},"required":["query","results","note"]},"DomainCheckResponse":{"allOf":[{"$ref":"#/components/schemas/DomainQuote"},{"type":"object","properties":{"terms":{"type":"string","description":"https://here.now/terms/domains"},"note":{"type":"string","description":"Present when purchasable: confirm the price with the user before buying."}},"required":["terms"]}]},"DomainPurchaseRequest":{"type":"object","properties":{"domain":{"type":"string","minLength":3,"maxLength":253,"description":"Apex domain to register."},"years":{"type":"integer","minimum":1,"maximum":10,"description":"Term; defaults to the TLD minimum. Must be one of the TLD's allowed terms."},"use":{"type":"string","enum":["site"],"description":"What the domain is for. Only \"site\" (serve a Site) is available."},"connectSlug":{"type":["string","null"],"minLength":1,"maxLength":200,"description":"Slug of one of the account's Sites to mount at the domain's root."},"acknowledgedPriceCents":{"type":["integer","null"],"minimum":0,"description":"price.totalCents from GET /check, echoed back. Required for premium names; if sent for any name and the price moved, 409 price_changed."},"payment":{"type":["object","null"],"description":"Omit to charge the account's active saved method (see GET /api/v1/registrar/payment-method). Send exactly one of the two fields.","properties":{"shared_payment_token":{"type":"string","pattern":"^spt_[A-Za-z0-9]{8,}$","description":"A Stripe shared payment token (spt_...) granted to here.now's Stripe profile, from any provider that can issue one (Stripe Link's agent wallet is one). Single use; must cover the amount in USD."},"saved_payment_method":{"type":"string","pattern":"^pm_[A-Za-z0-9]+$","description":"One of the account's saved methods (an id from GET /payment-method `saved`), charged for this purchase only. 404 not_found when it is not on the account."}}}},"required":["domain"]},"DomainRegistration":{"type":"object","properties":{"id":{"type":"string"},"domain":{"type":"string"},"status":{"type":"string","enum":["purchasing","registered","renewal_failed","expired","transferred_out","failed"]},"use":{"type":"string","enum":["site"]},"years":{"type":"integer"},"registeredAt":{"type":["string","null"],"format":"date-time"},"expiresAt":{"type":["string","null"],"format":"date-time"},"autoRenew":{"type":"boolean"},"premium":{"type":"boolean"},"priceCents":{"type":"integer","description":"What was charged at purchase."},"renewalPriceCents":{"type":"integer","description":"Per-year renewal price at the last quote."},"transferLockExpiresAt":{"type":["string","null"],"format":"date-time","description":"End of ICANN's 60-day post-registration transfer hold."},"connected":{"type":["object","null"],"description":"The custom domain this registration serves through, or null after \"stop serving\".","properties":{"kind":{"type":"string"},"id":{"type":"string"}},"required":["kind","id"]},"connectSlug":{"type":["string","null"]},"paymentInstrument":{"type":"string","enum":["saved","shared_payment_token"],"description":"How the purchase was paid. Renewals always charge the saved card."},"lastError":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"}},"required":["id","domain","status","use","years","registeredAt","expiresAt","autoRenew","premium","priceCents","renewalPriceCents","transferLockExpiresAt","connected","connectSlug","paymentInstrument","lastError","createdAt"]},"DomainPurchaseResponse":{"type":"object","properties":{"registration":{"$ref":"#/components/schemas/DomainRegistration"},"quote":{"$ref":"#/components/schemas/DomainQuote"},"charged":{"type":"object","properties":{"amountCents":{"type":"integer"},"currency":{"type":"string","enum":["usd"]},"instrument":{"type":"string","enum":["saved","shared_payment_token"]},"brand":{"type":["string","null"]},"last4":{"type":["string","null"]}},"required":["amountCents","currency","instrument","brand","last4"]},"dns":{"type":"string","enum":["managed"],"description":"DNS is hosted at the registrar and written by here.now; nothing to add."},"activation":{"type":"string","description":"How to know when the domain is live: poll GET /api/v1/domains/{domain} or GET /api/v1/registrar/{domain}."},"renewal":{"type":"string","description":"Present when paid with a shared payment token: renewals charge the saved card, so one must be on the account before expiry."},"terms":{"type":"string"},"warnings":{"type":"array","items":{"type":"string"},"description":"Post-registration steps that did not complete (DNS write, connect, payment capture). The domain is the customer's regardless; here.now follows up."}},"required":["registration","quote","charged","dns","activation","terms","warnings"]},"PaymentRequiredErrorResponse":{"allOf":[{"$ref":"#/components/schemas/ErrorResponse"},{"type":"object","description":"402 with code payment_method_required carries details.accepts so the caller can pay: hosted (a page where the user saves a card; retry afterwards) and, when the deployment accepts them, shared_payment_token (network_id is here.now's Stripe profile, for any provider that can grant a token to it; link_cli is a ready-to-run Stripe Link CLI spend request for the exact amount, one way to obtain one; retry with body.payment.shared_payment_token). Other 402 codes (payment_failed, payment_requires_action, payment_review, spt_invalid, amount_exceeds_token) describe a declined or unusable payment; details.reason names the token problem.","properties":{"details":{"type":"object","properties":{"domain":{"type":"string"},"years":{"type":"integer"},"amount":{"type":"object","properties":{"cents":{"type":"integer"},"currency":{"type":"string"},"display":{"type":"string"}}},"accepts":{"type":"object","properties":{"shared_payment_token":{"type":"object","properties":{"network_id":{"type":"string"},"retry":{"type":"string"},"link_cli":{"type":"string"}}},"hosted":{"type":"object","properties":{"setupUrl":{"type":"string"},"instructions":{"type":"string"}}}}},"setupUrl":{"type":"string","description":"Same as accepts.hosted.setupUrl (kept for older clients)."},"instructions":{"type":"string"},"reason":{"type":"string","description":"For spt_invalid / amount_exceeds_token: spt_not_found, spt_deactivated, spt_expired, spt_insufficient, or spt_currency. For a token decline: token_declined."},"declineCode":{"type":["string","null"]},"paymentMethodId":{"type":"string","description":"payment_failed on a saved method: the method that declined. It is no longer auto-selected; pin it with PUT /payment-method to try it again."},"otherSavedMethods":{"type":"array","items":{"$ref":"#/components/schemas/RegistrarSavedPaymentMethod"},"description":"payment_failed on a saved method: the account's other saved methods, any of which can be named on the retry as body.payment.saved_payment_method."}},"additionalProperties":true}}}]},"DomainRegistrationListResponse":{"type":"object","properties":{"domains":{"type":"array","items":{"$ref":"#/components/schemas/DomainRegistration"}}},"required":["domains"]},"DomainRegistrationResponse":{"type":"object","properties":{"registration":{"$ref":"#/components/schemas/DomainRegistration"}},"required":["registration"]},"DomainRegistrationPatchRequest":{"type":"object","properties":{"autoRenew":{"type":"boolean"}},"required":["autoRenew"]},"DomainRegistrationPatchResponse":{"type":"object","properties":{"registration":{"$ref":"#/components/schemas/DomainRegistration"},"note":{"type":"string","description":"What happens next, in words the user can be shown."}},"required":["registration","note"]},"RegistrarSavedPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"Stripe payment method id (pm_...)."},"type":{"type":"string","description":"card, link, ..."},"brand":{"type":["string","null"]},"last4":{"type":["string","null"]}},"required":["id","type","brand","last4"]},"RegistrarPaymentMethodResponse":{"type":"object","properties":{"paymentMethod":{"allOf":[{"$ref":"#/components/schemas/RegistrarSavedPaymentMethod"}],"type":["object","null"],"description":"The method purchases and renewals charge, or null when nothing is saved."},"saved":{"type":"array","items":{"$ref":"#/components/schemas/RegistrarSavedPaymentMethod"},"description":"Every method saved on the account, newest first."},"accepts":{"type":"object","properties":{"shared_payment_token":{"type":"object","properties":{"network_id":{"type":"string"},"retry":{"type":"string"},"link_cli":{"type":"string","description":"Spend request without --amount; add it from the checked price."},"how":{"type":"string"}}},"saved_card":{"type":"object","properties":{"present":{"type":"boolean"},"instructions":{"type":"string"}},"required":["present"]}},"required":["saved_card"]}},"required":["paymentMethod","saved","accepts"]},"RegistrarPaymentMethodPutRequest":{"type":"object","properties":{"paymentMethodId":{"type":"string","pattern":"^pm_[A-Za-z0-9]+$"}},"required":["paymentMethodId"]},"RegistrarPaymentMethodPutResponse":{"type":"object","properties":{"paymentMethod":{"$ref":"#/components/schemas/RegistrarSavedPaymentMethod"},"note":{"type":"string"}},"required":["paymentMethod","note"]},"RegistrarPaymentMethodRemoveResponse":{"type":"object","properties":{"removed":{"type":"boolean","enum":[true]},"paymentMethod":{"allOf":[{"$ref":"#/components/schemas/RegistrarSavedPaymentMethod"}],"type":["object","null"],"description":"What purchases and renewals charge from now on, or null when nothing is left."},"note":{"type":"string"}},"required":["removed","paymentMethod","note"]},"RegistrarPaymentMethodSetupResponse":{"type":"object","properties":{"url":{"type":"string","description":"Stripe Checkout page (setup mode)."},"instructions":{"type":"string"}},"required":["url","instructions"]},"SavedPaymentMethod":{"type":"object","properties":{"id":{"type":"string","description":"Stripe payment method id (pm_...)."},"type":{"type":"string","description":"card, link, ..."},"brand":{"type":["string","null"],"description":"Card brand (visa, amex, ...), or link."},"last4":{"type":["string","null"]},"expMonth":{"type":["integer","null"]},"expYear":{"type":["integer","null"]},"label":{"type":"string","description":"For display: \"Visa ····4242\", or \"Stripe Link\" for a Link method (Stripe exposes no card details behind Link)."},"created":{"type":"integer","description":"Unix seconds the method was saved at Stripe."}},"required":["id","type","brand","last4","expMonth","expYear","label","created"]},"DescribedPaymentMethod":{"allOf":[{"$ref":"#/components/schemas/SavedPaymentMethod"},{"type":"object","properties":{"roles":{"type":"object","properties":{"default":{"type":"boolean","description":"The account default: what every automatic charge uses."},"plan":{"type":"boolean","description":"The active subscription's own card."}},"required":["default","plan"]},"flagged":{"type":"boolean","description":"Hard-declined an automatic charge; skipped by auto-selection until chosen again."}},"required":["roles","flagged"]}]},"PaymentMethodsResponse":{"type":"object","properties":{"paymentMethods":{"type":"array","items":{"$ref":"#/components/schemas/DescribedPaymentMethod"},"description":"Every saved method, newest first."},"default":{"allOf":[{"$ref":"#/components/schemas/SavedPaymentMethod"}],"type":["object","null"],"description":"The account default, or null when nothing is saved."},"charges":{"allOf":[{"$ref":"#/components/schemas/SavedPaymentMethod"}],"type":["object","null"],"description":"What an automatic charge (a purchase naming no card, a renewal, auto top-up) uses right now: the account default unless it is flagged, else the plan's card, else the newest unflagged method; null when nothing usable is saved."},"plan":{"type":["object","null"],"description":"The active subscription, or null on the free plan.","properties":{"id":{"type":"string","description":"hobby or developer."},"subscriptionId":{"type":"string"},"status":{"type":"string"},"paymentMethodId":{"type":["string","null"],"description":"The subscription's own card; null when it falls back to the account default."},"renewsAt":{"type":["string","null"],"format":"date-time"}},"required":["id","subscriptionId","status","paymentMethodId","renewsAt"]},"accepts":{"type":"object","properties":{"shared_payment_token":{"type":"object","properties":{"network_id":{"type":"string"},"retry":{"type":"string"},"link_cli":{"type":"string"}}},"hosted":{"type":"object","properties":{"instructions":{"type":"string"}},"required":["instructions"]}}}},"required":["paymentMethods","default","charges","plan","accepts"]},"PaymentMethodDefaultRequest":{"type":"object","properties":{"paymentMethodId":{"type":"string","pattern":"^pm_[A-Za-z0-9]+$","description":"An id from GET; it becomes the account default."}},"required":["paymentMethodId"]},"PaymentMethodsMutationResponse":{"allOf":[{"$ref":"#/components/schemas/PaymentMethodsResponse"},{"type":"object","properties":{"note":{"type":"string","description":"What changed, in words the user can be shown."},"removed":{"type":"boolean","enum":[true],"description":"Present on DELETE."}},"required":["note"]}]},"RegistrarDnsRecord":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["A","AAAA","ANAME","CNAME","MX","NS","SRV","TXT"]},"host":{"type":"string","description":"Relative to the zone; @ is the apex."},"value":{"type":"string"},"ttl":{"type":"integer"},"priority":{"type":["integer","null"]},"managed":{"type":"boolean","description":"A serving record here.now controls; not editable through PUT."}},"required":["id","type","host","value","ttl","priority","managed"]},"RegistrarRecordsResponse":{"type":"object","properties":{"domain":{"type":"string"},"records":{"type":"array","items":{"$ref":"#/components/schemas/RegistrarDnsRecord"}},"editableTypes":{"type":"array","items":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","SRV"]}}},"required":["domain","records","editableTypes"]},"RegistrarRecordsPutRequest":{"type":"object","properties":{"records":{"type":"array","maxItems":50,"description":"The complete desired set of editable records.","items":{"type":"object","properties":{"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","SRV"]},"host":{"type":"string","maxLength":253,"default":"@"},"value":{"type":"string","minLength":1,"maxLength":4096},"ttl":{"type":"integer","minimum":300,"maximum":86400},"priority":{"type":"integer","minimum":0,"maximum":65535,"description":"Required for MX."}},"required":["type","value"]}}},"required":["records"]},"RegistrarRecordsPutResponse":{"type":"object","properties":{"domain":{"type":"string"},"records":{"type":"array","items":{"$ref":"#/components/schemas/RegistrarDnsRecord"}},"changes":{"type":"object","properties":{"created":{"type":"integer"},"deleted":{"type":"integer"},"kept":{"type":"integer"}},"required":["created","deleted","kept"]}},"required":["domain","records","changes"]},"DomainTransferCodeResponse":{"type":"object","properties":{"domain":{"type":"string"},"authCode":{"type":"string","description":"The EPP/authorization code. Keep it private."},"locked":{"type":"boolean","description":"Registrar transfer lock after the unlock attempt."},"transferAllowedAfter":{"type":["string","null"],"format":"date-time","description":"When ICANN's 60-day hold ends, if still in force."},"note":{"type":"string"},"renewals":{"type":"string"}},"required":["domain","authCode","locked","transferAllowedAfter","note","renewals"]},"PrimaryDomainMount":{"type":"object","properties":{"domain":{"type":"string"},"mount_path":{"type":"string","description":"Mount path on the domain; empty string for root."},"location":{"type":"string","deprecated":true,"description":"Deprecated alias of mount_path (still returned for compatibility)."},"url":{"type":"string"},"mountId":{"type":"string","description":"Opaque identifier for this domain mount, returned by the primary-domain endpoints and accepted by PrimaryDomainUpdateRequest as an alternative to domain+mount_path addressing. The /api/v1/mounts responses identify mounts by mount_path instead and do not return this ID."}},"required":["domain","mount_path","url","mountId"]},"PrimaryDomainState":{"type":"object","properties":{"slugHost":{"type":"string","description":"The Site's {slug}.here.now host the redirect applies to (workspace label hosts redirect too)."},"primary":{"oneOf":[{"$ref":"#/components/schemas/PrimaryDomainMount"},{"type":"null"}]},"eligible":{"type":"array","items":{"$ref":"#/components/schemas/PrimaryDomainMount"}}},"required":["slugHost","eligible"],"additionalProperties":true},"PrimaryDomainUpdateRequest":{"type":"object","description":"Pass exactly one addressing mode: domain (+ optional mount_path when the Site is mounted at multiple paths on that domain), or mountId. Null in domain or mountId stops redirecting.","properties":{"domain":{"type":["string","null"]},"mount_path":{"type":"string","description":"Disambiguates when the Site has multiple mounts on the domain; \"\" targets the root mount."},"location":{"type":"string","deprecated":true,"description":"Deprecated alias of mount_path."},"mountId":{"type":["string","null"]}}},"HandleRequest":{"type":"object","properties":{"handle":{"type":"string"},"username":{"type":"string"}}},"HandleResponse":{"type":"object","properties":{"handle":{"type":["string","null"]},"hostname":{"type":["string","null"]},"mounts":{"type":"array","items":{"$ref":"#/components/schemas/MountResponse"}},"links":{"type":"array","items":{"$ref":"#/components/schemas/LinkResponse"},"description":"Deprecated alias of mounts."}},"additionalProperties":true},"VanityUrlsSubdomainPutRequest":{"type":"object","properties":{"subdomain":{"type":"string","description":"The name for {subdomain}.here.now; becomes the username. Omit when the username is already a chosen name."}}},"VanitySubdomain":{"type":"object","properties":{"subdomain":{"type":"string"},"hostname":{"type":"string","description":"{subdomain}.here.now"},"username":{"type":["string","null"]},"state":{"type":"string","enum":["provisioning","active","degraded","suspended","retiring"]},"provisioning":{"type":"object","properties":{"status":{"type":"string","enum":["provisioning","active","degraded","failed"]},"retryEndpoint":{"type":"string"}}},"childrenServing":{"type":"boolean","description":"Whether {site-name}.{hostname} addresses serve right now."},"root":{"type":"object","description":"What the bare root shows: a Site mounted at its root path, the owner's profile, or a placeholder.","properties":{"shows":{"type":"string","enum":["site","profile","placeholder"]},"showProfileAtRoot":{"type":"boolean"},"mounts":{"type":"integer"}}},"urlShape":{"type":"string","description":"https://{label}.{hostname}/"},"sites":{"type":"object","properties":{"named":{"type":"integer"},"unnamed":{"type":"integer","description":"Sites that will be named automatically but have no name yet."},"pendingConsent":{"type":"integer","description":"Sites from before the subdomain was turned on; named only by POST /api/v1/vanity-urls/name-existing-sites."}}},"enabledAt":{"type":["string","null"],"format":"date-time"},"suspendedAt":{"type":["string","null"],"format":"date-time"}},"required":["subdomain","hostname","state","urlShape","sites"],"additionalProperties":true},"VanitySubdomainOffer":{"type":"object","description":"The Off state: what the picker prefills and whether the plan qualifies.","properties":{"username":{"type":["string","null"]},"usernameChosen":{"type":"boolean","description":"False when the username is a generated placeholder (any name can be picked)."},"handle":{"type":["object","null"],"description":"A grandfathered handle not yet turned on; its name is used as is.","properties":{"name":{"type":"string"},"hostname":{"type":"string"},"mounts":{"type":"integer"}}},"lockedName":{"type":["string","null"],"description":"The name the PUT will use (a chosen username or the handle); null when any name can be picked."},"entitled":{"type":"boolean"},"plan":{"type":"string"},"existingSites":{"type":"integer"}},"additionalProperties":true},"VanitySubdomainResponse":{"type":"object","properties":{"subdomain":{"oneOf":[{"$ref":"#/components/schemas/VanitySubdomain"},{"type":"null"}]},"offer":{"oneOf":[{"$ref":"#/components/schemas/VanitySubdomainOffer"},{"type":"null"}],"description":"Present when subdomain is null."}},"required":["subdomain"]},"VanityUrlsDomainPutRequest":{"type":"object","properties":{"registrationId":{"type":"string","format":"uuid","description":"A registration from GET /api/v1/registrar/domains."},"domain":{"type":"string","description":"The apex domain instead of its registration id."}}},"VanityDomain":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"domain":{"type":"string"},"hostname":{"type":"string","description":"The apex; the root of {label}.{hostname}."},"registrationId":{"type":"string","format":"uuid"},"state":{"type":"string","enum":["provisioning","degraded","active","suspended","retiring"]},"provisioning":{"type":"object","properties":{"status":{"type":"string","enum":["provisioning","active","degraded","failed"]},"retryEndpoint":{"type":"string"}}},"childrenServing":{"type":"boolean"},"root":{"type":"object","properties":{"shows":{"type":"string","enum":["site","profile","placeholder"]},"showProfileAtRoot":{"type":"boolean"},"mounts":{"type":"integer"}}},"urlShape":{"type":"string","description":"https://{label}.{domain}/"},"sites":{"type":"object","properties":{"named":{"type":"integer"},"unnamed":{"type":"integer"},"pendingConsent":{"type":"integer"}}},"registration":{"type":"object","properties":{"expiresAt":{"type":["string","null"],"format":"date-time"},"autoRenew":{"type":"boolean"},"status":{"type":"string"}}},"enabledAt":{"type":"string","format":"date-time"},"suspendedAt":{"type":["string","null"],"format":"date-time"},"lastError":{"type":["string","null"]}},"required":["domain","hostname","state","urlShape","sites"],"additionalProperties":true},"VanityDomainOffer":{"type":"object","properties":{"entitled":{"type":"boolean"},"plan":{"type":"string"},"registrations":{"type":"array","items":{"type":"object","properties":{"registrationId":{"type":"string","format":"uuid"},"domain":{"type":"string"},"apexConnected":{"type":"boolean"},"expiresAt":{"type":["string","null"],"format":"date-time"}}}}}},"VanityDomainResponse":{"type":"object","properties":{"domain":{"oneOf":[{"$ref":"#/components/schemas/VanityDomain"},{"type":"null"}]},"offer":{"oneOf":[{"$ref":"#/components/schemas/VanityDomainOffer"},{"type":"null"}],"description":"Present when domain is null."}},"required":["domain"]},"VanityUrlsResponse":{"type":"object","properties":{"subdomain":{"oneOf":[{"$ref":"#/components/schemas/VanitySubdomain"},{"type":"null"}]},"domain":{"oneOf":[{"$ref":"#/components/schemas/VanityDomain"},{"type":"null"}]}},"additionalProperties":true},"MountRequest":{"type":"object","properties":{"mount_path":{"type":"string","description":"Path on the host; empty string mounts at the root."},"slug":{"type":"string"},"domain":{"type":"string","description":"Custom domain to mount on. Omit for the personal subdomain handle."},"namespace_id":{"type":"string"}},"required":["mount_path","slug"]},"MountPatchRequest":{"type":"object","properties":{"slug":{"type":"string"},"domain":{"type":"string","description":"Custom domain the mount lives on. Omit for the personal subdomain handle."}},"required":["slug"]},"MountResponse":{"type":"object","properties":{"mount_path":{"type":["string","null"],"description":"Path on the host; empty string is the root mount."},"slug":{"type":["string","null"]},"hostname":{"type":["string","null"]},"url":{"type":["string","null"],"format":"uri"},"created_at":{"type":["string","null"],"format":"date-time"}},"additionalProperties":true},"MountListResponse":{"type":"object","properties":{"hostname":{"type":["string","null"]},"mounts":{"type":"array","items":{"$ref":"#/components/schemas/MountResponse"}}},"required":["mounts"]},"DeleteMountResponse":{"type":"object","properties":{"deleted":{"type":"boolean"},"mount_path":{"type":["string","null"]}},"required":["deleted"]},"LinkRequest":{"type":"object","description":"Deprecated alias of MountRequest: location is the mount path.","properties":{"location":{"type":"string"},"mount_path":{"type":"string"},"slug":{"type":"string"},"domain":{"type":"string"},"namespace_id":{"type":"string"}},"required":["slug"]},"LinkPatchRequest":{"type":"object","description":"Deprecated alias of MountPatchRequest.","properties":{"slug":{"type":"string"},"domain":{"type":"string"},"namespace_id":{"type":"string"}},"required":["slug"]},"LinkResponse":{"type":"object","description":"Deprecated alias of MountResponse: location is the mount path.","properties":{"location":{"type":["string","null"]},"slug":{"type":["string","null"]},"hostname":{"type":["string","null"]},"url":{"type":["string","null"],"format":"uri"},"created_at":{"type":["string","null"],"format":"date-time"}},"additionalProperties":true},"LinkListResponse":{"type":"object","description":"Deprecated alias of MountListResponse.","properties":{"hostname":{"type":["string","null"]},"links":{"type":"array","items":{"$ref":"#/components/schemas/LinkResponse"}}},"required":["links"]},"DeleteLinkResponse":{"type":"object","description":"Deprecated alias of DeleteMountResponse.","properties":{"deleted":{"type":"boolean"},"location":{"type":["string","null"]}},"required":["deleted"]},"WorkspaceProvisioningNamespace":{"type":"object","properties":{"namespaceId":{"type":"string","format":"uuid"},"hostname":{"type":"string"},"status":{"type":"string","enum":["active","pending","error"]},"sslStatus":{"type":["string","null"]},"cfCustomHostnameId":{"type":["string","null"]},"routingMode":{"type":"string","enum":["serve","redirect"]},"createdAt":{"type":"string","format":"date-time"}},"required":["namespaceId","hostname","status","sslStatus","cfCustomHostnameId","routingMode","createdAt"]},"WorkspaceDcvDelegation":{"type":"object","properties":{"cname":{"type":"string"},"cnameTarget":{"type":"string"},"recordId":{"type":"string"}},"required":["cname","cnameTarget"]},"WorkspaceWildcardDnsRecord":{"type":"object","properties":{"name":{"type":"string"},"content":{"type":"string"},"recordId":{"type":"string"}},"required":["name","content"]},"WorkspaceWildcardProvisioning":{"type":"object","properties":{"hostname":{"type":"string"},"wildcardHostname":{"type":"string"},"customHostnameId":{"type":["string","null"]},"sslStatus":{"type":["string","null"]},"active":{"type":"boolean"},"dcvDelegation":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceDcvDelegation"},{"type":"null"}]},"wildcardDnsRecord":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceWildcardDnsRecord"},{"type":"null"}]},"error":{"type":"string"}},"required":["hostname","wildcardHostname","customHostnameId","sslStatus","active","dcvDelegation","wildcardDnsRecord"]},"WorkspaceProvisioningResponse":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"subdomain":{"type":"string"},"hostname":{"type":"string"},"provisioningStatus":{"type":"string","enum":["active","degraded"]},"namespace":{"$ref":"#/components/schemas/WorkspaceProvisioningNamespace"},"kvSynced":{"type":"boolean"},"wildcard":{"$ref":"#/components/schemas/WorkspaceWildcardProvisioning"}},"required":["accountId","subdomain","hostname","provisioningStatus","namespace","kvSynced","wildcard"]},"WorkspaceSiteLabelRequest":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z0-9][a-z0-9-]*[a-z0-9]$","description":"Exact workspace URL label, e.g. `q3-board-deck` in `q3-board-deck.zora.here.now`."},"slug":{"type":"string","minLength":1,"description":"Active Site slug already owned by the workspace account."}},"required":["label","slug"]},"WorkspaceSiteLabelRoute":{"type":"object","properties":{"type":{"type":"string","enum":["workspace_label","workspace_label_redirect"]},"accountId":{"type":"string","format":"uuid"},"workspaceHost":{"type":"string"},"hostname":{"type":"string"},"label":{"type":"string"},"slug":{"type":"string"},"redirectToLabel":{"type":"string"},"redirectCode":{"type":"integer","enum":[302,307]}},"additionalProperties":false},"WorkspaceSiteLabel":{"type":"object","properties":{"labelId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"label":{"type":"string"},"slug":{"type":["string","null"]},"status":{"type":"string","enum":["reserved","active","redirect","deleted"]},"redirectToLabel":{"type":["string","null"]},"redirectCode":{"type":["integer","null"],"enum":[302,307,null]},"workspaceHost":{"type":"string"},"hostname":{"type":"string"},"url":{"type":"string","format":"uri"},"route":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceSiteLabelRoute"},{"type":"null"}]},"createdByUserId":{"type":["string","null"],"format":"uuid"},"updatedByUserId":{"type":["string","null"],"format":"uuid"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"required":["labelId","accountId","label","slug","status","workspaceHost","hostname","url","route"]},"WorkspaceSiteLabelResponse":{"type":"object","properties":{"siteLabel":{"$ref":"#/components/schemas/WorkspaceSiteLabel"},"kvSynced":{"type":"boolean","description":"Whether label routing KV was synced immediately. A false value means the dirty namespace queue can reconcile later."}},"required":["siteLabel","kvSynced"]},"WorkspaceSiteLabelListResponse":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"siteLabels":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceSiteLabel"}}},"required":["accountId","siteLabels"]},"WorkspaceAccount":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"type":{"type":"string","enum":["personal","org"]},"displayName":{"type":"string"},"iconEmoji":{"type":["string","null"],"description":"Workspace icon: a single emoji, or null when unset."},"subdomain":{"type":["string","null"]},"status":{"type":"string","enum":["active","suspended","deleted"]},"provisioningStatus":{"type":"string","enum":["provisioning","active","degraded","failed"]},"role":{"type":"string","enum":["admin","member"]},"selector":{"type":"object","description":"Selector values for X-HereNow-Account / body account. Prefer the immutable id for stored automations.","properties":{"id":{"type":"string","format":"uuid"},"subdomain":{"type":["string","null"]}}}},"additionalProperties":true,"required":["accountId","type","displayName","status","provisioningStatus","role"]},"AccountListResponse":{"type":"object","properties":{"accounts":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceAccount"}},"currentAccountId":{"type":["string","null"],"format":"uuid"},"selectorError":{"type":["object","null"],"additionalProperties":true},"joinable":{"type":"array","items":{"$ref":"#/components/schemas/JoinableWorkspace"},"description":"Only present with includeJoinable=1: workspaces the caller could join right now via an active auto-join rule matching their email domain."}},"required":["accounts","currentAccountId"]},"JoinableWorkspace":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"iconEmoji":{"type":["string","null"]},"subdomain":{"type":["string","null"]},"domain":{"type":"string","description":"The email domain whose active auto-join rule makes the caller eligible."},"joinEndpoint":{"type":"string","description":"POST here to join (the domain-rules apply endpoint)."}},"required":["accountId","displayName","domain","joinEndpoint"]},"WorkspaceCreateRequest":{"type":"object","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"subdomain":{"type":["string","null"],"description":"Workspace subdomain to claim ({subdomain}.here.now). Omit to create the workspace without a home; provisioning requires it."}},"required":["displayName"]},"WorkspaceCreateResponse":{"type":"object","properties":{"account":{"$ref":"#/components/schemas/WorkspaceAccount"},"provisioning":{"type":["object","null"],"description":"Provisioning readiness when a subdomain was claimed. status=active means the workspace home and label URLs are ready; degraded includes a retryEndpoint.","properties":{"status":{"type":"string","enum":["provisioning","active","degraded","failed"]},"workspaceHost":{"type":"string"},"workspaceHomeUrl":{"type":["string","null"],"format":"uri"},"kvSynced":{"type":"boolean"},"wildcard":{"type":"object","additionalProperties":true},"retryEndpoint":{"type":"string"},"error":{"type":"string"},"note":{"type":"string"}},"additionalProperties":true}},"required":["account"]},"WorkspaceSiteLabelRemoveResponse":{"type":"object","properties":{"deleted":{"type":"boolean","const":true},"label":{"type":"string"},"slug":{"type":"string"},"removedAliases":{"type":"integer","description":"Redirects that pointed at the removed label and were removed with it."},"kvSynced":{"type":"boolean"}},"required":["deleted","label","slug","removedAliases","kvSynced"]},"WorkspaceSiteLabelRenameRequest":{"type":"object","properties":{"label":{"type":"string","minLength":1,"maxLength":63,"description":"New DNS-safe workspace label. The old label becomes a temporary redirect."},"redirect":{"type":"boolean","default":true,"description":"false is a privacy rename: no redirect is left on the old label, and every earlier alias of the Site is removed rather than repointed."}},"required":["label"]},"WorkspaceSiteLabelRenameResponse":{"type":"object","properties":{"siteLabel":{"$ref":"#/components/schemas/WorkspaceSiteLabel"},"previousLabel":{"type":"string"},"redirect":{"anyOf":[{"$ref":"#/components/schemas/WorkspaceSiteLabelRoute"},{"type":"null"}],"description":"Redirect tombstone route for the previous label; null when renaming to the same label."},"kvSynced":{"type":"boolean"}},"required":["siteLabel","previousLabel","kvSynced"]},"WorkspaceMember":{"type":"object","properties":{"userId":{"type":"string","format":"uuid"},"email":{"type":["string","null"]},"avatarUrl":{"type":["string","null"],"format":"uri","description":"Profile picture URL when the member signed in with Google; null otherwise."},"role":{"type":"string","enum":["admin","member"]},"status":{"type":"string"},"source":{"type":"string","description":"How the membership was created (e.g. invite, domain_rule, creator)."},"sourceEmail":{"type":["string","null"]},"joinedAt":{"type":["string","null"],"format":"date-time"},"removedAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true,"required":["userId","role","status"]},"WorkspaceMemberResponse":{"type":"object","properties":{"member":{"$ref":"#/components/schemas/WorkspaceMember"}},"required":["member"]},"WorkspaceMemberListResponse":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"members":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceMember"}}},"required":["accountId","members"]},"WorkspaceMemberAddRequest":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email of an existing here.now user."},"role":{"type":"string","enum":["admin","member"],"default":"member"}},"required":["email"]},"WorkspaceMemberRoleRequest":{"type":"object","properties":{"role":{"type":"string","enum":["admin","member"]}},"required":["role"]},"WorkspaceInvite":{"type":"object","properties":{"inviteId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"email":{"type":"string"},"role":{"type":"string","enum":["admin","member"]},"status":{"type":"string"},"invitedByUserId":{"type":["string","null"],"format":"uuid"},"invitedByEmail":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"},"revokedAt":{"type":["string","null"],"format":"date-time"},"acceptedAt":{"type":["string","null"],"format":"date-time"},"acceptedByUserId":{"type":["string","null"],"format":"uuid"}},"additionalProperties":true,"required":["inviteId","accountId","email","role","status"]},"WorkspaceInviteListResponse":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"invites":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceInvite"}}},"required":["accountId","invites"]},"MyInvite":{"type":"object","properties":{"inviteId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"email":{"type":"string","description":"The invited email (the caller's sign-in email)."},"role":{"type":"string","enum":["admin","member"]},"status":{"type":"string"},"invitedByEmail":{"type":["string","null"]},"expiresAt":{"type":["string","null"],"format":"date-time"},"createdAt":{"type":"string","format":"date-time"},"workspace":{"type":"object","properties":{"displayName":{"type":"string"},"subdomain":{"type":["string","null"]},"iconEmoji":{"type":["string","null"]}},"required":["displayName"]},"acceptEndpoint":{"type":"string","description":"POST here to accept the invite."},"declineEndpoint":{"type":"string","description":"POST here to decline the invite."}},"required":["inviteId","accountId","email","role","status","workspace","acceptEndpoint","declineEndpoint"]},"MyInviteListResponse":{"type":"object","properties":{"invites":{"type":"array","items":{"$ref":"#/components/schemas/MyInvite"}}},"required":["invites"]},"WorkspaceInviteCreateRequest":{"type":"object","properties":{"email":{"type":"string","format":"email"},"role":{"type":"string","enum":["admin","member"],"default":"member"}},"required":["email"]},"WorkspaceInviteCreateResponse":{"type":"object","properties":{"invite":{"$ref":"#/components/schemas/WorkspaceInvite"},"emailSent":{"type":"boolean"}},"required":["invite","emailSent"]},"WorkspaceDomainRule":{"type":"object","properties":{"ruleId":{"type":"string","format":"uuid"},"accountId":{"type":"string","format":"uuid"},"domain":{"type":"string"},"mode":{"type":"string"},"status":{"type":"string","enum":["active","disabled"]},"disabledAt":{"type":["string","null"],"format":"date-time"},"createdByUserId":{"type":["string","null"],"format":"uuid"},"createdByEmail":{"type":["string","null"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true,"required":["ruleId","accountId","domain","status"]},"WorkspaceDomainRuleListResponse":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"domainRules":{"type":"array","items":{"$ref":"#/components/schemas/WorkspaceDomainRule"}}},"required":["accountId","domainRules"]},"WorkspaceUpdateRequest":{"type":"object","description":"At least one property is required.","properties":{"displayName":{"type":"string","minLength":1,"maxLength":80},"iconEmoji":{"type":["string","null"],"description":"Single emoji, or null to clear the icon."}}},"WorkspaceUpdateResponse":{"type":"object","properties":{"account":{"type":"object","properties":{"accountId":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"iconEmoji":{"type":["string","null"]},"subdomain":{"type":["string","null"]}},"required":["accountId","displayName"]}},"required":["account"]},"WorkspaceDeleteResponse":{"type":"object","properties":{"deleted":{"type":"boolean"},"accountId":{"type":"string","format":"uuid"},"displayName":{"type":"string"},"subdomain":{"type":["string","null"]},"sites":{"type":"integer"},"customDomains":{"type":"integer"}},"additionalProperties":true,"required":["deleted","accountId"]},"VariableListResponse":{"type":"object","properties":{"variables":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}},"additionalProperties":true}}},"required":["variables"]},"VariableSetRequest":{"type":"object","properties":{"value":{"type":"string","minLength":1,"description":"The secret value (up to 4 KB). Stored encrypted; never returned."},"allowedUpstreams":{"type":["array","null"],"items":{"type":"string","minLength":1},"description":"Optional upstream host pinning: the variable is only injected into proxy-route requests whose upstream host is a listed hostname or a subdomain of one (e.g. [\"api.openai.com\"]). Entries are hostnames, not URLs; a full URL is accepted and reduced to its host, and anything that is not a hostname is rejected with 400. The response echoes the normalized list. Omit or null for no restriction. Omitting it on an update clears a previous pin."}},"required":["value"]},"VariableResponse":{"type":"object","properties":{"success":{"type":"boolean"},"name":{"type":"string"}},"additionalProperties":true},"SupportRequest":{"type":"object","properties":{"subject":{"type":"string","minLength":1,"maxLength":200},"message":{"type":"string","minLength":1,"maxLength":5000}},"required":["subject","message"]},"ApiKeyListResponse":{"type":"object","properties":{"keys":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Key UUID, or `legacy` for the original sign-up key."},"name":{"type":"string","description":"Key label; blank for the original sign-up key."},"key":{"type":"string","description":"Full API key value."},"keySuffix":{"type":"string","description":"Last 4 characters of the key, for display."},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time","nullable":true},"current":{"type":"boolean","description":"True for the key that authenticated this request."}},"required":["id","name","key","keySuffix","createdAt"]}},"limit":{"type":"integer","description":"Maximum active named keys per account."}},"required":["keys","limit"]},"ApiKeyCreateRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64,"description":"Label for the key, e.g. the agent or tool that will use it (claude, cursor)."}},"required":["name"]},"ApiKeyCreateResponse":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"key":{"type":"string","description":"Full API key (`hnk_` prefix)."},"keySuffix":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","name","key","keySuffix","createdAt"]},"ApiKeyRevokeResponse":{"type":"object","properties":{"revoked":{"type":"boolean","const":true},"id":{"type":"string"}},"required":["revoked","id"]},"EmailChangeRequest":{"type":"object","properties":{"newEmail":{"type":"string","format":"email","description":"The address to move the account to. Normalized to lowercase; ASCII only."}},"required":["newEmail"]},"EmailChangePending":{"type":"object","properties":{"status":{"type":"string","const":"pending"},"newEmail":{"type":"string","format":"email"},"createdAt":{"type":"string","format":"date-time"},"expiresAt":{"type":"string","format":"date-time","description":"When the code and link stop working."},"holdUntil":{"type":"string","format":"date-time","nullable":true,"description":"When set, the request cannot be confirmed before this time (API-key requests on accounts with billing or workspace-admin access)."}},"required":["status","newEmail","createdAt","expiresAt","holdUntil"]},"EmailChangeStatusResponse":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The account's current email."},"pending":{"oneOf":[{"$ref":"#/components/schemas/EmailChangePending"},{"type":"null"}]}},"required":["email","pending"]},"EmailChangePendingResponse":{"type":"object","properties":{"status":{"type":"string","const":"pending"},"newEmail":{"type":"string","format":"email"},"expiresAt":{"type":"string","format":"date-time"},"holdUntil":{"type":"string","format":"date-time","nullable":true},"warnings":{"type":"array","items":{"type":"string"},"description":"Non-blocking notes, e.g. plus-addressing and Google sign-in."},"message":{"type":"string","description":"What to do next, ready to relay to the user."}},"required":["status","newEmail","expiresAt","holdUntil","warnings","message"]},"EmailChangeCancelResponse":{"type":"object","properties":{"cancelled":{"type":"boolean"}},"required":["cancelled"]},"EmailChangeConfirmRequest":{"type":"object","properties":{"code":{"type":"string","description":"The 6-digit code from the email; dashes and spaces are ignored."}},"required":["code"]},"EmailChangeConfirmResponse":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"The account's email now."},"previousEmail":{"type":"string","format":"email"}},"required":["email","previousEmail"]},"ApiError":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}}}},"x-yaya-scope-registry":{"auth:agent":"Agent login codes (Better Auth #79; not here.now login)","keys:read":"List API keys for the authenticated principal","keys:write":"Create and revoke API keys (#17)","account:read":"Read account profile and billing metadata","account:write":"Update account settings","email:write":"Start, confirm, or cancel an account email change (#356)","billing:read":"Read saved payment methods (Stripe test mode only, #357)","billing:write":"Add, change default, and remove saved payment methods (Stripe test mode only, #357)","site:publish":"Planned: promote tenant draft to live (no publish handler live yet; mintable once #18 lands)","publish:read":"Read publish metadata, files, and site versions (#25 MCP/tools)","publish:write":"Create, update, and finalize publishes (#18)","sitedata:read":"Read owner site-data collections (#20)","sitedata:write":"Write owner site-data records (#20)","inventory:read":"List and search publishes","inventory:write":"Organize folders and inventory","analytics:read":"Read analytics rollups","domains:read":"Read custom domain status","domains:write":"Connect and verify custom domains (#22)","profile:read":"Read public profile","profile:write":"Update profile and handles","workspace:read":"Read workspace membership (#29, tenant via #41)","workspace:admin":"Invite members and manage workspace policy (#41)","registrar:read":"Search domains (#23 test checkout only)","registrar:write":"Registrar checkout in Stripe test mode only (#23)","drive:read":"Read drive files","drive:write":"Upload and mutate drive files (#28)","support:write":"Open support tickets","suite:read":"Read tenant metadata when no narrower scope applies (#17 GET /tenants/{id})","suite:write":"Update tenant metadata when no narrower scope applies (#17 PATCH /tenants/{id})"}},"security":[{"yayaBearer":[]}]}