{"openapi":"3.1.0","info":{"title":"Enzonic Cloud API","version":"1.0.0","summary":"Enzonic Deploy (web hosting) and Enzonic Databases (managed databases).","description":"Authenticate with `Authorization: Bearer <ecl_ token>` (create tokens in the console under Account → API tokens). Errors are `{\"error\": {\"code\", \"message\"}}`. Lists paginate with `?cursor=` → `next_cursor`. Scopes: `*`, `deploy`, `databases`, `domains`, `ci`, `deploy:read|write`, `databases:read|write`, `domains:read|write`, `ci:read|write` (`:read` allows GET only). Every token is limited to 300 requests per minute (X-Token-RateLimit-* headers), every user to 600; every answer carries X-RateLimit-Limit / -Remaining / -Reset and X-Request-Id (also error.request_id). Send Idempotency-Key on POSTs to retry safely (24 h). Outgoing webhooks: /v1/webhooks (signed with Enzonic-Signature). The MCP server is POST /mcp with the same token. Guides and reference: https://docs.enzonic.com","contact":{"name":"Enzonic support","url":"https://enzonic.com"}},"servers":[{"url":"https://panel.enzonic.com/api/cloud","description":"Production"}],"tags":[{"name":"Account"},{"name":"Projects"},{"name":"Deployments"},{"name":"Environment"},{"name":"Domains"},{"name":"Databases"},{"name":"Branches"},{"name":"Backups"},{"name":"Imports"},{"name":"Exports"},{"name":"SQL"},{"name":"Security"},{"name":"Regions"},{"name":"Server databases"},{"name":"Observability"},{"name":"Alerts"},{"name":"Webhooks"},{"name":"Audit"},{"name":"Teams"},{"name":"Billing"},{"name":"Grants"},{"name":"Support"},{"name":"Assistant"},{"name":"MCP"},{"name":"Admin"},{"name":"CI"}],"security":[{"bearerAuth":[]}],"paths":{"/admin/v1/grants":{"get":{"operationId":"getAdminGrants","tags":["Admin"],"summary":"Grant applications (open ones first) with counts per status","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by status."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Offset (pages of 100)."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Grant"}},"counts":{"type":"object","additionalProperties":true}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/grants/{id}/approve":{"post":{"operationId":"postAdminGrantsByIdApprove","tags":["Admin"],"summary":"Approve: a plan for N months and/or Cloud credit; emails the applicant","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantApprove"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/grants/{id}/reject":{"post":{"operationId":"postAdminGrantsByIdReject","tags":["Admin"],"summary":"Reject with a reason; emails the applicant","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantReject"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/grants/{id}/request-info":{"post":{"operationId":"postAdminGrantsByIdRequestInfo","tags":["Admin"],"summary":"Ask the applicant for more information; emails them","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantInfoRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/grants/{id}/revoke":{"post":{"operationId":"postAdminGrantsByIdRevoke","tags":["Admin"],"summary":"End an approved grant's plan now (credit stays)","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"note":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/health":{"get":{"operationId":"getAdminHealth","tags":["Admin"],"summary":"Node health, build queue and fleet counters","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/nodes":{"get":{"operationId":"getAdminNodes","tags":["Admin"],"summary":"List cloud nodes","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Node"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postAdminNodes","tags":["Admin"],"summary":"Register a node (token shown once)","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeRegister"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeToken"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/nodes/{id}":{"patch":{"operationId":"patchAdminNodesById","tags":["Admin"],"summary":"Update a node","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeRegister"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Node"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/nodes/{id}/rotate-token":{"post":{"operationId":"postAdminNodesByIdRotateToken","tags":["Admin"],"summary":"Rotate a node token","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeToken"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/state":{"get":{"operationId":"getAdminState","tags":["Admin"],"summary":"Published desired-state versions","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/state/publish":{"post":{"operationId":"postAdminStatePublish","tags":["Admin"],"summary":"Publish both snapshots now","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"published":{"type":"object","additionalProperties":true}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/admin/v1/users":{"get":{"operationId":"getAdminUsers","tags":["Admin"],"summary":"Cloud users with plans and usage","description":"Required scope: root admin.","x-enzonic-scope":"root admin","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Offset (pages of 100)."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/mcp":{"post":{"operationId":"postMcp","tags":["MCP"],"summary":"Remote MCP server (Streamable HTTP, JSON-RPC 2.0)","description":"Stateless MCP endpoint (protocol 2025-11-25, 2025-06-18, 2025-03-26): initialize, ping, tools/list, tools/call. Bearer ecl_ token; scopes apply per tool. Notifications answer 202. See docs/cloud/API.md for the tool list and client setup.\n\nRequired scope: per tool (<product>:read for read tools, <product>:write for write tools).","x-enzonic-scope":"per tool (<product>:read for read tools, <product>:write for write tools)","x-rate-limit":[{"requests":600,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getMcp","tags":["MCP"],"summary":"Not supported (stateless server): 405","description":"No authentication.","security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"405":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"429":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteMcp","tags":["MCP"],"summary":"Not supported (no sessions): 405","description":"No authentication.","security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"405":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRpcResponse"}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/alerts":{"get":{"operationId":"getAlerts","tags":["Alerts"],"summary":"List alert rules","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Alert"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postAlerts","tags":["Alerts"],"summary":"Create an alert rule","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/alerts/metrics":{"get":{"operationId":"getAlertsMetrics","tags":["Alerts"],"summary":"Metrics, comparators, windows and channels for alert rules","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertMetrics"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/alerts/{id}":{"patch":{"operationId":"patchAlertsById","tags":["Alerts"],"summary":"Update an alert rule","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Alert rule id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AlertCreate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Alert"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteAlertsById","tags":["Alerts"],"summary":"Delete an alert rule","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Alert rule id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/alerts/{id}/events":{"get":{"operationId":"getAlertsByIdEvents","tags":["Alerts"],"summary":"Firing / resolved history of a rule","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Alert rule id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AlertEvent"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/assistant":{"post":{"operationId":"postAssistant","tags":["Assistant"],"summary":"Ask Enzica (Cloud mode)","description":"Server-Sent Events by default: start, reasoning {delta}, text {delta}, tool {id, name, status, label}, confirmation_required {action_id, tool, title, summary, arguments, destructive, expires_at}, done {text, awaiting_confirmation, action_id?, quota}, error {error, code, status}. Answer a confirmation with {confirm: {action_id, approve}}. Accept: application/json (or ?stream=0) returns the same events in one JSON body.\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssistantRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssistantEvents"}},"text/event-stream":{"schema":{"type":"string","description":"Enzica events (see description)."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/assistant/quota":{"get":{"operationId":"getAssistantQuota","tags":["Assistant"],"summary":"The user's Enzica task allowance","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"tz","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quota"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/audit":{"get":{"operationId":"getAudit","tags":["Audit"],"summary":"Audit log of the account (or of the team, for team admins)","description":"Newest first. Entries of products the token cannot read are left out; account, billing and team entries need a \"*\" token.\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"product","in":"query","required":false,"schema":{"type":"string"},"description":"deploy, databases, domains, account, billing, teams (comma separated)."},{"name":"action","in":"query","required":false,"schema":{"type":"string"},"description":"Exact actions (comma separated) or a prefix like deployment.*."},{"name":"resource_id","in":"query","required":false,"schema":{"type":"string"},"description":"Project, database, deployment id or domain name."},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"At or after (ISO 8601)."},{"name":"until","in":"query","required":false,"schema":{"type":"string"},"description":"Before (ISO 8601)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AuditEntry"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/autofix/{id}":{"get":{"operationId":"getAutofixById","tags":["Deployments"],"summary":"One Enzica Autofix attempt with its progress","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixAttempt"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/autofix/{id}/apply":{"post":{"operationId":"postAutofixByIdApply","tags":["Deployments"],"summary":"Put a code fix's ready preview in production","description":"Promotes the preview the attempt deployed (status preview_ready). The fix branch is not merged: merge it on GitHub (changes.compare_url).\n\nRequired scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixAttempt"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/backups/{id}":{"get":{"operationId":"getBackupsById","tags":["Backups"],"summary":"Get a backup","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Backup id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Backup"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/backups/{id}/download":{"get":{"operationId":"getBackupsByIdDownload","tags":["Backups"],"summary":"Download link of a completed backup (zstd-compressed dump, 15 minutes)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Backup id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupDownload"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/backups/{id}/restore":{"post":{"operationId":"postBackupsByIdRestore","tags":["Backups"],"summary":"Restore a backup into a new branch","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Backup id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"into_branch":{"type":"string","description":"New branch name."}}}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Branch"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/balance":{"get":{"operationId":"getBillingBalance","tags":["Billing"],"summary":"The panel account balance (shared with game servers) and recent ledger rows","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balance"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/checkout":{"post":{"operationId":"postBillingCheckout","tags":["Billing"],"summary":"Buy a plan: Stripe subscription Checkout, or pay from the balance (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/checkout-link":{"post":{"operationId":"postBillingCheckoutLink","tags":["Billing"],"summary":"A console link that starts a plan checkout for the signed-in user (tokens may call it; nothing is charged)","description":"Tokens never pay or change plans. Coding agents and scripts call this, show the user the url, and the user confirms and pays in the console (POST /billing/checkout runs there, with the Clerk session).\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutLinkRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutLink"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/invoices":{"get":{"operationId":"getBillingInvoices","tags":["Billing"],"summary":"Invoices of the account (panel and Cloud), newest first (tokens may read)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/invoices/{id}":{"get":{"operationId":"getBillingInvoicesById","tags":["Billing"],"summary":"One invoice with its items","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/portal":{"post":{"operationId":"postBillingPortal","tags":["Billing"],"summary":"Stripe billing portal (cards, invoices, cancel) (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReturnTo"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Url"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/billing/topup":{"post":{"operationId":"postBillingTopup","tags":["Billing"],"summary":"Add funds to the panel balance through the panel's top-up Checkout (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopupResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/branches/{id}":{"delete":{"operationId":"deleteBranchesById","tags":["Branches"],"summary":"Delete a branch (not the primary)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Branch id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/branches/{id}/suspend":{"post":{"operationId":"postBranchesByIdSuspend","tags":["Branches"],"summary":"Suspend a branch now","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Branch id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/branches/{id}/wake":{"post":{"operationId":"postBranchesByIdWake","tags":["Branches"],"summary":"Wake a sleeping branch","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Branch id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PowerResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/artifacts/{id}/download":{"get":{"operationId":"getCiArtifactsByIdDownload","tags":["CI"],"summary":"Download link of an artifact (zip, valid 10 minutes); ?redirect=1 answers 302","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"redirect","in":"query","required":false,"schema":{"type":"boolean"},"description":"Redirect to the file."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"expires_at":{"type":["string","null"],"format":"date-time"},"name":{"type":"string"},"size_bytes":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/autofix/{id}":{"get":{"operationId":"getCiAutofixById","tags":["CI"],"summary":"One CI Autofix attempt with its progress","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiAutofixAttempt"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/github/connect":{"post":{"operationId":"postCiGithubConnect","tags":["CI"],"summary":"A GitHub connect link that returns to the CI console","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"return_to":{"type":"string","description":"An https://ci.enzonic.com URL."}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"install":{"type":"boolean"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/github/repos":{"get":{"operationId":"getCiGithubRepos","tags":["CI"],"summary":"Repositories of your linked GitHub App installations","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"As GET /github/repos."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/jobs/{id}":{"get":{"operationId":"getCiJobsById","tags":["CI"],"summary":"A job with its steps and annotations","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiJob"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/jobs/{id}/autofix":{"get":{"operationId":"getCiJobsByIdAutofix","tags":["CI"],"summary":"Enzica Autofix state of a failed job (no model call)","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"tz","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone for the task allowance."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiAutofixOverview"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postCiJobsByIdAutofix","tags":["CI"],"summary":"Fix a failed job with Enzica (one task; a commit on enzica/ci-fix-… and a run of it)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"tz","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiAutofixAttempt"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/jobs/{id}/logs":{"get":{"operationId":"getCiJobsByIdLogs","tags":["CI"],"summary":"Job log page","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"after_seq","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Cursor: chunks with seq >= after_seq."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiLogs"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/jobs/{id}/logs/stream":{"get":{"operationId":"getCiJobsByIdLogsStream","tags":["CI"],"summary":"Live job log as Server-Sent Events","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"access_token","in":"query","required":false,"schema":{"type":"string"},"description":"Token for EventSource (no headers)."},{"name":"after_seq","in":"query","required":false,"schema":{"type":"integer"},"description":"Start cursor."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"text/event-stream":{"schema":{"type":"string","description":"Events `log` {seq, step, text} and `done` {state}; ends after 25 s, reconnect with Last-Event-ID."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines":{"get":{"operationId":"getCiPipelines","tags":["CI"],"summary":"List CI pipelines (connected repositories) with their last 10 runs","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CiPipeline"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postCiPipelines","tags":["CI"],"summary":"Connect a GitHub repository (the GitHub App installation must be linked to your account)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiPipelineCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiPipeline"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}":{"get":{"operationId":"getCiPipelinesById","tags":["CI"],"summary":"Get a pipeline","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiPipeline"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchCiPipelinesById","tags":["CI"],"summary":"Change pipeline settings (fork pull requests, failure emails, Autofix, name, default branch)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiPipelineUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiPipeline"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteCiPipelinesById","tags":["CI"],"summary":"Disconnect a repository (open runs are canceled; secrets, caches and artifacts are deleted)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/caches":{"get":{"operationId":"getCiPipelinesByIdCaches","tags":["CI"],"summary":"Cache entries of a pipeline and the account's cache storage","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CiCache"}},"total_bytes":{"type":"integer"},"account_bytes":{"type":"integer"},"limit_bytes":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/caches/{cacheId}":{"delete":{"operationId":"deleteCiPipelinesByIdCachesByCacheId","tags":["CI"],"summary":"Delete one cache entry, or all of the pipeline's without {cacheId}","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"cacheId","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/config":{"get":{"operationId":"getCiPipelinesByIdConfig","tags":["CI"],"summary":"Read and check the default branch's CI config now","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiConfigCheck"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/runs":{"get":{"operationId":"getCiPipelinesByIdRuns","tags":["CI"],"summary":"Runs of a pipeline (newest first)","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Run state."},{"name":"branch","in":"query","required":false,"schema":{"type":"string"},"description":"Branch."},{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"push, pull_request, schedule, manual, api."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CiRun"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postCiPipelinesByIdRuns","tags":["CI"],"summary":"Start a run of a branch (event manual from the console, api with a token)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"ref":{"type":"string","description":"Branch (default: the pipeline's default branch)."},"sha":{"type":"string","description":"A specific commit of that branch."},"inputs":{"type":"object","additionalProperties":true,"description":"Values for ${{ inputs.NAME }} (at most 20)."},"message":{"type":"string"}}}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiRun"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/secrets":{"get":{"operationId":"getCiPipelinesByIdSecrets","tags":["CI"],"summary":"Secrets (names only) and variables of a pipeline","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CiSecret"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/pipelines/{id}/secrets/{key}":{"put":{"operationId":"putCiPipelinesByIdSecretsByKey","tags":["CI"],"summary":"Create or replace a secret or a variable (kind env)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"value":{"type":"string","description":"At most 48 KB."},"kind":{"type":"string","enum":["secret","env"]}},"required":["value"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiSecret"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteCiPipelinesByIdSecretsByKey","tags":["CI"],"summary":"Delete a secret (or a variable with ?kind=env)","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"key","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"kind","in":"query","required":false,"schema":{"type":"string","enum":["secret","env"]},"description":"Default secret."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/runs":{"get":{"operationId":"getCiRuns","tags":["CI"],"summary":"Recent runs across your pipelines (or the team's)","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"Run state."},{"name":"branch","in":"query","required":false,"schema":{"type":"string"},"description":"Branch."},{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"push, pull_request, schedule, manual, api."},{"name":"pipeline_id","in":"query","required":false,"schema":{"type":"string"},"description":"One pipeline."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CiRun"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/runs/{id}":{"get":{"operationId":"getCiRunsById","tags":["CI"],"summary":"A run with its jobs, steps, artifacts and attempts","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiRunDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/runs/{id}/cancel":{"post":{"operationId":"postCiRunsByIdCancel","tags":["CI"],"summary":"Cancel a queued or running run","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiRunDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/runs/{id}/rerun":{"post":{"operationId":"postCiRunsByIdRerun","tags":["CI"],"summary":"Re-run a finished run (a new attempt), or only its failed jobs","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"failed_only":{"type":"boolean","description":"Keep jobs that passed."}}}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiRun"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/settings":{"get":{"operationId":"getCiSettings","tags":["CI"],"summary":"Account CI settings (automatic Enzica Autofix default and email) and today's Enzica tasks","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiSettings"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchCiSettings","tags":["CI"],"summary":"Change the account CI settings","description":"Required scope: ci:write.","x-enzonic-scope":"ci:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiSettingsUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiSettings"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/ci/usage":{"get":{"operationId":"getCiUsage","tags":["CI"],"summary":"CI minutes, concurrency, cache and artifact storage against the plan","description":"Required scope: ci:read.","x-enzonic-scope":"ci:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CiUsage"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases":{"get":{"operationId":"getDatabases","tags":["Databases"],"summary":"List databases","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search name and slug."},{"name":"engine","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated engines."},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated statuses."},{"name":"region","in":"query","required":false,"schema":{"type":"string"},"description":"us, eu, asia."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Database"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabases","tags":["Databases"],"summary":"Create a database","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}":{"get":{"operationId":"getDatabasesById","tags":["Databases"],"summary":"Get a database","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchDatabasesById","tags":["Databases"],"summary":"Rename, resize or change scale-to-zero","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDatabasesById","tags":["Databases"],"summary":"Delete a database and all its branches","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/audit":{"get":{"operationId":"getDatabasesByIdAudit","tags":["Security"],"summary":"Audit log of console queries and security changes","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Pagination cursor."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true,"description":"Audit entry: action, actor, meta, created_at."}},"next_cursor":{"type":["string","null"]}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/backups":{"get":{"operationId":"getDatabasesByIdBackups","tags":["Backups"],"summary":"List backups and the PITR window","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":"daily, manual, pitr_base."},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"pending, running, completed, failed."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Branch id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BackupList"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdBackups","tags":["Backups"],"summary":"Start a manual backup","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"string"}}}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Backup"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/branches":{"get":{"operationId":"getDatabasesByIdBranches","tags":["Branches"],"summary":"List branches","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated statuses."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Branch"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdBranches","tags":["Branches"],"summary":"Create a branch (copy, backup or point in time)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Branch"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/connection":{"get":{"operationId":"getDatabasesByIdConnection","tags":["Databases"],"summary":"Connection details (includes the password)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Default primary."},{"name":"pooled","in":"query","required":false,"schema":{"type":"boolean"},"description":"Pooler as the main host (Postgres)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connection"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/domains":{"get":{"operationId":"getDatabasesByIdDomains","tags":["Databases"],"summary":"Custom database hostnames","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DbDomain"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdDomains","tags":["Databases"],"summary":"Add a custom database hostname (Pro, Scale)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbDomainCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbDomain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/domains/{domainId}":{"delete":{"operationId":"deleteDatabasesByIdDomainsByDomainId","tags":["Databases"],"summary":"Remove a custom database hostname","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"domainId","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/export":{"post":{"operationId":"postDatabasesByIdExport","tags":["Exports"],"summary":"Same as POST /databases/{id}/exports","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"string"}}}}}},"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbExport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/exports":{"post":{"operationId":"postDatabasesByIdExports","tags":["Exports"],"summary":"Export the database as a .sql.gz file (PostgreSQL, MySQL, MariaDB; runs on the database node; poll the export)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"string","description":"Default primary."}}}}}},"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbExport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getDatabasesByIdExports","tags":["Exports"],"summary":"Latest exports (newest first)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DbExport"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/exports/{exportId}":{"get":{"operationId":"getDatabasesByIdExportsByExportId","tags":["Exports"],"summary":"One export: status, and a 15-minute download_url once completed","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"exportId","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbExport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/import":{"post":{"operationId":"postDatabasesByIdImport","tags":["Imports"],"summary":"Import an uploaded .sql file (runs on the database node; poll the import)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"upload_id":{"type":"string"},"branch_id":{"type":"string","description":"Default primary."},"filename":{"type":"string","description":"Shown in the import list."}},"required":["upload_id"]}}}},"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbImport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/imports":{"post":{"operationId":"postDatabasesByIdImports","tags":["Imports"],"summary":"Same as POST /databases/{id}/import","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"upload_id":{"type":"string"},"branch_id":{"type":"string"},"filename":{"type":"string"}},"required":["upload_id"]}}}},"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbImport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"get":{"operationId":"getDatabasesByIdImports","tags":["Imports"],"summary":"Latest imports (newest first)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DbImport"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/imports/uploads":{"post":{"operationId":"postDatabasesByIdImportsUploads","tags":["Imports"],"summary":"Upload URL for a .sql or .sql.gz file (PostgreSQL, MySQL, MariaDB)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"filename":{"type":"string","description":"Ends in .sql or .sql.gz."},"size_bytes":{"type":"integer","description":"At most the database's storage limit."}},"required":["filename","size_bytes"]}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbImportUpload"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/imports/{importId}":{"get":{"operationId":"getDatabasesByIdImportsByImportId","tags":["Imports"],"summary":"One import: status, progress, error","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"importId","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbImport"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/metrics":{"get":{"operationId":"getDatabasesByIdMetrics","tags":["Observability"],"summary":"Database metric series (console chart)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["1h","24h","7d","30d"]},"description":"Time range."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbMetrics"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/projects":{"get":{"operationId":"getDatabasesByIdProjects","tags":["Databases"],"summary":"Projects this database is connected to","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDatabase"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/query":{"post":{"operationId":"postDatabasesByIdQuery","tags":["SQL"],"summary":"Run SQL (read-only by default; 10 s, 1000 rows)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryRequest"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/replicas":{"get":{"operationId":"getDatabasesByIdReplicas","tags":["Regions"],"summary":"List read replicas (one per extra region; Pro and Business)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Branch"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdReplicas","tags":["Regions"],"summary":"Add a read replica in another region (regions other than us return region_unavailable until they open)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"region":{"type":"string","enum":["us","eu","asia"]}},"required":["region"]}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Branch"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/replicas/{replicaId}":{"delete":{"operationId":"deleteDatabasesByIdReplicasByReplicaId","tags":["Regions"],"summary":"Remove a read replica (its region)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"replicaId","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/reset-password":{"post":{"operationId":"postDatabasesByIdResetPassword","tags":["Databases"],"summary":"Rotate the owner password","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"branch_id":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Connection"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/roles":{"get":{"operationId":"getDatabasesByIdRoles","tags":["Security"],"summary":"List database roles (users); read-only roles are marked","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true,"description":"Role: id, username, read_only, is_owner, created_at."}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdRoles","tags":["Security"],"summary":"Create a role (read-only by default); the password is shown once","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string"},"read_only":{"type":"boolean","description":"Default true."},"branch_id":{"type":"string","description":"Default primary."}},"required":["username"]}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"The role with its password."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/security":{"get":{"operationId":"getDatabasesByIdSecurity","tags":["Security"],"summary":"IP allowlist and TLS enforcement","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbSecurity"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchDatabasesByIdSecurity","tags":["Security"],"summary":"Change the IP allowlist or TLS enforcement (admin)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbSecurity"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbSecurity"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/slow-queries":{"get":{"operationId":"getDatabasesByIdSlowQueries","tags":["Observability"],"summary":"Slowest statements from the branch (pg_stat_statements / performance_schema)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Default primary."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Rows (default 20)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlowQueries"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/stats":{"get":{"operationId":"getDatabasesByIdStats","tags":["Observability"],"summary":"Database dashboard: connections, queries, CPU, memory, storage, wakes, sleeps","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["1h","24h","7d","30d"]},"description":"Time range."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseStats"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/tables":{"get":{"operationId":"getDatabasesByIdTables","tags":["SQL"],"summary":"List tables","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Default primary."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tables"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/tables/{table}/rows":{"get":{"operationId":"getDatabasesByIdTablesByTableRows","tags":["SQL"],"summary":"Browse table rows","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"table","in":"path","required":true,"schema":{"type":"string"},"description":"Table name (schema.table allowed)."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Branch."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer"},"description":"Rows (max 1000)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Offset."},{"name":"order_by","in":"query","required":false,"schema":{"type":"string"},"description":"Column."},{"name":"dir","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Direction."},{"name":"filter","in":"query","required":false,"schema":{"type":"string"},"description":"<column>:<op>:<value>, op eq, neq, contains, gt, lt or is_null."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rows"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdTablesByTableRows","tags":["SQL"],"summary":"Insert a row","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"table","in":"path","required":true,"schema":{"type":"string"},"description":"Table name (schema.table allowed)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWrite"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWriteResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchDatabasesByIdTablesByTableRows","tags":["SQL"],"summary":"Update exactly one row by its key (409 ambiguous_key otherwise)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"table","in":"path","required":true,"schema":{"type":"string"},"description":"Table name (schema.table allowed)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWrite"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWriteResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDatabasesByIdTablesByTableRows","tags":["SQL"],"summary":"Delete exactly one row by its key","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"table","in":"path","required":true,"schema":{"type":"string"},"description":"Table name (schema.table allowed)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWrite"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RowWriteResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/transfer":{"post":{"operationId":"postDatabasesByIdTransfer","tags":["Teams"],"summary":"Move a database to a team or to your personal account (admin on both sides)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/users":{"get":{"operationId":"getDatabasesByIdUsers","tags":["Security"],"summary":"Database users (roles), the console view","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string"},"description":"Default primary."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DbUser"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDatabasesByIdUsers","tags":["Security"],"summary":"Create a database user (read-only by default); the password is shown once","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"username":{"type":"string"},"read_only":{"type":"boolean"},"branch_id":{"type":"string"}},"required":["username"]}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DbUserCreated"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/databases/{id}/users/{userId}":{"delete":{"operationId":"deleteDatabasesByIdUsersByUserId","tags":["Security"],"summary":"Delete a database user (not the owner)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"userId","in":"path","required":true,"schema":{"type":"string"},"description":"Database id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}":{"get":{"operationId":"getDeploymentsById","tags":["Deployments"],"summary":"Get a deployment","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/autofix":{"get":{"operationId":"getDeploymentsByIdAutofix","tags":["Deployments"],"summary":"Enzica Autofix state of a deployment","description":"What the \"Build failed — let Enzica fix it?\" popup shows: a one-line hint from known log patterns, whether a fix can start (reason when not), the Enzica task allowance, the attempts on this deployment and the project's automatic setting. Free (no task, no model call).\n\nRequired scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"tz","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone for the task allowance."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixOverview"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDeploymentsByIdAutofix","tags":["Deployments"],"summary":"Fix a failed deployment with Enzica","description":"Consumes one Enzica task (the daily allowance shared with the game panel), checked atomically; none left → 429 task_limit with error.quota. At most 2 attempts per failed deployment chain (409 chain_limit); platform faults are refused (422 platform_error). Answers 202 with the attempt (status reading); poll GET /autofix/{id}. Config fixes change build settings / allow-listed env vars and redeploy; code fixes become a preview (enzica/fix-<id> branch with contents:write, or a patched upload) or a patch to apply yourself.\n\nRequired scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"tz","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone for the task allowance."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"202":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixAttempt"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/cancel":{"post":{"operationId":"postDeploymentsByIdCancel","tags":["Deployments"],"summary":"Cancel a queued or building deployment","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/logs":{"get":{"operationId":"getDeploymentsByIdLogs","tags":["Deployments"],"summary":"Build log page","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"after_seq","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Cursor: chunks with seq >= after_seq."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BuildLogs"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/logs/stream":{"get":{"operationId":"getDeploymentsByIdLogsStream","tags":["Deployments"],"summary":"Build log as Server-Sent Events","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"access_token","in":"query","required":false,"schema":{"type":"string"},"description":"Token for EventSource (no headers)."},{"name":"after_seq","in":"query","required":false,"schema":{"type":"integer"},"description":"Start cursor."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"text/event-stream":{"schema":{"type":"string","description":"Events `log` {seq, text} and `done` {state}; ends after 25 s, reconnect with Last-Event-ID."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/promote":{"post":{"operationId":"postDeploymentsByIdPromote","tags":["Deployments"],"summary":"Promote to production (also rollback)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/deployments/{id}/redeploy":{"post":{"operationId":"postDeploymentsByIdRedeploy","tags":["Deployments"],"summary":"Rebuild with the same source","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Deployment id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"target":{"type":"string","enum":["production","preview"],"description":"Override the target of the original deployment."}}}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/detect":{"post":{"operationId":"postDetect","tags":["Projects"],"summary":"Detect the framework of an upload","description":"For a folder or archive before it is uploaded: every file path, plus the text of package.json, requirements.txt, pyproject.toml, go.mod, .nvmrc, next.config.*, angular.json and workspace files (at most 60, 256 KB each).\n\nRequired scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"string"},"description":"Every file path, relative to the upload root (at most 50,000)."},"contents":{"type":"object","additionalProperties":true,"description":"path → text."},"root":{"type":"string"}},"required":["files"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameworkDetection"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains":{"get":{"operationId":"getDomains","tags":["Domains"],"summary":"Registered domains and external domains (personal or the X-Enzonic-Team team)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search the name."},{"name":"status","in":"query","required":false,"schema":{"type":"string"},"description":"active, pending, transfer_pending, expired."},{"name":"auto_renew","in":"query","required":false,"schema":{"type":"string"},"description":"true or false."},{"name":"expires_before","in":"query","required":false,"schema":{"type":"string"},"description":"Expiring before (ISO 8601)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RegisteredDomain"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/availability":{"get":{"operationId":"getDomainsAvailability","tags":["Domains"],"summary":"Check up to 50 domain names at once","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domains","in":"query","required":true,"schema":{"type":"string"},"description":"Comma-separated full names (example.com,example.dev)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DomainSearchResult"}},"currency":{"type":"string"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/available-suffixes":{"get":{"operationId":"getDomainsAvailableSuffixes","tags":["Domains"],"summary":"Enzonic suffixes for free subdomains","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Suffixes"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/check":{"get":{"operationId":"getDomainsCheck","tags":["Domains"],"summary":"Check whether a hostname can be added","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"hostname","in":"query","required":true,"schema":{"type":"string"},"description":"Hostname."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCheck"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/checkout":{"post":{"operationId":"postDomainsCheckout","tags":["Domains"],"summary":"Pay for domains (card or balance); registered at Spaceship after payment (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCheckout"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCheckoutResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/contact":{"get":{"operationId":"getDomainsContact","tags":["Domains"],"summary":"The saved registrant contact (404 not_found when none is saved)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainContact"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"putDomainsContact","tags":["Domains"],"summary":"Save the registrant contact","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainContact"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainContact"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/dns-templates":{"get":{"operationId":"getDomainsDnsTemplates","tags":["Domains"],"summary":"DNS templates (Google Workspace, Microsoft 365, Fastmail, Proton, Zoho, GitHub Pages, DMARC, Bluesky)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsTemplate"}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/external":{"post":{"operationId":"postDomainsExternal","tags":["Domains"],"summary":"Add a domain registered elsewhere: Enzonic hosts its DNS zone and answers the nameservers to set (developer)","description":"409 domain_exists | domain_taken | domain_pending_elsewhere {verification} | domain_registered_here | domain_reserved; 422 domain_not_found | domain_not_supported; 402 plan_limit; 503 external_dns_unavailable | external_dns_busy.\n\nRequired scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":60}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDomainAdd"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDomain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/external/{domain}":{"get":{"operationId":"getDomainsExternalByDomain","tags":["Domains"],"summary":"An external domain: zone status, nameservers, ownership record (refreshed at most once a minute)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDomain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDomainsExternalByDomain","tags":["Domains"],"summary":"Remove an external domain: its zone is deleted and DNS stops answering (admin)","description":"422 confirmation_required unless confirm (body or ?confirm=) is the domain name.\n\nRequired scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDomainRemove"}}}},"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/external/{domain}/verify":{"post":{"operationId":"postDomainsExternalByDomainVerify","tags":["Domains"],"summary":"Check the nameservers and the TXT ownership record now (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExternalDomain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/orders/{id}":{"get":{"operationId":"getDomainsOrdersById","tags":["Domains"],"summary":"An order and its items (with ?session_id= after a card checkout)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Domain order id."},{"name":"session_id","in":"query","required":false,"schema":{"type":"string"},"description":"Stripe Checkout session id from the return URL."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainOrder"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/orders/{id}/connect":{"post":{"operationId":"postDomainsOrdersByIdConnect","tags":["Domains"],"summary":"Run an order item's connection again (after the automatic connect failed)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Domain order id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"domain":{"type":"string"}},"required":["domain"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainOrder"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/renew":{"post":{"operationId":"postDomainsRenew","tags":["Domains"],"summary":"Renew several domains in one order: one Stripe Checkout or one balance charge (admin, console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRenewMany"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCheckoutResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/search":{"get":{"operationId":"getDomainsSearch","tags":["Domains"],"summary":"Search domain names (public; prices marked up)","description":"No sign-in needed (per-IP throttle). With a valid Bearer, results the caller already holds carry owned: true.\n\nNo authentication.","x-rate-limit":[{"requests":60,"per_minutes":1}],"security":[],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"},"description":"name or name.tld"},{"name":"tlds","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated TLDs to check."},{"name":"category","in":"query","required":false,"schema":{"type":"string","enum":["generic","tech","business","creative","lifestyle","geo"]},"description":"TLD group."},{"name":"min_price","in":"query","required":false,"schema":{"type":"number"},"description":"Lowest first-year retail price."},{"name":"max_price","in":"query","required":false,"schema":{"type":"number"},"description":"Highest first-year retail price."},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["popular","price","price_asc","price_desc"]},"description":"Default popular."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Results per page (40)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer"},"description":"Results to skip (next_offset)."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainSearch"}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/tlds":{"get":{"operationId":"getDomainsTlds","tags":["Domains"],"summary":"TLDs Enzonic sells, with retail prices (public)","description":"No authentication.","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainTlds"}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}":{"get":{"operationId":"getDomainsByDomain","tags":["Domains"],"summary":"A registered domain","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredDomainDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchDomainsByDomain","tags":["Domains"],"summary":"Auto-renew, WHOIS privacy (developer), transfer lock (admin)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredDomainUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredDomainDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/auth-code":{"get":{"operationId":"getDomainsByDomainAuthCode","tags":["Domains"],"summary":"Transfer (EPP) code (admin, console session only; audited)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAuthCode"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/connect":{"post":{"operationId":"postDomainsByDomainConnect","tags":["Domains"],"summary":"Point the domain at a Deploy project, a game server or a database (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainConnect"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainConnected"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/dns-templates/{template}":{"post":{"operationId":"postDomainsByDomainDnsTemplatesByTemplate","tags":["Domains"],"summary":"Apply a DNS template (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"template","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsTemplateApply"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsChangePlan"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/email-forwarding":{"get":{"operationId":"getDomainsByDomainEmailForwarding","tags":["Domains"],"summary":"Email forwards (supported: false until the feature is live)","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailForwarding"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDomainsByDomainEmailForwarding","tags":["Domains"],"summary":"Add an email forward; the destination confirms by email (developer; 501 not_supported until live)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailForwardInput"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailForward"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/email-forwarding/{id}":{"delete":{"operationId":"deleteDomainsByDomainEmailForwardingById","tags":["Domains"],"summary":"Remove an email forward (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Email forward id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/nameservers":{"put":{"operationId":"putDomainsByDomainNameservers","tags":["Domains"],"summary":"Set nameservers, or back to Enzonic DNS (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainNameservers"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisteredDomainDetail"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/records":{"get":{"operationId":"getDomainsByDomainRecords","tags":["Domains"],"summary":"DNS records","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"type","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated types."},{"name":"name","in":"query","required":false,"schema":{"type":"string"},"description":"@ or a relative name (comma separated)."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search the content."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecords"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDomainsByDomainRecords","tags":["Domains"],"summary":"Add a DNS record (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordInput"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecord"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/records/{id}":{"patch":{"operationId":"patchDomainsByDomainRecordsById","tags":["Domains"],"summary":"Change a DNS record (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS record id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecordInput"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsRecord"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDomainsByDomainRecordsById","tags":["Domains"],"summary":"Delete a DNS record (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"DNS record id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/renew":{"post":{"operationId":"postDomainsByDomainRenew","tags":["Domains"],"summary":"Renew now (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRenew"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCheckoutResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/url-forwarding":{"get":{"operationId":"getDomainsByDomainUrlForwarding","tags":["Domains"],"summary":"URL forwarding: the root rule (the console card) and every rule","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlForwarding"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"putDomainsByDomainUrlForwarding","tags":["Domains"],"summary":"Save or turn off a forwarding rule; writes the DNS records and the edge redirect (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlForwardingInput"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UrlForwarding"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/url-forwarding/{host}":{"delete":{"operationId":"deleteDomainsByDomainUrlForwardingByHost","tags":["Domains"],"summary":"Turn a forwarding rule off (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"host","in":"path","required":true,"schema":{"type":"string"},"description":"Rule label: @ for the domain itself, or www, go…."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{domain}/zone":{"get":{"operationId":"getDomainsByDomainZone","tags":["Domains"],"summary":"Export the zone as a BIND file","description":"Required scope: domains:read.","x-enzonic-scope":"domains:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"download","in":"query","required":false,"schema":{"type":"boolean"},"description":"Add Content-Disposition: attachment."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"text/plain":{"schema":{"type":"string","description":"BIND zone file."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postDomainsByDomainZone","tags":["Domains"],"summary":"Import a BIND zone file (merge or replace, with dry_run) (developer)","description":"Required scope: domains:write.","x-enzonic-scope":"domains:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"domain","in":"path","required":true,"schema":{"type":"string"},"description":"Registered domain name, e.g. example.com."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZoneImport"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DnsChangePlan"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{id}":{"patch":{"operationId":"patchDomainsById","tags":["Domains"],"summary":"Change redirect or branch pinning","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteDomainsById","tags":["Domains"],"summary":"Remove a domain","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/domains/{id}/verify":{"post":{"operationId":"postDomainsByIdVerify","tags":["Domains"],"summary":"Re-check DNS and certificate now","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Domain"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/email-forwarding/confirm/{token}":{"post":{"operationId":"postEmailForwardingConfirmByToken","tags":["Domains"],"summary":"Confirm an email forward destination (public; the Domains console confirmation page calls it; 410 link_expired)","description":"No authentication.","x-rate-limit":[{"requests":30,"per_minutes":1}],"security":[],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Confirmation token (efc_…) from the email."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"confirmed":{"type":"boolean"},"domain":{"type":"string"},"alias":{"type":"string"},"address":{"type":"string"}}}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/github/connect":{"post":{"operationId":"postGithubConnect","tags":["Projects"],"summary":"GitHub App install / authorize URL that returns to the console","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"return_to":{"type":"string","description":"An https://deploy.enzonic.com or https://databases.enzonic.com URL to come back to."}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string"},"install":{"type":"boolean"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/github/repos":{"get":{"operationId":"getGithubRepos","tags":["Projects"],"summary":"Repositories of the linked GitHub App installations","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by name."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GithubRepos"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/github/repos/{owner}/{repo}/detect":{"get":{"operationId":"getGithubReposByOwnerByRepoDetect","tags":["Projects"],"summary":"Detect the framework of a repository (cached 5 minutes)","description":"Reads the file list and the few small files the rules need (package.json, lockfile names, requirements.txt, go.mod …) through your GitHub App link. Same rules as the builder.\n\nRequired scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"owner","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"repo","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"branch","in":"query","required":false,"schema":{"type":"string"},"description":"Default: the repository's default branch."},{"name":"root","in":"query","required":false,"schema":{"type":"string"},"description":"Root directory (monorepos)."},{"name":"installation_id","in":"query","required":false,"schema":{"type":"integer"},"description":"Which linked installation to use; default: the first that can read the repository."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FrameworkDetection"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/grants":{"get":{"operationId":"getGrants","tags":["Grants"],"summary":"Your grant applications (team scope: the team's, admins)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantList"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postGrants","tags":["Grants"],"summary":"Apply for an Enzonic Cloud grant (one open application per account)","description":"Free plan time and/or Cloud credit for open source, students, non-profits, startups, educators and hackathons. One Cloud plan covers Deploy and Databases. 409 grant_pending while another application of the account is in review.\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":60}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/grants/{id}":{"get":{"operationId":"getGrantsById","tags":["Grants"],"summary":"One application","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/grants/{id}/reply":{"post":{"operationId":"postGrantsByIdReply","tags":["Grants"],"summary":"Answer the reviewer's question (status needs_info → pending)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":60}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantReply"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/grants/{id}/withdraw":{"post":{"operationId":"postGrantsByIdWithdraw","tags":["Grants"],"summary":"Withdraw an application that is still in review","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Grant"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/invites/{token}/accept":{"post":{"operationId":"postInvitesByTokenAccept","tags":["Teams"],"summary":"Accept an invitation (the signed-in address must be the invited one)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/me":{"get":{"operationId":"getMe","tags":["Account"],"summary":"Current user, subscriptions, plans and usage summary","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/openapi.json":{"get":{"operationId":"getOpenapiJson","tags":["Account"],"summary":"This OpenAPI document (public)","description":"No authentication.","x-rate-limit":[{"requests":60,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"OpenAPI 3.1 document."}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/plans":{"get":{"operationId":"getPlans","tags":["Account"],"summary":"Plans and limits (public)","description":"No authentication.","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Plans"}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/projects":{"get":{"operationId":"getProjects","tags":["Projects"],"summary":"List projects","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search name and repository."},{"name":"framework","in":"query","required":false,"schema":{"type":"string"},"description":"Comma-separated frameworks."},{"name":"source_type","in":"query","required":false,"schema":{"type":"string"},"description":"github, upload, cli, template (comma separated)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postProjects","tags":["Projects"],"summary":"Create a project (upload, cli or template; a template with a database also gets one)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreated"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/import":{"post":{"operationId":"postProjectsImport","tags":["Projects"],"summary":"Import a GitHub repository and queue the first deployment","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectImport"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectImported"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}":{"get":{"operationId":"getProjectsById","tags":["Projects"],"summary":"Get a project","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchProjectsById","tags":["Projects"],"summary":"Update build settings, regions, replicas or password","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteProjectsById","tags":["Projects"],"summary":"Delete a project (hosts, domains and placements go)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/analytics":{"get":{"operationId":"getProjectsByIdAnalytics","tags":["Observability"],"summary":"Project analytics (console chart)","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["24h","7d","30d"]},"description":"Time range (7d and 30d need the Pro plan for project analytics)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Analytics"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/autofix":{"get":{"operationId":"getProjectsByIdAutofix","tags":["Projects"],"summary":"Enzica Autofix settings of a project","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixSettings"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"putProjectsByIdAutofix","tags":["Projects"],"summary":"Turn automatic fixes of failed builds on or off","description":"auto_enabled true: every failed build no attempt produced starts one attempt without the popup, as the project owner and within the owner's task allowance.\n\nRequired scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"auto_enabled":{"type":"boolean"}},"required":["auto_enabled"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutofixSettings"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/databases":{"get":{"operationId":"getProjectsByIdDatabases","tags":["Environment"],"summary":"Databases connected to the project","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDatabase"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postProjectsByIdDatabases","tags":["Environment"],"summary":"Connect a database (existing or new) and write its variables","description":"Developer on the project and on the database. The token needs the deploy and databases scopes. Variables apply to the next deployment.\n\nRequired scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDatabaseAttach"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectDatabaseAttached"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/databases/{databaseId}":{"delete":{"operationId":"deleteProjectsByIdDatabasesByDatabaseId","tags":["Environment"],"summary":"Disconnect a database: its variables are removed, the database is kept","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"databaseId","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/deployments":{"get":{"operationId":"getProjectsByIdDeployments","tags":["Deployments"],"summary":"List deployments","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Deployment number cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"state","in":"query","required":false,"schema":{"type":"string"},"description":"queued, building, ready, error, canceled, superseded (comma separated)."},{"name":"target","in":"query","required":false,"schema":{"type":"string"},"description":"production or preview."},{"name":"branch","in":"query","required":false,"schema":{"type":"string"},"description":"Git branch (comma separated)."},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"Created at or after (ISO 8601)."},{"name":"until","in":"query","required":false,"schema":{"type":"string"},"description":"Created before (ISO 8601)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deployment"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postProjectsByIdDeployments","tags":["Deployments"],"summary":"Create a deployment (git ref, template or upload)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeploymentCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deployment"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/domains":{"get":{"operationId":"getProjectsByIdDomains","tags":["Domains"],"summary":"List project domains","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainList"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postProjectsByIdDomains","tags":["Domains"],"summary":"Add a free subdomain or a custom domain","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCreated"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/domains/{domainId}":{"delete":{"operationId":"deleteProjectsByIdDomainsByDomainId","tags":["Domains"],"summary":"Remove a project domain","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"domainId","in":"path","required":true,"schema":{"type":"string"},"description":"Domain id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/env":{"get":{"operationId":"getProjectsByIdEnv","tags":["Environment"],"summary":"List environment variables","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Search keys."},{"name":"target","in":"query","required":false,"schema":{"type":"string"},"description":"production, preview or development."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EnvVar"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postProjectsByIdEnv","tags":["Environment"],"summary":"Create an environment variable","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvVar"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"put":{"operationId":"putProjectsByIdEnv","tags":["Environment"],"summary":"Bulk upsert environment variables (JSON list and/or a .env file)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvBulk"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvBulkResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/env/{envId}":{"patch":{"operationId":"patchProjectsByIdEnvByEnvId","tags":["Environment"],"summary":"Update an environment variable","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"envId","in":"path","required":true,"schema":{"type":"string"},"description":"Environment variable id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnvVar"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteProjectsByIdEnvByEnvId","tags":["Environment"],"summary":"Delete an environment variable","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"envId","in":"path","required":true,"schema":{"type":"string"},"description":"Environment variable id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/rollback":{"post":{"operationId":"postProjectsByIdRollback","tags":["Deployments"],"summary":"Roll production back (no rebuild): to deployment_id or the previous ready production deployment","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Rollback"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/DeploymentDetail"},{"type":"object","properties":{"rolled_back_from":{"type":["string","null"],"description":"The deployment production served before."}}}]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/runtime-logs":{"get":{"operationId":"getProjectsByIdRuntimeLogs","tags":["Deployments"],"summary":"Runtime logs, fetched live from the nodes","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"since","in":"query","required":false,"schema":{"type":"string"},"description":"RFC 3339 or next_since."},{"name":"deployment_id","in":"query","required":false,"schema":{"type":"string"},"description":"Default: production."},{"name":"level","in":"query","required":false,"schema":{"type":"string","enum":["info","warn","error"]},"description":"Level filter."},{"name":"q","in":"query","required":false,"schema":{"type":"string"},"description":"Text filter."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuntimeLogs"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/stats":{"get":{"operationId":"getProjectsByIdStats","tags":["Observability"],"summary":"Project dashboard: traffic, latency, functions, errors, top paths","description":"Required scope: deploy:read.","x-enzonic-scope":"deploy:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":120,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"range","in":"query","required":false,"schema":{"type":"string","enum":["24h","7d","30d"]},"description":"Time range (7d and 30d need the Pro plan for project analytics)."},{"name":"top_paths","in":"query","required":false,"schema":{"type":"boolean"},"description":"Ask the edges for top paths (default true)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectStats"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/projects/{id}/transfer":{"post":{"operationId":"postProjectsByIdTransfer","tags":["Teams"],"summary":"Move a project to a team or to your personal account (admin on both sides)","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Project id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transfer"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/public/referrals/handoff":{"post":{"operationId":"postPublicReferralsHandoff","tags":["Referrals"],"summary":"Swap a referral link hand-off token (enz_rt, 15 minutes) for a long-lived one (public)","description":"Cross-site destinations of a referral link (enzonic.dev, rapidfile.cc) receive ?enz_rt=. The site exchanges it at once and keeps the returned token first-party; a sign-up sends it to POST /referrals/claim. The first touch (code, first visit, click) is kept.\n\nNo authentication.","x-rate-limit":[{"requests":30,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"{valid, token?, code?, issued_at?, expires_at?, destination?, referrer?, offer?}"}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals":{"get":{"operationId":"getReferrals","tags":["Referrals"],"summary":"Your referral dashboard: code, links per destination, stats, balances, activity, payouts, the Dev plan perk","description":"The same payload as the panel's /api/client/account/referrals, plus destinations (link builder rows with clicks and sign-ups), earned_by_product {panel, dev} and dev_perk {percent, active} (30 % off Enzonic game plans while a paid Dev plan is active).\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"Referral overview"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/cashout/credits":{"post":{"operationId":"postReferralsCashoutCredits","tags":["Referrals"],"summary":"Convert available referral earnings to account balance (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":6,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string"},"amount_cents":{"type":["integer","null"],"description":"Empty for everything available."}},"required":["idempotency_key"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/cashout/payout":{"post":{"operationId":"postReferralsCashoutPayout","tags":["Referrals"],"summary":"Withdraw available earnings to the bank through Stripe Connect (console session only, two-factor required)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":3,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"idempotency_key":{"type":"string"},"amount_cents":{"type":"integer"}},"required":["idempotency_key","amount_cents"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/claim":{"post":{"operationId":"postReferralsClaim","tags":["Referrals"],"summary":"Credit a brand-new account to the referral token this browser kept (console session only)","description":"Only accounts created in the last 15 minutes, never twice, with the same fraud checks as a panel sign-up.\n\nRequired scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"referral_token":{"type":"string"}}}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"attributed":{"type":"boolean"},"status":{"type":["string","null"]}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/connect":{"post":{"operationId":"postReferralsConnect","tags":["Referrals"],"summary":"Start Stripe Connect payout onboarding (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":5,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2."},"return_to":{"type":"string","description":"A console origin."}},"required":["country"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Url"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/connect/refresh":{"post":{"operationId":"postReferralsConnectRefresh","tags":["Referrals"],"summary":"Re-read the Stripe Connect payout state (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/referrals/link":{"post":{"operationId":"postReferralsLink","tags":["Referrals"],"summary":"Build a share link for an allowlisted destination (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"destination":{"type":"string","enum":["hosting","launcher","dev","deploy","databases","ci","rapidfile","rapidfile-api","rapidfile-media"]},"path":{"type":"string","description":"Optional page path: segments of letters, digits and . _ ~ -, at most 8 segments and 160 characters."}},"required":["destination"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","properties":{"link":{"type":"string"},"target":{"type":"string","description":"Where the link lands."}},"required":["link","target"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/regions":{"get":{"operationId":"getRegions","tags":["Account"],"summary":"Regions (public)","description":"No authentication.","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Region"}}}}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/roles/{id}":{"delete":{"operationId":"deleteRolesById","tags":["Security"],"summary":"Delete a role (the owner role cannot be deleted)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/roles/{id}/rotate":{"post":{"operationId":"postRolesByIdRotate","tags":["Security"],"summary":"Rotate a role password (applied on the database first)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"description":"The role with its new password."}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases":{"get":{"operationId":"getServerDatabases","tags":["Server databases"],"summary":"List the databases of your game servers (owned and subuser access)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true,"description":"Server database: id, name, server, host, permissions."}}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}":{"get":{"operationId":"getServerDatabasesById","tags":["Server databases"],"summary":"Get one server database","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/audit":{"get":{"operationId":"getServerDatabasesByIdAudit","tags":["Server databases"],"summary":"Audit log of console actions on this database","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/connection":{"get":{"operationId":"getServerDatabasesByIdConnection","tags":["Server databases"],"summary":"Connection details (password needs database.view_password or ownership)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/export":{"get":{"operationId":"getServerDatabasesByIdExport","tags":["Server databases"],"summary":"Export as SQL","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/import":{"post":{"operationId":"postServerDatabasesByIdImport","tags":["Server databases"],"summary":"Import SQL","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string"}},"required":["sql"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/query":{"post":{"operationId":"postServerDatabasesByIdQuery","tags":["Server databases"],"summary":"Run SQL (read-only unless write=true and you hold database.update)","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"sql":{"type":"string"},"write":{"type":"boolean"}},"required":["sql"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryResult"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/rotate-password":{"post":{"operationId":"postServerDatabasesByIdRotatePassword","tags":["Server databases"],"summary":"Rotate the database password","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/rows":{"get":{"operationId":"getServerDatabasesByIdRows","tags":["Server databases"],"summary":"Browse rows (paged, sortable, filterable)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"table","in":"query","required":false,"schema":{"type":"string"},"description":"Table."},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Page."},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer"},"description":"Rows per page."},{"name":"order_by","in":"query","required":false,"schema":{"type":"string"},"description":"Column."},{"name":"dir","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"]},"description":"Direction."},{"name":"filter","in":"query","required":false,"schema":{"type":"string"},"description":"Filter expression."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postServerDatabasesByIdRows","tags":["Server databases"],"summary":"Insert a row","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"string"},"values":{"type":"object","additionalProperties":true}},"required":["table","values"]}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/rows/delete":{"post":{"operationId":"postServerDatabasesByIdRowsDelete","tags":["Server databases"],"summary":"Delete a row by its key","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"string"},"key":{"type":"object","additionalProperties":true}},"required":["table","key"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/rows/update":{"post":{"operationId":"postServerDatabasesByIdRowsUpdate","tags":["Server databases"],"summary":"Update a row by its key","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"table":{"type":"string"},"key":{"type":"object","additionalProperties":true},"values":{"type":"object","additionalProperties":true}},"required":["table","key","values"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/security":{"get":{"operationId":"getServerDatabasesByIdSecurity","tags":["Server databases"],"summary":"Security settings (allowed remote hosts)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchServerDatabasesByIdSecurity","tags":["Server databases"],"summary":"Change allowed remote hosts","description":"Required scope: databases:write.","x-enzonic-scope":"databases:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"remote":{"type":"string","description":"Host pattern, e.g. % or 203.0.113.%"}},"required":["remote"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/structure":{"get":{"operationId":"getServerDatabasesByIdStructure","tags":["Server databases"],"summary":"Table structure (columns, keys, indexes)","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"table","in":"query","required":false,"schema":{"type":"string"},"description":"Table name."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/server-databases/{id}/tables":{"get":{"operationId":"getServerDatabasesByIdTables","tags":["Server databases"],"summary":"List tables","description":"Required scope: databases:read.","x-enzonic-scope":"databases:read","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":180,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/servers":{"get":{"operationId":"getServers","tags":["Domains"],"summary":"Your game-panel servers (owned, or shared with you as a subuser), for Quick connect","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GameServer"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/subscriptions/{product}":{"post":{"operationId":"postSubscriptionsByProduct","tags":["Account"],"summary":"Change plan (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string"},"description":"deploy or databases."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string","enum":["free","starter","pro","growth","business"]},"interval":{"type":"string","enum":["month","year"],"description":"Omitted: keep the current interval. A yearly card plan moves to monthly only at renewal (409 interval_change)."}},"required":["plan"]}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionChange"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/support/tickets":{"get":{"operationId":"getSupportTickets","tags":["Support"],"summary":"Your Enzonic Cloud support tickets","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["open","closed","all"]},"description":"Filter (default all)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Ticket"}},"next_cursor":{"type":"null"},"open_count":{"type":"integer"},"closed_count":{"type":"integer"}}}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postSupportTickets","tags":["Support"],"summary":"Open a ticket (staff answer in the panel)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketThread"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/support/tickets/{id}":{"get":{"operationId":"getSupportTicketsById","tags":["Support"],"summary":"A ticket and its messages","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketThread"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/support/tickets/{id}/messages":{"post":{"operationId":"postSupportTicketsByIdMessages","tags":["Support"],"summary":"Reply (re-opens a closed ticket)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketReply"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketThread"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams":{"get":{"operationId":"getTeams","tags":["Teams"],"summary":"Teams you belong to, with your role","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postTeams","tags":["Teams"],"summary":"Create a team (console session only; you become the owner)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}":{"get":{"operationId":"getTeamsById","tags":["Teams"],"summary":"A team (members only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchTeamsById","tags":["Teams"],"summary":"Rename a team (admin)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Team"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteTeamsById","tags":["Teams"],"summary":"Delete an empty team (owner; 409 team_not_empty while it has projects or databases)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}/invites":{"get":{"operationId":"getTeamsByIdInvites","tags":["Teams"],"summary":"Pending invitations (admin)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TeamInvite"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postTeamsByIdInvites","tags":["Teams"],"summary":"Invite by email (admin); mails a branded invitation","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInviteCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamInviteCreated"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}/invites/{inviteId}":{"delete":{"operationId":"deleteTeamsByIdInvitesByInviteId","tags":["Teams"],"summary":"Revoke an invitation (admin)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"inviteId","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}/leave":{"post":{"operationId":"postTeamsByIdLeave","tags":["Teams"],"summary":"Leave a team (not the owner)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}/members":{"get":{"operationId":"getTeamsByIdMembers","tags":["Teams"],"summary":"Members and roles","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TeamMember"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/teams/{id}/members/{userId}":{"patch":{"operationId":"patchTeamsByIdMembersByUserId","tags":["Teams"],"summary":"Change a member's role (admin; owner to hand the ownership over)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"userId","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMemberUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamMember"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteTeamsByIdMembersByUserId","tags":["Teams"],"summary":"Remove a member (admin; never the owner)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"userId","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/templates":{"get":{"operationId":"getTemplates","tags":["Account"],"summary":"Starter templates (public)","description":"No authentication.","x-rate-limit":[{"requests":120,"per_minutes":1}],"security":[],"parameters":[{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Template"}}}}}}},"429":{"$ref":"#/components/responses/Error"}}}},"/v1/tokens":{"get":{"operationId":"getTokens","tags":["Account"],"summary":"List API tokens (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Token"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postTokens","tags":["Account"],"summary":"Create an API token (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCreated"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/tokens/{id}":{"delete":{"operationId":"deleteTokensById","tags":["Account"],"summary":"Delete an API token (console session only)","description":"Required scope: console session (API tokens are refused).","x-enzonic-scope":"console session (API tokens are refused)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Token id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/uploads":{"post":{"operationId":"postUploads","tags":["Deployments"],"summary":"Get a presigned upload URL for a source archive","description":"Required scope: deploy:write.","x-enzonic-scope":"deploy:write","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":60,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/usage":{"get":{"operationId":"getUsage","tags":["Observability"],"summary":"This month's usage against the plan limits","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Usage"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks":{"get":{"operationId":"getWebhooks","tags":["Webhooks"],"summary":"List webhook endpoints (account or X-Enzonic-Team)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"post":{"operationId":"postWebhooks","tags":["Webhooks"],"summary":"Create a webhook endpoint (the signing secret is shown once)","description":"Team scope: team admins. The token needs the write scope of every product the events cover. At most 20 endpoints per account or team.\n\nRequired scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"}}}},"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookWithSecret"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/events":{"get":{"operationId":"getWebhooksEvents","tags":["Webhooks"],"summary":"Event types, wildcards, retry schedule","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvents"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/{id}":{"get":{"operationId":"getWebhooksById","tags":["Webhooks"],"summary":"Get a webhook endpoint","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"patch":{"operationId":"patchWebhooksById","tags":["Webhooks"],"summary":"Change URL, events, description or enabled","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":30,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}},"delete":{"operationId":"deleteWebhooksById","tags":["Webhooks"],"summary":"Delete a webhook endpoint and its delivery log","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"204":{"description":"No content","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/{id}/deliveries":{"get":{"operationId":"getWebhooksByIdDeliveries","tags":["Webhooks"],"summary":"Delivery log (30 days), newest first","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"cursor","in":"query","required":false,"schema":{"type":"string"},"description":"Cursor from next_cursor."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100},"description":"Page size (default 30)."},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","succeeded","failed"]},"description":"Status filter."},{"name":"event","in":"query","required":false,"schema":{"type":"string"},"description":"Event type filter."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"next_cursor":{"type":["string","null"],"description":"Pass as ?cursor= for the next page; null on the last page."}},"required":["data","next_cursor"]}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/{id}/deliveries/{deliveryId}/redeliver":{"post":{"operationId":"postWebhooksByIdDeliveriesByDeliveryIdRedeliver","tags":["Webhooks"],"summary":"Send the same event again (same event id and body) as a new delivery","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"deliveryId","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"201":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/{id}/rotate-secret":{"post":{"operationId":"postWebhooksByIdRotateSecret","tags":["Webhooks"],"summary":"Rotate the signing secret (the old one stops at once)","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":10,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookWithSecret"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}},"/v1/webhooks/{id}/test":{"post":{"operationId":"postWebhooksByIdTest","tags":["Webhooks"],"summary":"Send a webhook.test event now and return the delivery","description":"Required scope: any token (data is filtered by the token's scopes).","x-enzonic-scope":"any token (data is filtered by the token's scopes)","x-rate-limit":[{"requests":600,"per_minutes":1},{"requests":300,"per_minutes":1,"per":"token"},{"requests":20,"per_minutes":1}],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Id."},{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}],"responses":{"200":{"description":"OK","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"402":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ecl_ personal token or console session JWT","description":"Personal API token (ecl_…, scoped) or the console's Clerk session."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","description":"snake_case code, e.g. not_found, plan_limit, rate_limited."},"message":{"type":"string","description":"Human sentence."},"fields":{"type":"object","additionalProperties":true,"description":"Per-field problems (validation errors)."}},"required":["code","message"]}},"required":["error"]},"Plan":{"type":"object","properties":{"id":{"type":"string","enum":["free","starter","pro","growth","business"],"description":"One plan covers Deploy, Databases and CI."},"product":{"type":"string","enum":["cloud","deploy","databases","ci"]},"name":{"type":"string"},"price_monthly":{"type":"number"},"currency":{"type":"string"},"free":{"type":"boolean"},"ads":{"type":"boolean"},"description":{"type":"string"},"limits":{"type":"object","additionalProperties":true,"description":"DeployLimits, DatabaseLimits or CiLimits ({deploy, databases, ci} on a cloud plan)."},"features":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"value":{"description":"Any JSON value."}}}},"price_annual":{"type":"number","description":"Yearly price (USD): 10 months by default."},"price_annual_monthly":{"type":"number","description":"The yearly price per month."},"annual_savings":{"type":"number","description":"12 monthly payments minus the yearly price."},"recommended":{"type":"boolean","description":"The highlighted plan (pro)."},"highlights":{"type":"array","items":{"type":"string"},"description":"The few lines a pricing card shows."}}},"CiLimits":{"type":"object","properties":{"minutes":{"type":["integer","null"],"description":"Runner minutes per calendar month (null = unlimited)."},"concurrency":{"type":"integer","description":"Jobs running at once."},"timeout_min":{"type":"integer"},"cache_gb":{"type":"integer"},"artifact_retention_days":{"type":"integer"},"log_retention_days":{"type":"integer"}}},"Plans":{"type":"object","properties":{"cloud":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}},"deploy":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}},"databases":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}},"ci":{"type":"array","items":{"$ref":"#/components/schemas/Plan"}},"billing":{"type":"object","properties":{"intervals":{"type":"array","items":{"type":"string","enum":["month","year"]}},"annual_months":{"type":"integer","description":"Months a yearly plan costs."},"recommended":{"type":"string"}}},"discounts":{"type":"array","items":{"type":"object","additionalProperties":true}},"engines":{"type":"object","additionalProperties":true},"sizes":{"type":"object","additionalProperties":true}}},"Subscription":{"type":"object","properties":{"id":{"type":["string","null"]},"product":{"type":"string"},"plan":{"type":"string"},"status":{"type":"string"},"renews_at":{"type":["string","null"],"format":"date-time"},"pending_plan":{"type":["string","null"]},"interval":{"type":"string","enum":["month","year"],"description":"Billing interval of the next renewal."},"paid":{"type":"boolean"},"pays_from_balance":{"type":"boolean"},"payment_method":{"type":"string","enum":["balance","stripe"]},"source":{"type":"string","enum":["subscription","grant","free"],"description":"grant: the plan comes from an approved Enzonic Cloud grant (GET /grants) or the community-grant perk."},"grant":{"type":["object","null"],"description":"Set when source is grant.","properties":{"kind":{"type":"string","enum":["cloud","community"]},"id":{"type":["string","null"]},"plan":{"type":"string"},"expires_at":{"type":["string","null"],"format":"date-time","description":"When the granted plan ends (null for the community perk)."}}}}},"UsageMetric":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"used":{"type":"number"},"limit":{"type":["number","null"],"description":"null = unlimited."},"unit":{"type":"string"}}},"Me":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"username":{"type":"string"},"email":{"type":"string"},"avatar":{"type":"string"},"admin":{"type":"boolean"}}},"subscriptions":{"type":"object","properties":{"cloud":{"$ref":"#/components/schemas/Subscription"},"deploy":{"$ref":"#/components/schemas/Subscription"},"databases":{"$ref":"#/components/schemas/Subscription"}}},"plans":{"$ref":"#/components/schemas/Plans"},"discounts":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["first_month","game_plan","winback"]},"percent":{"type":"integer"},"label":{"type":"string"},"applies_to":{"type":"string","enum":["first_month","every_month"]},"expires_at":{"type":["string","null"],"format":"date-time","description":"winback only: when the offer ends."}}},"description":"What the next Cloud payment gets (the larger one applies)."},"usage_summary":{"type":"object","additionalProperties":true,"description":"{deploy|databases: {period_start, period_end, metrics: [UsageMetric]}}"},"show_ads":{"type":"boolean"},"ads":{"type":"object","additionalProperties":true},"balance":{"type":"number","description":"USD."}}},"SubscriptionChange":{"type":"object","properties":{"subscription":{"$ref":"#/components/schemas/Subscription"},"charged":{"type":"number"},"checkout_url":{"type":"string","description":"Present when a card payment is needed."}}},"Token":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"prefix":{"type":["string","null"],"description":"First 8 characters."},"scopes":{"type":"array","items":{"type":"string"}},"last_used_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"TokenCreate":{"type":"object","properties":{"name":{"type":"string","maxLength":64},"scopes":{"type":"array","items":{"type":"string","enum":["*","deploy","databases","domains","ci","deploy:read","deploy:write","databases:read","databases:write","domains:read","domains:write","ci:read","ci:write"]}},"expires_in_days":{"type":"integer","minimum":1,"maximum":3650}},"required":["name"]},"TokenCreated":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Token"},"secret":{"type":"string","description":"The ecl_ token. Shown once."}}},"Region":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"city":{"type":"string"},"deploy":{"type":"boolean"},"databases":{"type":"boolean"},"coming_soon":{"type":"boolean"}}},"Template":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"framework":{"type":["string","null"]},"description":{"type":["string","null"]},"database":{"oneOf":[{"$ref":"#/components/schemas/TemplateDatabase"},{"type":"null"}],"description":"The database a deploy of this template connects (null: none)."}}},"TemplateDatabase":{"type":"object","properties":{"engine":{"type":"string","description":"Database engine (postgres, libsql, supabase, pocketbase, valkey, …)."},"env_prefix":{"type":"string","description":"Prefix of the variables written (DATABASE, REDIS, …)."},"env":{"type":"array","items":{"type":"string"},"description":"Variables the template reads; written on deploy."},"migrations":{"type":["string","null"],"description":"Template file with its idempotent migrations (applied by the template on first boot)."},"seed":{"type":["string","null"],"description":"Template file with its seed data (applied once, on first boot)."}}},"Project":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"name":{"type":"string","description":"Slug and production host label (immutable)."},"framework":{"type":["string","null"]},"source_type":{"type":"string","enum":["github","upload","cli","template"]},"github_installation_id":{"type":["string","null"]},"repo_full_name":{"type":["string","null"]},"template":{"type":["string","null"]},"production_branch":{"type":"string"},"root_directory":{"type":["string","null"]},"install_command":{"type":["string","null"]},"build_command":{"type":["string","null"]},"output_directory":{"type":["string","null"]},"node_version":{"type":"string"},"regions":{"type":"array","items":{"type":"string"}},"replicas":{"type":"integer"},"password_protected":{"type":"boolean"},"url":{"type":"string"},"production_url":{"type":"string"},"mode":{"type":"string","enum":["static","function","server"]},"requests_24h":{"type":"array","items":{"type":"number"},"description":"24 hourly counts, oldest first."},"production_deployment_id":{"type":["string","null"]},"latest_deployment":{"oneOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"null"}]},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"ProjectCreate":{"type":"object","properties":{"name":{"type":"string","description":"Lowercase letters, digits and dashes."},"source_type":{"type":"string","enum":["upload","cli","template"]},"template":{"type":"string","description":"Template id (source_type template)."},"framework":{"type":"string"},"root_directory":{"type":"string"},"install_command":{"type":"string"},"build_command":{"type":"string"},"output_directory":{"type":"string"},"node_version":{"type":"string","enum":["18","20","22","24"]},"production_branch":{"type":"string"},"regions":{"type":"array","items":{"type":"string"}},"replicas":{"type":"integer"},"database":{"description":"Templates with a database: {create: {name?, region?, size?}} (default: a new database of the template's engine), {database_id} (an existing one of that engine, same account or team) or false (connect one later).","oneOf":[{"type":"object","properties":{"create":{"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"},"size":{"type":"string"}}}}},{"type":"object","properties":{"database_id":{"type":"string"}},"required":["database_id"]},{"type":"boolean","enum":[false]}]}},"required":["name"]},"ProjectCreated":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"setup":{"type":"object","properties":{"steps":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["project","database","env","deploy"]},"status":{"type":"string","enum":["done","skipped","queued"]},"created":{"type":"boolean"},"keys":{"type":"array","items":{"type":"string"}},"deployment_id":{"type":["string","null"]}}}},"database":{"oneOf":[{"$ref":"#/components/schemas/Database"},{"type":"null"}]},"env":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDatabaseEnv"}},"deployment":{"$ref":"#/components/schemas/Deployment"},"migrations":{"type":["string","null"]},"seed":{"type":["string","null"]}},"description":"Template projects only. A failed step answers its error with step and rolled_back: true, and nothing is kept."}}}]},"ProjectDatabase":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"project_id":{"type":"string"},"database_id":{"type":"string"},"env_prefix":{"type":"string"},"env_keys":{"type":"array","items":{"type":"string"},"description":"Variables this connection wrote."},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]}},"source":{"type":"string","enum":["manual","template"]},"created_at":{"type":["string","null"],"format":"date-time"},"database":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"engine":{"type":"string"},"status":{"type":"string"},"region":{"type":"string"},"host":{"type":"string"}}},"project":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"framework":{"type":["string","null"]}},"description":"GET /databases/{id}/projects only."}}},"ProjectDatabaseAttach":{"type":"object","properties":{"database_id":{"type":"string","description":"An existing database of the same account or team (needs developer on it)."},"create":{"type":"object","properties":{"engine":{"type":"string"},"name":{"type":"string","description":"Default <project>-db."},"region":{"type":"string","description":"Default the project's first region."},"size":{"type":"string"},"version":{"type":"string"}},"required":["engine"],"description":"A new database on the plan of the project's billing account."},"env_prefix":{"type":"string","description":"Variable prefix, e.g. DATABASE (DATABASE_URL), REDIS, POCKETBASE. Default per engine."},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]},"description":"Default all three."},"replace":{"type":"boolean","description":"Replace variables of the same names (else 409 env_conflict)."}},"description":"database_id or create."},"ProjectDatabaseEnv":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string","description":"Masked: passwords, tokens and keys are dots."},"targets":{"type":"array","items":{"type":"string"}}}},"ProjectDatabaseAttached":{"type":"object","properties":{"link":{"$ref":"#/components/schemas/ProjectDatabase"},"database":{"$ref":"#/components/schemas/Database"},"env":{"type":"array","items":{"$ref":"#/components/schemas/ProjectDatabaseEnv"}},"created":{"type":"boolean"}}},"ProjectImport":{"type":"object","properties":{"installation_id":{"type":"integer"},"repo_full_name":{"type":"string","description":"owner/name"},"branch":{"type":"string"},"name":{"type":"string"},"framework":{"type":"string"},"root_directory":{"type":"string"},"build_command":{"type":"string"},"install_command":{"type":"string"},"output_directory":{"type":"string"},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}}},"required":["installation_id","repo_full_name"]},"ProjectImported":{"allOf":[{"$ref":"#/components/schemas/Project"},{"type":"object","properties":{"deployment":{"$ref":"#/components/schemas/Deployment"}}}]},"ProjectUpdate":{"type":"object","properties":{"framework":{"type":["string","null"]},"production_branch":{"type":"string"},"root_directory":{"type":["string","null"]},"install_command":{"type":["string","null"]},"build_command":{"type":["string","null"]},"output_directory":{"type":["string","null"]},"node_version":{"type":"string"},"regions":{"type":"array","items":{"type":"string"}},"replicas":{"type":"integer"},"password":{"type":["string","null"],"description":"Password protection (Pro); null or \"\" removes it."}}},"GithubRepos":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"installation_id":{"type":"integer"},"full_name":{"type":"string"},"private":{"type":"boolean"},"default_branch":{"type":"string"},"updated_at":{"type":["string","null"],"format":"date-time"},"language":{"type":["string","null"],"description":"GitHub's main language."},"framework_hint":{"type":["string","null"],"description":"A framework id, or null."},"framework_hint_source":{"type":["string","null"],"enum":["detected","topics","name","language",null],"description":"detected: an earlier detect call on the default branch; topics, name, language: a guess without reading the repository."}}}},"next_cursor":{"type":["string","null"]},"installations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"account":{"type":"string"},"avatar":{"type":["string","null"]}}}},"install_url":{"type":["string","null"]}}},"FrameworkDetection":{"type":"object","properties":{"framework":{"type":"string","enum":["nextjs","nuxt","sveltekit","remix","react-router","astro","gatsby","docusaurus","angular","eleventy","vite","create-react-app","nestjs","hono","fastify","express","node","node-functions","hugo","fastapi","flask","django","python","go","docker","static"]},"name":{"type":"string","description":"Display name."},"variant":{"type":"string","description":"Vite flavour: react, vue, svelte, solid, preact or lit."},"version":{"type":"string","description":"From the dependency range, e.g. 15.0.3."},"confidence":{"type":"string","enum":["high","medium","low"]},"reasons":{"type":"array","items":{"type":"string"},"description":"What the decision rests on, e.g. \"next@^15.0.3 in dependencies\"."},"package_manager":{"type":"string","enum":["npm","pnpm","yarn","bun","pip","go",""]},"lockfile":{"type":"string","description":"Repository-relative."},"install_command":{"type":"string"},"build_command":{"type":"string"},"output_directory":{"type":"string"},"dev_command":{"type":"string"},"node_version":{"type":"string","enum":["18","20","22","24",""],"description":"From engines.node or .nvmrc; empty when the project does not pin one."},"node_version_source":{"type":"string"},"runtime":{"type":"string","enum":["node22","bun1","python3.12","go","container"]},"mode":{"type":"string","enum":["static","function","server"]},"functions":{"type":"boolean","description":"api/ serverless functions next to the framework."},"supported":{"type":"boolean","description":"false for Dockerfile projects."},"notes":{"type":"array","items":{"type":"string"}},"root_directory":{"type":"string"},"monorepo":{"type":"boolean"},"workspace_tool":{"type":["string","null"],"description":"pnpm, npm, yarn, bun, turbo, nx or lerna."},"candidates":{"type":"array","items":{"type":"object","properties":{"root_directory":{"type":"string"},"framework":{"type":"string"},"name":{"type":"string"},"confidence":{"type":"string"}}},"description":"Apps found in the repository (at most 20)."},"suggested_root":{"type":["string","null"],"description":"Set when the requested root is not an app but a folder is."},"source":{"type":"string","enum":["github","upload"]},"repo":{"type":"string"},"branch":{"type":"string"},"commit":{"type":["string","null"],"description":"Tree SHA the detection read."},"truncated":{"type":"boolean","description":"GitHub truncated the file list."}}},"Deployment":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"project_id":{"type":"string"},"number":{"type":"integer"},"target":{"type":"string","enum":["production","preview"]},"state":{"type":"string","enum":["queued","building","ready","error","canceled","superseded"]},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]},"git_ref":{"type":["string","null"]},"git_sha":{"type":["string","null"]},"commit_message":{"type":["string","null"]},"commit_author":{"type":["string","null"]},"source":{"type":["string","null"],"description":"github, template, upload or cli."},"functions_count":{"type":"integer"},"size_bytes":{"type":["integer","null"]},"build_ms":{"type":["integer","null"]},"created_by":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"ready_at":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","description":"Preview URL."},"is_production":{"type":"boolean"}}},"DeploymentDetail":{"allOf":[{"$ref":"#/components/schemas/Deployment"},{"type":"object","properties":{"aliases":{"type":"array","items":{"type":"string"}},"alias_details":{"type":"array","items":{"type":"object","properties":{"host":{"type":"string"},"kind":{"type":"string"},"url":{"type":"string"}}}},"is_current_production":{"type":"boolean"},"mode":{"type":"string"},"build_node":{"type":["string","null"]},"build_node_id":{"type":["string","null"]},"placements":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"region":{"type":["string","null"]},"mode":{"type":"string"},"state":{"type":"string"}}}},"manifest":{"type":["object","null"],"description":"Manifest summary (functions, server, routes, files_count)."}}}]},"DeploymentCreate":{"type":"object","properties":{"ref":{"type":"string","description":"Branch (GitHub projects)."},"upload_id":{"type":"string","description":"From POST /uploads."},"target":{"type":"string","enum":["production","preview"]}}},"BuildLogs":{"type":"object","properties":{"chunks":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer"},"text":{"type":"string"}}}},"next_seq":{"type":"integer","description":"Send back as after_seq."},"state":{"type":"string"},"done":{"type":"boolean","description":"Stop polling."}}},"UploadCreate":{"type":"object","properties":{"size_bytes":{"type":"integer"},"filename":{"type":"string","description":".zip gives a zip upload, anything else .tgz."}}},"Upload":{"type":"object","properties":{"upload_id":{"type":"string"},"put_url":{"type":"string","description":"Presigned S3 PUT."},"content_type":{"type":"string"},"format":{"type":"string","enum":["zip","tgz"]},"max_bytes":{"type":"integer"},"expires_at":{"type":["string","null"],"format":"date-time"}}},"RuntimeLogs":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"ts":{"type":"string"},"deployment_id":{"type":"string"},"level":{"type":"string","enum":["info","warn","error"]},"source":{"type":"string","enum":["function","server"]},"region":{"type":["string","null"]},"instance":{"type":["string","null"]},"node":{"type":"string"},"message":{"type":"string"}}}},"next_since":{"type":"string"},"nodes":{"type":"array","items":{"type":"object","properties":{"node":{"type":"string"},"ok":{"type":"boolean"}}}},"deployment_id":{"type":["string","null"]}}},"EnvVar":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"key":{"type":"string"},"value":{"type":["string","null"]},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]}},"sensitive":{"type":"boolean"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"EnvCreate":{"type":"object","properties":{"key":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,255}$"},"value":{"type":"string","maxLength":65536},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]}},"sensitive":{"type":"boolean"}},"required":["key","value"]},"EnvUpdate":{"type":"object","properties":{"id":{"type":"string","description":"When the path has no envId."},"key":{"type":"string"},"value":{"type":"string"},"targets":{"type":"array","items":{"type":"string"}},"sensitive":{"type":"boolean"}}},"Domain":{"type":"object","properties":{"id":{"type":"string"},"project_id":{"type":"string"},"hostname":{"type":"string"},"kind":{"type":"string","enum":["auto","subdomain","custom"]},"apex":{"type":"boolean"},"status":{"type":"string","enum":["pending","verifying","active","error"]},"status_reason":{"type":["string","null"]},"cert_status":{"type":["string","null"]},"dns_records":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string"},"value":{"type":"string"},"found":{"type":["boolean","null"]},"purpose":{"type":"string"}}}},"verification":{"type":["object","null"],"description":"TXT _enzonic.<host> when ownership must be proven."},"redirect_to":{"type":["string","null"]},"redirect_status":{"type":["integer","null"]},"git_branch":{"type":["string","null"]},"checked_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"DomainList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Domain"}},"next_cursor":{"type":["string","null"]},"edge":{"type":"object","properties":{"cname_target":{"type":"string"},"apex_a":{"type":"array","items":{"type":"string"}},"apex_aaaa":{"type":"array","items":{"type":"string"}}}}}},"DomainCreate":{"type":"object","properties":{"hostname":{"type":"string"},"redirect_to":{"type":"string"},"redirect_status":{"type":"integer","enum":[301,302,307,308]},"git_branch":{"type":"string"},"add_www":{"type":"string","enum":["redirect","none"]}},"required":["hostname"]},"DomainCreated":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Domain"},"description":"The domain and its www/apex companion when added."},"suggested_redirect":{"type":["string","null"]}}},"DomainUpdate":{"type":"object","properties":{"redirect_to":{"type":["string","null"]},"redirect_status":{"type":"integer"},"git_branch":{"type":["string","null"]}}},"DomainCheck":{"type":"object","properties":{"hostname":{"type":"string"},"available":{"type":"boolean"},"reason":{"type":["string","null"]},"kind":{"type":["string","null"]}}},"Suffixes":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"suffix":{"type":"string"},"default":{"type":"boolean"}}}},"per_project_limit":{"type":["integer","null"]},"subdomains_per_project":{"type":["integer","null"]},"custom_domains_per_project":{"type":["integer","null"]},"cname_target":{"type":"string"},"edge_ips":{"type":"array","items":{"type":"string"}}}},"Analytics":{"type":"object","properties":{"range":{"type":"string"},"bucket":{"type":"string","enum":["hour","day"]},"totals":{"type":"object","properties":{"requests":{"type":"integer"},"bandwidth_bytes":{"type":"integer"},"p50_ms":{"type":"integer"},"p95_ms":{"type":"integer"},"invocations":{"type":"integer"},"errors":{"type":"integer"}}},"series":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string"},"requests":{"type":"integer"},"bandwidth_bytes":{"type":"integer"},"p50_ms":{"type":"integer"},"p95_ms":{"type":"integer"},"invocations":{"type":"integer"}}}},"status_codes":{"type":"object","properties":{"2xx":{"type":"integer"},"3xx":{"type":"integer"},"4xx":{"type":"integer"},"5xx":{"type":"integer"}}},"top_paths":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"TopPaths":{"type":"object","properties":{"available":{"type":"boolean","description":"False until the edge serves GET /top-paths."},"reason":{"type":["string","null"],"description":"no_edge_nodes, not_reported, not_requested."},"data":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"requests":{"type":"integer"},"bandwidth_bytes":{"type":"integer"},"errors":{"type":"integer"}}}}}},"ProjectStats":{"type":"object","properties":{"project_id":{"type":"string"},"range":{"type":"string"},"bucket":{"type":"string","enum":["hour","day"]},"totals":{"type":"object","properties":{"requests":{"type":"integer"},"bandwidth_bytes":{"type":"integer"},"status_codes":{"type":"object","properties":{"2xx":{"type":"integer"},"3xx":{"type":"integer"},"4xx":{"type":"integer"},"5xx":{"type":"integer"}}},"error_rate":{"type":"number","description":"5xx / requests."},"p50_ms":{"type":["integer","null"],"description":"Upper bound of the latency bucket."},"p95_ms":{"type":["integer","null"]},"invocations":{"type":"integer"},"fn_gb_s":{"type":"number"},"fn_avg_duration_ms":{"type":["integer","null"]},"cold_starts":{"type":"integer"},"cold_start_rate":{"type":"number"},"fn_errors":{"type":"integer"},"fn_timeouts":{"type":"integer"},"errors":{"type":"integer"},"cache_hit_ratio":{"type":["number","null"]},"build_minutes":{"type":"number"}}},"series":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string"},"requests":{"type":"integer"},"bandwidth_bytes":{"type":"integer"},"status_2xx":{"type":"integer"},"status_3xx":{"type":"integer"},"status_4xx":{"type":"integer"},"status_5xx":{"type":"integer"},"p50_ms":{"type":["integer","null"]},"p95_ms":{"type":["integer","null"]},"invocations":{"type":"integer"},"fn_gb_s":{"type":"number"},"fn_avg_duration_ms":{"type":["integer","null"]},"cold_starts":{"type":"integer"},"fn_errors":{"type":"integer"},"errors":{"type":"integer"}}},"description":"Every bucket of the range, zero-filled, oldest first."},"top_paths":{"$ref":"#/components/schemas/TopPaths"},"missing":{"type":"array","items":{"type":"string"},"description":"Optional metrics the agents do not report yet (shown as \"not reported\")."}}},"Database":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"name":{"type":"string"},"slug":{"type":"string"},"engine":{"type":"string","enum":["postgres","mysql","mariadb","valkey","ferretdb","clickhouse","libsql"]},"version":{"type":"string"},"region":{"type":"string"},"size":{"type":"string","description":"Compute class: free, c1..c5."},"compute":{"type":"object","additionalProperties":true},"storage_limit_mb":{"type":"integer"},"storage_used_mb":{"type":"integer"},"status":{"type":"string","enum":["provisioning","active","sleeping","paused","error","deleting"]},"primary_branch_id":{"type":"string"},"branches_count":{"type":"integer"},"always_on":{"type":"boolean"},"scale_to_zero_after_s":{"type":["integer","null"]},"last_active_at":{"type":["string","null"],"format":"date-time"},"host":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"},"connections_1h":{"type":"array","items":{"type":"number"},"description":"List only: 24 hourly maxima, oldest first."}}},"DatabaseDetail":{"allOf":[{"$ref":"#/components/schemas/Database"},{"type":"object","properties":{"primary_branch":{"oneOf":[{"$ref":"#/components/schemas/Branch"},{"type":"null"}]}}}]},"DatabaseCreate":{"type":"object","properties":{"name":{"type":"string"},"engine":{"type":"string","enum":["postgres","mysql","mariadb","valkey","ferretdb","clickhouse","libsql"]},"version":{"type":"string"},"region":{"type":"string","description":"Default us."},"size":{"type":"string"},"slug":{"type":"string"},"storage_limit_mb":{"type":"integer"}},"required":["name","engine"]},"DatabaseUpdate":{"type":"object","properties":{"name":{"type":"string"},"size":{"type":"string"},"scale_to_zero_after_s":{"type":"integer"},"always_on":{"type":"boolean"}}},"Connection":{"type":"object","properties":{"host":{"type":"string"},"port":{"type":"integer"},"database":{"type":["string","null"]},"user":{"type":"string"},"password":{"type":"string"},"uri":{"type":"string"},"pooled_uri":{"type":["string","null"]},"pooled_host":{"type":["string","null"]},"http_url":{"type":["string","null"]},"ssl":{"type":"boolean"},"branch_id":{"type":"string"},"examples":{"type":"object","additionalProperties":true,"description":"env, node, python, php, go, prisma snippets."}}},"Branch":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"database_id":{"type":"string"},"name":{"type":"string"},"primary":{"type":"boolean"},"parent_branch_id":{"type":["string","null"]},"status":{"type":"string"},"scale_to_zero_after_s":{"type":["integer","null"]},"always_on":{"type":"boolean"},"size_mb":{"type":["integer","null"]},"storage_used_mb":{"type":"integer"},"created_from_backup_id":{"type":["string","null"]},"point_in_time":{"type":["string","null"],"format":"date-time"},"host":{"type":"string"},"last_active_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"BranchCreate":{"type":"object","properties":{"name":{"type":"string"},"from_branch_id":{"type":"string"},"from_backup_id":{"type":"string"},"point_in_time":{"type":"string","description":"ISO 8601 (Postgres, paid plans)."}},"required":["name"]},"PowerResult":{"type":"object","properties":{"branch_id":{"type":"string"},"status":{"type":"string"}}},"Backup":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"branch_id":{"type":"string"},"branch_name":{"type":["string","null"]},"kind":{"type":"string","enum":["daily","manual","pitr_base"]},"status":{"type":"string"},"size_bytes":{"type":["integer","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"}}},"DbImport":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"database_id":{"type":"string"},"branch_id":{"type":"string"},"filename":{"type":["string","null"]},"status":{"type":"string","enum":["pending","running","completed","failed"],"description":"pending = waiting for the node (one import at a time per node)."},"size_bytes":{"type":"integer","description":"Size of the uploaded file."},"bytes_read":{"type":"integer","description":"How much of the file the node has read."},"progress":{"type":["number","null"],"description":"0 to 1."},"sql_bytes":{"type":["integer","null"],"description":"Uncompressed SQL that ran."},"duration_ms":{"type":["integer","null"]},"error":{"type":["string","null"],"description":"Readable reason when failed (line number and engine message)."},"created_at":{"type":["string","null"],"format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}}},"DbImportUpload":{"type":"object","properties":{"upload_id":{"type":"string"},"put_url":{"type":"string","description":"PUT the file here (presigned, 1 hour)."},"method":{"type":"string"},"max_bytes":{"type":"integer","description":"The database's storage limit."},"expires_at":{"type":["string","null"],"format":"date-time"}}},"DbExport":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"database_id":{"type":"string"},"branch_id":{"type":"string"},"filename":{"type":"string","description":"Suggested file name (<database>-<time>.sql.gz)."},"status":{"type":"string","enum":["pending","running","completed","failed","expired"],"description":"pending = waiting for the node (one export at a time per node); expired = the file was deleted."},"sql_bytes":{"type":"integer","description":"Uncompressed SQL written so far."},"size_bytes":{"type":["integer","null"],"description":"Size of the .sql.gz file."},"duration_ms":{"type":["integer","null"]},"error":{"type":["string","null"],"description":"Readable reason when failed."},"download_url":{"type":["string","null"],"description":"Presigned GET of the .sql.gz file while completed; valid 15 minutes, read the export again for a new one."},"url_expires_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time","description":"When the file is deleted (24 hours after it finished)."},"created_at":{"type":["string","null"],"format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}}},"BackupList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Backup"}},"next_cursor":{"type":["string","null"]},"pitr":{"type":"object","properties":{"earliest":{"type":["string","null"],"format":"date-time"},"latest":{"type":["string","null"],"format":"date-time"},"days":{"type":"integer"}}}}},"DbMetrics":{"type":"object","properties":{"range":{"type":"string"},"bucket":{"type":"string"},"cpu":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}},"description":"Cores in use."},"memory_mb":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}}},"storage_mb":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}}},"connections":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}}},"qps":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}}},"wakes":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","description":"Bucket start (ISO 8601)."},"v":{"type":"number"}}}}}},"DatabaseStats":{"type":"object","properties":{"database_id":{"type":"string"},"range":{"type":"string"},"bucket":{"type":"string","enum":["hour","day"]},"totals":{"type":"object","properties":{"connections_peak":{"type":"integer"},"connections_limit":{"type":"integer"},"queries":{"type":"integer"},"cpu_s":{"type":"number"},"memory_peak_mb":{"type":"integer"},"storage_mb":{"type":"integer"},"storage_limit_mb":{"type":"integer"},"wakes":{"type":"integer"},"sleeps":{"type":"integer"},"slow_queries":{"type":"integer"},"compute_s":{"type":"number"}}},"series":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string"},"connections":{"type":"integer"},"queries":{"type":"integer"},"qps":{"type":"number"},"cpu_cores":{"type":"number"},"memory_mb":{"type":"integer"},"storage_mb":{"type":"integer"},"wakes":{"type":"integer"},"sleeps":{"type":"integer"},"slow_queries":{"type":"integer"},"compute_s":{"type":"number"}}}},"branches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"status":{"type":"string"},"size_mb":{"type":["integer","null"]},"always_on":{"type":"boolean"},"last_active_at":{"type":["string","null"],"format":"date-time"}}}},"missing":{"type":"array","items":{"type":"string"}}}},"SlowQueries":{"type":"object","properties":{"available":{"type":"boolean"},"reason":{"type":["string","null"],"description":"unsupported_engine, sleeping, not_ready, node_unreachable, not_reported."},"branch_id":{"type":"string"},"data":{"type":"array","items":{"type":"object","properties":{"query":{"type":"string"},"calls":{"type":"integer"},"mean_ms":{"type":"number"},"total_ms":{"type":"number"},"rows":{"type":["integer","null"]}}}}}},"QueryRequest":{"type":"object","properties":{"sql":{"type":"string","maxLength":102400},"branch_id":{"type":"string"},"read_only":{"type":"boolean","description":"Default true."}},"required":["sql"]},"QueryResult":{"type":"object","properties":{"columns":{"type":"array","items":{"description":"Any JSON value."}},"rows":{"type":"array","items":{"description":"Any JSON value."}}},"description":"As answered by the branch dbagent (10 s timeout, 1000 rows); other fields pass through.","additionalProperties":true},"Tables":{"type":"object","additionalProperties":true,"description":"As answered by the dbagent: {tables: [{schema, name, columns: [...]}]}."},"Rows":{"type":"object","properties":{"columns":{"type":"array","items":{"type":"object","additionalProperties":true}},"rows":{"type":"array","items":{"description":"Any JSON value."}},"total_estimate":{"type":["integer","null"]},"offset":{"type":"integer"},"limit":{"type":"integer"}}},"DbDomain":{"type":"object","properties":{"id":{"type":"string"},"database_id":{"type":"string"},"branch_id":{"type":["string","null"]},"branch_name":{"type":["string","null"]},"hostname":{"type":"string"},"status":{"type":"string"},"status_reason":{"type":["string","null"]},"cname_target":{"type":"string"},"cert_status":{"type":"string"},"cert_expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"DbDomainCreate":{"type":"object","properties":{"hostname":{"type":"string"},"branch_id":{"type":"string"}},"required":["hostname"]},"Usage":{"type":"object","properties":{"period_start":{"type":["string","null"],"format":"date-time"},"period_end":{"type":["string","null"],"format":"date-time"},"alerts_firing":{"type":"integer"},"products":{"type":"object","additionalProperties":true,"description":"{deploy|databases: {plan, metrics: [UsageMetric + {percent, status: ok|warning|exceeded}]}}"}}},"Alert":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"name":{"type":"string"},"product":{"type":"string"},"resource_id":{"type":["string","null"]},"metric":{"type":"string"},"metric_label":{"type":"string"},"unit":{"type":["string","null"]},"comparator":{"type":"string","enum":["gt","gte","lt","lte"]},"threshold":{"type":"number"},"window":{"type":"string","enum":["1h","24h","7d","month"]},"channels":{"type":"array","items":{"type":"string","enum":["email","notification"]}},"enabled":{"type":"boolean"},"cooldown_minutes":{"type":"integer"},"state":{"type":"string","enum":["ok","firing"]},"last_value":{"type":["number","null"]},"last_checked_at":{"type":["string","null"],"format":"date-time"},"last_fired_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"AlertCreate":{"type":"object","properties":{"name":{"type":"string"},"metric":{"type":"string","description":"From GET /alerts/metrics."},"resource_id":{"type":"string","description":"Project or database id (resource metrics)."},"comparator":{"type":"string","enum":["gt","gte","lt","lte"]},"threshold":{"type":"number"},"window":{"type":"string","enum":["1h","24h","7d","month"]},"channels":{"type":"array","items":{"type":"string","enum":["email","notification"]}},"cooldown_minutes":{"type":"integer","minimum":5,"maximum":10080},"enabled":{"type":"boolean"}},"required":["metric","threshold"]},"AlertEvent":{"type":"object","properties":{"id":{"type":"string"},"alert_id":{"type":"string"},"state":{"type":"string","enum":["firing","resolved"]},"value":{"type":["number","null"]},"message":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"}}},"AlertMetrics":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"product":{"type":"string"},"label":{"type":"string"},"unit":{"type":"string"},"scope":{"type":"string","enum":["resource","account"]}}}},"comparators":{"type":"array","items":{"type":"string"}},"windows":{"type":"array","items":{"type":"string"}},"channels":{"type":"array","items":{"type":"string"}}}},"AssistantRequest":{"type":"object","properties":{"message":{"type":"string","description":"The user message (at most 8000 characters)."},"messages":{"type":"array","items":{"type":"object","properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string"}}},"description":"Earlier turns of this chat (last 20 are used)."},"context":{"type":"object","properties":{"path":{"type":"string"},"project_id":{"type":"string"},"deployment_id":{"type":"string"},"database_id":{"type":"string"},"branch_id":{"type":"string"}},"description":"The console page."},"confirm":{"type":"object","properties":{"action_id":{"type":"string"},"approve":{"type":"boolean"}},"required":["action_id","approve"],"description":"Answer to a confirmation_required event (instead of message)."},"tz":{"type":"string","description":"IANA time zone for the daily allowance window."}}},"AssistantEvents":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object","properties":{"event":{"type":"string","enum":["start","reasoning","text","tool","confirmation_required","done","error"]},"data":{"type":"object","additionalProperties":true}}}}},"description":"Non-streaming form (Accept: application/json or ?stream=0) of the SSE events."},"Quota":{"type":"object","properties":{"quota":{"type":["object","null"],"properties":{"plan":{"type":"string"},"limit":{"type":"integer"},"used":{"type":"integer"},"remaining":{"type":"integer"},"reset_at":{"type":["string","null"],"format":"date-time"}}}}},"AutofixStep":{"type":"object","properties":{"id":{"type":"string","enum":["read_log","diagnose","apply","redeploy","live"]},"label":{"type":"string"},"state":{"type":"string","enum":["pending","active","done","error","skipped","action"],"description":"action = waiting for the user (a patch to apply, a preview to put in production)."}}},"AutofixAttempt":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"deployment_id":{"type":"string"},"project_id":{"type":"string"},"trigger":{"type":"string","enum":["manual","auto"]},"status":{"type":"string","enum":["reading","diagnosing","applying","redeploying","preview_ready","live","needs_action","failed"]},"steps":{"type":"array","items":{"$ref":"#/components/schemas/AutofixStep"}},"attempt":{"type":"integer","description":"1 or 2 in the chain."},"max_attempts":{"type":"integer"},"fix_type":{"type":["string","null"],"enum":["config","code","none",null]},"delivery":{"type":["string","null"],"enum":["redeploy","preview_branch","patched_upload","patch_only",null],"description":"redeploy: settings changed and the failed deployment rebuilt; preview_branch: a commit on enzica/fix-<id> deployed as a preview; patched_upload: a patched copy of the uploaded zip deployed as a preview; patch_only: the patch to apply yourself."},"diagnosis":{"type":["string","null"],"description":"One sentence."},"explanation":{"type":["string","null"],"description":"Plain words."},"changes":{"type":"object","properties":{"settings":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"from":{"type":["string","null"]},"to":{"type":["string","null"]}}}},"env":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Allow-listed build switch, never a secret."},"value":{"type":"string"},"action":{"type":"string","enum":["created","updated"]}}}},"patch":{"type":["string","null"],"description":"Unified diff (code fixes)."},"files":{"type":"array","items":{"type":"string"}},"branch":{"type":["string","null"]},"commit_sha":{"type":["string","null"]},"compare_url":{"type":["string","null"]}}},"write_access":{"type":["boolean","null"],"description":"GitHub App installation has contents:write (code fixes on GitHub projects)."},"result_deployment":{"type":["object","null"],"properties":{"id":{"type":"string"},"number":{"type":"integer"},"state":{"type":"string"},"target":{"type":"string"},"git_ref":{"type":["string","null"]},"url":{"type":"string"}}},"can_apply_to_production":{"type":"boolean"},"promoted_at":{"type":["string","null"],"format":"date-time"},"help":{"type":["object","null"],"properties":{"apply_command":{"type":"string"},"grant_url":{"type":["string","null"]},"reason":{"type":"string","enum":["no_write_access","source_not_writable"]}}},"error":{"type":["object","null"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}},"model":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}}},"AutofixOverview":{"type":"object","properties":{"deployment_id":{"type":"string"},"state":{"type":"string"},"eligible":{"type":"boolean","description":"A fix can start now."},"reason":{"type":["string","null"],"enum":["not_failed","platform_error","running","chain_limit","task_limit","forbidden","not_available",null]},"diagnosis_hint":{"type":["string","null"],"description":"One line from known build-log patterns (no model, no task)."},"quota":{"type":["object","null"],"properties":{"plan":{"type":"string"},"limit":{"type":"integer"},"used":{"type":"integer"},"remaining":{"type":"integer"},"reset_at":{"type":["string","null"],"format":"date-time"}}},"auto_enabled":{"type":"boolean"},"can_write":{"type":"boolean"},"chain":{"type":"object","properties":{"attempts":{"type":"integer"},"max":{"type":"integer"}}},"latest":{"oneOf":[{"$ref":"#/components/schemas/AutofixAttempt"},{"type":"null"}]},"attempts":{"type":"array","items":{"$ref":"#/components/schemas/AutofixAttempt"}}}},"AutofixSettings":{"type":"object","properties":{"project_id":{"type":"string"},"auto_enabled":{"type":"boolean"},"max_attempts":{"type":"integer"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"Node":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"region":{"type":"string"},"roles":{"type":"array","items":{"type":"string"}},"proxmox_ct":{"type":["integer","null"]},"address":{"type":["string","null"]},"private_address":{"type":["string","null"]},"status":{"type":"string"},"capacity":{"type":"object","additionalProperties":true},"load":{"type":"object","additionalProperties":true},"last_seen_at":{"type":["string","null"],"format":"date-time"},"version":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"}}},"NodeRegister":{"type":"object","properties":{"name":{"type":"string"},"region":{"type":"string"},"roles":{"type":"string","description":"Comma separated: edge, runner, builder, dbagent, dbgate, store."},"address":{"type":"string"},"private_address":{"type":"string"},"proxmox_ct":{"type":"integer"}},"required":["name","region","roles"]},"NodeToken":{"type":"object","properties":{"node":{"$ref":"#/components/schemas/Node"},"token":{"type":"string","description":"ecn_ token, shown once."}}},"Health":{"type":"object","properties":{"generated_at":{"type":["string","null"],"format":"date-time"},"summary":{"type":"object","properties":{"total":{"type":"integer"},"healthy":{"type":"integer"},"stale":{"type":"integer"},"down":{"type":"integer"},"draining":{"type":"integer"}}},"nodes":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Node"},{"type":"object","properties":{"health":{"type":"string","enum":["healthy","stale","down","draining"]},"seconds_since_seen":{"type":["integer","null"]},"instances":{"type":"integer"}}}]}},"builds":{"type":"object","properties":{"queued":{"type":"integer"},"building":{"type":"integer"},"oldest_queued_at":{"type":["string","null"],"format":"date-time"},"oldest_queued_seconds":{"type":["integer","null"]}}},"branches":{"type":"object","additionalProperties":true,"description":"Branch count per status."},"state":{"type":"object","additionalProperties":true,"description":"Snapshot version per product."}}},"JsonRpcRequest":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"type":["string","integer"]},"method":{"type":"string","enum":["initialize","ping","tools/list","tools/call","notifications/initialized"]},"params":{"type":"object","additionalProperties":true}},"required":["jsonrpc","method"]},"JsonRpcResponse":{"type":"object","properties":{"jsonrpc":{"type":"string","enum":["2.0"]},"id":{"type":["string","integer","null"]},"result":{"type":"object","additionalProperties":true},"error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}}},"required":["jsonrpc","id"]},"Team":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"name":{"type":"string"},"slug":{"type":"string"},"owner_user_id":{"type":"string","description":"The billing account: team resources count against its plan."},"role":{"type":"string","enum":["owner","admin","developer","viewer"],"description":"The caller's role."},"members":{"type":"integer"},"projects":{"type":"integer"},"databases":{"type":"integer"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"TeamCreate":{"type":"object","properties":{"name":{"type":"string","description":"2 to 64 characters."},"slug":{"type":"string","description":"Optional; 2 to 40 lowercase letters, digits and dashes (derived from the name otherwise)."}},"required":["name"]},"TeamUpdate":{"type":"object","properties":{"name":{"type":"string"},"slug":{"type":"string"}}},"TeamMember":{"type":"object","properties":{"user_id":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["owner","admin","developer","viewer"]},"joined_at":{"type":["string","null"],"format":"date-time"}}},"TeamMemberUpdate":{"type":"object","properties":{"role":{"type":"string","enum":["owner","admin","developer","viewer"],"description":"\"owner\" hands the ownership over (owner only); the old owner becomes an admin."}},"required":["role"]},"TeamInvite":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"team_id":{"type":"string"},"email":{"type":"string"},"role":{"type":"string","enum":["admin","developer","viewer"]},"invited_by":{"type":"string"},"expires_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"TeamInviteCreate":{"type":"object","properties":{"email":{"type":"string"},"role":{"type":"string","enum":["admin","developer","viewer"]},"product":{"type":"string","enum":["deploy","databases"],"description":"Which console the link opens (default deploy)."}},"required":["email","role"]},"TeamInviteCreated":{"allOf":[{"$ref":"#/components/schemas/TeamInvite"},{"type":"object","properties":{"invite_url":{"type":"string","description":"<console>/invites/<token>; shown once (also in the email)."},"email_status":{"type":"string","enum":["sent","skipped","failed","duplicate","unavailable"]}}}]},"Transfer":{"type":"object","properties":{"team_id":{"type":["string","null"],"description":"Target team id, or null for your personal account."}},"required":["team_id"]},"DomainSearchResult":{"type":"object","properties":{"domain":{"type":"string"},"tld":{"type":"string"},"available":{"type":"boolean"},"price":{"type":["number","null"],"description":"First year, USD (retail, marked up)."},"renewal_price":{"type":["number","null"],"description":"Each following year, USD (retail)."},"currency":{"type":"string","description":"USD"},"years_min":{"type":"integer"},"premium":{"type":"boolean"},"category":{"type":"string","enum":["generic","tech","business","creative","lifestyle","geo"]},"owned":{"type":"boolean","description":"The signed-in caller (or a team of theirs) already holds it."},"reason":{"type":"string","enum":["taken","premium","over_cap","reserved","unsupported_tld","invalid","unknown"],"description":"Why it cannot be bought (absent when available)."}}},"DomainSearch":{"type":"object","properties":{"query":{"type":"string"},"sld":{"type":"string"},"tld":{"type":["string","null"]},"exact":{"$ref":"#/components/schemas/DomainSearchResult"},"results":{"type":"array","items":{"$ref":"#/components/schemas/DomainSearchResult"},"description":"The name on the other TLDs (filtered, sorted, one page); unavailable ones keep their reason."},"total":{"type":"integer","description":"Results matching the filters across all pages."},"offset":{"type":"integer"},"limit":{"type":"integer"},"next_offset":{"type":["integer","null"],"description":"null on the last page."},"currency":{"type":"string"},"cap":{"type":"number","description":"First-year cost cap (USD, before markup)."},"cap_applies_to":{"type":"string","enum":["purchase","both"]}}},"DomainTld":{"type":"object","properties":{"tld":{"type":"string"},"price":{"type":"number"},"renewal_price":{"type":["number","null"]},"transfer_price":{"type":["number","null"]},"currency":{"type":"string"},"category":{"type":"string"},"popular":{"type":"boolean"},"rank":{"type":"integer","description":"1 = most popular (the \"Popular\" order)."}}},"DomainTlds":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DomainTld"}},"categories":{"type":"array","items":{"type":"string"}},"currency":{"type":"string"},"cap":{"type":"number"},"cap_applies_to":{"type":"string"},"markup":{"type":"number"},"available":{"type":"boolean","description":"false: Spaceship is not configured yet (\"Domains are coming soon\")."}}},"DomainContact":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"organization":{"type":["string","null"]},"email":{"type":"string"},"phone":{"type":"string","description":"+<country code>.<number>, e.g. +1.4155550123."},"address1":{"type":"string"},"address2":{"type":["string","null"]},"city":{"type":"string"},"state":{"type":"string"},"zip":{"type":"string"},"country":{"type":"string","description":"ISO 3166-1 alpha-2, e.g. US."}},"required":["first_name","last_name","email","phone","address1","city","state","zip","country"]},"DomainCheckout":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"domain":{"type":"string"},"years":{"type":"integer","description":"1-10 (transfers always 1).","minimum":1,"maximum":10},"privacy":{"type":"boolean","description":"WHOIS privacy (default true)."},"type":{"type":"string","enum":["register","transfer"]},"auth_code":{"type":"string","description":"EPP code (transfers)."},"connect":{"$ref":"#/components/schemas/DomainConnectIntent"}},"required":["domain"]},"description":"1 to 10 domains."},"contact":{"$ref":"#/components/schemas/DomainContact"},"payment_method":{"type":"string","enum":["card","balance"]},"return_to":{"type":"string","description":"Console URL or origin; the browser comes back to <origin>/domains?checkout=success&order=<id>&session_id=… (card)."}},"required":["items"]},"DomainConnectIntent":{"type":"object","properties":{"target":{"type":"string","enum":["deploy","database","game"]},"id":{"type":"string","description":"Project id, database id or game server uuid (you must be able to manage it)."},"hostname":{"type":"string","description":"\"@\", \"www\", \"play\"… (default \"@\", databases \"db\")."},"allocation_id":{"type":"integer","description":"Game servers: the allocation (default the primary one)."},"type":{"type":"string","enum":["minecraft","game","https"],"description":"Game servers (default minecraft: A + SRV)."},"name":{"type":"string","description":"Display name of the connection."},"return_to":{"type":"string","description":"An Enzonic console or panel URL the order page links back to."}},"required":["target","id"],"description":"Register only: connects the domain once it is registered (DNS written by Enzonic)."},"DomainOrderItem":{"type":"object","properties":{"domain":{"type":"string"},"type":{"type":"string","enum":["register","transfer","renew"]},"years":{"type":"integer"},"privacy":{"type":"boolean"},"price":{"type":"number"},"renewal_price":{"type":["number","null"]},"status":{"type":"string","enum":["pending_payment","paid","registering","active","failed","refunded"],"description":"As the order statuses (a started transfer reads active)."},"state":{"type":"string","enum":["pending","registering","active","transferring","failed"],"description":"Raw item state."},"error":{"type":["string","null"]},"error_code":{"type":["string","null"],"description":"price_changed | transfer_failed | …"},"refunded":{"type":"boolean"},"connect":{"oneOf":[{"type":"null"},{"type":"object","properties":{"target":{"type":"string"},"id":{"type":"string"},"name":{"type":["string","null"]},"hostname":{"type":"string","description":"Full name, e.g. play.example.com."},"type":{"type":["string","null"]},"status":{"type":"string","enum":["pending","connected","failed"]},"error":{"type":["string","null"]},"address":{"type":["string","null"],"description":"What players / visitors use."},"return_to":{"type":["string","null"]}}}]}}},"DomainOrder":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"status":{"type":"string","enum":["pending_payment","paid","registering","active","failed","refunded"]},"state":{"type":"string","description":"Raw status (adds canceled: a card checkout never paid, shown as failed)."},"kind":{"type":"string","enum":["purchase","renewal"]},"source":{"type":"string","enum":["checkout","manual_renew","auto_renew"]},"payment_method":{"type":"string","enum":["card","balance"]},"total":{"type":"number"},"amount":{"type":"number","description":"= total."},"refunded_amount":{"type":"number","description":"Refunded to the panel balance."},"currency":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/components/schemas/DomainOrderItem"}},"team_id":{"type":["string","null"]},"error":{"type":["string","null"],"description":"Why the order failed or was refunded (a sentence)."},"error_code":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"},"paid_at":{"type":["string","null"],"format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"}}},"DomainCheckoutResult":{"type":"object","properties":{"url":{"type":"string","description":"Stripe Checkout (card); return_to + ?order=<id>&checkout=success|cancel afterwards."},"session_id":{"type":"string"},"order_id":{"type":"string"},"order":{"$ref":"#/components/schemas/DomainOrder"}}},"DomainRenewMany":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"},"description":"1-50 of your domains (one billing account)."},"pay":{"type":"string","enum":["balance","card"]},"payment_method":{"type":"string","enum":["balance","card"],"description":"Alias of pay."},"years":{"type":"integer","description":"1-10, default 1."},"return_to":{"type":"string"}},"required":["domains"]},"GameServer":{"type":"object","properties":{"id":{"type":"string","description":"Server uuid (Quick connect server_id)."},"uuid":{"type":"string"},"identifier":{"type":"string","description":"Short uuid."},"name":{"type":"string"},"game":{"type":["string","null"],"description":"Egg name."},"node":{"type":["string","null"]},"address":{"type":["string","null"],"description":"host:port of the primary allocation."},"allocation":{"type":"object","properties":{"ip":{"type":"string"},"alias":{"type":["string","null"]},"port":{"type":"integer"}}},"owner":{"type":"boolean","description":"false: shared with you as a subuser."},"status":{"type":["string","null"]}}},"RegisteredDomain":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"domain":{"type":"string"},"tld":{"type":"string"},"status":{"type":"string","enum":["pending","active","transfer_pending","expired","moved"],"description":"External domains: the zone status pending | active | moved."},"expires_at":{"type":["string","null"],"format":"date-time"},"auto_renew":{"type":"boolean"},"privacy":{"type":"boolean"},"locked":{"type":"boolean"},"nameservers":{"type":"array","items":{"type":"string","description":"External domains: what public DNS answers now."}},"dns_managed":{"type":"boolean","description":"true while the records edited here are live (Spaceship nameservers; external domains: the zone is active)."},"renewal_price":{"type":["number","null"]},"currency":{"type":"string"},"transfer_status":{"type":["string","null"]},"renew_error":{"type":["string","null"]},"team_id":{"type":["string","null"]},"registered_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"},"source":{"type":"string","enum":["registered","external"],"description":"registered = bought or transferred through Enzonic; external = registered elsewhere, nameservers pointed at Enzonic."},"zone_status":{"type":"string","description":"External domains only."},"verified":{"type":"boolean","description":"External domains only: active, or the TXT ownership record was seen."}}},"RegisteredDomainDetail":{"allOf":[{"$ref":"#/components/schemas/RegisteredDomain"},{"type":"object","properties":{"default_nameservers":{"type":"array","items":{"type":"string"},"description":"Enzonic DNS."},"transfer_lock_until":{"type":["string","null"],"format":"date-time","description":"60 days after registration or a transfer in (409 transfer_locked on unlock before)."},"connections":{"type":"array","items":{"type":"object","properties":{"target":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"hostname":{"type":"string"}}}}}}]},"ExternalDomainAdd":{"type":"object","properties":{"domain":{"type":"string","description":"The domain you own, like example.com (not a subdomain)."},"import_records":{"type":"boolean","description":"Copy the records public DNS answers today for the root, www, mail and _dmarc into the new zone (default true)."}},"required":["domain"]},"ExternalZone":{"type":"object","properties":{"status":{"type":"string","enum":["pending","active","moved"]},"nameservers":{"type":"array","items":{"type":"string"},"description":"The pair to set at the registrar."},"current_nameservers":{"type":"array","items":{"type":"string"},"description":"What public DNS answered at the last check."},"original_nameservers":{"type":"array","items":{"type":"string"}},"verified":{"type":"boolean"},"verified_at":{"type":["string","null"],"format":"date-time"},"verification":{"type":"object","properties":{"type":{"type":"string","description":"TXT"},"name":{"type":"string","description":"_enzonic.<domain>"},"host":{"type":"string","description":"_enzonic"},"value":{"type":"string","description":"enzonic-verify=<token>"}}},"activated_at":{"type":["string","null"],"format":"date-time"},"moved_at":{"type":["string","null"],"format":"date-time"},"last_checked_at":{"type":["string","null"],"format":"date-time"},"check_error":{"type":["string","null"]},"pending_release_at":{"type":["string","null"],"format":"date-time","description":"Pending zones are released after 21 days."},"records_limit":{"type":"integer","description":"200 records per zone."}}},"ExternalDomain":{"allOf":[{"$ref":"#/components/schemas/RegisteredDomain"},{"type":"object","properties":{"default_nameservers":{"type":"array","items":{"type":"string"},"description":"The assigned pair."},"zone":{"$ref":"#/components/schemas/ExternalZone"},"connections":{"type":"array","items":{"type":"object","properties":{"target":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"hostname":{"type":"string"}}}},"imported":{"type":"integer","description":"POST only: records copied in."},"claimed":{"type":"boolean","description":"POST only: an unproved pending zone of another account was taken over with the TXT record."}}}]},"ExternalDomainRemove":{"type":"object","properties":{"confirm":{"type":"string","description":"The domain name, typed again."}},"required":["confirm"]},"RegisteredDomainUpdate":{"type":"object","properties":{"auto_renew":{"type":"boolean"},"privacy":{"type":"boolean"},"locked":{"type":"boolean","description":"Transfer lock."}}},"DomainRenew":{"type":"object","properties":{"years":{"type":"integer","minimum":1,"maximum":10},"payment_method":{"type":"string","enum":["card","balance"]},"return_to":{"type":"string"}}},"DomainNameservers":{"type":"object","properties":{"nameservers":{"type":"array","items":{"type":"string"},"description":"2-12 hostnames; [] = Enzonic DNS (Spaceship)."},"reset":{"type":"boolean","description":"true = Enzonic DNS."}}},"DomainAuthCode":{"type":"object","properties":{"domain":{"type":"string"},"auth_code":{"type":"string"},"locked":{"type":"boolean"},"note":{"type":["string","null"]}}},"DnsRecord":{"type":"object","properties":{"id":{"type":"string","description":"Stable hash of the record (changes when the record changes)."},"type":{"type":"string","enum":["A","AAAA","CNAME","ALIAS","MX","TXT","SRV","CAA","NS"]},"name":{"type":"string","description":"@ or a relative name; SRV: _service._proto[.name]."},"content":{"type":"string","description":"A/AAAA address, CNAME/ALIAS/NS/MX hostname, TXT text, SRV \"weight port target\", CAA 'flags tag \"value\"'."},"ttl":{"type":"integer","description":"60-3600 s."},"priority":{"type":["integer","null"],"description":"MX and SRV."},"managed_by":{"type":["string","null"],"description":"\"Enzonic Deploy · storefront\": written by Quick connect."},"host":{"type":"string","description":"= name."},"value":{"type":"string","description":"= content."},"fqdn":{"type":"string","description":"Full hostname."}}},"DnsRecordInput":{"type":"object","properties":{"type":{"type":"string"},"name":{"type":"string","description":"Or host."},"content":{"type":"string","description":"Or value."},"ttl":{"type":"integer"},"priority":{"type":"integer"},"weight":{"type":"integer","description":"SRV."},"port":{"type":"integer","description":"SRV."},"target":{"type":"string","description":"SRV."},"flags":{"type":"integer","description":"CAA."},"tag":{"type":"string","description":"CAA."}}},"DnsRecords":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}},"next_cursor":{"type":["string","null"]},"dns_managed":{"type":"boolean"},"nameservers":{"type":"array","items":{"type":"string"}}}},"DomainConnect":{"type":"object","properties":{"target":{"type":"string","enum":["deploy","game","database"]},"project_id":{"type":"string","description":"target deploy."},"server_id":{"type":"string","description":"target game (GET /servers id)."},"database_id":{"type":"string","description":"target database (paid plans)."},"branch_id":{"type":"string","description":"target database (optional)."},"hostname":{"type":"string","description":"The label: @ (the domain), www, play… (subdomain / host are aliases; database default db)."},"name":{"type":"string","description":"Display name of the connection."},"type":{"type":"string","enum":["minecraft","other"],"description":"target game: SRV for Minecraft."}},"required":["target"]},"DomainConnected":{"type":"object","properties":{"connection":{"type":"object","properties":{"target":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"hostname":{"type":"string"}}},"records":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}},"removed":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"}},"target":{"type":"string"},"hostname":{"type":"string"},"project_id":{"type":"string"},"deploy_domain":{"type":"object","additionalProperties":true},"server_id":{"type":"string"},"address":{"type":"string"},"database_id":{"type":"string"},"database_domain":{"type":"object","additionalProperties":true}}},"UrlForwardingHost":{"type":"object","properties":{"hostname":{"type":"string"},"cert_status":{"type":"string","enum":["pending","active","error"],"description":"HTTPS certificate (Cloudflare for SaaS custom hostname)."},"cert_error":{"type":["string","null"],"description":"provider_unavailable, provider_error, dns_pending, certificate_pending, certificate_<status>."}}},"UrlForwardingRule":{"type":"object","properties":{"host":{"type":"string","description":"@ (the domain) or a label (www, go…)."},"enabled":{"type":"boolean"},"target":{"type":"string","description":"Absolute http(s) URL."},"status":{"type":"integer","enum":[301,302]},"preserve_path":{"type":"boolean","description":"/path on the domain goes to target/path (query kept)."},"include_www":{"type":"boolean","description":"@ only: www.<domain> forwards the same way."},"cert_status":{"type":["string","null"]},"hostnames":{"type":"array","items":{"$ref":"#/components/schemas/UrlForwardingHost"}},"updated_at":{"type":["string","null"],"format":"date-time"}}},"UrlForwarding":{"type":"object","properties":{"host":{"type":"string","description":"@"},"enabled":{"type":"boolean"},"target":{"type":"string"},"status":{"type":"integer","enum":[301,302]},"preserve_path":{"type":"boolean"},"include_www":{"type":"boolean"},"cert_status":{"type":["string","null"]},"hostnames":{"type":"array","items":{"$ref":"#/components/schemas/UrlForwardingHost"}},"updated_at":{"type":["string","null"],"format":"date-time"},"supported":{"type":"boolean","description":"true: served by the Enzonic edge."},"dns_managed":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/components/schemas/UrlForwardingRule"},"description":"Every rule, the root first."},"max_rules":{"type":["integer","null"]},"removed":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecord"},"description":"PUT: routing records the rule replaced."},"removed_hostnames":{"type":"array","items":{"type":"string"},"description":"PUT enabled false."}}},"UrlForwardingInput":{"type":"object","properties":{"host":{"type":"string","description":"@ (default), www, go… (or hostname / subdomain)."},"enabled":{"type":"boolean","description":"false turns the rule off."},"target":{"type":"string","description":"http(s) URL; https:// is added to a bare host. Private / reserved addresses and loops are refused."},"status":{"type":"integer","enum":[301,302]},"preserve_path":{"type":"boolean"},"include_www":{"type":"boolean"}},"required":["enabled"]},"EmailForward":{"type":"object","properties":{"id":{"type":"string"},"alias":{"type":"string","description":"Local part, or * for every other address."},"destination":{"type":"string"},"verified":{"type":"boolean","description":"The destination confirmed; mail is forwarded only then."},"address":{"type":"string"},"confirmation_sent_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"}}},"EmailForwarding":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EmailForward"}},"next_cursor":{"type":["string","null"]},"supported":{"type":"boolean","description":"false until settings::cloud:domains_email_forwarding is on (writes answer 501 not_supported)."},"message":{"type":"string"},"limit":{"type":["integer","null"],"description":"Aliases per domain on the plan."},"used":{"type":"integer"},"catch_all":{"type":"boolean"},"mx":{"type":"array","items":{"type":"string"}},"suspended":{"type":"boolean"}}},"EmailForwardInput":{"type":"object","properties":{"alias":{"type":"string","description":"hello, or * (catch-all)."},"destination":{"type":"string","description":"An inbox on another domain."}},"required":["alias","destination"]},"CheckoutRequest":{"type":"object","properties":{"plan":{"type":"string","enum":["starter","pro","growth","business"]},"interval":{"type":"string","enum":["month","year"],"description":"month (default) or year: a yearly plan costs 10 months; a one-month discount takes its percent of one month."},"product":{"type":"string","enum":["cloud","deploy","databases"],"description":"Picks the console the browser returns to (default deploy)."},"return_to":{"type":"string","description":"A console URL or origin (deploy.enzonic.com, databases.enzonic.com); the browser comes back to <origin>/billing?checkout=success|cancel."},"payment_method":{"type":"string","enum":["stripe","balance"],"description":"stripe (default): a card subscription through Stripe Checkout; balance: pay now from the panel balance."}},"required":["plan"]},"CheckoutResult":{"type":"object","properties":{"url":{"type":["string","null"],"description":"Stripe Checkout URL; null when nothing is left to pay (balance, or a card subscriber whose plan changed at once)."},"session_id":{"type":"string"},"payment_method":{"type":"string","enum":["stripe","balance"]},"plan":{"type":"string"},"interval":{"type":"string","enum":["month","year"]},"amount_due":{"type":"number","description":"First payment after the discount (USD)."},"discount":{"type":"object","properties":{"kind":{"type":"string","enum":["first_month","game_plan","winback"]},"percent":{"type":"integer"},"base":{"type":"number"}}},"subscription":{"$ref":"#/components/schemas/Subscription"},"charged":{"type":"number","description":"Charged from the balance (USD)."}}},"ReturnTo":{"type":"object","properties":{"return_to":{"type":"string","description":"Console URL or origin (allow-listed)."},"product":{"type":"string","enum":["deploy","databases"]}}},"Url":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},"Balance":{"type":"object","properties":{"balance":{"type":"number","description":"USD; the same balance as the game panel."},"currency":{"type":"string"},"transactions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"status":{"type":"string"},"payment_method":{"type":"string"},"description":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"}}},"description":"The last 20 ledger rows (panel and Cloud)."},"topup":{"type":"object","properties":{"min":{"type":"number"},"max":{"type":"number"},"available":{"type":"boolean"}}}}},"TopupRequest":{"type":"object","properties":{"amount":{"type":"number","description":"USD, 1 to 1000."},"return_to":{"type":"string"},"product":{"type":"string","enum":["deploy","databases"]}},"required":["amount"]},"TopupResult":{"type":"object","properties":{"url":{"type":"string","description":"Stripe Checkout URL (the panel's top-up; the balance is credited by the panel webhook)."},"session_id":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"}}},"Ticket":{"type":"object","properties":{"id":{"type":"string"},"subject":{"type":"string"},"product":{"type":["string","null"],"enum":["deploy","databases",null]},"resource_id":{"type":["string","null"]},"status":{"type":"string","enum":["open","in_progress","customer_reply","answered","closed"]},"priority":{"type":"string","enum":["low","medium","high","urgent"]},"awaiting":{"type":["string","null"],"enum":["staff","you",null],"description":"Who answers next (null when closed)."},"last_message_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"},"panel_url":{"type":"string","description":"The same ticket in the game panel."}}},"TicketThread":{"allOf":[{"$ref":"#/components/schemas/Ticket"},{"type":"object","properties":{"messages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"from":{"type":"string","enum":["you","staff"]},"author":{"type":"string"},"message":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"}}}}}}]},"TicketCreate":{"type":"object","properties":{"subject":{"type":"string","description":"4 to 200 characters."},"message":{"type":"string","description":"5 to 10000 characters."},"product":{"type":"string","enum":["deploy","databases"]},"resource_id":{"type":"string","description":"Optional project, database or deployment id (one you can read)."},"priority":{"type":"string","enum":["low","medium","high","urgent"]}},"required":["subject","message","product"]},"TicketReply":{"type":"object","properties":{"message":{"type":"string","description":"1 to 10000 characters."}},"required":["message"]},"TransferResult":{"type":"object","properties":{"id":{"type":"string"},"team_id":{"type":["string","null"]},"owner_user_id":{"type":"string"},"moved":{"type":"boolean"}}},"Invoice":{"type":"object","properties":{"id":{"type":"string"},"number":{"type":"string","description":"INV-YYYY-NNNN."},"amount":{"type":"number","description":"USD."},"tax":{"type":"number"},"currency":{"type":"string"},"status":{"type":"string","description":"paid, open, …"},"payment_method":{"type":"string","description":"stripe, balance, …"},"description":{"type":"string"},"items":{"type":"array","items":{"type":"object","additionalProperties":true}},"paid_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"panel_url":{"type":"string","description":"The billing page of the game panel (the same invoices, as PDF)."}}},"CheckoutLinkRequest":{"type":"object","properties":{"plan":{"type":"string","enum":["starter","pro","growth","business"]},"interval":{"type":"string","enum":["month","year"]},"product":{"type":"string","enum":["cloud","deploy","databases"],"description":"Which console opens (default deploy)."}},"required":["plan"]},"CheckoutLink":{"type":"object","properties":{"url":{"type":"string","description":"<console>/billing?plan=<plan>: the signed-in user confirms and pays there."},"plan":{"type":"string"},"name":{"type":"string"},"price_monthly":{"type":"number"},"amount_due":{"type":"number","description":"What the first month costs now, after the discount."},"interval":{"type":"string","enum":["month","year"]},"price_annual":{"type":"number"},"discount":{"type":["object","null"],"properties":{"kind":{"type":"string","enum":["first_month","game_plan","winback"]},"percent":{"type":"integer"}}},"currency":{"type":"string"},"current_plan":{"type":"string"},"already_active":{"type":"boolean","description":"The account is already on this plan or a higher one."},"requires_session":{"type":"boolean","description":"Always true: paying needs the console."},"message":{"type":"string"}}},"Grant":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"status":{"type":"string","enum":["pending","needs_info","approved","rejected","expired","withdrawn","revoked"]},"category":{"type":"string","enum":["open_source","student","nonprofit","startup","educator","hackathon"]},"project_name":{"type":"string"},"organization":{"type":["string","null"]},"use_case":{"type":"string"},"links":{"type":"array","items":{"type":"string"}},"requested_product":{"type":"string","enum":["cloud","deploy","databases"]},"requested_plan":{"type":"string","enum":["pro","business"]},"requested_months":{"type":["integer","null"]},"requested_credit":{"type":["number","null"],"description":"USD."},"expected_usage":{"type":["string","null"]},"team_id":{"type":["string","null"],"description":"Set when the application is for a team (the grant goes to the team's billing account)."},"account":{"type":"string","enum":["personal","team"]},"info_request":{"type":["string","null"],"description":"The reviewer's question while status is needs_info."},"applicant_reply":{"type":["string","null"]},"decision_reason":{"type":["string","null"],"description":"Approval note or rejection reason, for the applicant."},"granted":{"type":["object","null"],"description":"Set once approved.","properties":{"plan":{"type":["string","null"],"description":"pro | business, or null for a credit-only grant."},"months":{"type":["integer","null"]},"credit":{"type":["number","null"],"description":"USD added to the balance."},"starts_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time","description":"The plan ends here (reminder email 7 days before)."},"credited_at":{"type":["string","null"],"format":"date-time"},"active":{"type":"boolean"}}},"reviewed_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"GrantCreate":{"type":"object","properties":{"category":{"type":"string","enum":["open_source","student","nonprofit","startup","educator","hackathon"]},"project_name":{"type":"string","description":"Project or organization, 2 to 120 characters."},"organization":{"type":"string","description":"School, company or community (optional)."},"use_case":{"type":"string","description":"What you build and why, 30 to 4000 characters."},"links":{"type":"array","items":{"type":"string"},"description":"Up to 5 http(s) URLs: repository, website, student or non-profit proof."},"requested_product":{"type":"string","enum":["cloud","deploy","databases"],"description":"What you build on (one Cloud plan covers both)."},"requested_plan":{"type":"string","enum":["pro","business"]},"requested_months":{"type":"integer","minimum":1,"maximum":12},"requested_credit":{"type":"number","description":"USD of Cloud credit, 0 to 500 (optional)."},"expected_usage":{"type":"string","description":"Traffic, databases, build minutes … (optional)."},"team_id":{"type":"string","description":"Apply for a team (team admins; same as the X-Enzonic-Team header)."}},"required":["category","project_name","use_case"]},"GrantList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Grant"}},"next_cursor":{"type":"null"},"categories":{"type":"array","items":{"type":"string"}},"plans":{"type":"array","items":{"type":"string"}},"products":{"type":"array","items":{"type":"string"}}}},"GrantReply":{"type":"object","properties":{"message":{"type":"string","description":"5 to 4000 characters."}},"required":["message"]},"GrantApprove":{"type":"object","properties":{"plan":{"type":"string","enum":["pro","business","none"]},"months":{"type":"integer","description":"With a plan: 1 to 24.","minimum":1,"maximum":24},"credit":{"type":"number","description":"USD of Cloud credit, 0 to 1000."},"message":{"type":"string","description":"Note for the applicant (in the email)."},"note":{"type":"string","description":"Staff-only note."}}},"GrantReject":{"type":"object","properties":{"reason":{"type":"string","description":"Shown to the applicant, 5 to 2000 characters."},"note":{"type":"string","description":"Staff-only note."}},"required":["reason"]},"GrantInfoRequest":{"type":"object","properties":{"question":{"type":"string","description":"5 to 2000 characters."}},"required":["question"]},"WebhookEventType":{"type":"string","enum":["deployment.created","deployment.ready","deployment.failed","deployment.canceled","deployment.promoted","database.created","database.ready","database.sleeping","database.woke","database.deleted","database.backup.completed","domain.registered","domain.renewed","domain.expiring","domain.dns.changed","ci.run.created","ci.run.completed","ci.run.failed","ci.run.canceled","webhook.test"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"url":{"type":"string","description":"https URL on a public host."},"description":{"type":["string","null"]},"events":{"type":"array","items":{"type":"string"},"description":"Event types or wildcards: \"*\", \"deployment.*\", \"database.*\", \"domain.*\"."},"enabled":{"type":"boolean"},"disabled_reason":{"type":["string","null"],"description":"Set when Enzonic disabled the endpoint after 3 days of failed deliveries."},"team_id":{"type":["string","null"]},"failing_since":{"type":["string","null"],"format":"date-time","description":"First failed delivery of the current failure streak."},"last_delivery_at":{"type":["string","null"],"format":"date-time"},"last_status":{"type":["string","null"],"description":"HTTP status or error of the last attempt."},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"WebhookCreate":{"type":"object","properties":{"url":{"type":"string","description":"https URL (at most 2048 characters) on a public host."},"events":{"type":"array","items":{"type":"string"},"description":"1-50 event types or wildcards (GET /webhooks/events)."},"description":{"type":"string","maxLength":200},"enabled":{"type":"boolean","description":"Default true."}},"required":["url","events"]},"WebhookUpdate":{"type":"object","properties":{"url":{"type":"string"},"events":{"type":"array","items":{"type":"string"}},"description":{"type":["string","null"]},"enabled":{"type":"boolean","description":"true re-enables a disabled endpoint."}}},"WebhookWithSecret":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string","description":"whsec_… signing secret. Shown once (create and rotate-secret)."}}}]},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","description":"evt_… (the same id on every retry and redelivery)."},"type":{"$ref":"#/components/schemas/WebhookEventType"},"created_at":{"type":["string","null"],"format":"date-time"},"team_id":{"type":["string","null"]},"data":{"type":"object","additionalProperties":true,"description":"The resource: {deployment, project} | {database, branch?, backup?} | {domain, change?, record?, previous?, days?}."}},"required":["id","type","created_at","data"],"description":"The JSON body Enzonic POSTs to your endpoint, signed with Enzonic-Signature: t=<unix>,v1=<hex HMAC-SHA256 of \"<t>.<body>\">."},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"webhook_id":{"type":"string"},"event_id":{"type":"string"},"event_type":{"type":"string"},"status":{"type":"string","enum":["pending","succeeded","failed"]},"attempts":{"type":"integer","description":"At most 7."},"next_attempt_at":{"type":["string","null"],"format":"date-time","description":"Next retry (pending only)."},"response_status":{"type":["integer","null"]},"response_body":{"type":["string","null"],"description":"First 2 KB of your answer."},"duration_ms":{"type":["integer","null"]},"error":{"type":["string","null"],"description":"timeout, connection_failed, dns_failed, blocked_address, http_<status>, endpoint_disabled."},"created_at":{"type":["string","null"],"format":"date-time"},"delivered_at":{"type":["string","null"],"format":"date-time"},"payload":{"$ref":"#/components/schemas/WebhookEvent"}}},"WebhookEvents":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"product":{"type":"string","enum":["deploy","databases","domains"]},"description":{"type":"string"}}}},"wildcards":{"type":"array","items":{"type":"string"}},"test_event":{"type":"string"},"retry_schedule_s":{"type":"array","items":{"type":"integer"},"description":"Delays between attempts."},"max_attempts":{"type":"integer"},"signature_header":{"type":"string"}}},"AuditEntry":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"action":{"type":"string","description":"e.g. deployment.created, env.bulk, dns.record_created, webhook.created, token.created."},"product":{"type":"string","enum":["deploy","databases","domains","account","billing","teams"]},"resource_id":{"type":["string","null"]},"actor":{"type":"object","properties":{"user_id":{"type":["string","null"]},"username":{"type":["string","null"],"description":"\"Enzonic\" for automatic actions."}}},"meta":{"type":"object","additionalProperties":true,"description":"Action details (names, never secret values)."},"created_at":{"type":["string","null"],"format":"date-time"}}},"EnvBulk":{"type":"object","properties":{"vars":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]}},"sensitive":{"type":"boolean"}},"required":["key","value"]},"description":"Up to 200."},"dotenv":{"type":"string","description":"A .env file (KEY=VALUE lines, export prefix, # comments, quoted values)."},"targets":{"type":"array","items":{"type":"string","enum":["production","preview","development"]},"description":"Default targets for dotenv lines and vars without targets (default all three)."},"sensitive":{"type":"boolean","description":"Mark dotenv lines sensitive."},"prune":{"type":"boolean","description":"Remove the given targets from every key not in this request (makes the request the full set)."}},"description":"vars and/or dotenv. Each entry sets KEY for its targets; other values of that key lose those targets."},"EnvBulkResult":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EnvVar"}},"next_cursor":{"type":"null"},"created":{"type":"integer"},"updated":{"type":"integer"},"deleted":{"type":"integer"}}},"Rollback":{"type":"object","properties":{"deployment_id":{"type":"string","description":"A ready deployment of this project; default: the previous ready production deployment."}}},"RowWrite":{"type":"object","properties":{"branch_id":{"type":"string","description":"Default primary."},"values":{"type":"object","additionalProperties":true,"description":"{column: value} (insert, update)."},"key":{"type":"object","additionalProperties":true,"description":"{column: value} that matches exactly one row (update, delete): the primary key."}}},"RowWriteResult":{"type":"object","properties":{"ok":{"type":"boolean"},"affected":{"type":["integer","null"]}}},"DbSecurity":{"type":"object","properties":{"ip_allowlist":{"type":"array","items":{"type":"string"},"description":"CIDR ranges allowed to connect ([] = everyone). At most 50."},"force_tls":{"type":"boolean","description":"Refuse plaintext connections."}}},"DbUser":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"username":{"type":"string"},"read_only":{"type":"boolean"},"is_owner":{"type":"boolean"},"branch_id":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"}}},"DbUserCreated":{"type":"object","properties":{"user":{"$ref":"#/components/schemas/DbUser"},"password":{"type":"string","description":"Shown once."}}},"BackupDownload":{"type":"object","properties":{"url":{"type":"string","description":"Presigned GET, valid 15 minutes."},"filename":{"type":"string"},"size_bytes":{"type":["integer","null"]},"expires_at":{"type":["string","null"],"format":"date-time"}}},"ZoneImport":{"type":"object","properties":{"zone":{"type":"string","description":"BIND zone file text ($ORIGIN, $TTL, @, relative / absolute names; SOA and apex NS are skipped). At most 100 records."},"mode":{"type":"string","enum":["merge","replace"],"description":"merge (default) adds missing records; replace also deletes records not in the file (never Quick connect / forwarding records or apex NS)."},"dry_run":{"type":"boolean","description":"Only answer the plan."}},"required":["zone"]},"DnsChangePlan":{"type":"object","properties":{"mode":{"type":"string"},"template":{"type":"string"},"dry_run":{"type":"boolean"},"create":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecordInput"}},"delete":{"type":"array","items":{"type":"object","additionalProperties":true}},"unchanged":{"type":"integer"},"skipped":{"type":"array","items":{"type":"object","properties":{"line":{"type":"integer"},"reason":{"type":"string"}}},"description":"Zone lines that were not imported."},"results":{"type":"array","items":{"type":"object","properties":{"action":{"type":"string","enum":["create","delete"]},"type":{"type":"string"},"name":{"type":"string"},"value":{"type":["string","null"]},"ok":{"type":"boolean"},"error":{"$ref":"#/components/schemas/Error"}}},"description":"Absent on dry_run."},"failed":{"type":"integer"}}},"DnsTemplate":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"vars":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"required":{"type":"boolean"}}}},"records":{"type":"array","items":{"$ref":"#/components/schemas/DnsRecordInput"},"description":"With {domain} / {var} placeholders."}}},"DnsTemplateApply":{"type":"object","properties":{"vars":{"type":"object","additionalProperties":true,"description":"Template variables (GET /domains/dns-templates)."},"replace":{"type":"boolean","description":"First delete records the template replaces (same type and name: MX, the SPF / DMARC TXT, CNAMEs)."},"dry_run":{"type":"boolean"}}},"CiRunSummary":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"number":{"type":"integer"},"attempt":{"type":"integer"},"state":{"type":"string","enum":["queued","running","success","failure","canceled","skipped","error"],"description":"error: no job could start (invalid config, CI minutes used up)."},"branch":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"}}},"CiPipeline":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"name":{"type":"string"},"team_id":{"type":["string","null"]},"repo_full_name":{"type":"string","description":"owner/name (lowercase)."},"repo_url":{"type":"string"},"installation_id":{"type":"integer"},"default_branch":{"type":"string"},"enabled":{"type":"boolean","description":"Git events start runs only when enabled (manual and API runs always work)."},"fork_prs":{"type":"string","enum":["no_secrets","disabled"],"description":"Pull requests from forks: run without secrets, GITHUB_TOKEN or cache saves (default), or not at all."},"notify_failed":{"type":"boolean","description":"Email the account when a run fails (default on)."},"autofix_enabled":{"type":"boolean","description":"Start Enzica Autofix for failed runs automatically."},"config_source":{"type":["string","null"],"description":"enzonic (.enzonic/ci.yml) or github (.github/workflows)."},"config_error":{"type":["string","null"],"description":"Problems of the default branch's config."},"report_error":{"type":["string","null"],"description":"What the GitHub App is missing to report results (checks or statuses)."},"schedule":{"type":"array","items":{"type":"string"},"description":"Crons (UTC) of the default branch's config."},"next_schedule_at":{"type":["string","null"],"format":"date-time"},"last_run":{"type":["object","null"],"properties":{"id":{"type":"string"},"state":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"}}},"recent_runs":{"type":"array","items":{"$ref":"#/components/schemas/CiRunSummary"},"description":"Up to 10, oldest first."},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"CiPipelineCreate":{"type":"object","properties":{"installation_id":{"type":"integer","description":"From GET /ci/github/repos."},"repo_full_name":{"type":"string","description":"owner/name."},"name":{"type":"string","description":"Display name (default: the repository name)."}},"required":["installation_id","repo_full_name"]},"CiPipelineUpdate":{"type":"object","properties":{"name":{"type":"string"},"enabled":{"type":"boolean"},"fork_prs":{"type":"string","enum":["no_secrets","disabled"]},"notify_failed":{"type":"boolean"},"autofix_enabled":{"type":"boolean"},"default_branch":{"type":"string"}}},"CiConfigCheck":{"type":"object","properties":{"ref":{"type":"string"},"sha":{"type":["string","null"]},"source":{"type":["string","null"]},"path":{"type":["string","null"]},"valid":{"type":"boolean"},"missing":{"type":"boolean"},"errors":{"type":"array","items":{"type":"string"}},"warnings":{"type":"array","items":{"type":"string"}},"jobs":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"name":{"type":"string"},"needs":{"type":"array","items":{"type":"string"}},"runner":{"type":"string"},"matrix":{"type":"integer","description":"Matrix cells (0 = no matrix)."},"steps":{"type":"integer"},"services":{"type":"array","items":{"type":"string"}}}}},"triggers":{"type":"object","additionalProperties":true},"schedule":{"type":"array","items":{"type":"string"}},"next_schedule_at":{"type":["string","null"],"format":"date-time"}}},"CiRun":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"pipeline_id":{"type":"string"},"pipeline_name":{"type":"string"},"repo_full_name":{"type":"string"},"number":{"type":"integer"},"attempt":{"type":"integer","description":"Re-runs keep the number and add an attempt."},"rerun_of":{"type":["string","null"]},"event":{"type":"string","enum":["push","pull_request","schedule","manual","api"]},"state":{"type":"string","enum":["queued","running","success","failure","canceled","skipped","error"],"description":"error: no job could start (invalid config, CI minutes used up)."},"branch":{"type":["string","null"]},"tag":{"type":["string","null"]},"ref":{"type":["string","null"]},"sha":{"type":["string","null"]},"short_sha":{"type":["string","null"]},"pull_request":{"type":["object","null"],"properties":{"number":{"type":"integer"},"title":{"type":["string","null"]},"base":{"type":["string","null"]},"fork":{"type":"boolean"}}},"commit_message":{"type":["string","null"]},"commit_author":{"type":["string","null"]},"actor":{"type":["string","null"]},"config_source":{"type":["string","null"]},"config_path":{"type":["string","null"]},"error_code":{"type":["string","null"],"description":"config_invalid, minutes_exhausted, plan_limit, no_jobs, canceled_by_user, superseded …"},"error_message":{"type":["string","null"]},"report_mode":{"type":["string","null"],"description":"checks, statuses or none."},"report_error":{"type":["string","null"]},"minutes":{"type":"number","description":"CI minutes billed (medium runners count 2, large 4)."},"queue_ms":{"type":["integer","null"],"description":"Trigger (webhook) to the first job starting."},"duration_ms":{"type":["integer","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"},"url":{"type":"string","description":"Run page in the CI console."},"commit_url":{"type":["string","null"]},"job_counts":{"type":"object","additionalProperties":true,"description":"Jobs per state (lists only)."}}},"CiStep":{"type":"object","properties":{"seq":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string","enum":["pending","queued","running","success","failure","canceled","skipped"]},"exit_code":{"type":["integer","null"]},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"},"duration_ms":{"type":["integer","null"]},"log_seq":{"type":["integer","null"],"description":"First log chunk of the step."}}},"CiAnnotation":{"type":"object","properties":{"path":{"type":"string"},"line":{"type":"integer"},"end_line":{"type":"integer"},"level":{"type":"string","enum":["error","warning","notice"]},"title":{"type":"string"},"message":{"type":"string"}}},"CiJob":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"run_id":{"type":"string"},"key":{"type":"string","description":"Job id in the config."},"name":{"type":"string"},"seq":{"type":"integer"},"matrix":{"type":["object","null"],"additionalProperties":true},"needs":{"type":"array","items":{"type":"string"}},"condition":{"type":"string","enum":["success","failure","always","never"],"description":"The job's if:, reduced."},"continue_on_error":{"type":"boolean"},"state":{"type":"string","enum":["pending","queued","running","success","failure","canceled","skipped"]},"runner":{"type":"string","enum":["small","medium","large"]},"timeout_s":{"type":"integer"},"image":{"type":["string","null"]},"services":{"type":"array","items":{"type":"string"}},"exit_code":{"type":["integer","null"]},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]},"annotations":{"type":"array","items":{"$ref":"#/components/schemas/CiAnnotation"}},"reused":{"type":"boolean","description":"Kept from the earlier attempt (re-run of failed jobs)."},"timings":{"type":"object","additionalProperties":true,"description":"Milliseconds per phase: queue_ms, sandbox_ms, checkout_ms, deps_ms, services_ms, cache_restore_ms, steps_ms, post_ms, total_ms."},"queued_at":{"type":["string","null"],"format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"},"duration_ms":{"type":["integer","null"]},"steps":{"type":"array","items":{"$ref":"#/components/schemas/CiStep"}}}},"CiArtifact":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"run_id":{"type":"string"},"job_id":{"type":"string"},"name":{"type":"string"},"size_bytes":{"type":"integer"},"files_count":{"type":"integer"},"created_at":{"type":["string","null"],"format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"},"expired":{"type":"boolean"}}},"CiRunDetail":{"allOf":[{"$ref":"#/components/schemas/CiRun"},{"type":"object","properties":{"pipeline":{"$ref":"#/components/schemas/CiPipeline"},"jobs":{"type":"array","items":{"$ref":"#/components/schemas/CiJob"}},"artifacts":{"type":"array","items":{"$ref":"#/components/schemas/CiArtifact"}},"attempts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"attempt":{"type":"integer"},"state":{"type":"string"},"created_at":{"type":["string","null"],"format":"date-time"}}}},"warnings":{"type":"array","items":{"type":"string","description":"Config notes: capped timeouts or runner classes, skipped workflows."}}}}]},"CiLogs":{"type":"object","properties":{"chunks":{"type":"array","items":{"type":"object","properties":{"seq":{"type":"integer"},"step":{"type":["integer","null"]},"text":{"type":"string"}}}},"next_seq":{"type":"integer"},"state":{"type":"string","enum":["pending","queued","running","success","failure","canceled","skipped"]},"done":{"type":"boolean"}}},"CiSecret":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"kind":{"type":"string","enum":["secret","env"]},"value":{"type":["string","null"],"description":"Variables (env) only; secrets are write-only."},"created_at":{"type":["string","null"],"format":"date-time"},"updated_at":{"type":["string","null"],"format":"date-time"}}},"CiCache":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string"},"size_bytes":{"type":"integer"},"hits":{"type":"integer"},"created_at":{"type":["string","null"],"format":"date-time"},"last_used_at":{"type":["string","null"],"format":"date-time"}}},"CiUsage":{"type":"object","properties":{"plan":{"type":"string"},"period_start":{"type":["string","null"],"format":"date-time"},"period_end":{"type":["string","null"],"format":"date-time"},"minutes":{"type":"object","properties":{"used":{"type":"number"},"limit":{"type":"integer"}}},"by_runner":{"type":"array","items":{"type":"object","properties":{"runner":{"type":"string"},"jobs":{"type":"integer"},"minutes":{"type":"number"},"multiplier":{"type":"integer"}}}},"concurrency":{"type":"object","properties":{"running":{"type":"integer"},"limit":{"type":"integer"}}},"cache":{"type":"object","properties":{"bytes":{"type":"integer"},"limit_bytes":{"type":"integer"}}},"artifacts":{"type":"object","properties":{"bytes":{"type":"integer"},"limit_bytes":{"type":"integer"}}},"limits":{"type":"object","additionalProperties":true,"description":"CloudPlans::CI_LIMITS of the plan."}}},"CiAutofixAttempt":{"type":"object","properties":{"id":{"type":"string","description":"Lowercase ULID.","pattern":"^[0-9a-hjkmnp-tv-z]{26}$"},"job_id":{"type":"string"},"run_id":{"type":"string"},"pipeline_id":{"type":"string"},"status":{"type":"string","enum":["reading","diagnosing","applying","verifying","fixed","failed","needs_action","no_fix","no_tasks"]},"trigger":{"type":"string","enum":["manual","auto"]},"attempt":{"type":"integer"},"max_attempts":{"type":"integer"},"diagnosis":{"type":["string","null"]},"explanation":{"type":["string","null"]},"patch":{"type":["string","null"],"description":"Unified diff."},"files":{"type":"array","items":{"type":"string"}},"branch":{"type":["string","null"],"description":"enzica/ci-fix-…"},"commit_sha":{"type":["string","null"]},"compare_url":{"type":["string","null"],"description":"Open a pull request from the fix branch."},"result_run_id":{"type":["string","null"],"description":"The run that checks the fix."},"error_code":{"type":["string","null"]},"error_message":{"type":["string","null"]},"model":{"type":["string","null"]},"created_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}}},"CiSettings":{"type":"object","properties":{"autofix_default":{"type":"boolean","description":"New CI projects start with automatic Enzica Autofix on (off by default)."},"autofix_notify":{"type":"boolean","description":"Email the account when an automatic fix finishes (on by default)."},"enzica":{"type":"object","additionalProperties":true,"description":"Today's Enzica tasks: {plan, limit, used, remaining, reset_at}; one quota for CI, Deploy and the assistant. Null when Enzica is unreachable."}}},"CiSettingsUpdate":{"type":"object","properties":{"autofix_default":{"type":"boolean"},"autofix_notify":{"type":"boolean"}}},"CiAutofixOverview":{"type":"object","properties":{"job_id":{"type":"string"},"hint":{"type":"string","description":"One line from known log patterns (no model call)."},"eligible":{"type":"boolean"},"reason":{"type":["string","null"],"description":"running, not_failed, platform_error, chain_limit, task_limit, not_available."},"quota":{"type":"object","additionalProperties":true},"attempts":{"type":"array","items":{"$ref":"#/components/schemas/CiAutofixAttempt"}},"latest":{"oneOf":[{"$ref":"#/components/schemas/CiAutofixAttempt"},{"type":"null"}]},"max_attempts":{"type":"integer"}}}},"responses":{"Error":{"description":"Error","headers":{"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"headers":{"X-Request-Id":{"description":"Id of this request (yours when you sent a valid X-Request-Id, else req_<ulid>); also error.request_id. Quote it to support.","schema":{"type":"string"}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window (the tightest budget that applies: route, user or token).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix time (seconds) by which the window is fully restored (windows are one minute).","schema":{"type":"integer"}},"Idempotent-Replayed":{"description":"\"true\" when this answer is the stored answer of an earlier request with the same Idempotency-Key.","schema":{"type":"string"}}},"parameters":{"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Makes the request safe to retry for 24 h: a retry with the same key and body replays the first answer (Idempotent-Replayed: true); the same key with another request is 422 idempotency_key_reused; while the first still runs, 409 idempotency_in_progress."},"TeamHeader":{"name":"X-Enzonic-Team","in":"header","required":false,"schema":{"type":"string"},"description":"Team id (GET /teams): list and create in that team instead of your personal account. Same as ?team=."},"RequestId":{"name":"X-Request-Id","in":"header","required":false,"schema":{"type":"string","pattern":"^[A-Za-z0-9._-]{8,128}$"},"description":"Your own request id (8-128 of A-Z a-z 0-9 . _ -), echoed in the response and in error bodies."}}}}