{ "openapi": "3.1.0", "info": { "title": "Stack0 API", "description": "One REST API for the infrastructure an application or an AI agent needs: transactional and\nmarketing email, file storage on a global CDN, on-the-fly image processing, website screenshots,\nAI data extraction, video transcoding and streaming, multi-step AI workflows, and 350+ third-party\nintegrations.\n\n## Authentication\n\nEvery endpoint takes a Stack0 API key as a bearer token:\n\n```\nAuthorization: Bearer sk_live_...\n```\n\nCreate a key at https://app.stack0.dev under Settings â API Keys. Keys are scoped to one organization.\nMost endpoints also take `projectSlug` and `environment` (`sandbox` or `production`).\n\n## Versioning\n\nThe major version is in the URL path: `https://api.stack0.dev/v1`. Within a major version,\nonly additive changes ship â new endpoints, new optional request fields, new response fields.\nRemoving a field, renaming one, or narrowing a type requires a new major version.\n\n## Deprecation\n\nA deprecated endpoint keeps working and announces itself on every response:\n\n- `Deprecation` â RFC 9745, the date it was deprecated, e.g. `@1688169599`.\n- `Sunset` â RFC 8594, the date it stops responding. Never earlier than the deprecation date.\n- `Link; rel=\"deprecation\"` â the migration note.\n\nMinimum notice before sunset is 12 months for a stable endpoint. Full policy:\nhttps://www.stack0.dev/docs/versioning\n\n## Rate limits\n\n200 requests per 60 seconds per IP. Every response carries\nthe standard headers, so a client can self-throttle without guessing:\n\n- `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset`\n- `RateLimit` and `RateLimit-Policy` â RFC 8941 structured fields, e.g.\n `RateLimit: \"default\";r=199;t=60`\n- `Retry-After` on a 429\n\nLegacy `x-ratelimit-*` headers carry the same values and are kept for existing clients.\n\n## Errors\n\nErrors return a JSON body with `message` and `code`. See https://www.stack0.dev/docs/errors.", "version": "1.0.0", "summary": "Email, file storage, screenshots, AI extraction, video, workflows, and integrations in one REST API.", "termsOfService": "https://www.stack0.dev/terms", "contact": { "name": "Stack0 Support", "url": "https://www.stack0.dev/contact", "email": "[email protected]" }, "license": { "name": "Stack0 Terms of Service", "url": "https://www.stack0.dev/terms" } }, "servers": [ { "url": "https://api.stack0.dev/v1", "description": "Production, API v1" } ], "tags": [ { "name": "audiences", "description": "Group contacts into audiences for campaign and sequence targeting." }, { "name": "batch", "description": "Run screenshot or extraction jobs over many URLs in one request." }, { "name": "bundles", "description": "Grouped downloads that package multiple assets into one archive." }, { "name": "campaigns", "description": "Create, schedule, and send marketing email campaigns to an audience." }, { "name": "cdn", "description": "Upload, transform, list, and delete files served from the global CDN." }, { "name": "contacts", "description": "Marketing contacts, custom fields, and subscription state." }, { "name": "crawl", "description": "Recursively crawl a site and return the content of every page found." }, { "name": "documents", "description": "Parse PDF, DOCX, and other documents into structured text." }, { "name": "domains", "description": "Verify and manage sending domains, including DKIM, SPF, and DMARC records." }, { "name": "emails", "description": "Send transactional email and read per-message delivery status." }, { "name": "events", "description": "Delivery, open, click, bounce, and complaint events for sent mail." }, { "name": "extractions", "description": "Extract structured JSON from a webpage using an LLM and a schema." }, { "name": "folders", "description": "Organize CDN assets into folders." }, { "name": "imports", "description": "Import existing files into the CDN from a URL or another provider." }, { "name": "integrations", "description": "Connect and call 350+ third-party services on a user's behalf." }, { "name": "mail", "description": "Mail account settings, sending identities, and suppression lists." }, { "name": "mail-imports", "description": "Bulk-import contacts into an audience from CSV or JSON." }, { "name": "map", "description": "Enumerate a site's URLs without fetching page content." }, { "name": "memory-agents", "description": "Agents that own a long-term memory store." }, { "name": "memory-collections", "description": "Group memories into collections scoped to one agent." }, { "name": "memory-entities", "description": "Entities extracted from memories and the relations between them." }, { "name": "memory-memories", "description": "Individual memories, written and retrieved by semantic search." }, { "name": "private-files", "description": "Files behind signed URLs, readable only with a time-limited token." }, { "name": "projects", "description": "Projects scope resources within an organization." }, { "name": "schedules", "description": "Recurring screenshot, extraction, and crawl jobs on a cron schedule." }, { "name": "screenshots", "description": "Capture a rendered screenshot or PDF of any URL." }, { "name": "sequences", "description": "Automated multi-step email sequences with delays and branching conditions." }, { "name": "templates", "description": "Reusable email templates with variable substitution." }, { "name": "usage", "description": "Metered usage and billing counters per product and period." }, { "name": "video", "description": "Upload, transcode, watermark, and stream video with adaptive bitrate (HLS)." }, { "name": "workflows", "description": "Define and run multi-step AI pipelines with sequential and parallel steps." } ], "externalDocs": { "description": "Stack0 documentation", "url": "https://www.stack0.dev/docs" }, "paths": { "/mail/domains": { "get": { "operationId": "mail-domains-list", "summary": "List domains", "description": "List all verified and pending domains for your organization.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "domain": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "verifying", "verified", "failed" ] }, "dkimRecord": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, { "type": "null" } ] }, "spfRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "dmarcRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "verificationToken": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sesVerificationRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "isDefault": { "type": "boolean" }, "verifiedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastCheckedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "domain", "status", "dkimRecord", "spfRecord", "dmarcRecord", "verificationToken", "sesVerificationRecord", "isDefault", "verifiedAt", "lastCheckedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-domains-add", "summary": "Add a domain", "description": "Add a new domain for email sending. Returns DNS records that must be configured.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "domain": { "type": "string", "minLength": 1, "pattern": "^[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9](?:\\.[a-zA-Z]{2,})+$" }, "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, "required": [ "domain", "projectSlug" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "domain": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "domain": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "verifying", "verified", "failed" ] }, "dkimRecord": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, { "type": "null" } ] }, "spfRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "dmarcRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "verificationToken": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sesVerificationRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "isDefault": { "type": "boolean" }, "verifiedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastCheckedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "domain", "status", "dkimRecord", "spfRecord", "dmarcRecord", "verificationToken", "sesVerificationRecord", "isDefault", "verifiedAt", "lastCheckedAt", "createdAt", "updatedAt" ], "additionalProperties": false }, "dnsRecords": { "type": "object", "properties": { "domain": { "type": "string" }, "dkimRecords": { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, "spfRecord": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, "dmarcRecord": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, "mxRecord": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, "verificationToken": { "type": "string" }, "sesVerificationRecord": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, "required": [ "domain", "dkimRecords", "spfRecord", "dmarcRecord", "mxRecord", "verificationToken" ], "additionalProperties": false } }, "required": [ "dnsRecords" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/domains/{domainId}/dns": { "get": { "operationId": "mail-domains-getDnsRecords", "summary": "Get DNS records", "description": "Get the DNS records required to verify a domain.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "domainId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "domain": { "type": "string" }, "dkimRecords": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, { "type": "null" } ] }, "spfRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "dmarcRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "sesVerificationRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "mxRecord": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, "status": { "type": "string", "enum": [ "pending", "verifying", "verified", "failed" ] }, "verifiedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "hasMailboxes": { "type": "boolean" }, "verificationDetails": { "type": "object", "properties": { "domainVerified": { "type": "boolean" }, "dkimVerified": { "type": "boolean" }, "verificationStatus": { "type": "string" }, "dkimStatus": { "type": "string" }, "spfVerified": { "type": "boolean" }, "spfStatus": { "type": "string" }, "dmarcVerified": { "type": "boolean" }, "dmarcStatus": { "type": "string" } }, "required": [ "domainVerified", "dkimVerified", "verificationStatus", "dkimStatus" ], "additionalProperties": false } }, "required": [ "domain", "dkimRecords", "spfRecord", "dmarcRecord", "sesVerificationRecord", "mxRecord", "status", "verifiedAt", "hasMailboxes" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/domains/{domainId}/verify": { "post": { "operationId": "mail-domains-verify", "summary": "Verify domain", "description": "Trigger verification of a domain's DNS records.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "domainId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "verified": { "type": "boolean" }, "message": { "type": "string" } }, "required": [ "verified", "message" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/domains/{domainId}": { "delete": { "operationId": "mail-domains-delete", "summary": "Delete domain", "description": "Delete a domain from your organization.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "domainId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/domains/{domainId}/default": { "put": { "operationId": "mail-domains-setDefault", "summary": "Set default domain", "description": "Set a domain as the default domain for the organization.", "tags": [ "domains" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "domainId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "domain": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "verifying", "verified", "failed" ] }, "dkimRecord": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false } }, { "type": "null" } ] }, "spfRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "dmarcRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "verificationToken": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sesVerificationRecord": { "anyOf": [ { "type": "object", "properties": { "type": { "type": "string" }, "name": { "type": "string" }, "value": { "type": "string" }, "priority": { "type": "number" } }, "required": [ "type", "name", "value" ], "additionalProperties": false }, { "type": "null" } ] }, "isDefault": { "type": "boolean" }, "verifiedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastCheckedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "domain", "status", "dkimRecord", "spfRecord", "dmarcRecord", "verificationToken", "sesVerificationRecord", "isDefault", "verifiedAt", "lastCheckedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/send": { "post": { "operationId": "mail-emails-send", "summary": "Send an email", "description": "Send a transactional email. Requires 'send' permission for API keys.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "from": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, "to": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "cc": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "bcc": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "replyTo": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "html": { "type": "string", "maxLength": 1000000 }, "text": { "type": "string", "maxLength": 500000 }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "templateVariables": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "tags": { "maxItems": 10, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "attachments": { "maxItems": 10, "type": "array", "items": { "type": "object", "properties": { "filename": { "type": "string", "maxLength": 255 }, "content": { "type": "string", "maxLength": 10485760 }, "contentType": { "type": "string", "maxLength": 255 }, "path": { "type": "string", "maxLength": 2048 } }, "required": [ "filename", "content" ] } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "scheduledAt": { "type": "string" }, "inReplyTo": { "type": "string" }, "references": { "type": "string" } }, "required": [ "from", "to", "subject" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "from": { "type": "string" }, "to": { "type": "string" }, "subject": { "type": "string" }, "status": { "type": "string" }, "createdAt": { "type": "string" } }, "required": [ "id", "from", "to", "subject", "status", "createdAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/batch": { "post": { "operationId": "mail-emails-sendBatch", "summary": "Send batch emails", "description": "Send multiple emails with different content in a single request. Maximum 100 emails per batch.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "emails": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "from": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, "to": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "cc": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "bcc": { "anyOf": [ { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, { "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } } ] }, "replyTo": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "html": { "type": "string", "maxLength": 1000000 }, "text": { "type": "string", "maxLength": 500000 }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "templateVariables": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "tags": { "maxItems": 10, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "attachments": { "maxItems": 10, "type": "array", "items": { "type": "object", "properties": { "filename": { "type": "string", "maxLength": 255 }, "content": { "type": "string", "maxLength": 10485760 }, "contentType": { "type": "string", "maxLength": 255 }, "path": { "type": "string", "maxLength": 2048 } }, "required": [ "filename", "content" ] } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "scheduledAt": { "type": "string" }, "inReplyTo": { "type": "string" }, "references": { "type": "string" } }, "required": [ "from", "to", "subject" ] } } }, "required": [ "emails" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "success": { "type": "boolean" }, "error": { "type": "string" } }, "required": [ "id", "success" ], "additionalProperties": false } } }, "required": [ "success", "data" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/broadcast": { "post": { "operationId": "mail-emails-sendBroadcast", "summary": "Send broadcast email", "description": "Send the same email content to multiple recipients. Maximum 1000 recipients per broadcast. Will be limited by daily quota.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "from": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] }, "to": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "anyOf": [ { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "name": { "type": "string" } }, "required": [ "email" ] } ] } }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "html": { "type": "string", "maxLength": 1000000 }, "text": { "type": "string", "maxLength": 500000 }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "templateVariables": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "tags": { "maxItems": 10, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "scheduledAt": { "type": "string" } }, "required": [ "from", "to", "subject" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "data": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "success": { "type": "boolean" }, "error": { "type": "string" } }, "required": [ "id", "success" ], "additionalProperties": false } }, "count": { "type": "number" }, "totalRequested": { "type": "number" }, "limitedByQuota": { "type": "boolean" } }, "required": [ "success", "data", "count" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/{id}": { "get": { "operationId": "mail-emails-get", "summary": "Get email details", "description": "Retrieve details of a specific email by ID. Requires 'read' permission for API keys.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "from": { "type": "string" }, "to": { "type": "string" }, "subject": { "type": "string" }, "status": { "type": "string" }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "deliveredAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "openedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "clickedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bouncedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "providerMessageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "providerResponse": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] } }, "required": [ "id", "from", "to", "subject", "status", "html", "text", "tags", "metadata", "createdAt", "deliveredAt", "openedAt", "clickedAt", "bouncedAt", "providerMessageId", "providerResponse" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail": { "get": { "operationId": "mail-emails-list", "summary": "List emails", "description": "List emails with optional filters for status, sender, recipient, subject, and date range.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "sent", "delivered", "bounced", "failed", "deferred" ] } }, { "in": "query", "name": "from", "schema": { "type": "string" } }, { "in": "query", "name": "to", "schema": { "type": "string" } }, { "in": "query", "name": "subject", "schema": { "type": "string" } }, { "in": "query", "name": "tag", "schema": { "type": "string" } }, { "in": "query", "name": "startDate", "schema": { "type": "string" } }, { "in": "query", "name": "endDate", "schema": { "type": "string" } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "deliveredAt", "openedAt" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "emails": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "from": { "type": "string" }, "to": { "type": "string" }, "subject": { "type": "string" }, "status": { "type": "string" }, "cc": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "messageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "deliveredAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "openedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "clickedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bouncedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "providerMessageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "from", "to", "subject", "status", "cc", "replyTo", "messageId", "tags", "metadata", "createdAt", "deliveredAt", "openedAt", "clickedAt", "bouncedAt", "providerMessageId" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "emails", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/{id}/resend": { "post": { "operationId": "mail-emails-resend", "summary": "Resend an email", "description": "Resend a previously sent email with the same content.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "data": { "type": "object", "properties": { "id": { "type": "string" }, "success": { "type": "boolean" }, "error": { "type": "string" } }, "required": [ "id", "success" ], "additionalProperties": false } }, "required": [ "success", "data" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/{id}/cancel": { "post": { "operationId": "mail-emails-cancel", "summary": "Cancel a scheduled email", "description": "Cancel a pending/scheduled email before it is sent.", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/analytics": { "get": { "operationId": "mail-emails-getAnalytics", "summary": "Get analytics", "description": "Get analytics for the organization", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "total": { "type": "number" }, "sent": { "type": "number" }, "delivered": { "type": "number" }, "bounced": { "type": "number" }, "failed": { "type": "number" }, "deliveryRate": { "type": "number" }, "openRate": { "type": "number" }, "clickRate": { "type": "number" } }, "required": [ "total", "sent", "delivered", "bounced", "failed", "deliveryRate", "openRate", "clickRate" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/senders": { "get": { "operationId": "mail-emails-listSenders", "summary": "List unique senders with stats", "description": "List unique senders with stats", "tags": [ "emails" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "senders": { "type": "array", "items": { "type": "object", "properties": { "from": { "type": "string" }, "total": { "type": "number" }, "sent": { "type": "number" }, "delivered": { "type": "number" }, "bounced": { "type": "number" }, "failed": { "type": "number" } }, "required": [ "from", "total", "sent", "delivered", "bounced", "failed" ], "additionalProperties": false } } }, "required": [ "senders" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/templates": { "post": { "operationId": "mail-templates-create", "summary": "Create template", "description": "Create a new email template.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "slug": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-z0-9-]+$" }, "description": { "type": "string", "maxLength": 500 }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "previewText": { "type": "string", "maxLength": 200 }, "html": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "mailyJson": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "variablesSchema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "isActive": { "default": true, "type": "boolean" } }, "required": [ "name", "slug", "subject", "html" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "type": "string" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "variablesSchema": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "environment", "createdByUserId", "name", "slug", "description", "subject", "previewText", "html", "text", "mailyJson", "variablesSchema", "isActive", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "mail-templates-list", "summary": "List templates", "description": "List all email templates for your organization.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "isActive", "schema": { "type": "boolean" } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "templates": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "type": "string" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "variablesSchema": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "environment", "createdByUserId", "name", "slug", "description", "subject", "previewText", "html", "text", "mailyJson", "variablesSchema", "isActive", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "templates", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/templates/{id}": { "patch": { "operationId": "mail-templates-update", "summary": "Update template", "description": "Update an existing email template.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "slug": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-z0-9-]+$" }, "description": { "type": "string", "maxLength": 500 }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "previewText": { "type": "string", "maxLength": 200 }, "html": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "mailyJson": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "variablesSchema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "isActive": { "type": "boolean" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "type": "string" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "variablesSchema": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "environment", "createdByUserId", "name", "slug", "description", "subject", "previewText", "html", "text", "mailyJson", "variablesSchema", "isActive", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "mail-templates-get", "summary": "Get template", "description": "Get a template by ID.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "type": "string" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "variablesSchema": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "environment", "createdByUserId", "name", "slug", "description", "subject", "previewText", "html", "text", "mailyJson", "variablesSchema", "isActive", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-templates-delete", "summary": "Delete template", "description": "Delete an email template.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/templates/slug/{slug}": { "get": { "operationId": "mail-templates-getBySlug", "summary": "Get template by slug", "description": "Get a template by slug.", "tags": [ "templates" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "slug", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "type": "string" }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "variablesSchema": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "environment", "createdByUserId", "name", "slug", "description", "subject", "previewText", "html", "text", "mailyJson", "variablesSchema", "isActive", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/audiences": { "get": { "operationId": "mail-audiences-list", "summary": "List all audiences for an organization", "description": "List all audiences for an organization", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "audiences": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalContacts": { "type": "number" }, "subscribedContacts": { "type": "number" }, "unsubscribedContacts": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "totalContacts", "subscribedContacts", "unsubscribedContacts", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "audiences", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-audiences-create", "summary": "Create audience", "description": "Create a new audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "description": { "type": "string", "maxLength": 500 } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalContacts": { "type": "number" }, "subscribedContacts": { "type": "number" }, "unsubscribedContacts": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "totalContacts", "subscribedContacts", "unsubscribedContacts", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/audiences/{id}": { "get": { "operationId": "mail-audiences-get", "summary": "Get audience by ID", "description": "Get an audience by ID", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalContacts": { "type": "number" }, "subscribedContacts": { "type": "number" }, "unsubscribedContacts": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "totalContacts", "subscribedContacts", "unsubscribedContacts", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "mail-audiences-update", "summary": "Update audience", "description": "Update an existing audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "description": { "type": "string", "maxLength": 500 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalContacts": { "type": "number" }, "subscribedContacts": { "type": "number" }, "unsubscribedContacts": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "totalContacts", "subscribedContacts", "unsubscribedContacts", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-audiences-delete", "summary": "Delete audience", "description": "Delete an existing audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/audiences/{id}/contacts": { "get": { "operationId": "mail-audiences-listContacts", "summary": "List contacts in an audience", "description": "List all contacts in an audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "subscribed", "unsubscribed", "bounced", "complained" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "contacts": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string" }, "subscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unsubscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "addedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "email", "firstName", "lastName", "metadata", "status", "subscribedAt", "unsubscribedAt", "createdAt", "updatedAt", "addedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "contacts", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-audiences-addContacts", "summary": "Add contacts to an audience", "description": "Add contacts to an audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "contactIds": { "minItems": 1, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } }, "required": [ "contactIds" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "added": { "type": "number" } }, "required": [ "success", "added" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-audiences-removeContacts", "summary": "Remove contacts from an audience", "description": "Remove contacts from an audience", "tags": [ "audiences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "contactIds", "schema": { "minItems": 1, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "removed": { "type": "number" } }, "required": [ "success", "removed" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/contacts": { "get": { "operationId": "mail-contacts-list", "summary": "List all contacts for an organization", "description": "List all contacts for an organization", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "subscribed", "unsubscribed", "bounced", "complained" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "contacts": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string" }, "subscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unsubscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "email", "firstName", "lastName", "metadata", "status", "subscribedAt", "unsubscribedAt", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "contacts", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-contacts-create", "summary": "Create a new contact", "description": "Create a new contact", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "firstName": { "type": "string", "maxLength": 100 }, "lastName": { "type": "string", "maxLength": 100 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "email" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string" }, "subscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unsubscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "email", "firstName", "lastName", "metadata", "status", "subscribedAt", "unsubscribedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/contacts/{id}": { "get": { "operationId": "mail-contacts-get", "summary": "Get a contact by ID", "description": "Get a contact by ID", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string" }, "subscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unsubscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "email", "firstName", "lastName", "metadata", "status", "subscribedAt", "unsubscribedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "mail-contacts-update", "summary": "Update a contact", "description": "Update a contact", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "firstName": { "type": "string", "maxLength": 100 }, "lastName": { "type": "string", "maxLength": 100 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "status": { "type": "string", "enum": [ "subscribed", "unsubscribed", "bounced", "complained" ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string" }, "subscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "unsubscribedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "email", "firstName", "lastName", "metadata", "status", "subscribedAt", "unsubscribedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-contacts-delete", "summary": "Delete a contact", "description": "Delete a contact", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/contacts/import": { "post": { "operationId": "mail-contacts-import", "summary": "Import contacts", "description": "Import contacts", "tags": [ "contacts" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "contacts": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "email": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "firstName": { "type": "string" }, "lastName": { "type": "string" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "email" ] } } }, "required": [ "contacts" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "imported": { "type": "number" }, "skipped": { "type": "number" }, "errors": { "type": "array", "items": { "type": "object", "properties": { "email": { "type": "string" }, "error": { "type": "string" } }, "required": [ "email", "error" ], "additionalProperties": false } } }, "required": [ "success", "imported", "skipped", "errors" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns": { "get": { "operationId": "mail-campaigns-list", "summary": "List campaigns", "description": "List all campaigns for the organization", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "draft", "scheduled", "sending", "sent", "paused", "cancelled" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "campaigns": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromEmail": { "type": "string" }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "scheduledAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sentAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalRecipients": { "type": "number" }, "sentCount": { "type": "number" }, "deliveredCount": { "type": "number" }, "openedCount": { "type": "number" }, "clickedCount": { "type": "number" }, "bouncedCount": { "type": "number" }, "failedCount": { "type": "number" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "subject", "previewText", "fromEmail", "fromName", "replyTo", "templateId", "html", "text", "audienceId", "status", "scheduledAt", "sentAt", "completedAt", "totalRecipients", "sentCount", "deliveredCount", "openedCount", "clickedCount", "bouncedCount", "failedCount", "tags", "metadata", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "campaigns", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-campaigns-create", "summary": "Create campaign", "description": "Create a new campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 200 }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "previewText": { "type": "string", "maxLength": 200 }, "fromEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "fromName": { "type": "string", "maxLength": 100 }, "replyTo": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "html": { "type": "string" }, "text": { "type": "string" }, "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "scheduledAt": { "type": "string" }, "tags": { "maxItems": 10, "type": "array", "items": { "type": "string" } } }, "required": [ "name", "subject", "fromEmail" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromEmail": { "type": "string" }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "scheduledAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sentAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalRecipients": { "type": "number" }, "sentCount": { "type": "number" }, "deliveredCount": { "type": "number" }, "openedCount": { "type": "number" }, "clickedCount": { "type": "number" }, "bouncedCount": { "type": "number" }, "failedCount": { "type": "number" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "subject", "previewText", "fromEmail", "fromName", "replyTo", "templateId", "html", "text", "audienceId", "status", "scheduledAt", "sentAt", "completedAt", "totalRecipients", "sentCount", "deliveredCount", "openedCount", "clickedCount", "bouncedCount", "failedCount", "tags", "metadata", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}": { "get": { "operationId": "mail-campaigns-get", "summary": "Get campaign by ID", "description": "Get a campaign by ID", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromEmail": { "type": "string" }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "scheduledAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sentAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalRecipients": { "type": "number" }, "sentCount": { "type": "number" }, "deliveredCount": { "type": "number" }, "openedCount": { "type": "number" }, "clickedCount": { "type": "number" }, "bouncedCount": { "type": "number" }, "failedCount": { "type": "number" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "subject", "previewText", "fromEmail", "fromName", "replyTo", "templateId", "html", "text", "audienceId", "status", "scheduledAt", "sentAt", "completedAt", "totalRecipients", "sentCount", "deliveredCount", "openedCount", "clickedCount", "bouncedCount", "failedCount", "tags", "metadata", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "mail-campaigns-update", "summary": "Update campaign", "description": "Update an existing campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 }, "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "previewText": { "type": "string", "maxLength": 200 }, "fromEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "fromName": { "type": "string", "maxLength": 100 }, "replyTo": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "html": { "type": "string" }, "text": { "type": "string" }, "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "scheduledAt": { "type": "string" }, "tags": { "maxItems": 10, "type": "array", "items": { "type": "string" } } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromEmail": { "type": "string" }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "scheduledAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sentAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalRecipients": { "type": "number" }, "sentCount": { "type": "number" }, "deliveredCount": { "type": "number" }, "openedCount": { "type": "number" }, "clickedCount": { "type": "number" }, "bouncedCount": { "type": "number" }, "failedCount": { "type": "number" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "subject", "previewText", "fromEmail", "fromName", "replyTo", "templateId", "html", "text", "audienceId", "status", "scheduledAt", "sentAt", "completedAt", "totalRecipients", "sentCount", "deliveredCount", "openedCount", "clickedCount", "bouncedCount", "failedCount", "tags", "metadata", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-campaigns-delete", "summary": "Delete campaign", "description": "Delete an existing campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}/send": { "post": { "operationId": "mail-campaigns-send", "summary": "Send campaign", "description": "Send a campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sendNow": { "default": true, "type": "boolean" }, "scheduledAt": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "sentCount": { "type": "number" }, "failedCount": { "type": "number" }, "totalRecipients": { "type": "number" } }, "required": [ "success", "sentCount", "failedCount", "totalRecipients" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}/pause": { "post": { "operationId": "mail-campaigns-pause", "summary": "Pause campaign", "description": "Pause a scheduled campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}/cancel": { "post": { "operationId": "mail-campaigns-cancel", "summary": "Cancel campaign", "description": "Cancel a scheduled campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}/duplicate": { "post": { "operationId": "mail-campaigns-duplicate", "summary": "Duplicate campaign", "description": "Duplicate a campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromEmail": { "type": "string" }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "scheduledAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sentAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalRecipients": { "type": "number" }, "sentCount": { "type": "number" }, "deliveredCount": { "type": "number" }, "openedCount": { "type": "number" }, "clickedCount": { "type": "number" }, "bouncedCount": { "type": "number" }, "failedCount": { "type": "number" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "subject", "previewText", "fromEmail", "fromName", "replyTo", "templateId", "html", "text", "audienceId", "status", "scheduledAt", "sentAt", "completedAt", "totalRecipients", "sentCount", "deliveredCount", "openedCount", "clickedCount", "bouncedCount", "failedCount", "tags", "metadata", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/campaigns/{id}/stats": { "get": { "operationId": "mail-campaigns-getStats", "summary": "Get campaign stats", "description": "Get stats for a campaign", "tags": [ "campaigns" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "total": { "type": "number" }, "sent": { "type": "number" }, "delivered": { "type": "number" }, "opened": { "type": "number" }, "clicked": { "type": "number" }, "bounced": { "type": "number" }, "failed": { "type": "number" }, "deliveryRate": { "type": "number" }, "openRate": { "type": "number" }, "clickRate": { "type": "number" }, "bounceRate": { "type": "number" } }, "required": [ "total", "sent", "delivered", "opened", "clicked", "bounced", "failed", "deliveryRate", "openRate", "clickRate", "bounceRate" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences": { "get": { "operationId": "mail-sequences-list", "summary": "List sequences", "description": "List all sequences for the organization", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "draft", "active", "paused", "archived" ] } }, { "in": "query", "name": "triggerType", "schema": { "type": "string", "enum": [ "contact_created", "contact_updated", "contact_added_to_list", "event_received" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "sequences": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "triggerType": { "type": "string" }, "triggerFrequency": { "type": "string" }, "triggerConfig": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "audienceFilterId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "pausedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "archivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "status", "triggerType", "triggerFrequency", "triggerConfig", "audienceFilterId", "totalEntered", "totalCompleted", "totalActive", "publishedAt", "pausedAt", "archivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "sequences", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-sequences-create", "summary": "Create sequence", "description": "Create a new sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 200 }, "description": { "type": "string", "maxLength": 1000 }, "triggerType": { "type": "string", "enum": [ "contact_created", "contact_updated", "contact_added_to_list", "event_received" ] }, "triggerFrequency": { "default": "once", "type": "string", "enum": [ "once", "multiple" ] }, "triggerConfig": { "type": "object", "properties": { "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "propertyName": { "type": "string" }, "propertyValue": {}, "eventName": { "type": "string" }, "eventConditions": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } }, "audienceFilterId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "name", "triggerType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "triggerType": { "type": "string" }, "triggerFrequency": { "type": "string" }, "triggerConfig": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "audienceFilterId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "pausedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "archivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "status", "triggerType", "triggerFrequency", "triggerConfig", "audienceFilterId", "totalEntered", "totalCompleted", "totalActive", "publishedAt", "pausedAt", "archivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}": { "get": { "operationId": "mail-sequences-get", "summary": "Get sequence", "description": "Get a sequence by ID", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "triggerType": { "type": "string" }, "triggerFrequency": { "type": "string" }, "triggerConfig": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "audienceFilterId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "pausedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "archivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nodes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "emailConfig": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "subject": { "type": "string" }, "previewText": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "templateId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mailyJson": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "fromEmail": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "fromName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "nodeId", "subject", "previewText", "html", "text", "templateId", "mailyJson", "fromEmail", "fromName", "replyTo", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] }, "timerConfig": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "delayAmount": { "type": "number" }, "delayUnit": { "type": "string" }, "waitUntilTime": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "waitUntilTimezone": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "nodeId", "delayAmount", "delayUnit", "waitUntilTime", "waitUntilTimezone", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] }, "filterConfig": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "conditions": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "nonMatchAction": { "type": "string" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "nodeId", "conditions", "nonMatchAction", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] }, "branchConfig": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "branches": { "type": "array", "items": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "hasDefaultBranch": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "nodeId", "branches", "hasDefaultBranch", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] }, "experimentConfig": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "sampleSize": { "type": "number" }, "status": { "type": "string" }, "variants": { "type": "array", "items": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "winningVariantId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "winningDeterminedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "variantMetrics": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "nodeId", "sampleSize", "status", "variants", "winningVariantId", "winningDeterminedAt", "variantMetrics", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] }, "analytics": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "nodeId": { "type": "string" }, "entered": { "type": "number" }, "exited": { "type": "number" }, "emailsSent": { "type": "number" }, "emailsDelivered": { "type": "number" }, "emailsOpened": { "type": "number" }, "emailsClicked": { "type": "number" }, "emailsBounced": { "type": "number" }, "passed": { "type": "number" }, "filtered": { "type": "number" }, "updatedAt": { "type": "string" } }, "required": [ "id", "nodeId", "entered", "exited", "emailsSent", "emailsDelivered", "emailsOpened", "emailsClicked", "emailsBounced", "passed", "filtered", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt", "emailConfig", "timerConfig", "filterConfig", "branchConfig", "experimentConfig", "analytics" ], "additionalProperties": false } }, "connections": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "sourceNodeId": { "type": "string" }, "targetNodeId": { "type": "string" }, "connectionType": { "type": "string" }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "loopId", "sourceNodeId", "targetNodeId", "connectionType", "label", "createdAt" ], "additionalProperties": false } }, "avgCompletionMs": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "status", "triggerType", "triggerFrequency", "triggerConfig", "audienceFilterId", "totalEntered", "totalCompleted", "totalActive", "publishedAt", "pausedAt", "archivedAt", "createdAt", "updatedAt", "nodes", "connections", "avgCompletionMs" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "mail-sequences-update", "summary": "Update sequence", "description": "Update an existing sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 }, "description": { "type": "string", "maxLength": 1000 }, "triggerFrequency": { "type": "string", "enum": [ "once", "multiple" ] }, "triggerConfig": { "type": "object", "properties": { "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "propertyName": { "type": "string" }, "propertyValue": {}, "eventName": { "type": "string" }, "eventConditions": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } }, "audienceFilterId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "triggerType": { "type": "string" }, "triggerFrequency": { "type": "string" }, "triggerConfig": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "audienceFilterId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "pausedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "archivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "status", "triggerType", "triggerFrequency", "triggerConfig", "audienceFilterId", "totalEntered", "totalCompleted", "totalActive", "publishedAt", "pausedAt", "archivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-sequences-delete", "summary": "Delete sequence", "description": "Delete an existing sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/publish": { "post": { "operationId": "mail-sequences-publish", "summary": "Publish sequence", "description": "Publish a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/pause": { "post": { "operationId": "mail-sequences-pause", "summary": "Pause sequence", "description": "Pause a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/resume": { "post": { "operationId": "mail-sequences-resume", "summary": "Resume sequence", "description": "Resume a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/archive": { "post": { "operationId": "mail-sequences-archive", "summary": "Archive sequence", "description": "Archive a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/duplicate": { "post": { "operationId": "mail-sequences-duplicate", "summary": "Duplicate sequence", "description": "Duplicate a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 200 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "triggerType": { "type": "string" }, "triggerFrequency": { "type": "string" }, "triggerConfig": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "audienceFilterId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" }, "publishedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "pausedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "archivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "status", "triggerType", "triggerFrequency", "triggerConfig", "audienceFilterId", "totalEntered", "totalCompleted", "totalActive", "publishedAt", "pausedAt", "archivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes": { "post": { "operationId": "mail-sequences-createNode", "summary": "Create node", "description": "Create a new node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "nodeType": { "type": "string", "enum": [ "trigger", "email", "timer", "filter", "branch", "experiment", "update_contact", "add_to_list", "remove_from_list", "end" ] }, "name": { "type": "string", "maxLength": 200 }, "positionX": { "default": 0, "type": "number" }, "positionY": { "default": 0, "type": "number" }, "sortOrder": { "default": 0, "type": "number" }, "config": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "nodeType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}": { "put": { "operationId": "mail-sequences-updateNode", "summary": "Update node", "description": "Update an existing node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "maxLength": 200 }, "sortOrder": { "type": "number" }, "config": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-sequences-deleteNode", "summary": "Delete node", "description": "Delete an existing node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/position": { "put": { "operationId": "mail-sequences-updateNodePosition", "summary": "Update node position", "description": "Update the position of an existing node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "positionX": { "type": "number" }, "positionY": { "type": "number" } }, "required": [ "positionX", "positionY" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/email": { "put": { "operationId": "mail-sequences-setNodeEmail", "summary": "Set email node content", "description": "Set the content of an email node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "type": "string", "minLength": 1, "maxLength": 500 }, "previewText": { "type": "string", "maxLength": 200 }, "html": { "type": "string" }, "text": { "type": "string" }, "templateId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "mailyJson": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "fromEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "fromName": { "type": "string", "maxLength": 100 }, "replyTo": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" } }, "required": [ "subject" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/timer": { "put": { "operationId": "mail-sequences-setNodeTimer", "summary": "Set timer node config", "description": "Set the configuration of a timer node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "delayAmount": { "type": "number", "minimum": 1 }, "delayUnit": { "type": "string", "enum": [ "minutes", "hours", "days", "weeks" ] }, "waitUntilTime": { "type": "string", "pattern": "^([0-1]?[0-9]|2[0-3]):[0-5][0-9]$" }, "waitUntilTimezone": { "type": "string" } }, "required": [ "delayAmount", "delayUnit" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/filter": { "put": { "operationId": "mail-sequences-setNodeFilter", "summary": "Set filter node config", "description": "Set the configuration of a filter node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "conditions": { "type": "object", "properties": { "operator": { "type": "string", "enum": [ "and", "or" ] }, "rules": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1 }, "operator": { "type": "string", "enum": [ "equals", "not_equals", "contains", "not_contains", "starts_with", "ends_with", "is_set", "is_not_set", "greater_than", "less_than" ] }, "value": {} }, "required": [ "field", "operator" ] } } }, "required": [ "operator", "rules" ] }, "nonMatchAction": { "default": "stop", "type": "string", "enum": [ "stop", "continue" ] } }, "required": [ "conditions" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/branch": { "put": { "operationId": "mail-sequences-setNodeBranch", "summary": "Set branch node config", "description": "Set the configuration of a branch node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "branches": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "conditions": { "type": "object", "properties": { "operator": { "type": "string", "enum": [ "and", "or" ] }, "rules": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string", "minLength": 1 }, "operator": { "type": "string", "enum": [ "equals", "not_equals", "contains", "not_contains", "starts_with", "ends_with", "is_set", "is_not_set", "greater_than", "less_than" ] }, "value": {} }, "required": [ "field", "operator" ] } } }, "required": [ "operator", "rules" ] } }, "required": [ "id", "name", "conditions" ] } }, "hasDefaultBranch": { "default": true, "type": "boolean" } }, "required": [ "branches" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/nodes/{nodeId}/experiment": { "put": { "operationId": "mail-sequences-setNodeExperiment", "summary": "Set experiment node config", "description": "Set the configuration of an experiment node", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "nodeId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sampleSize": { "default": 100, "type": "number", "minimum": 1, "maximum": 100 }, "variants": { "minItems": 2, "maxItems": 5, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1 }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "weight": { "type": "number", "minimum": 0, "maximum": 100 } }, "required": [ "id", "name", "weight" ] } } }, "required": [ "variants" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "nodeType": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "positionX": { "type": "number" }, "positionY": { "type": "number" }, "sortOrder": { "type": "number" }, "config": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "nodeType", "name", "positionX", "positionY", "sortOrder", "config", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/connections": { "post": { "operationId": "mail-sequences-createConnection", "summary": "Create connection", "description": "Create a new connection", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "sourceNodeId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "targetNodeId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "connectionType": { "default": "default", "type": "string" }, "label": { "type": "string", "maxLength": 100 } }, "required": [ "sourceNodeId", "targetNodeId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "sourceNodeId": { "type": "string" }, "targetNodeId": { "type": "string" }, "connectionType": { "type": "string" }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "loopId", "sourceNodeId", "targetNodeId", "connectionType", "label", "createdAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/connections/{connectionId}": { "delete": { "operationId": "mail-sequences-deleteConnection", "summary": "Delete connection", "description": "Delete an existing connection", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "path", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/entries": { "get": { "operationId": "mail-sequences-listEntries", "summary": "List contacts in a sequence", "description": "List all contacts in a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "active", "completed", "paused", "stopped", "bounced", "unsubscribed" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "entries": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "contactId": { "type": "string" }, "currentNodeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "experimentVariantId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "exitReason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enteredAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "exitedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextActionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "triggerEventOccurrenceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "contact": { "type": "object", "properties": { "id": { "type": "string" }, "email": { "type": "string" }, "firstName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "email", "firstName", "lastName" ], "additionalProperties": false } }, "required": [ "id", "loopId", "contactId", "currentNodeId", "status", "experimentVariantId", "exitReason", "enteredAt", "completedAt", "exitedAt", "nextActionAt", "triggerEventOccurrenceId", "createdAt", "updatedAt", "contact" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "entries", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/add-contact": { "post": { "operationId": "mail-sequences-addContactToSequence", "summary": "Manually add contact to sequence", "description": "Manually add a contact to a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "contactId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "contactId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "loopId": { "type": "string" }, "contactId": { "type": "string" }, "currentNodeId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "experimentVariantId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "exitReason": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "enteredAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "exitedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextActionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "triggerEventOccurrenceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "loopId", "contactId", "currentNodeId", "status", "experimentVariantId", "exitReason", "enteredAt", "completedAt", "exitedAt", "nextActionAt", "triggerEventOccurrenceId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/remove-contact": { "post": { "operationId": "mail-sequences-removeContactFromSequence", "summary": "Remove contact from sequence", "description": "Remove a contact from a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "entryId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "reason": { "type": "string", "maxLength": 500 } }, "required": [ "entryId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/sequences/{id}/analytics": { "get": { "operationId": "mail-sequences-getAnalytics", "summary": "Get sequence analytics", "description": "Get analytics for a sequence", "tags": [ "sequences" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "startDate", "schema": { "type": "string" } }, { "in": "query", "name": "endDate", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "sequence": { "type": "object", "properties": { "totalEntered": { "type": "number" }, "totalCompleted": { "type": "number" }, "totalActive": { "type": "number" } }, "required": [ "totalEntered", "totalCompleted", "totalActive" ], "additionalProperties": false }, "statusBreakdown": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number" } }, "nodeAnalytics": { "type": "array", "items": { "type": "object", "properties": { "nodeId": { "type": "string" }, "entered": { "type": "number" }, "exited": { "type": "number" }, "emailsSent": { "type": "number" }, "emailsDelivered": { "type": "number" }, "emailsOpened": { "type": "number" }, "emailsClicked": { "type": "number" }, "emailsBounced": { "type": "number" }, "passed": { "type": "number" }, "filtered": { "type": "number" } }, "required": [ "nodeId", "entered", "exited", "emailsSent", "emailsDelivered", "emailsOpened", "emailsClicked", "emailsBounced", "passed", "filtered" ], "additionalProperties": false } } }, "required": [ "sequence", "statusBreakdown", "nodeAnalytics" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events": { "get": { "operationId": "mail-events-list", "summary": "List events", "description": "List all events for the organization", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "events": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "propertiesSchema": { "anyOf": [ { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ], "additionalProperties": false } } }, "required": [ "properties" ], "additionalProperties": false }, { "type": "null" } ] }, "totalReceived": { "type": "number" }, "lastReceivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "propertiesSchema", "totalReceived", "lastReceivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "events", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-events-create", "summary": "Create event", "description": "Create a new event", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-z][a-z0-9_]*$" }, "description": { "type": "string", "maxLength": 1000 }, "propertiesSchema": { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ] } } }, "required": [ "properties" ] } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "propertiesSchema": { "anyOf": [ { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ], "additionalProperties": false } } }, "required": [ "properties" ], "additionalProperties": false }, { "type": "null" } ] }, "totalReceived": { "type": "number" }, "lastReceivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "propertiesSchema", "totalReceived", "lastReceivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events/{id}": { "get": { "operationId": "mail-events-get", "summary": "Get event", "description": "Get an event by ID", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "propertiesSchema": { "anyOf": [ { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ], "additionalProperties": false } } }, "required": [ "properties" ], "additionalProperties": false }, { "type": "null" } ] }, "totalReceived": { "type": "number" }, "lastReceivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "propertiesSchema", "totalReceived", "lastReceivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "mail-events-update", "summary": "Update event", "description": "Update an event", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-z][a-z0-9_]*$" }, "description": { "type": "string", "maxLength": 1000 }, "propertiesSchema": { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ] } } }, "required": [ "properties" ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "propertiesSchema": { "anyOf": [ { "type": "object", "properties": { "properties": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "date", "object", "array" ] }, "description": { "type": "string", "maxLength": 500 }, "required": { "type": "boolean" } }, "required": [ "name", "type" ], "additionalProperties": false } } }, "required": [ "properties" ], "additionalProperties": false }, { "type": "null" } ] }, "totalReceived": { "type": "number" }, "lastReceivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "propertiesSchema", "totalReceived", "lastReceivedAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-events-delete", "summary": "Delete event", "description": "Delete an event", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events/track": { "post": { "operationId": "mail-events-track", "summary": "Track an event", "description": "Record an event occurrence for a contact. This can trigger email sequences.", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "eventName": { "type": "string", "minLength": 1, "maxLength": 100 }, "contactId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "contactEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "eventName" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "eventOccurrenceId": { "type": "string" }, "error": { "type": "string" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events/track/batch": { "post": { "operationId": "mail-events-trackBatch", "summary": "Track multiple events", "description": "Record multiple event occurrences in a single request. Maximum 100 events per batch.", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "events": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "eventName": { "type": "string", "minLength": 1, "maxLength": 100 }, "contactId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "contactEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" }, "properties": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "timestamp": { "type": "string" } }, "required": [ "eventName" ] } } }, "required": [ "events" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "results": { "type": "array", "items": { "type": "object", "properties": { "success": { "type": "boolean" }, "eventOccurrenceId": { "type": "string" }, "error": { "type": "string" } }, "required": [ "success" ], "additionalProperties": false } }, "totalProcessed": { "type": "number" }, "totalFailed": { "type": "number" } }, "required": [ "success", "results", "totalProcessed", "totalFailed" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events/occurrences": { "get": { "operationId": "mail-events-listOccurrences", "summary": "List event occurrences", "description": "List all event occurrences for the organization", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "eventId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "contactId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "startDate", "schema": { "type": "string" } }, { "in": "query", "name": "endDate", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "occurrences": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "eventId": { "type": "string" }, "contactId": { "type": "string" }, "properties": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "processed": { "type": "boolean" }, "processedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "eventId", "contactId", "properties", "processed", "processedAt", "createdAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "occurrences", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/events/analytics/{id}": { "get": { "operationId": "mail-events-getAnalytics", "summary": "Get event analytics", "description": "Get analytics for an event", "tags": [ "events" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "totalReceived": { "type": "number" }, "lastReceivedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "uniqueContacts": { "type": "number" }, "dailyCounts": { "type": "array", "items": { "type": "object", "properties": { "date": { "type": "string" }, "count": { "type": "number" } }, "required": [ "date", "count" ], "additionalProperties": false } } }, "required": [ "totalReceived", "lastReceivedAt", "uniqueContacts", "dailyCounts" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports/credentials": { "get": { "operationId": "mail-imports-credentials-list", "summary": "List import credentials", "description": "List all saved API credentials for import providers", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "credentials": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "provider": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" }, "lastValidatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastUsedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "provider", "name", "status", "lastValidatedAt", "lastUsedAt", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "credentials", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "mail-imports-credentials-create", "summary": "Add import credential", "description": "Add a new API credential for an import provider", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "provider": { "type": "string", "enum": [ "resend", "loops" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "apiKey": { "type": "string", "minLength": 1 } }, "required": [ "provider", "name", "apiKey" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "provider": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string" }, "lastValidatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastUsedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "provider", "name", "status", "lastValidatedAt", "lastUsedAt", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports/credentials/{id}": { "delete": { "operationId": "mail-imports-credentials-delete", "summary": "Delete import credential", "description": "Delete a saved API credential", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports/credentials/{id}/validate": { "post": { "operationId": "mail-imports-credentials-validate", "summary": "Validate import credential", "description": "Re-validate an existing API credential", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "valid": { "type": "boolean" } }, "required": [ "valid" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports/remote-audiences": { "get": { "operationId": "mail-imports-listRemoteAudiences", "summary": "List remote audiences", "description": "Fetch available audiences from the import provider", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "credentialId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "audiences": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "createdAt": { "type": "string" } }, "required": [ "id", "name" ], "additionalProperties": false } } }, "required": [ "audiences" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports": { "post": { "operationId": "mail-imports-start", "summary": "Start import", "description": "Start importing contacts from an external provider", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "credentialId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "sourceAudienceId": { "type": "string", "minLength": 1 }, "sourceAudienceName": { "type": "string" }, "audienceId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "credentialId", "sourceAudienceId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "import": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "credentialId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceAudienceId": { "type": "string" }, "sourceAudienceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "totalContacts": { "type": "number" }, "importedCount": { "type": "number" }, "skippedCount": { "type": "number" }, "errorCount": { "type": "number" }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "credentialId", "audienceId", "sourceAudienceId", "sourceAudienceName", "status", "totalContacts", "importedCount", "skippedCount", "errorCount", "startedAt", "completedAt", "errorMessage", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } }, "required": [ "import" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "mail-imports-list", "summary": "List imports", "description": "List import job history", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "running", "completed", "failed" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "imports": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "credentialId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceAudienceId": { "type": "string" }, "sourceAudienceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "totalContacts": { "type": "number" }, "importedCount": { "type": "number" }, "skippedCount": { "type": "number" }, "errorCount": { "type": "number" }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "credentialId", "audienceId", "sourceAudienceId", "sourceAudienceName", "status", "totalContacts", "importedCount", "skippedCount", "errorCount", "startedAt", "completedAt", "errorMessage", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "limit": { "type": "number" }, "offset": { "type": "number" } }, "required": [ "imports", "total", "limit", "offset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/imports/{id}": { "get": { "operationId": "mail-imports-get", "summary": "Get import status", "description": "Get the status of an import job", "tags": [ "mail-imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "environment": { "type": "string" }, "credentialId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "audienceId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceAudienceId": { "type": "string" }, "sourceAudienceName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string" }, "totalContacts": { "type": "number" }, "importedCount": { "type": "number" }, "skippedCount": { "type": "number" }, "errorCount": { "type": "number" }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "credentialId", "audienceId", "sourceAudienceId", "sourceAudienceName", "status", "totalContacts", "importedCount", "skippedCount", "errorCount", "startedAt", "completedAt", "errorMessage", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/mailboxes": { "post": { "operationId": "mail-mailboxes-create", "summary": "Create a mailbox", "description": "Create a new inbound mailbox on a verified domain. Inbound messages are forwarded to the configured webhook URL.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "address": { "type": "string", "minLength": 1, "maxLength": 64, "pattern": "^[a-zA-Z0-9._%+-]+$" }, "displayName": { "type": "string", "minLength": 1, "maxLength": 255 }, "domain": { "type": "string", "minLength": 1 }, "webhookUrl": { "type": "string", "format": "uri" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "maxInboundPerDay": { "default": 1000, "type": "number", "minimum": 1, "maximum": 100000 } }, "required": [ "domain", "webhookUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "address": { "type": "string" }, "localPart": { "type": "string" }, "displayName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "domainId": { "type": "string" }, "webhookUrl": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "paused", "disabled" ] }, "maxInboundPerDay": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "address", "localPart", "displayName", "domain", "domainId", "webhookUrl", "status", "maxInboundPerDay", "metadata", "environment", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "mail-mailboxes-list", "summary": "List mailboxes", "description": "List mailboxes for the organization with optional filters for environment, domain, and status.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "domain", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "active", "paused", "disabled" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "mailboxes": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "address": { "type": "string" }, "localPart": { "type": "string" }, "displayName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "domainId": { "type": "string" }, "webhookUrl": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "paused", "disabled" ] }, "maxInboundPerDay": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "address", "localPart", "displayName", "domain", "domainId", "webhookUrl", "status", "maxInboundPerDay", "metadata", "environment", "createdAt", "updatedAt" ], "additionalProperties": false } }, "hasMore": { "type": "boolean" }, "nextCursor": { "type": "string" } }, "required": [ "mailboxes", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/mailboxes/{id}": { "get": { "operationId": "mail-mailboxes-get", "summary": "Get mailbox details", "description": "Retrieve details of a specific mailbox by ID.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "address": { "type": "string" }, "localPart": { "type": "string" }, "displayName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "domainId": { "type": "string" }, "webhookUrl": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "paused", "disabled" ] }, "maxInboundPerDay": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "address", "localPart", "displayName", "domain", "domainId", "webhookUrl", "status", "maxInboundPerDay", "metadata", "environment", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "mail-mailboxes-update", "summary": "Update a mailbox", "description": "Update mailbox settings such as display name, webhook URL, status, or rate limits.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "displayName": { "type": "string", "minLength": 1, "maxLength": 255 }, "webhookUrl": { "type": "string", "format": "uri" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "status": { "type": "string", "enum": [ "active", "paused", "disabled" ] }, "maxInboundPerDay": { "type": "number", "minimum": 1, "maximum": 100000 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "address": { "type": "string" }, "localPart": { "type": "string" }, "displayName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "domain": { "type": "string" }, "domainId": { "type": "string" }, "webhookUrl": { "type": "string" }, "status": { "type": "string", "enum": [ "active", "paused", "disabled" ] }, "maxInboundPerDay": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "address", "localPart", "displayName", "domain", "domainId", "webhookUrl", "status", "maxInboundPerDay", "metadata", "environment", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "mail-mailboxes-delete", "summary": "Delete a mailbox", "description": "Permanently delete a mailbox and all its inbound messages.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/mailboxes/messages": { "get": { "operationId": "mail-mailboxes-listInboundMessages", "summary": "List inbound messages", "description": "List inbound email messages received by your mailboxes, with optional filtering by mailbox.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "mailboxId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "messages": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "mailboxId": { "type": "string" }, "mailbox": { "type": "string" }, "messageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inReplyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "references": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "from": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "email", "name" ], "additionalProperties": false }, "to": { "type": "string" }, "cc": { "type": "array", "items": { "type": "string" } }, "bcc": { "type": "array", "items": { "type": "string" } }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "attachments": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "filename": { "type": "string" }, "contentType": { "type": "string" }, "size": { "type": "number" }, "url": { "type": "string" } }, "required": [ "filename", "contentType", "size" ], "additionalProperties": false } }, { "type": "null" } ] }, "webhookDelivered": { "type": "boolean" }, "webhookAttempts": { "type": "number" }, "createdAt": { "type": "string" } }, "required": [ "id", "mailboxId", "mailbox", "messageId", "inReplyTo", "references", "from", "to", "cc", "bcc", "replyTo", "subject", "html", "text", "attachments", "webhookDelivered", "webhookAttempts", "createdAt" ], "additionalProperties": false } }, "hasMore": { "type": "boolean" }, "nextCursor": { "type": "string" } }, "required": [ "messages", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/mail/mailboxes/messages/{id}": { "get": { "operationId": "mail-mailboxes-getInboundMessage", "summary": "Get inbound message", "description": "Retrieve details of a specific inbound email message.", "tags": [ "mail" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "mailboxId": { "type": "string" }, "mailbox": { "type": "string" }, "messageId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inReplyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "references": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "from": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "email", "name" ], "additionalProperties": false }, "to": { "type": "string" }, "cc": { "type": "array", "items": { "type": "string" } }, "bcc": { "type": "array", "items": { "type": "string" } }, "replyTo": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "subject": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "html": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "text": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "attachments": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "filename": { "type": "string" }, "contentType": { "type": "string" }, "size": { "type": "number" }, "url": { "type": "string" } }, "required": [ "filename", "contentType", "size" ], "additionalProperties": false } }, { "type": "null" } ] }, "webhookDelivered": { "type": "boolean" }, "webhookAttempts": { "type": "number" }, "createdAt": { "type": "string" } }, "required": [ "id", "mailboxId", "mailbox", "messageId", "inReplyTo", "references", "from", "to", "cc", "bcc", "replyTo", "subject", "html", "text", "attachments", "webhookDelivered", "webhookAttempts", "createdAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/upload": { "post": { "operationId": "cdn-assets-generateUploadUrl", "summary": "Generate upload URL", "description": "Generate a presigned URL for uploading a file to the CDN.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "filename": { "type": "string", "minLength": 1, "maxLength": 255 }, "mimeType": { "type": "string", "minLength": 1 }, "size": { "type": "integer", "exclusiveMinimum": 0, "maximum": 524288000 }, "folder": { "type": "string", "maxLength": 500 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "watermark": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "position": { "default": "bottom-right", "type": "string", "enum": [ "top-left", "top-center", "top-right", "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" ] }, "offsetX": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "offsetY": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "sizingMode": { "default": "relative", "type": "string", "enum": [ "absolute", "relative" ] }, "width": { "type": "integer", "minimum": 1, "maximum": 4096 }, "height": { "type": "integer", "minimum": 1, "maximum": 4096 }, "scale": { "default": 15, "type": "number", "minimum": 1, "maximum": 100 }, "opacity": { "default": 80, "type": "number", "minimum": 0, "maximum": 100 }, "tile": { "default": false, "type": "boolean" }, "tileSpacingX": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "tileSpacingY": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "rotation": { "default": 0, "type": "number", "minimum": -360, "maximum": 360 }, "borderRadius": { "default": 0, "type": "integer", "minimum": 0, "maximum": 500 } } } }, "required": [ "projectSlug", "filename", "mimeType", "size" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "uploadUrl": { "type": "string", "format": "uri" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "s3Key": { "type": "string" }, "cdnUrl": { "type": "string", "format": "uri" }, "expiresAt": { "type": "string" } }, "required": [ "uploadUrl", "assetId", "s3Key", "cdnUrl", "expiresAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/upload-from-url": { "post": { "operationId": "cdn-assets-uploadFromUrl", "summary": "Upload from URL", "description": "Upload a file by providing a source URL. The server fetches and stores the file directly, avoiding client-side download and re-upload.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "sourceUrl": { "type": "string", "format": "uri" }, "filename": { "type": "string", "minLength": 1, "maxLength": 255 }, "mimeType": { "type": "string", "minLength": 1 }, "folder": { "type": "string", "maxLength": 500 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "projectSlug", "sourceUrl", "filename", "mimeType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "type": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] }, "s3Key": { "type": "string" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "alt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "filename", "originalFilename", "mimeType", "size", "type", "s3Key", "cdnUrl", "directUrl", "width", "height", "duration", "status", "folder", "tags", "alt", "metadata", "uploadedByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/upload/{assetId}/confirm": { "post": { "operationId": "cdn-assets-confirmUpload", "summary": "Confirm upload", "description": "Confirm that a file upload has completed successfully.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "type": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] }, "s3Key": { "type": "string" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "alt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "filename", "originalFilename", "mimeType", "size", "type", "s3Key", "cdnUrl", "directUrl", "width", "height", "duration", "status", "folder", "tags", "alt", "metadata", "uploadedByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/assets/{id}": { "get": { "operationId": "cdn-assets-get", "summary": "Get asset", "description": "Get a single asset by ID.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "type": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] }, "s3Key": { "type": "string" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "alt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "filename", "originalFilename", "mimeType", "size", "type", "s3Key", "cdnUrl", "directUrl", "width", "height", "duration", "status", "folder", "tags", "alt", "metadata", "uploadedByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "cdn-assets-update", "summary": "Update asset", "description": "Update asset metadata such as filename, folder, tags, or alt text.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "filename": { "type": "string", "minLength": 1, "maxLength": 255 }, "folder": { "type": "string", "maxLength": 500 }, "tags": { "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 50 } }, "alt": { "type": "string", "maxLength": 500 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "type": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] }, "s3Key": { "type": "string" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "alt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "filename", "originalFilename", "mimeType", "size", "type", "s3Key", "cdnUrl", "directUrl", "width", "height", "duration", "status", "folder", "tags", "alt", "metadata", "uploadedByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "cdn-assets-delete", "summary": "Delete asset", "description": "Delete a single asset by ID.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/assets/delete": { "post": { "operationId": "cdn-assets-deleteMany", "summary": "Delete multiple assets", "description": "Delete multiple assets by their IDs.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "ids": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } }, "required": [ "ids" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "deletedCount": { "type": "number" } }, "required": [ "success", "deletedCount" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/assets": { "get": { "operationId": "cdn-assets-list", "summary": "List assets", "description": "List assets with optional filters and pagination.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "folder", "schema": { "type": "string" } }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "tags", "schema": { "type": "array", "items": { "type": "string" } } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "filename", "size" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "assets": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "type": { "type": "string", "enum": [ "image", "video", "audio", "document", "other" ] }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "alt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "thumbnailUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "filename", "originalFilename", "mimeType", "size", "type", "cdnUrl", "directUrl", "width", "height", "duration", "status", "folder", "tags", "alt", "thumbnailUrl", "createdAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "assets", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/assets/move": { "post": { "operationId": "cdn-assets-move", "summary": "Move assets", "description": "Move one or more assets to a different folder.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "assetIds": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "folder": { "anyOf": [ { "type": "string", "maxLength": 500 }, { "type": "null" } ] } }, "required": [ "assetIds", "folder" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "movedCount": { "type": "number" } }, "required": [ "success", "movedCount" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/transform": { "post": { "operationId": "cdn-assets-getTransformUrl", "summary": "Get transform URL", "description": "Get a URL for a transformed image with resize, crop, and effects options.", "tags": [ "cdn" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "options": { "type": "object", "properties": { "format": { "type": "string", "enum": [ "auto", "jpeg", "webp", "avif", "png" ] }, "quality": { "type": "integer", "minimum": 1, "maximum": 100 }, "width": { "type": "integer", "exclusiveMinimum": 0, "maximum": 4096 }, "height": { "type": "integer", "exclusiveMinimum": 0, "maximum": 4096 }, "fit": { "type": "string", "enum": [ "cover", "contain", "fill", "inside", "outside" ] }, "crop": { "type": "string", "enum": [ "center", "top", "bottom", "left", "right", "top-left", "top-right", "bottom-left", "bottom-right", "smart", "smart-entropy" ] }, "cropX": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "cropY": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "cropWidth": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "cropHeight": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "blur": { "type": "number", "minimum": 0.3, "maximum": 1000 }, "sharpen": { "type": "number", "minimum": 0, "maximum": 100 }, "brightness": { "type": "number", "minimum": -100, "maximum": 100 }, "saturation": { "type": "number", "minimum": -100, "maximum": 100 }, "grayscale": { "type": "boolean" }, "rotate": { "type": "integer", "minimum": -360, "maximum": 360 }, "flip": { "type": "boolean" }, "flop": { "type": "boolean" } } } }, "required": [ "assetId", "options" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "format": "uri" }, "originalUrl": { "type": "string", "format": "uri" }, "width": { "type": "number" }, "height": { "type": "number" }, "format": { "type": "string" } }, "required": [ "url", "originalUrl" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/folders": { "post": { "operationId": "cdn-folders-create", "summary": "Create a new folder", "description": "Create a new folder", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "parentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "parentId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetCount": { "type": "number" }, "totalSize": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "path", "parentId", "assetCount", "totalSize", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "cdn-folders-list", "summary": "List folders", "description": "List folders", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "parentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "search", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "folders": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" }, "path": { "type": "string" }, "parentId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "assetCount": { "type": "number" }, "totalSize": { "type": "number" }, "createdAt": { "type": "string" } }, "required": [ "id", "name", "path", "parentId", "assetCount", "totalSize", "createdAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "folders", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/folders/{id}": { "get": { "operationId": "cdn-folders-get", "summary": "Get a folder by ID", "description": "Get a folder by ID", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "parentId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetCount": { "type": "number" }, "totalSize": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "path", "parentId", "assetCount", "totalSize", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "cdn-folders-update", "summary": "Update a folder", "description": "Update a folder", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "parentId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetCount": { "type": "number" }, "totalSize": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "path", "parentId", "assetCount", "totalSize", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "cdn-folders-delete", "summary": "Delete a folder", "description": "Delete a folder", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "deleteContents", "schema": { "default": false, "type": "boolean" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/folders/path/{path}": { "get": { "operationId": "cdn-folders-getByPath", "summary": "Get a folder by path", "description": "Get a folder by path", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "path", "schema": { "type": "string", "maxLength": 500 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "type": "string" }, "name": { "type": "string" }, "path": { "type": "string" }, "parentId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetCount": { "type": "number" }, "totalSize": { "type": "number" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "path", "parentId", "assetCount", "totalSize", "createdByUserId", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/folders/move": { "post": { "operationId": "cdn-folders-move", "summary": "Move a folder", "description": "Move a folder", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "newParentId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] } }, "required": [ "id", "newParentId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/folders/tree": { "get": { "operationId": "cdn-folders-tree", "summary": "Get the folder tree for navigation", "description": "Get the folder tree for navigation", "tags": [ "folders" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "maxDepth", "schema": { "default": 5, "type": "integer", "minimum": 1, "maximum": 10 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "tree": { "type": "array", "items": { "$ref": "#/components/schemas/__schema0" } } }, "required": [ "tree" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/usage": { "get": { "operationId": "cdn-usage-get", "summary": "Get usage stats", "description": "Get usage stats", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "periodStart", "schema": { "type": "string" } }, { "in": "query", "name": "periodEnd", "schema": { "type": "string" } }, { "in": "query", "name": "folder", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "periodStart": { "type": "string" }, "periodEnd": { "type": "string" }, "requests": { "type": "number" }, "bandwidthBytes": { "type": "number" }, "bandwidthFormatted": { "type": "string" }, "transformations": { "type": "number" }, "storageBytes": { "type": "number" }, "storageFormatted": { "type": "string" }, "estimatedCostCents": { "type": "number" }, "estimatedCostFormatted": { "type": "string" }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "periodStart", "periodEnd", "requests", "bandwidthBytes", "bandwidthFormatted", "transformations", "storageBytes", "storageFormatted", "estimatedCostCents", "estimatedCostFormatted", "folder" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/usage/history": { "get": { "operationId": "cdn-usage-history", "summary": "Get usage history", "description": "Get usage history", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] }, "required": true }, { "in": "query", "name": "days", "schema": { "default": 30, "type": "integer", "minimum": 1, "maximum": 365 } }, { "in": "query", "name": "granularity", "schema": { "default": "day", "type": "string", "enum": [ "hour", "day", "week", "month" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": { "type": "array", "items": { "type": "object", "properties": { "timestamp": { "type": "string" }, "requests": { "type": "number" }, "bandwidthBytes": { "type": "number" }, "transformations": { "type": "number" } }, "required": [ "timestamp", "requests", "bandwidthBytes", "transformations" ], "additionalProperties": false } }, "totals": { "type": "object", "properties": { "requests": { "type": "number" }, "bandwidthBytes": { "type": "number" }, "transformations": { "type": "number" } }, "required": [ "requests", "bandwidthBytes", "transformations" ], "additionalProperties": false } }, "required": [ "data", "totals" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/usage/storage-breakdown": { "get": { "operationId": "cdn-usage-storageBreakdown", "summary": "Get storage breakdown", "description": "Get storage breakdown", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "groupBy", "schema": { "default": "type", "type": "string", "enum": [ "type", "folder" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string" }, "count": { "type": "number" }, "sizeBytes": { "type": "number" }, "sizeFormatted": { "type": "string" }, "percentage": { "type": "number" } }, "required": [ "key", "count", "sizeBytes", "sizeFormatted", "percentage" ], "additionalProperties": false } }, "total": { "type": "object", "properties": { "count": { "type": "number" }, "sizeBytes": { "type": "number" }, "sizeFormatted": { "type": "string" } }, "required": [ "count", "sizeBytes", "sizeFormatted" ], "additionalProperties": false } }, "required": [ "items", "total" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/usage/storage": { "get": { "operationId": "cdn-usage-storage", "summary": "Get total stored bytes", "description": "Total bytes stored under a project or folder, counting uploads and every derived object (renditions, HLS segments and manifests, thumbnails, GIFs).", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "folder", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "totalBytes": { "type": "number" }, "totalFormatted": { "type": "string" }, "objectCount": { "type": "number" }, "byType": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "object", "properties": { "bytes": { "type": "number" }, "bytesFormatted": { "type": "string" }, "objectCount": { "type": "number" } }, "required": [ "bytes", "bytesFormatted", "objectCount" ], "additionalProperties": false } }, "breakdown": { "type": "object", "properties": { "originals": { "type": "object", "properties": { "bytes": { "type": "number" }, "bytesFormatted": { "type": "string" }, "objectCount": { "type": "number" } }, "required": [ "bytes", "bytesFormatted", "objectCount" ], "additionalProperties": false }, "derived": { "type": "object", "properties": { "bytes": { "type": "number" }, "bytesFormatted": { "type": "string" }, "objectCount": { "type": "number" } }, "required": [ "bytes", "bytesFormatted", "objectCount" ], "additionalProperties": false } }, "required": [ "originals", "derived" ], "additionalProperties": false }, "unmeasuredAssets": { "type": "number" }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "totalBytes", "totalFormatted", "objectCount", "byType", "breakdown", "unmeasuredAssets", "folder" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/transcode": { "post": { "operationId": "cdn-video-transcode", "summary": "Transcode video", "description": "Create a transcoding job to convert video to HLS or MP4 format with multiple quality variants.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "variants": { "minItems": 1, "maxItems": 10, "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "bitrate": { "type": "integer", "exclusiveMinimum": 0, "maximum": 50000 }, "codec": { "default": "h264", "type": "string", "enum": [ "h264", "h265" ] }, "maxFramerate": { "type": "integer", "exclusiveMinimum": 0, "maximum": 120 } }, "required": [ "quality" ] } }, "watermark": { "oneOf": [ { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "position": { "default": "bottom-right", "type": "string", "enum": [ "top-left", "top-center", "top-right", "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" ] }, "offsetX": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "offsetY": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "sizingMode": { "default": "relative", "type": "string", "enum": [ "absolute", "relative" ] }, "width": { "type": "integer", "minimum": 1, "maximum": 4096 }, "height": { "type": "integer", "minimum": 1, "maximum": 4096 }, "scale": { "default": 15, "type": "number", "minimum": 1, "maximum": 100 }, "opacity": { "default": 80, "type": "number", "minimum": 0, "maximum": 100 }, "tile": { "default": false, "type": "boolean" }, "tileSpacingX": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "tileSpacingY": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "rotation": { "default": 0, "type": "number", "minimum": -360, "maximum": 360 }, "borderRadius": { "default": 0, "type": "integer", "minimum": 0, "maximum": 500 }, "type": { "type": "string", "const": "image" } }, "required": [ "type" ] }, { "type": "object", "properties": { "position": { "default": "bottom-right", "type": "string", "enum": [ "top-left", "top-center", "top-right", "center-left", "center", "center-right", "bottom-left", "bottom-center", "bottom-right" ] }, "offsetX": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "offsetY": { "default": 20, "type": "integer", "minimum": 0, "maximum": 1000 }, "opacity": { "default": 80, "type": "number", "minimum": 0, "maximum": 100 }, "tile": { "default": false, "type": "boolean" }, "tileSpacingX": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "tileSpacingY": { "default": 100, "type": "integer", "minimum": 0, "maximum": 1000 }, "rotation": { "default": 0, "type": "number", "minimum": -360, "maximum": 360 }, "type": { "type": "string", "const": "text" }, "text": { "type": "string", "minLength": 1, "maxLength": 500 }, "fontFamily": { "default": "Liberation Sans", "type": "string", "maxLength": 100 }, "fontSize": { "default": 48, "type": "integer", "minimum": 8, "maximum": 200 }, "fontColor": { "default": "#FFFFFF", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" } }, "required": [ "type", "text" ] } ], "type": "object" }, "trim": { "type": "object", "properties": { "start": { "type": "number", "minimum": 0 }, "end": { "type": "number", "minimum": 0 } }, "required": [ "start", "end" ] }, "webhookUrl": { "type": "string", "format": "uri" } }, "required": [ "projectSlug", "assetId", "outputFormat", "variants" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "mediaConvertJobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mediaConvertArn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "variants": { "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "bitrate": { "type": "number" }, "codec": { "type": "string", "enum": [ "h264", "h265" ] }, "maxFramerate": { "type": "number" }, "sizeBytes": { "type": "number" } }, "required": [ "quality" ], "additionalProperties": false } }, "watermark": { "anyOf": [ {}, { "type": "null" } ] }, "trimStart": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "trimEnd": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "totalOutputBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "estimatedCost": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "assetId", "environment", "mediaConvertJobId", "mediaConvertArn", "outputFormat", "variants", "watermark", "trimStart", "trimEnd", "status", "progress", "errorMessage", "startedAt", "completedAt", "inputDurationSeconds", "outputDurationSeconds", "totalOutputBytes", "estimatedCost", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/jobs/{jobId}": { "get": { "operationId": "cdn-video-getJob", "summary": "Get transcoding job", "description": "Get details of a transcoding job including status and progress.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "mediaConvertJobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mediaConvertArn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "variants": { "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "bitrate": { "type": "number" }, "codec": { "type": "string", "enum": [ "h264", "h265" ] }, "maxFramerate": { "type": "number" }, "sizeBytes": { "type": "number" } }, "required": [ "quality" ], "additionalProperties": false } }, "watermark": { "anyOf": [ {}, { "type": "null" } ] }, "trimStart": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "trimEnd": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "totalOutputBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "estimatedCost": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "assetId", "environment", "mediaConvertJobId", "mediaConvertArn", "outputFormat", "variants", "watermark", "trimStart", "trimEnd", "status", "progress", "errorMessage", "startedAt", "completedAt", "inputDurationSeconds", "outputDurationSeconds", "totalOutputBytes", "estimatedCost", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/jobs": { "get": { "operationId": "cdn-video-listJobs", "summary": "List transcoding jobs", "description": "List transcoding jobs with optional filters.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "jobs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "mediaConvertJobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mediaConvertArn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "variants": { "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "bitrate": { "type": "number" }, "codec": { "type": "string", "enum": [ "h264", "h265" ] }, "maxFramerate": { "type": "number" }, "sizeBytes": { "type": "number" } }, "required": [ "quality" ], "additionalProperties": false } }, "watermark": { "anyOf": [ {}, { "type": "null" } ] }, "trimStart": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "trimEnd": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "totalOutputBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "estimatedCost": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "assetId", "environment", "mediaConvertJobId", "mediaConvertArn", "outputFormat", "variants", "watermark", "trimStart", "trimEnd", "status", "progress", "errorMessage", "startedAt", "completedAt", "inputDurationSeconds", "outputDurationSeconds", "totalOutputBytes", "estimatedCost", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "jobs", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/jobs/{jobId}/cancel": { "post": { "operationId": "cdn-video-cancelJob", "summary": "Cancel transcoding job", "description": "Cancel a pending or processing transcoding job.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "mediaConvertJobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mediaConvertArn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "variants": { "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "bitrate": { "type": "number" }, "codec": { "type": "string", "enum": [ "h264", "h265" ] }, "maxFramerate": { "type": "number" }, "sizeBytes": { "type": "number" } }, "required": [ "quality" ], "additionalProperties": false } }, "watermark": { "anyOf": [ {}, { "type": "null" } ] }, "trimStart": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "trimEnd": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "inputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "totalOutputBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "estimatedCost": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "assetId", "environment", "mediaConvertJobId", "mediaConvertArn", "outputFormat", "variants", "watermark", "trimStart", "trimEnd", "status", "progress", "errorMessage", "startedAt", "completedAt", "inputDurationSeconds", "outputDurationSeconds", "totalOutputBytes", "estimatedCost", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/{assetId}/stream": { "get": { "operationId": "cdn-video-getStreamUrl", "summary": "Get streaming URLs", "description": "Get HLS and MP4 streaming URLs for a transcoded video.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "hlsUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mp4Urls": { "type": "array", "items": { "type": "object", "properties": { "quality": { "type": "string" }, "url": { "type": "string" } }, "required": [ "quality", "url" ], "additionalProperties": false } }, "thumbnails": { "type": "array", "items": { "type": "object", "properties": { "timestamp": { "type": "number" }, "url": { "type": "string" } }, "required": [ "timestamp", "url" ], "additionalProperties": false } } }, "required": [ "hlsUrl", "mp4Urls", "thumbnails" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/thumbnail": { "post": { "operationId": "cdn-video-generateThumbnail", "summary": "Generate thumbnail", "description": "Generate a thumbnail image at a specific timestamp in a video.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number", "minimum": 0 }, "width": { "type": "integer", "minimum": 64, "maximum": 1920 }, "format": { "default": "jpg", "type": "string", "enum": [ "jpg", "png", "webp" ] } }, "required": [ "projectSlug", "assetId", "timestamp" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "format": { "type": "string" }, "status": { "type": "string" } }, "required": [ "id", "assetId", "timestamp", "url", "width", "height", "format" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/thumbnail/{assetId}": { "get": { "operationId": "cdn-video-getThumbnail", "summary": "Get thumbnail", "description": "Get the thumbnail at a specific timestamp. If it does not exist yet, generation is queued automatically and a pending response is returned; poll this endpoint until status is \"ready\".", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "timestamp", "schema": { "type": "number", "minimum": 0 }, "required": true }, { "in": "query", "name": "width", "schema": { "type": "integer", "minimum": 64, "maximum": 1920 } }, { "in": "query", "name": "format", "schema": { "default": "jpg", "type": "string", "enum": [ "jpg", "png", "webp" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "format": { "type": "string" }, "status": { "type": "string", "enum": [ "ready", "pending" ] } }, "required": [ "id", "assetId", "timestamp", "url", "width", "height", "format", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/thumbnail/regenerate": { "post": { "operationId": "cdn-video-regenerateThumbnail", "summary": "Regenerate thumbnail", "description": "Force regenerate a thumbnail at a specific timestamp, even if one already exists. Useful for retrying failed thumbnail generation.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number", "minimum": 0 }, "width": { "type": "integer", "minimum": 64, "maximum": 1920 }, "format": { "default": "jpg", "type": "string", "enum": [ "jpg", "png", "webp" ] } }, "required": [ "assetId", "timestamp" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "format": { "type": "string" }, "status": { "type": "string" } }, "required": [ "id", "assetId", "timestamp", "url", "width", "height", "format" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/{assetId}/thumbnails": { "get": { "operationId": "cdn-video-getThumbnails", "summary": "Get thumbnails", "description": "Get all generated thumbnails for a video.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "timestamp": { "type": "number" }, "url": { "type": "string" }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "format": { "type": "string" } }, "required": [ "id", "assetId", "timestamp", "url", "width", "height", "format" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/audio": { "post": { "operationId": "cdn-video-extractAudio", "summary": "Extract audio", "description": "Extract audio from a video in MP3, AAC, or WAV format.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "format": { "type": "string", "enum": [ "mp3", "aac", "wav" ] }, "bitrate": { "type": "integer", "minimum": 32, "maximum": 320 } }, "required": [ "projectSlug", "assetId", "format" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "message": { "type": "string" } }, "required": [ "status", "message" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/gif": { "post": { "operationId": "cdn-video-generateGif", "summary": "Generate GIF", "description": "Generate an animated GIF from a video segment. Supports palette optimization for smaller file sizes.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "startTime": { "default": 0, "type": "number", "minimum": 0 }, "duration": { "default": 5, "type": "number", "minimum": 0.5, "maximum": 30 }, "width": { "type": "integer", "minimum": 100, "maximum": 800 }, "fps": { "default": 10, "type": "integer", "minimum": 5, "maximum": 30 }, "optimizePalette": { "default": true, "type": "boolean" } }, "required": [ "projectSlug", "assetId" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "startTime": { "type": "number" }, "duration": { "type": "number" }, "fps": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "sizeBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "frameCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "assetId", "startTime", "duration", "fps", "url", "width", "height", "sizeBytes", "frameCount", "status", "errorMessage", "createdAt", "completedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/{assetId}/gifs": { "get": { "operationId": "cdn-video-getGifs", "summary": "Get GIFs", "description": "Get all generated GIFs for a video asset.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "assetId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "startTime": { "type": "number" }, "duration": { "type": "number" }, "fps": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "sizeBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "frameCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "assetId", "startTime", "duration", "fps", "url", "width", "height", "sizeBytes", "frameCount", "status", "errorMessage", "createdAt", "completedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/gif/{gifId}": { "get": { "operationId": "cdn-video-getGif", "summary": "Get GIF", "description": "Get details of a specific GIF including status and URL.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "gifId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "startTime": { "type": "number" }, "duration": { "type": "number" }, "fps": { "type": "number" }, "url": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "sizeBytes": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "frameCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "assetId", "startTime", "duration", "fps", "url", "width", "height", "sizeBytes", "frameCount", "status", "errorMessage", "createdAt", "completedAt" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/merge": { "post": { "operationId": "cdn-merge-create", "summary": "Create merge job", "description": "Create a job to merge multiple images, videos, and audio into a single video.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "inputs": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "startTime": { "type": "number", "minimum": 0 }, "endTime": { "type": "number", "exclusiveMinimum": 0 }, "textOverlay": { "type": "object", "properties": { "text": { "type": "string", "minLength": 1, "maxLength": 500 }, "position": { "default": "bottom", "type": "string", "enum": [ "top", "center", "bottom" ] }, "fontSize": { "default": 48, "type": "number", "minimum": 12, "maximum": 200 }, "fontFamily": { "default": "Liberation Sans", "type": "string" }, "fontWeight": { "default": "bold", "type": "string", "enum": [ "normal", "bold" ] }, "color": { "default": "#FFFFFF", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "backgroundColor": { "type": "string" }, "padding": { "default": 20, "type": "number", "minimum": 0, "maximum": 100 }, "maxWidth": { "default": 90, "type": "number", "minimum": 10, "maximum": 100 }, "shadow": { "type": "object", "properties": { "color": { "default": "#000000", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "offsetX": { "default": 2, "type": "number", "minimum": 0, "maximum": 20 }, "offsetY": { "default": 2, "type": "number", "minimum": 0, "maximum": 20 } } }, "stroke": { "type": "object", "properties": { "color": { "default": "#000000", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "width": { "default": 2, "type": "number", "minimum": 1, "maximum": 10 } } } }, "required": [ "text" ] }, "composite": { "type": "object", "properties": { "backgroundAssetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "quad": { "type": "object", "properties": { "topLeft": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0, "maximum": 8192 }, "y": { "type": "number", "minimum": 0, "maximum": 8192 } }, "required": [ "x", "y" ] }, "topRight": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0, "maximum": 8192 }, "y": { "type": "number", "minimum": 0, "maximum": 8192 } }, "required": [ "x", "y" ] }, "bottomLeft": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0, "maximum": 8192 }, "y": { "type": "number", "minimum": 0, "maximum": 8192 } }, "required": [ "x", "y" ] }, "bottomRight": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0, "maximum": 8192 }, "y": { "type": "number", "minimum": 0, "maximum": 8192 } }, "required": [ "x", "y" ] } }, "required": [ "topLeft", "topRight", "bottomLeft", "bottomRight" ] }, "rect": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0, "maximum": 8192 }, "y": { "type": "number", "minimum": 0, "maximum": 8192 }, "width": { "type": "number", "minimum": 16, "maximum": 8192 }, "height": { "type": "number", "minimum": 16, "maximum": 8192 } }, "required": [ "x", "y", "width", "height" ] }, "fit": { "default": "cover", "type": "string", "enum": [ "cover", "contain", "fill" ] }, "chromaKey": { "type": "object", "properties": { "color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "similarity": { "default": 0.3, "type": "number", "minimum": 0.01, "maximum": 1 }, "blend": { "default": 0.1, "type": "number", "minimum": 0, "maximum": 1 } }, "required": [ "color" ] }, "maskAssetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "backgroundAssetId" ] } }, "required": [ "assetId" ] } }, "audioTrack": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "loop": { "default": false, "type": "boolean" }, "fadeIn": { "type": "number", "minimum": 0, "maximum": 10 }, "fadeOut": { "type": "number", "minimum": 0, "maximum": 10 } }, "required": [ "assetId" ] }, "output": { "type": "object", "properties": { "format": { "default": "mp4", "type": "string", "enum": [ "hls", "mp4" ] }, "quality": { "default": "720p", "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "aspectRatio": { "default": "auto", "type": "string", "enum": [ "auto", "16:9", "9:16", "1:1" ] }, "filename": { "type": "string", "maxLength": 255 } } }, "webhookUrl": { "type": "string", "format": "uri" } }, "required": [ "projectSlug", "inputs" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "inputs": {}, "audioTrackAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "outputQuality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "outputAspectRatio": { "type": "string", "enum": [ "auto", "16:9", "9:16", "1:1" ] }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "inputs", "audioTrackAssetId", "outputFormat", "outputQuality", "outputAspectRatio", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "totalDurationSeconds", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "cdn-merge-list", "summary": "List merge jobs", "description": "List merge jobs with optional status filter.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "jobs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "inputs": {}, "audioTrackAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "outputQuality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "outputAspectRatio": { "type": "string", "enum": [ "auto", "16:9", "9:16", "1:1" ] }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "inputs", "audioTrackAssetId", "outputFormat", "outputQuality", "outputAspectRatio", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "totalDurationSeconds", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "jobs", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/merge/{jobId}": { "get": { "operationId": "cdn-merge-get", "summary": "Get merge job", "description": "Get details of a merge job including status and output asset.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "inputs": {}, "audioTrackAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "outputFormat": { "type": "string", "enum": [ "hls", "mp4" ] }, "outputQuality": { "type": "string", "enum": [ "360p", "480p", "720p", "1080p", "1440p", "2160p" ] }, "outputAspectRatio": { "type": "string", "enum": [ "auto", "16:9", "9:16", "1:1" ] }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "totalDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAsset": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "filename": { "type": "string" }, "size": { "type": "number" }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "id", "cdnUrl", "directUrl", "filename", "size", "duration" ], "additionalProperties": false }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "inputs", "audioTrackAssetId", "outputFormat", "outputQuality", "outputAspectRatio", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "totalDurationSeconds", "webhookUrl", "createdAt", "updatedAt", "outputAsset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/merge/{jobId}/cancel": { "post": { "operationId": "cdn-merge-cancel", "summary": "Cancel merge job", "description": "Cancel a pending or processing merge job.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/render": { "post": { "operationId": "cdn-render-create", "summary": "Create render job", "description": "Render a declarative video spec into a video asset. The spec describes scenes, layers and timing as data; no caller code is executed.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "spec": { "type": "object", "properties": { "canvas": { "default": {}, "type": "object", "properties": { "width": { "default": 1080, "type": "integer", "minimum": 64, "maximum": 3840 }, "height": { "default": 1920, "type": "integer", "minimum": 64, "maximum": 3840 }, "fps": { "default": 30, "type": "integer", "minimum": 1, "maximum": 60 }, "background": { "default": "#000000", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" } } }, "scenes": { "minItems": 1, "maxItems": 60, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "maxLength": 120 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "background": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "layers": { "minItems": 1, "maxItems": 24, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "image" }, "src": { "type": "string", "minLength": 1, "maxLength": 2048 }, "fit": { "default": "cover", "type": "string", "enum": [ "cover", "contain", "fill" ] }, "zoom": { "type": "object", "properties": { "from": { "type": "number", "minimum": 0.5, "maximum": 4 }, "to": { "type": "number", "minimum": 0.5, "maximum": 4 } }, "required": [ "from", "to" ] } }, "required": [ "type", "src" ] }, { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "video" }, "src": { "type": "string", "minLength": 1, "maxLength": 2048 }, "fit": { "default": "cover", "type": "string", "enum": [ "cover", "contain", "fill" ] }, "trimStart": { "type": "number", "minimum": 0, "maximum": 3600 }, "muted": { "default": true, "type": "boolean" }, "volume": { "default": 1, "type": "number", "minimum": 0, "maximum": 1 } }, "required": [ "type", "src" ] }, { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "solid" }, "color": { "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" } }, "required": [ "type", "color" ] }, { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "caption" }, "text": { "type": "string", "minLength": 1, "maxLength": 600 }, "position": { "default": "upperThird", "type": "string", "enum": [ "top", "upperThird", "center", "lowerThird", "bottom" ] }, "offsetY": { "type": "number", "minimum": 0, "maximum": 1 }, "align": { "default": "center", "type": "string", "enum": [ "left", "center", "right" ] }, "fontSize": { "default": 82, "type": "number", "minimum": 8, "maximum": 400 }, "fontWeight": { "default": 800, "type": "number", "minimum": 100, "maximum": 900 }, "color": { "default": "#FFFFFF", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "stroke": { "type": "object", "properties": { "color": { "default": "#000000", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "width": { "default": 10, "type": "number", "minimum": 0, "maximum": 40 } } }, "shadow": { "type": "object", "properties": { "color": { "default": "#000000", "type": "string", "pattern": "^#[0-9A-Fa-f]{6}$" }, "offsetX": { "default": 0, "type": "number", "minimum": -60, "maximum": 60 }, "offsetY": { "default": 4, "type": "number", "minimum": -60, "maximum": 60 }, "blur": { "default": 12, "type": "number", "minimum": 0, "maximum": 80 } } }, "maxWidth": { "default": 88, "type": "number", "minimum": 10, "maximum": 100 }, "backgroundColor": { "type": "string", "maxLength": 64 } }, "required": [ "type", "text" ] }, { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "appMockup" }, "photo": { "type": "string", "minLength": 1, "maxLength": 2048 }, "prompt": { "type": "string", "minLength": 1, "maxLength": 300 }, "appName": { "default": "AI Edit", "type": "string", "minLength": 1, "maxLength": 60 }, "typeStartDelay": { "default": 0.4, "type": "number", "minimum": 0, "maximum": 10 }, "typeSpeed": { "default": 0.8, "type": "number", "minimum": 0.05, "maximum": 10 }, "generatingSeconds": { "default": 1.6, "type": "number", "minimum": 0, "maximum": 30 }, "generatingLabel": { "default": "Creating your edit...", "type": "string", "minLength": 1, "maxLength": 120 }, "theme": { "default": "light", "type": "string", "enum": [ "light", "dark" ] } }, "required": [ "type", "photo", "prompt" ] }, { "type": "object", "properties": { "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "type": { "type": "string", "const": "messageThread" }, "recipient": { "type": "string", "minLength": 1, "maxLength": 60 }, "theme": { "default": "dark", "type": "string", "enum": [ "dark", "light" ] }, "messages": { "minItems": 1, "maxItems": 80, "type": "array", "items": { "type": "object", "properties": { "sender": { "type": "string", "enum": [ "user", "recipient" ] }, "text": { "type": "string", "minLength": 1, "maxLength": 600 }, "hold": { "type": "number", "minimum": 0.1, "maximum": 30 }, "history": { "type": "boolean" } }, "required": [ "sender", "text" ] } }, "imageSrc": { "type": "string", "minLength": 1, "maxLength": 2048 }, "showKeyboard": { "default": true, "type": "boolean" } }, "required": [ "type", "recipient", "messages" ] } ], "type": "object" } } }, "required": [ "layers" ] } }, "audio": { "default": [], "maxItems": 4, "type": "array", "items": { "type": "object", "properties": { "src": { "type": "string", "minLength": 1, "maxLength": 2048 }, "start": { "default": 0, "type": "number", "minimum": 0, "maximum": 3600 }, "duration": { "type": "number", "exclusiveMinimum": 0, "maximum": 3600 }, "volume": { "default": 0.34, "type": "number", "minimum": 0, "maximum": 1 }, "fadeIn": { "default": 0.7, "type": "number", "minimum": 0, "maximum": 10 }, "fadeOut": { "default": 1.2, "type": "number", "minimum": 0, "maximum": 10 }, "loop": { "default": false, "type": "boolean" } }, "required": [ "src" ] } } }, "required": [ "scenes" ] }, "output": { "type": "object", "properties": { "format": { "default": "mp4", "type": "string", "enum": [ "mp4", "webm" ] }, "scale": { "default": 1, "type": "number", "minimum": 0.1, "maximum": 4 }, "filename": { "type": "string", "maxLength": 255 } } }, "webhookUrl": { "type": "string", "format": "uri" } }, "required": [ "projectSlug", "spec" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "spec": {}, "outputFormat": { "type": "string", "enum": [ "mp4", "webm" ] }, "outputScale": { "type": "number" }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fps": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "durationInFrames": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "spec", "outputFormat", "outputScale", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "width", "height", "fps", "durationInFrames", "outputDurationSeconds", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "cdn-render-list", "summary": "List render jobs", "description": "List render jobs with an optional status filter.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "jobs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "spec": {}, "outputFormat": { "type": "string", "enum": [ "mp4", "webm" ] }, "outputScale": { "type": "number" }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fps": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "durationInFrames": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "spec", "outputFormat", "outputScale", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "width", "height", "fps", "durationInFrames", "outputDurationSeconds", "webhookUrl", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "jobs", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/render/{jobId}": { "get": { "operationId": "cdn-render-get", "summary": "Get render job", "description": "Get details of a render job including status and output asset.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "spec": {}, "outputFormat": { "type": "string", "enum": [ "mp4", "webm" ] }, "outputScale": { "type": "number" }, "outputFilename": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAssetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "queued", "processing", "completed", "failed", "cancelled" ] }, "progress": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "width": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "height": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fps": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "durationInFrames": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "outputDurationSeconds": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "webhookUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "outputAsset": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "cdnUrl": { "type": "string" }, "directUrl": { "type": "string" }, "filename": { "type": "string" }, "size": { "type": "number" }, "duration": { "anyOf": [ { "type": "number" }, { "type": "null" } ] } }, "required": [ "id", "cdnUrl", "directUrl", "filename", "size", "duration" ], "additionalProperties": false }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "spec", "outputFormat", "outputScale", "outputFilename", "outputAssetId", "status", "progress", "errorMessage", "startedAt", "completedAt", "width", "height", "fps", "durationInFrames", "outputDurationSeconds", "webhookUrl", "createdAt", "updatedAt", "outputAsset" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/video/render/{jobId}/cancel": { "post": { "operationId": "cdn-render-cancel", "summary": "Cancel render job", "description": "Cancel a pending or processing render job.", "tags": [ "cdn", "video" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/upload": { "post": { "operationId": "cdn-privateFiles-generateUploadUrl", "summary": "Generate private upload URL", "description": "Generate a presigned URL for uploading a private file.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "filename": { "type": "string", "minLength": 1, "maxLength": 255 }, "mimeType": { "type": "string", "minLength": 1 }, "size": { "type": "integer", "exclusiveMinimum": 0, "maximum": 524288000 }, "folder": { "type": "string", "maxLength": 500 }, "description": { "type": "string", "maxLength": 1000 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "projectSlug", "filename", "mimeType", "size" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "uploadUrl": { "type": "string", "format": "uri" }, "fileId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "s3Key": { "type": "string" }, "expiresAt": { "type": "string" } }, "required": [ "uploadUrl", "fileId", "s3Key", "expiresAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/upload/{fileId}/confirm": { "post": { "operationId": "cdn-privateFiles-confirmUpload", "summary": "Confirm private upload", "description": "Confirm that a private file upload has completed successfully.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "fileId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "s3Key": { "type": "string" }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "ready", "failed", "deleted" ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "filename", "originalFilename", "mimeType", "size", "s3Key", "folder", "description", "tags", "metadata", "status", "uploadedByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/{fileId}/download": { "post": { "operationId": "cdn-privateFiles-generateDownloadUrl", "summary": "Generate download URL", "description": "Generate a presigned URL for downloading a private file.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "fileId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "expiresIn": { "default": 3600, "type": "integer", "minimum": 3600, "maximum": 604800 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "downloadUrl": { "type": "string", "format": "uri" }, "expiresAt": { "type": "string" }, "filename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" } }, "required": [ "downloadUrl", "expiresAt", "filename", "mimeType", "size" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/{id}": { "get": { "operationId": "cdn-privateFiles-get", "summary": "Get private file", "description": "Get details of a private file by ID.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "s3Key": { "type": "string" }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "ready", "failed", "deleted" ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "filename", "originalFilename", "mimeType", "size", "s3Key", "folder", "description", "tags", "metadata", "status", "uploadedByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "cdn-privateFiles-update", "summary": "Update private file", "description": "Update a private file's metadata.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "filename": { "type": "string", "minLength": 1, "maxLength": 255 }, "folder": { "type": "string", "maxLength": 500 }, "description": { "type": "string", "maxLength": 1000 }, "tags": { "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 50 } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "s3Key": { "type": "string" }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "ready", "failed", "deleted" ] }, "uploadedByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "filename", "originalFilename", "mimeType", "size", "s3Key", "folder", "description", "tags", "metadata", "status", "uploadedByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "cdn-privateFiles-delete", "summary": "Delete private file", "description": "Delete a private file by ID.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/delete": { "post": { "operationId": "cdn-privateFiles-deleteMany", "summary": "Delete multiple private files", "description": "Delete multiple private files by their IDs.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "ids": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } }, "required": [ "ids" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "deletedCount": { "type": "number" } }, "required": [ "success", "deletedCount" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private": { "get": { "operationId": "cdn-privateFiles-list", "summary": "List private files", "description": "List private files with pagination and optional filters.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "folder", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "ready", "failed", "deleted" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "tags", "schema": { "type": "array", "items": { "type": "string" } } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "filename", "size" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "filename": { "type": "string" }, "originalFilename": { "type": "string" }, "mimeType": { "type": "string" }, "size": { "type": "number" }, "status": { "type": "string", "enum": [ "pending", "ready", "failed", "deleted" ] }, "folder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "filename", "originalFilename", "mimeType", "size", "status", "folder", "description", "tags", "createdAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "files", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/private/move": { "post": { "operationId": "cdn-privateFiles-move", "summary": "Move private files", "description": "Move private files to a different folder.", "tags": [ "cdn", "private-files" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "fileIds": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "folder": { "anyOf": [ { "type": "string", "maxLength": 500 }, { "type": "null" } ] } }, "required": [ "fileIds", "folder" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "movedCount": { "type": "number" } }, "required": [ "success", "movedCount" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/bundles": { "post": { "operationId": "cdn-bundles-create", "summary": "Create download bundle", "description": "Create a new download bundle containing multiple assets and/or private files.", "tags": [ "cdn", "bundles" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 1000 }, "assetIds": { "maxItems": 500, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "privateFileIds": { "maxItems": 500, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "expiresIn": { "default": 86400, "type": "integer", "minimum": 3600, "maximum": 604800 } }, "required": [ "projectSlug", "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "bundle": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetIds": { "anyOf": [ { "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "type": "null" } ] }, "privateFileIds": { "anyOf": [ { "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "type": "null" } ] }, "s3Key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "size": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fileCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "expired" ] }, "jobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "assetIds", "privateFileIds", "s3Key", "size", "fileCount", "status", "jobId", "error", "expiresAt", "createdByUserId", "createdAt", "completedAt" ], "additionalProperties": false } }, "required": [ "bundle" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "cdn-bundles-list", "summary": "List bundles", "description": "List download bundles with pagination and optional filters.", "tags": [ "cdn", "bundles" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "expired" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "name", "size" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "bundles": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "expired" ] }, "size": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fileCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "description", "status", "size", "fileCount", "expiresAt", "createdAt", "completedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "bundles", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/bundles/{id}": { "get": { "operationId": "cdn-bundles-get", "summary": "Get bundle", "description": "Get details of a download bundle by ID.", "tags": [ "cdn", "bundles" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetIds": { "anyOf": [ { "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "type": "null" } ] }, "privateFileIds": { "anyOf": [ { "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "type": "null" } ] }, "s3Key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "size": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "fileCount": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "processing", "ready", "failed", "expired" ] }, "jobId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdByUserId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "name", "description", "assetIds", "privateFileIds", "s3Key", "size", "fileCount", "status", "jobId", "error", "expiresAt", "createdByUserId", "createdAt", "completedAt" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "cdn-bundles-delete", "summary": "Delete bundle", "description": "Delete a download bundle and its associated files.", "tags": [ "cdn", "bundles" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/bundles/{bundleId}/download": { "post": { "operationId": "cdn-bundles-generateDownloadUrl", "summary": "Generate bundle download URL", "description": "Generate a presigned URL for downloading a completed bundle.", "tags": [ "cdn", "bundles" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "bundleId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "expiresIn": { "default": 3600, "type": "integer", "minimum": 3600, "maximum": 604800 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "downloadUrl": { "type": "string", "format": "uri" }, "expiresAt": { "type": "string" }, "filename": { "type": "string" }, "size": { "type": "number" } }, "required": [ "downloadUrl", "expiresAt", "filename", "size" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/imports": { "post": { "operationId": "cdn-imports-create", "summary": "Create S3 import job", "description": "Create a new bulk import job to migrate files from an external S3 bucket. Requires Pro plan or higher.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string", "minLength": 1, "maxLength": 255 }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "sourceBucket": { "type": "string", "minLength": 3, "maxLength": 63, "pattern": "^[a-z0-9][a-z0-9.-]*[a-z0-9]$" }, "sourceRegion": { "type": "string", "minLength": 1, "maxLength": 25, "pattern": "^[a-z]{2}-[a-z]+-\\d+$" }, "sourcePrefix": { "type": "string", "maxLength": 1024 }, "authType": { "type": "string", "enum": [ "iam_credentials", "role_assumption" ] }, "accessKeyId": { "type": "string", "minLength": 16, "maxLength": 128 }, "secretAccessKey": { "type": "string", "minLength": 1, "maxLength": 256 }, "roleArn": { "type": "string", "pattern": "^arn:aws:iam::\\d{12}:role\\/[\\w+=,.@-]+$" }, "externalId": { "type": "string", "minLength": 1, "maxLength": 1224 }, "pathMode": { "default": "flatten", "type": "string", "enum": [ "preserve", "flatten" ] }, "targetFolder": { "type": "string", "maxLength": 1024 }, "notifyEmail": { "type": "string", "format": "email", "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$" } }, "required": [ "projectSlug", "sourceBucket", "sourceRegion", "authType" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "importId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] }, "sourceBucket": { "type": "string" }, "sourceRegion": { "type": "string" }, "sourcePrefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "importId", "status", "sourceBucket", "sourceRegion", "sourcePrefix", "createdAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "cdn-imports-list", "summary": "List import jobs", "description": "List import jobs with pagination and optional filters.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string", "minLength": 1, "maxLength": 255 }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "status", "totalFiles" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "imports": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "sourceBucket": { "type": "string" }, "sourceRegion": { "type": "string" }, "sourcePrefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] }, "totalFiles": { "type": "number" }, "processedFiles": { "type": "number" }, "skippedFiles": { "type": "number" }, "failedFiles": { "type": "number" }, "totalBytes": { "type": "number" }, "processedBytes": { "type": "number" }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "sourceBucket", "sourceRegion", "sourcePrefix", "status", "totalFiles", "processedFiles", "skippedFiles", "failedFiles", "totalBytes", "processedBytes", "startedAt", "completedAt", "createdAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "imports", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/imports/{id}": { "get": { "operationId": "cdn-imports-get", "summary": "Get import job", "description": "Get details and progress of an import job by ID.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "organizationId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "sourceBucket": { "type": "string" }, "sourceRegion": { "type": "string" }, "sourcePrefix": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "authType": { "type": "string", "enum": [ "iam_credentials", "role_assumption" ] }, "pathMode": { "type": "string", "enum": [ "preserve", "flatten" ] }, "targetFolder": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] }, "totalFiles": { "type": "number" }, "processedFiles": { "type": "number" }, "skippedFiles": { "type": "number" }, "failedFiles": { "type": "number" }, "totalBytes": { "type": "number" }, "processedBytes": { "type": "number" }, "errors": { "anyOf": [ { "type": "array", "items": { "type": "object", "properties": { "key": { "type": "string" }, "error": { "type": "string" }, "timestamp": { "type": "string" } }, "required": [ "key", "error", "timestamp" ], "additionalProperties": false } }, { "type": "null" } ] }, "notifyEmail": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "startedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "environment", "sourceBucket", "sourceRegion", "sourcePrefix", "authType", "pathMode", "targetFolder", "status", "totalFiles", "processedFiles", "skippedFiles", "failedFiles", "totalBytes", "processedBytes", "errors", "notifyEmail", "startedAt", "completedAt", "createdAt", "updatedAt" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/imports/{id}/cancel": { "post": { "operationId": "cdn-imports-cancel", "summary": "Cancel import job", "description": "Cancel a running import job. Files already imported will remain.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "status": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] } }, "required": [ "success", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/imports/{id}/retry": { "post": { "operationId": "cdn-imports-retry", "summary": "Retry failed files", "description": "Retry importing files that failed in a completed or failed import job.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "retriedCount": { "type": "number" }, "status": { "type": "string", "enum": [ "pending", "validating", "importing", "completed", "failed", "cancelled" ] } }, "required": [ "success", "retriedCount", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/cdn/imports/{importId}/files": { "get": { "operationId": "cdn-imports-listFiles", "summary": "List import files", "description": "List files in an import job with optional status filter.", "tags": [ "cdn", "imports" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "importId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "number", "minimum": 0 } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "importing", "completed", "failed", "skipped" ] } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "sourceKey", "sourceSize", "status" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "asc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "files": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "importJobId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "sourceKey": { "type": "string" }, "sourceSize": { "type": "number" }, "sourceMimeType": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceEtag": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "assetId": { "anyOf": [ { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, { "type": "null" } ] }, "status": { "type": "string", "enum": [ "pending", "importing", "completed", "failed", "skipped" ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "retryCount": { "type": "number" }, "lastAttemptAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "importJobId", "sourceKey", "sourceSize", "sourceMimeType", "sourceEtag", "assetId", "status", "errorMessage", "retryCount", "lastAttemptAt", "createdAt", "completedAt" ], "additionalProperties": false } }, "total": { "type": "number" }, "hasMore": { "type": "boolean" } }, "required": [ "files", "total", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/screenshots": { "post": { "operationId": "webdata-screenshots-create", "summary": "Create screenshot", "description": "Capture a screenshot of a URL", "tags": [ "screenshots" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "format": { "default": "png", "type": "string", "enum": [ "png", "jpeg", "webp", "pdf" ] }, "quality": { "default": 80, "type": "number", "minimum": 1, "maximum": 100 }, "fullPage": { "default": false, "type": "boolean" }, "deviceType": { "default": "desktop", "type": "string", "enum": [ "desktop", "tablet", "mobile" ] }, "viewportWidth": { "default": 1280, "type": "number", "minimum": 320, "maximum": 3840 }, "viewportHeight": { "default": 720, "type": "number", "minimum": 240, "maximum": 2160 }, "deviceScaleFactor": { "default": 1, "type": "number", "minimum": 1, "maximum": 3 }, "waitForSelector": { "type": "string" }, "waitForTimeout": { "default": 0, "type": "number", "minimum": 0, "maximum": 30000 }, "blockAds": { "default": true, "type": "boolean" }, "blockCookieBanners": { "default": false, "type": "boolean" }, "blockChatWidgets": { "default": false, "type": "boolean" }, "blockTrackers": { "default": false, "type": "boolean" }, "blockUrls": { "maxItems": 100, "type": "array", "items": { "type": "string" } }, "blockResources": { "type": "array", "items": { "type": "string", "enum": [ "image", "stylesheet", "script", "font", "media", "xhr", "fetch", "websocket" ] } }, "darkMode": { "default": false, "type": "boolean" }, "customCss": { "type": "string", "maxLength": 10000 }, "customJs": { "type": "string", "maxLength": 10000 }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "cookies": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "domain": { "type": "string" } }, "required": [ "name", "value" ] } }, "selector": { "type": "string" }, "hideSelectors": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "clickSelector": { "type": "string" }, "actions": { "maxItems": 50, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "click" }, "selector": { "type": "string", "minLength": 1 }, "waitAfter": { "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type", "selector" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "type" }, "selector": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "delay": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "selector", "text" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "press" }, "key": { "type": "string", "minLength": 1 } }, "required": [ "type", "key" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "scroll" }, "direction": { "default": "down", "type": "string", "enum": [ "up", "down" ] }, "pixels": { "type": "number", "minimum": 0, "maximum": 10000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "wait" }, "selector": { "type": "string" }, "timeout": { "default": 1000, "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "screenshot" }, "fullPage": { "default": false, "type": "boolean" } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "execute_js" }, "script": { "type": "string", "maxLength": 10000 } }, "required": [ "type", "script" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "extract" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 } }, "required": [ "type" ] } ], "type": "object" } }, "omitBackground": { "default": false, "type": "boolean" }, "userAgent": { "type": "string", "maxLength": 500 }, "clip": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0 }, "y": { "type": "number", "minimum": 0 }, "width": { "type": "number", "minimum": 1 }, "height": { "type": "number", "minimum": 1 } }, "required": [ "x", "y", "width", "height" ] }, "thumbnailWidth": { "type": "number", "minimum": 1, "maximum": 3840 }, "thumbnailHeight": { "type": "number", "minimum": 1, "maximum": 2160 }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "cacheKey": { "type": "string", "maxLength": 255 }, "cacheTtl": { "type": "number", "minimum": 60, "maximum": 2592000 }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "url" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" } }, "required": [ "id", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-screenshots-list", "summary": "List screenshots", "description": "List all screenshots with pagination and filters", "tags": [ "screenshots" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] } }, { "in": "query", "name": "url", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/screenshots/{id}": { "get": { "operationId": "webdata-screenshots-get", "summary": "Get screenshot", "description": "Get screenshot details and result by ID", "tags": [ "screenshots" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-screenshots-delete", "summary": "Delete screenshot", "description": "Delete a screenshot by ID", "tags": [ "screenshots" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/extractions": { "post": { "operationId": "webdata-extractions-create", "summary": "Create extraction", "description": "Extract structured data from a URL", "tags": [ "extractions" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "mode": { "default": "auto", "type": "string", "enum": [ "auto", "schema", "markdown", "raw" ] }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 }, "includeLinks": { "default": true, "type": "boolean" }, "includeImages": { "default": true, "type": "boolean" }, "includeMetadata": { "default": true, "type": "boolean" }, "waitForSelector": { "type": "string" }, "waitForTimeout": { "default": 0, "type": "number", "minimum": 0, "maximum": 30000 }, "actions": { "maxItems": 50, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "click" }, "selector": { "type": "string", "minLength": 1 }, "waitAfter": { "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type", "selector" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "type" }, "selector": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "delay": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "selector", "text" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "press" }, "key": { "type": "string", "minLength": 1 } }, "required": [ "type", "key" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "scroll" }, "direction": { "default": "down", "type": "string", "enum": [ "up", "down" ] }, "pixels": { "type": "number", "minimum": 0, "maximum": 10000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "wait" }, "selector": { "type": "string" }, "timeout": { "default": 1000, "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "screenshot" }, "fullPage": { "default": false, "type": "boolean" } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "execute_js" }, "script": { "type": "string", "maxLength": 10000 } }, "required": [ "type", "script" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "extract" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 } }, "required": [ "type" ] } ], "type": "object" } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "cookies": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "domain": { "type": "string" } }, "required": [ "name", "value" ] } }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "url" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" } }, "required": [ "id", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-extractions-list", "summary": "List extractions", "description": "List all extractions with pagination and filters", "tags": [ "extractions" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] } }, { "in": "query", "name": "url", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/extractions/{id}": { "get": { "operationId": "webdata-extractions-get", "summary": "Get extraction", "description": "Get extraction details and result by ID", "tags": [ "extractions" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-extractions-delete", "summary": "Delete extraction", "description": "Delete an extraction by ID", "tags": [ "extractions" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/batch/screenshots": { "post": { "operationId": "webdata-batch-createScreenshots", "summary": "Create batch screenshot job", "description": "Capture screenshots for multiple URLs", "tags": [ "batch" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string", "maxLength": 255 }, "urls": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "type": "string", "format": "uri" } }, "config": { "type": "object", "properties": { "format": { "default": "png", "type": "string", "enum": [ "png", "jpeg", "webp", "pdf" ] }, "quality": { "default": 80, "type": "number", "minimum": 1, "maximum": 100 }, "fullPage": { "default": false, "type": "boolean" }, "deviceType": { "default": "desktop", "type": "string", "enum": [ "desktop", "tablet", "mobile" ] }, "viewportWidth": { "default": 1280, "type": "number", "minimum": 320, "maximum": 3840 }, "viewportHeight": { "default": 720, "type": "number", "minimum": 240, "maximum": 2160 }, "deviceScaleFactor": { "default": 1, "type": "number", "minimum": 1, "maximum": 3 }, "waitForSelector": { "type": "string" }, "waitForTimeout": { "default": 0, "type": "number", "minimum": 0, "maximum": 30000 }, "blockAds": { "default": true, "type": "boolean" }, "blockCookieBanners": { "default": false, "type": "boolean" }, "blockChatWidgets": { "default": false, "type": "boolean" }, "blockTrackers": { "default": false, "type": "boolean" }, "blockUrls": { "maxItems": 100, "type": "array", "items": { "type": "string" } }, "blockResources": { "type": "array", "items": { "type": "string", "enum": [ "image", "stylesheet", "script", "font", "media", "xhr", "fetch", "websocket" ] } }, "darkMode": { "default": false, "type": "boolean" }, "customCss": { "type": "string", "maxLength": 10000 }, "customJs": { "type": "string", "maxLength": 10000 }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "cookies": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "domain": { "type": "string" } }, "required": [ "name", "value" ] } }, "selector": { "type": "string" }, "hideSelectors": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "clickSelector": { "type": "string" }, "actions": { "maxItems": 50, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "click" }, "selector": { "type": "string", "minLength": 1 }, "waitAfter": { "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type", "selector" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "type" }, "selector": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "delay": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "selector", "text" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "press" }, "key": { "type": "string", "minLength": 1 } }, "required": [ "type", "key" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "scroll" }, "direction": { "default": "down", "type": "string", "enum": [ "up", "down" ] }, "pixels": { "type": "number", "minimum": 0, "maximum": 10000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "wait" }, "selector": { "type": "string" }, "timeout": { "default": 1000, "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "screenshot" }, "fullPage": { "default": false, "type": "boolean" } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "execute_js" }, "script": { "type": "string", "maxLength": 10000 } }, "required": [ "type", "script" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "extract" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 } }, "required": [ "type" ] } ], "type": "object" } }, "omitBackground": { "default": false, "type": "boolean" }, "userAgent": { "type": "string", "maxLength": 500 }, "clip": { "type": "object", "properties": { "x": { "type": "number", "minimum": 0 }, "y": { "type": "number", "minimum": 0 }, "width": { "type": "number", "minimum": 1 }, "height": { "type": "number", "minimum": 1 } }, "required": [ "x", "y", "width", "height" ] }, "thumbnailWidth": { "type": "number", "minimum": 1, "maximum": 3840 }, "thumbnailHeight": { "type": "number", "minimum": 1, "maximum": 2160 }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "cacheKey": { "type": "string", "maxLength": 255 }, "cacheTtl": { "type": "number", "minimum": 60, "maximum": 2592000 }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "urls", "config" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" }, "totalUrls": { "type": "number" } }, "required": [ "id", "status", "totalUrls" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/batch/extractions": { "post": { "operationId": "webdata-batch-createExtractions", "summary": "Create batch extraction job", "description": "Extract data from multiple URLs", "tags": [ "batch" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string", "maxLength": 255 }, "urls": { "minItems": 1, "maxItems": 1000, "type": "array", "items": { "type": "string", "format": "uri" } }, "config": { "type": "object", "properties": { "mode": { "default": "auto", "type": "string", "enum": [ "auto", "schema", "markdown", "raw" ] }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 }, "includeLinks": { "default": true, "type": "boolean" }, "includeImages": { "default": true, "type": "boolean" }, "includeMetadata": { "default": true, "type": "boolean" }, "waitForSelector": { "type": "string" }, "waitForTimeout": { "default": 0, "type": "number", "minimum": 0, "maximum": 30000 }, "actions": { "maxItems": 50, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "click" }, "selector": { "type": "string", "minLength": 1 }, "waitAfter": { "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type", "selector" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "type" }, "selector": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "delay": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "selector", "text" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "press" }, "key": { "type": "string", "minLength": 1 } }, "required": [ "type", "key" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "scroll" }, "direction": { "default": "down", "type": "string", "enum": [ "up", "down" ] }, "pixels": { "type": "number", "minimum": 0, "maximum": 10000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "wait" }, "selector": { "type": "string" }, "timeout": { "default": 1000, "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "screenshot" }, "fullPage": { "default": false, "type": "boolean" } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "execute_js" }, "script": { "type": "string", "maxLength": 10000 } }, "required": [ "type", "script" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "extract" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 } }, "required": [ "type" ] } ], "type": "object" } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "cookies": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "domain": { "type": "string" } }, "required": [ "name", "value" ] } }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "urls", "config" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" }, "totalUrls": { "type": "number" } }, "required": [ "id", "status", "totalUrls" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/batch/{id}": { "get": { "operationId": "webdata-batch-get", "summary": "Get batch job", "description": "Get batch job details and progress", "tags": [ "batch" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/batch": { "get": { "operationId": "webdata-batch-list", "summary": "List batch jobs", "description": "List all batch jobs with pagination and filters", "tags": [ "batch" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "screenshot", "extraction" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/batch/{id}/cancel": { "post": { "operationId": "webdata-batch-cancel", "summary": "Cancel batch job", "description": "Cancel a pending or processing batch job", "tags": [ "batch" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/crawl": { "post": { "operationId": "webdata-crawls-create", "summary": "Start a crawl", "description": "Recursively crawl a website and return scraped pages", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "maxDepth": { "default": 3, "type": "number", "minimum": 1, "maximum": 10 }, "maxPages": { "default": 100, "type": "number", "minimum": 1, "maximum": 10000 }, "limit": { "type": "number", "minimum": 1, "maximum": 10000 }, "includePaths": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "excludePaths": { "maxItems": 50, "type": "array", "items": { "type": "string" } }, "allowSubdomains": { "default": false, "type": "boolean" }, "allowBackwardLinks": { "default": false, "type": "boolean" }, "respectRobotsTxt": { "default": true, "type": "boolean" }, "scrapeOptions": { "type": "object", "properties": { "formats": { "default": [ "markdown" ], "type": "array", "items": { "type": "string", "enum": [ "markdown", "html", "rawHtml", "links", "screenshot", "metadata", "extract" ] } }, "onlyMainContent": { "default": true, "type": "boolean" }, "includeLinks": { "default": true, "type": "boolean" }, "includeImages": { "default": true, "type": "boolean" }, "includeMetadata": { "default": true, "type": "boolean" }, "waitForSelector": { "type": "string" }, "waitForTimeout": { "default": 0, "type": "number", "minimum": 0, "maximum": 30000 }, "actions": { "maxItems": 50, "type": "array", "items": { "oneOf": [ { "type": "object", "properties": { "type": { "type": "string", "const": "click" }, "selector": { "type": "string", "minLength": 1 }, "waitAfter": { "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type", "selector" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "type" }, "selector": { "type": "string", "minLength": 1 }, "text": { "type": "string" }, "delay": { "type": "number", "minimum": 0, "maximum": 1000 } }, "required": [ "type", "selector", "text" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "press" }, "key": { "type": "string", "minLength": 1 } }, "required": [ "type", "key" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "scroll" }, "direction": { "default": "down", "type": "string", "enum": [ "up", "down" ] }, "pixels": { "type": "number", "minimum": 0, "maximum": 10000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "wait" }, "selector": { "type": "string" }, "timeout": { "default": 1000, "type": "number", "minimum": 0, "maximum": 30000 } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "screenshot" }, "fullPage": { "default": false, "type": "boolean" } }, "required": [ "type" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "execute_js" }, "script": { "type": "string", "maxLength": 10000 } }, "required": [ "type", "script" ] }, { "type": "object", "properties": { "type": { "type": "string", "const": "extract" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "prompt": { "type": "string", "maxLength": 2000 } }, "required": [ "type" ] } ], "type": "object" } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "cookies": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "value": { "type": "string" }, "domain": { "type": "string" } }, "required": [ "name", "value" ] } }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "extractSchema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "extractPrompt": { "type": "string", "maxLength": 2000 } } }, "formats": { "default": [ "markdown" ], "type": "array", "items": { "type": "string", "enum": [ "markdown", "html", "links", "screenshot" ] } }, "proxy": { "default": "none", "type": "string", "enum": [ "none", "auto", "residential", "datacenter" ] }, "proxyLocation": { "type": "string", "minLength": 2, "maxLength": 2 }, "stealth": { "default": true, "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "url" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" } }, "required": [ "id", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-crawls-list", "summary": "List crawls", "description": "List crawls with pagination and filters", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "url", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/crawl/{id}": { "get": { "operationId": "webdata-crawls-get", "summary": "Get crawl", "description": "Get crawl status and optionally its scraped pages", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "includePages", "schema": { "default": false, "type": "boolean" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-crawls-delete", "summary": "Delete crawl", "description": "Delete a crawl (cascades to pages)", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/crawl/{crawlId}/pages": { "get": { "operationId": "webdata-crawls-listPages", "summary": "List crawl pages", "description": "Paginate pages belonging to a crawl", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "crawlId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "limit", "schema": { "default": 100, "type": "number", "minimum": 1, "maximum": 500 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/crawl/{id}/cancel": { "post": { "operationId": "webdata-crawls-cancel", "summary": "Cancel crawl", "description": "Cancel a pending or running crawl", "tags": [ "crawl" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/map": { "post": { "operationId": "webdata-maps-create", "summary": "Map a website", "description": "Discover URLs on a site via sitemap and link extraction", "tags": [ "map" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "search": { "type": "string", "maxLength": 500 }, "limit": { "default": 5000, "type": "number", "minimum": 1, "maximum": 10000 }, "includeSubdomains": { "default": false, "type": "boolean" }, "ignoreSitemap": { "default": false, "type": "boolean" }, "sitemapOnly": { "default": false, "type": "boolean" }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "url" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" } }, "required": [ "id", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-maps-list", "summary": "List maps", "description": "List map jobs with pagination", "tags": [ "map" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/map/{id}": { "get": { "operationId": "webdata-maps-get", "summary": "Get map", "description": "Get map job status and discovered URLs", "tags": [ "map" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-maps-delete", "summary": "Delete map", "description": "Delete a map job", "tags": [ "map" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/documents": { "post": { "operationId": "webdata-documents-create", "summary": "Parse a document", "description": "Parse a PDF or DOCX document and return markdown", "tags": [ "documents" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "url": { "type": "string", "format": "uri" }, "fileUrl": { "type": "string", "format": "uri" }, "contentType": { "default": "auto", "type": "string", "enum": [ "pdf", "docx", "auto" ] }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string", "maxLength": 255 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" } }, "required": [ "id", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-documents-list", "summary": "List documents", "description": "List parsed documents", "tags": [ "documents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/documents/{id}": { "get": { "operationId": "webdata-documents-get", "summary": "Get document", "description": "Get document parsing status and markdown", "tags": [ "documents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-documents-delete", "summary": "Delete document", "description": "Delete a parsed document", "tags": [ "documents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/schedules": { "post": { "operationId": "webdata-schedules-create", "summary": "Create schedule", "description": "Create a scheduled screenshot or extraction job", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "url": { "type": "string", "format": "uri" }, "type": { "type": "string", "enum": [ "screenshot", "extraction" ] }, "frequency": { "default": "daily", "type": "string", "enum": [ "hourly", "daily", "weekly", "monthly" ] }, "config": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "detectChanges": { "default": false, "type": "boolean" }, "changeThreshold": { "default": 5, "type": "number", "minimum": 1, "maximum": 100 }, "webhookUrl": { "type": "string", "format": "uri" }, "webhookSecret": { "type": "string" }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "name", "url", "type", "config" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "id" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-schedules-list", "summary": "List schedules", "description": "List all schedules with pagination and filters", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "screenshot", "extraction" ] } }, { "in": "query", "name": "isActive", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "type": "string" } }, "required": [ "items" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/schedules/{id}": { "patch": { "operationId": "webdata-schedules-update", "summary": "Update schedule", "description": "Update a scheduled job configuration", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "frequency": { "type": "string", "enum": [ "hourly", "daily", "weekly", "monthly" ] }, "config": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "isActive": { "type": "boolean" }, "detectChanges": { "type": "boolean" }, "changeThreshold": { "type": "number", "minimum": 1, "maximum": 100 }, "webhookUrl": { "anyOf": [ { "type": "string", "format": "uri" }, { "type": "null" } ] }, "webhookSecret": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "webdata-schedules-get", "summary": "Get schedule", "description": "Get schedule details", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "webdata-schedules-delete", "summary": "Delete schedule", "description": "Delete a schedule", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/schedules/{id}/toggle": { "post": { "operationId": "webdata-schedules-toggle", "summary": "Toggle schedule", "description": "Enable or disable a schedule", "tags": [ "schedules" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "isActive": { "type": "boolean" } }, "required": [ "isActive" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/usage": { "get": { "operationId": "webdata-usage-get", "summary": "Get usage", "description": "Get usage statistics for the organization", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "periodStart", "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } }, { "in": "query", "name": "periodEnd", "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "screenshots": { "type": "object", "properties": { "total": { "type": "number" }, "successful": { "type": "number" }, "failed": { "type": "number" }, "creditsUsed": { "type": "number" } }, "required": [ "total", "successful", "failed", "creditsUsed" ], "additionalProperties": false }, "extractions": { "type": "object", "properties": { "total": { "type": "number" }, "successful": { "type": "number" }, "failed": { "type": "number" }, "creditsUsed": { "type": "number" }, "tokensUsed": { "type": "number" } }, "required": [ "total", "successful", "failed", "creditsUsed", "tokensUsed" ], "additionalProperties": false }, "period": { "type": "object", "properties": { "start": { "type": "string" }, "end": { "type": "string" } }, "required": [ "start", "end" ], "additionalProperties": false } }, "required": [ "screenshots", "extractions", "period" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/webdata/usage/daily": { "get": { "operationId": "webdata-usage-daily", "summary": "Get daily usage", "description": "Get daily usage breakdown", "tags": [ "usage" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "periodStart", "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } }, { "in": "query", "name": "periodEnd", "schema": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "days": { "type": "array", "items": { "type": "object", "properties": { "date": { "type": "string" }, "screenshots": { "type": "number" }, "extractions": { "type": "number" }, "creditsUsed": { "type": "number" } }, "required": [ "date", "screenshots", "extractions", "creditsUsed" ], "additionalProperties": false } } }, "required": [ "days" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connectors": { "get": { "operationId": "integrations-connectors-list", "summary": "List connectors", "description": "List all available integration connectors.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "category", "schema": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] } }, { "in": "query", "name": "activeOnly", "schema": { "default": true, "type": "boolean" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "connectors": { "type": "array", "items": { "type": "object", "properties": { "slug": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "category": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] }, "authType": { "type": "string", "enum": [ "oauth2", "api_key", "basic" ] }, "supportedModels": { "type": "array", "items": { "type": "string" } }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "docsUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isActive": { "type": "boolean" } }, "required": [ "slug", "name", "description", "category", "authType", "supportedModels", "logoUrl", "docsUrl", "isActive" ], "additionalProperties": false } } }, "required": [ "connectors" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connectors/{slug}": { "get": { "operationId": "integrations-connectors-get", "summary": "Get connector", "description": "Get details about a specific integration connector.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "slug", "schema": { "type": "string", "minLength": 1 }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "slug": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "category": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] }, "authType": { "type": "string", "enum": [ "oauth2", "api_key", "basic" ] }, "supportedModels": { "type": "array", "items": { "type": "string" } }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "docsUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isActive": { "type": "boolean" }, "oauthScopes": { "type": "array", "items": { "type": "string" } } }, "required": [ "slug", "name", "description", "category", "authType", "supportedModels", "logoUrl", "docsUrl", "isActive" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connectors/by-category": { "get": { "operationId": "integrations-connectors-listByCategory", "summary": "List connectors by category", "description": "List all available connectors grouped by category.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "categories": { "type": "array", "items": { "type": "object", "properties": { "category": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] }, "connectors": { "type": "array", "items": { "type": "object", "properties": { "slug": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supportedModels": { "type": "array", "items": { "type": "string" } } }, "required": [ "slug", "name", "description", "logoUrl", "supportedModels" ], "additionalProperties": false } } }, "required": [ "category", "connectors" ], "additionalProperties": false } } }, "required": [ "categories" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/oauth/initiate": { "post": { "operationId": "integrations-connections-initiateOAuth", "summary": "Initiate OAuth", "description": "Start the OAuth flow to connect to a third-party service.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "connectorSlug": { "type": "string", "minLength": 1 }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "redirectUrl": { "type": "string", "format": "uri" }, "endUserId": { "type": "string", "maxLength": 255 } }, "required": [ "connectorSlug", "redirectUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "authUrl": { "type": "string" }, "connectionId": { "type": "string" }, "state": { "type": "string" } }, "required": [ "authUrl", "connectionId", "state" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/oauth/callback": { "post": { "operationId": "integrations-connections-completeOAuth", "summary": "Complete OAuth", "description": "Complete the OAuth flow by exchanging the authorization code for tokens.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string", "minLength": 1 }, "state": { "type": "string", "minLength": 1 }, "redirectUrl": { "type": "string", "format": "uri" } }, "required": [ "code", "state", "redirectUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "connectionId": { "type": "string" }, "status": { "type": "string", "const": "connected" }, "externalAccountId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalAccountName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "connectionId", "status", "externalAccountId", "externalAccountName" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections": { "get": { "operationId": "integrations-connections-list", "summary": "List connections", "description": "List all integration connections for your organization.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "connectorSlug", "schema": { "type": "string" } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "connected", "disconnected", "error", "expired" ] } }, { "in": "query", "name": "endUserId", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "connections": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "connected", "disconnected", "error", "expired" ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "connector": { "anyOf": [ { "type": "object", "properties": { "slug": { "type": "string" }, "name": { "type": "string" }, "category": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "slug", "name", "category", "logoUrl" ], "additionalProperties": false }, { "type": "null" } ] }, "externalAccountId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalAccountName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "connectedBy": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "email": { "type": "string" } }, "required": [ "id", "name", "email" ], "additionalProperties": false }, { "type": "null" } ] }, "connectedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastUsedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" } }, "required": [ "id", "name", "status", "environment", "connector", "externalAccountId", "externalAccountName", "connectedBy", "connectedAt", "lastUsedAt", "errorMessage", "createdAt" ], "additionalProperties": false } }, "hasMore": { "type": "boolean" }, "nextCursor": { "type": "string" } }, "required": [ "connections", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/{connectionId}": { "get": { "operationId": "integrations-connections-get", "summary": "Get connection", "description": "Get details about a specific integration connection.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "connected", "disconnected", "error", "expired" ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "connector": { "anyOf": [ { "type": "object", "properties": { "slug": { "type": "string" }, "name": { "type": "string" }, "category": { "type": "string", "enum": [ "crm", "storage", "communication", "productivity", "calendar", "email" ] }, "logoUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "supportedModels": { "type": "array", "items": { "type": "string" } } }, "required": [ "slug", "name", "category", "logoUrl", "supportedModels" ], "additionalProperties": false }, { "type": "null" } ] }, "externalAccountId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "externalAccountName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "connectedBy": { "anyOf": [ { "type": "object", "properties": { "id": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "email": { "type": "string" } }, "required": [ "id", "name", "email" ], "additionalProperties": false }, { "type": "null" } ] }, "connectedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastUsedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lastErrorAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "status", "environment", "connector", "externalAccountId", "externalAccountName", "connectedBy", "connectedAt", "lastUsedAt", "errorMessage", "lastErrorAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "integrations-connections-update", "summary": "Update connection", "description": "Update an integration connection's name.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "connected", "disconnected", "error", "expired" ] } }, "required": [ "id", "name", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "integrations-connections-delete", "summary": "Delete connection", "description": "Delete (disconnect) an integration connection.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/{connectionId}/reconnect": { "post": { "operationId": "integrations-connections-reconnect", "summary": "Reconnect", "description": "Start a new OAuth flow to reconnect an expired or errored connection.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "redirectUrl": { "type": "string", "format": "uri" } }, "required": [ "redirectUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "authUrl": { "type": "string" }, "connectionId": { "type": "string" }, "state": { "type": "string" } }, "required": [ "authUrl", "connectionId", "state" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/session": { "post": { "operationId": "integrations-connections-createSession", "summary": "Create connection session", "description": "Create a connection session for an end user. Returns an auth URL to redirect the user to.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "endUserId": { "type": "string", "minLength": 1, "maxLength": 255 }, "connectorSlug": { "type": "string", "minLength": 1 }, "redirectUrl": { "type": "string", "format": "uri" }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 255 } }, "required": [ "endUserId", "connectorSlug", "redirectUrl" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "authUrl": { "type": "string" }, "sessionId": { "type": "string" }, "state": { "type": "string" } }, "required": [ "authUrl", "sessionId", "state" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connections/stats": { "get": { "operationId": "integrations-connections-stats", "summary": "Get stats", "description": "Get integration statistics for your organization.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "totalConnections": { "type": "number" }, "activeConnections": { "type": "number" }, "errorConnections": { "type": "number" }, "totalApiCalls": { "type": "number" }, "apiCallsLast30Days": { "type": "number" }, "connectorBreakdown": { "type": "array", "items": { "type": "object", "properties": { "connectorSlug": { "type": "string" }, "connectorName": { "type": "string" }, "connectionCount": { "type": "number" } }, "required": [ "connectorSlug", "connectorName", "connectionCount" ], "additionalProperties": false } } }, "required": [ "totalConnections", "activeConnections", "errorConnections", "totalApiCalls", "apiCallsLast30Days", "connectorBreakdown" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connectors/{connectorSlug}/credentials": { "get": { "operationId": "integrations-connectorCredentials-get", "summary": "Get connector credentials", "description": "Get OAuth app credentials for a connector (secret is masked).", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectorSlug", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "anyOf": [ { "type": "object", "properties": { "clientId": { "type": "string" }, "clientSecretMasked": { "type": "string" }, "customAuthUrl": { "type": "string" }, "customTokenUrl": { "type": "string" }, "customScopes": { "type": "array", "items": { "type": "string" } }, "isConfigured": { "type": "boolean" } }, "required": [ "clientId", "clientSecretMasked", "isConfigured" ], "additionalProperties": false }, { "type": "null" } ] } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "put": { "operationId": "integrations-connectorCredentials-upsert", "summary": "Save connector credentials", "description": "Save or update OAuth app credentials for a connector.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectorSlug", "schema": { "type": "string" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "clientId": { "type": "string", "minLength": 1 }, "clientSecret": { "type": "string", "minLength": 1 }, "customAuthUrl": { "type": "string", "format": "uri" }, "customTokenUrl": { "type": "string", "format": "uri" }, "customScopes": { "type": "array", "items": { "type": "string" } } }, "required": [ "projectId", "environment", "clientId", "clientSecret" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "integrations-connectorCredentials-delete", "summary": "Delete connector credentials", "description": "Delete OAuth app credentials for a connector.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "connectorSlug", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/connectors/credentials": { "get": { "operationId": "integrations-connectorCredentials-list", "summary": "List configured connectors", "description": "List all connectors with configured OAuth credentials.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "connectors": { "type": "array", "items": { "type": "object", "properties": { "connectorSlug": { "type": "string" }, "hasCustomUrls": { "type": "boolean" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "connectorSlug", "hasCustomUrls", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "required": [ "connectors" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/logs": { "get": { "operationId": "integrations-logs-list", "summary": "List API logs", "description": "List API request logs for your organization.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "connectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "connectorSlug", "schema": { "type": "string" } }, { "in": "query", "name": "statusCode", "schema": { "type": "number" } }, { "in": "query", "name": "method", "schema": { "type": "string", "enum": [ "GET", "POST", "PUT", "PATCH", "DELETE" ] } }, { "in": "query", "name": "search", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "logs": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "connectionId": { "type": "string" }, "connectionName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "connectorSlug": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "connectorName": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "method": { "type": "string" }, "path": { "type": "string" }, "model": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "operation": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "statusCode": { "type": "number" }, "errorMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "requestDurationMs": { "type": "number" }, "createdAt": { "type": "string" } }, "required": [ "id", "connectionId", "connectionName", "connectorSlug", "connectorName", "method", "path", "model", "operation", "statusCode", "errorMessage", "requestDurationMs", "createdAt" ], "additionalProperties": false } }, "hasMore": { "type": "boolean" }, "nextCursor": { "type": "string" } }, "required": [ "logs", "hasMore" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/integrations/passthrough": { "post": { "operationId": "integrations-passthrough-request", "summary": "Passthrough request", "description": "Make a raw request to the provider API, bypassing the unified schema.", "tags": [ "integrations" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "connectionId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "PATCH", "DELETE" ] }, "path": { "type": "string", "minLength": 1 }, "body": {}, "query": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } } }, "required": [ "connectionId", "method", "path" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "data": {}, "status": { "type": "number" } }, "required": [ "data", "status" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows": { "post": { "operationId": "workflows-workflows-create", "summary": "Create workflow", "description": "Create a new AI workflow", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "slug": { "type": "string", "minLength": 1, "maxLength": 255, "pattern": "^[a-z0-9-]+$" }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 5000 }, "steps": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 255 }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "type": { "type": "string", "enum": [ "llm", "image", "video", "audio", "code", "http", "transform", "condition", "loop" ] }, "provider": { "type": "string", "enum": [ "anthropic", "openai", "gemini", "replicate", "stack0" ] }, "model": { "type": "string", "minLength": 1, "maxLength": 255 }, "config": { "type": "object", "properties": { "prompt": { "type": "string" }, "systemPrompt": { "type": "string" }, "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "minimum": 1, "maximum": 200000 }, "responseFormat": { "type": "string", "enum": [ "text", "json" ] }, "imageInputVariable": { "type": "string" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "width": { "type": "number", "minimum": 64, "maximum": 4096 }, "height": { "type": "number", "minimum": 64, "maximum": 4096 }, "steps": { "type": "number", "minimum": 1, "maximum": 100 }, "url": { "type": "string", "format": "uri" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE" ] }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "body": { "type": "string" }, "iterateOver": { "type": "string" }, "itemVariable": { "type": "string" }, "condition": { "type": "string" } } }, "dependsOn": { "type": "array", "items": { "type": "string" } }, "outputVariable": { "type": "string" }, "retryConfig": { "type": "object", "properties": { "maxAttempts": { "default": 3, "type": "number", "minimum": 1, "maximum": 10 }, "backoffMs": { "default": 1000, "type": "number", "minimum": 100, "maximum": 60000 } } } }, "required": [ "id", "name", "type", "provider", "model", "config" ] } }, "variables": { "maxItems": 50, "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "array", "object", "image" ] }, "required": { "type": "boolean" }, "default": {}, "description": { "type": "string", "maxLength": 1000 } }, "required": [ "name", "type", "required" ] } } }, "required": [ "slug", "name", "steps" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "slug": { "type": "string" }, "name": { "type": "string" }, "version": { "type": "number" } }, "required": [ "id", "slug", "name", "version" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "workflows-workflows-list", "summary": "List workflows", "description": "List all workflows with pagination", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "isActive", "schema": { "type": "boolean" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "items", "nextCursor" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows/{id}": { "get": { "operationId": "workflows-workflows-get", "summary": "Get workflow", "description": "Get workflow by ID or slug", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "slug", "schema": { "type": "string" } }, { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "workflows-workflows-update", "summary": "Update workflow", "description": "Update an existing workflow", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 5000 }, "steps": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 255 }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "type": { "type": "string", "enum": [ "llm", "image", "video", "audio", "code", "http", "transform", "condition", "loop" ] }, "provider": { "type": "string", "enum": [ "anthropic", "openai", "gemini", "replicate", "stack0" ] }, "model": { "type": "string", "minLength": 1, "maxLength": 255 }, "config": { "type": "object", "properties": { "prompt": { "type": "string" }, "systemPrompt": { "type": "string" }, "temperature": { "type": "number", "minimum": 0, "maximum": 2 }, "maxTokens": { "type": "number", "minimum": 1, "maximum": 200000 }, "responseFormat": { "type": "string", "enum": [ "text", "json" ] }, "imageInputVariable": { "type": "string" }, "schema": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "width": { "type": "number", "minimum": 64, "maximum": 4096 }, "height": { "type": "number", "minimum": 64, "maximum": 4096 }, "steps": { "type": "number", "minimum": 1, "maximum": 100 }, "url": { "type": "string", "format": "uri" }, "method": { "type": "string", "enum": [ "GET", "POST", "PUT", "DELETE" ] }, "headers": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "string" } }, "body": { "type": "string" }, "iterateOver": { "type": "string" }, "itemVariable": { "type": "string" }, "condition": { "type": "string" } } }, "dependsOn": { "type": "array", "items": { "type": "string" } }, "outputVariable": { "type": "string" }, "retryConfig": { "type": "object", "properties": { "maxAttempts": { "default": 3, "type": "number", "minimum": 1, "maximum": 10 }, "backoffMs": { "default": 1000, "type": "number", "minimum": 100, "maximum": 60000 } } } }, "required": [ "id", "name", "type", "provider", "model", "config" ] } }, "variables": { "maxItems": 50, "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "type": { "type": "string", "enum": [ "string", "number", "boolean", "array", "object", "image" ] }, "required": { "type": "boolean" }, "default": {}, "description": { "type": "string", "maxLength": 1000 } }, "required": [ "name", "type", "required" ] } }, "isActive": { "type": "boolean" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" }, "version": { "type": "number" } }, "required": [ "success", "version" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "workflows-workflows-delete", "summary": "Delete workflow", "description": "Delete a workflow by ID", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "projectSlug", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows/run": { "post": { "operationId": "workflows-workflows-run", "summary": "Run workflow", "description": "Execute a workflow with provided variables", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "workflowId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "workflowSlug": { "type": "string" }, "projectSlug": { "type": "string" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "variables": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "webhook": { "type": "object", "properties": { "url": { "type": "string", "format": "uri" }, "secret": { "type": "string", "minLength": 16, "maxLength": 255 } }, "required": [ "url" ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "status": { "type": "string" }, "workflowId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, "required": [ "id", "status", "workflowId" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows/runs/{id}": { "get": { "operationId": "workflows-workflows-getRun", "summary": "Get run", "description": "Get workflow run by ID", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": {} } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows/runs": { "get": { "operationId": "workflows-workflows-listRuns", "summary": "List runs", "description": "List workflow runs with pagination", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "workflowId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } }, { "in": "query", "name": "workflowSlug", "schema": { "type": "string" } }, { "in": "query", "name": "projectSlug", "schema": { "type": "string" } }, { "in": "query", "name": "environment", "schema": { "type": "string", "enum": [ "sandbox", "production" ] } }, { "in": "query", "name": "status", "schema": { "type": "string", "enum": [ "pending", "running", "completed", "failed", "cancelled" ] } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "number", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "cursor", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "items": { "type": "array", "items": {} }, "nextCursor": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "items", "nextCursor" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/workflows/runs/{id}/cancel": { "post": { "operationId": "workflows-workflows-cancelRun", "summary": "Cancel run", "description": "Cancel a running workflow", "tags": [ "workflows" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "projectSlug": { "type": "string" } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/agents": { "post": { "operationId": "memory-agents-create", "summary": "Create a memory agent", "description": "Create a new memory agent. A default collection is automatically created.", "tags": [ "memory-agents" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 1000 }, "projectId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "environment": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] }, "settings": { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "settings": { "anyOf": [ { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "totalMemories": { "type": "number" }, "totalCollections": { "type": "number" }, "totalEntities": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "description", "metadata", "environment", "settings", "totalMemories", "totalCollections", "totalEntities", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "memory-agents-list", "summary": "List memory agents", "description": "List all memory agents for the current organization.", "tags": [ "memory-agents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "projectSlug", "schema": { "type": "string" }, "required": true }, { "in": "query", "name": "environment", "schema": { "default": "production", "type": "string", "enum": [ "sandbox", "production" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "settings": { "anyOf": [ { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "totalMemories": { "type": "number" }, "totalCollections": { "type": "number" }, "totalEntities": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "description", "metadata", "environment", "settings", "totalMemories", "totalCollections", "totalEntities", "createdAt", "updatedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/agents/{agentId}": { "get": { "operationId": "memory-agents-get", "summary": "Get a memory agent", "description": "Get a memory agent by ID.", "tags": [ "memory-agents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "settings": { "anyOf": [ { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "totalMemories": { "type": "number" }, "totalCollections": { "type": "number" }, "totalEntities": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "description", "metadata", "environment", "settings", "totalMemories", "totalCollections", "totalEntities", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "memory-agents-update", "summary": "Update a memory agent", "description": "Update a memory agent's name, description, or settings.", "tags": [ "memory-agents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 1000 }, "settings": { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } } }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "organizationId": { "type": "string" }, "projectId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "environment": { "type": "string", "enum": [ "sandbox", "production" ] }, "settings": { "anyOf": [ { "type": "object", "properties": { "autoClassify": { "type": "boolean" }, "autoExtractEntities": { "type": "boolean" }, "embeddingModel": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "totalMemories": { "type": "number" }, "totalCollections": { "type": "number" }, "totalEntities": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "organizationId", "projectId", "name", "description", "metadata", "environment", "settings", "totalMemories", "totalCollections", "totalEntities", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "memory-agents-delete", "summary": "Delete a memory agent", "description": "Delete a memory agent and all its collections and memories.", "tags": [ "memory-agents" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories": { "post": { "operationId": "memory-memories-store", "summary": "Store a memory", "description": "Store a new memory for an agent. Optionally specify collection, type, tags, and confidence.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "agentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "content": { "type": "string", "minLength": 1, "maxLength": 50000 }, "collectionSlug": { "default": "default", "type": "string" }, "type": { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, "source": { "type": "string", "maxLength": 500 }, "tags": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "expiresAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } }, "required": [ "agentId", "content" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "memory-memories-list", "summary": "List memories", "description": "List memories for an agent with filtering and pagination.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "collectionSlug", "schema": { "type": "string" } }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] } }, { "in": "query", "name": "tier", "schema": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "integer", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "integer", "minimum": 0, "maximum": 9007199254740991 } }, { "in": "query", "name": "sortBy", "schema": { "default": "createdAt", "type": "string", "enum": [ "createdAt", "updatedAt", "confidence" ] } }, { "in": "query", "name": "sortOrder", "schema": { "default": "desc", "type": "string", "enum": [ "asc", "desc" ] } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "memories": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" } }, "required": [ "memories", "total" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories/batch": { "post": { "operationId": "memory-memories-storeBatch", "summary": "Store memories in batch", "description": "Store up to 100 memories at once for an agent.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "agentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "memories": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "object", "properties": { "content": { "type": "string", "minLength": 1, "maxLength": 50000 }, "collectionSlug": { "default": "default", "type": "string" }, "type": { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, "source": { "type": "string", "maxLength": 500 }, "tags": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "expiresAt": { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" } }, "required": [ "content" ] } } }, "required": [ "agentId", "memories" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories/recall": { "post": { "operationId": "memory-memories-recall", "summary": "Recall memories", "description": "Retrieve relevant memories using semantic search. Supports filtering by type, tier, confidence, and tags.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "agentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "query": { "type": "string", "minLength": 1, "maxLength": 5000 }, "collectionSlug": { "type": "string" }, "limit": { "default": 10, "type": "integer", "minimum": 1, "maximum": 100 }, "types": { "type": "array", "items": { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] } }, "tiers": { "type": "array", "items": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] } }, "minConfidence": { "type": "number", "minimum": 0, "maximum": 1 }, "tags": { "type": "array", "items": { "type": "string" } } }, "required": [ "agentId", "query" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "memory": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false }, "score": { "type": "number" }, "similarityMethod": { "type": "string", "enum": [ "vector", "keyword" ] } }, "required": [ "memory", "score", "similarityMethod" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories/search": { "get": { "operationId": "memory-memories-search", "summary": "Search memories", "description": "Search memories by keyword with pagination.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "query", "schema": { "type": "string", "minLength": 1, "maxLength": 5000 }, "required": true }, { "in": "query", "name": "collectionSlug", "schema": { "type": "string" } }, { "in": "query", "name": "limit", "schema": { "default": 20, "type": "integer", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "integer", "minimum": 0, "maximum": 9007199254740991 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "memories": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" } }, "required": [ "memories", "total" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories/{memoryId}": { "get": { "operationId": "memory-memories-get", "summary": "Get a memory", "description": "Get a memory by ID.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "memoryId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "memory-memories-update", "summary": "Update a memory", "description": "Update a memory's content, type, tier, tags, confidence, or metadata.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "memoryId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "content": { "type": "string", "minLength": 1, "maxLength": 50000 }, "type": { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "tags": { "maxItems": 50, "type": "array", "items": { "type": "string", "maxLength": 100 } }, "confidence": { "type": "number", "minimum": 0, "maximum": 1 }, "metadata": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, "expiresAt": { "anyOf": [ { "type": "string", "format": "date-time", "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$" }, { "type": "null" } ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "content": { "type": "string" }, "type": { "anyOf": [ { "type": "string", "enum": [ "preference", "fact", "event", "relationship", "instruction", "pattern" ] }, { "type": "null" } ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "source": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "confidence": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "expiresAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "embedding": { "anyOf": [ { "type": "array", "items": { "type": "number" } }, { "type": "null" } ] }, "compactedFrom": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "content", "type", "tier", "source", "tags", "confidence", "metadata", "expiresAt", "embedding", "compactedFrom", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "memory-memories-delete", "summary": "Delete a memory", "description": "Delete a memory by ID.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "memoryId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/memories/delete-many": { "post": { "operationId": "memory-memories-deleteMany", "summary": "Delete multiple memories", "description": "Delete up to 100 memories at once.", "tags": [ "memory-memories" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "memoryIds": { "minItems": 1, "maxItems": 100, "type": "array", "items": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" } } }, "required": [ "memoryIds" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "deletedCount": { "type": "number" } }, "required": [ "deletedCount" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/collections": { "post": { "operationId": "memory-collections-create", "summary": "Create a collection", "description": "Create a new memory collection for an agent.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "agentId": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "slug": { "type": "string", "minLength": 1, "maxLength": 100, "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$" }, "description": { "type": "string", "maxLength": 1000 }, "compaction": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "warmToCoolAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "coolToColdAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "customPrompt": { "type": "string", "maxLength": 5000 } } }, "retention": { "type": "object", "properties": { "maxHotMemories": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "maxTotalMemories": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "defaultTTL": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } } } }, "required": [ "agentId", "name", "slug" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "slug": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "compaction": { "anyOf": [ { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "number" }, "warmToCoolAfter": { "type": "number" }, "coolToColdAfter": { "type": "number" }, "customPrompt": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "retention": { "anyOf": [ { "type": "object", "properties": { "maxHotMemories": { "type": "number" }, "maxTotalMemories": { "type": "number" }, "defaultTTL": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, "lastCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "slug", "name", "description", "compaction", "retention", "lastCompactionAt", "nextCompactionAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "get": { "operationId": "memory-collections-list", "summary": "List collections", "description": "List all collections for an agent.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "slug": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "compaction": { "anyOf": [ { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "number" }, "warmToCoolAfter": { "type": "number" }, "coolToColdAfter": { "type": "number" }, "customPrompt": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "retention": { "anyOf": [ { "type": "object", "properties": { "maxHotMemories": { "type": "number" }, "maxTotalMemories": { "type": "number" }, "defaultTTL": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, "lastCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "slug", "name", "description", "compaction", "retention", "lastCompactionAt", "nextCompactionAt", "createdAt", "updatedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/collections/{collectionId}": { "get": { "operationId": "memory-collections-get", "summary": "Get a collection", "description": "Get a collection by ID.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "collectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "slug": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "compaction": { "anyOf": [ { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "number" }, "warmToCoolAfter": { "type": "number" }, "coolToColdAfter": { "type": "number" }, "customPrompt": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "retention": { "anyOf": [ { "type": "object", "properties": { "maxHotMemories": { "type": "number" }, "maxTotalMemories": { "type": "number" }, "defaultTTL": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, "lastCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "slug", "name", "description", "compaction", "retention", "lastCompactionAt", "nextCompactionAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "memory-collections-update", "summary": "Update a collection", "description": "Update a collection's name, description, compaction, or retention settings.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "collectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 255 }, "description": { "type": "string", "maxLength": 1000 }, "compaction": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "warmToCoolAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "coolToColdAfter": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "customPrompt": { "type": "string", "maxLength": 5000 } } }, "retention": { "type": "object", "properties": { "maxHotMemories": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "maxTotalMemories": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "defaultTTL": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 } } } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "slug": { "type": "string" }, "name": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "compaction": { "anyOf": [ { "type": "object", "properties": { "enabled": { "type": "boolean" }, "schedule": { "type": "string" }, "model": { "type": "string" }, "hotToWarmAfter": { "type": "number" }, "warmToCoolAfter": { "type": "number" }, "coolToColdAfter": { "type": "number" }, "customPrompt": { "type": "string" } }, "additionalProperties": false }, { "type": "null" } ] }, "retention": { "anyOf": [ { "type": "object", "properties": { "maxHotMemories": { "type": "number" }, "maxTotalMemories": { "type": "number" }, "defaultTTL": { "type": "number" } }, "additionalProperties": false }, { "type": "null" } ] }, "lastCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "nextCompactionAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "slug", "name", "description", "compaction", "retention", "lastCompactionAt", "nextCompactionAt", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "memory-collections-delete", "summary": "Delete a collection", "description": "Delete a collection and all its memories. Cannot delete the default collection.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "collectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/collections/{collectionId}/stats": { "get": { "operationId": "memory-collections-stats", "summary": "Get collection stats", "description": "Get memory counts by tier and type for a collection.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "collectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "collectionId": { "type": "string" }, "totalMemories": { "type": "number" }, "byTier": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number" } }, "byType": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "type": "number" } }, "oldestMemory": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "newestMemory": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "collectionId", "totalMemories", "byTier", "byType", "oldestMemory", "newestMemory" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/collections/{collectionId}/compact": { "post": { "operationId": "memory-collections-compact", "summary": "Trigger compaction", "description": "Trigger memory compaction for a collection. V1: creates a pending job.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "collectionId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "memoriesQueued": { "type": "number" }, "memoriesProcessed": { "type": "number" }, "memoriesCreated": { "type": "number" }, "memoriesArchived": { "type": "number" }, "durationMs": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "creditsUsed": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "status", "tier", "memoriesQueued", "memoriesProcessed", "memoriesCreated", "memoriesArchived", "durationMs", "creditsUsed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/compaction-jobs/{jobId}": { "get": { "operationId": "memory-collections-getCompactionJob", "summary": "Get compaction job", "description": "Get the status of a compaction job.", "tags": [ "memory-collections" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "jobId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "collectionId": { "type": "string" }, "status": { "type": "string", "enum": [ "pending", "processing", "completed", "failed" ] }, "tier": { "type": "string", "enum": [ "hot", "warm", "cool", "cold" ] }, "memoriesQueued": { "type": "number" }, "memoriesProcessed": { "type": "number" }, "memoriesCreated": { "type": "number" }, "memoriesArchived": { "type": "number" }, "durationMs": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "creditsUsed": { "anyOf": [ { "type": "number" }, { "type": "null" } ] }, "error": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "completedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "collectionId", "status", "tier", "memoriesQueued", "memoriesProcessed", "memoriesCreated", "memoriesArchived", "durationMs", "creditsUsed", "error", "createdAt", "updatedAt", "completedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/entities": { "get": { "operationId": "memory-entities-list", "summary": "List entities", "description": "List extracted entities for an agent with optional type filtering.", "tags": [ "memory-entities" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "query", "name": "agentId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true }, { "in": "query", "name": "type", "schema": { "type": "string", "enum": [ "person", "organization", "place", "concept", "product", "event" ] } }, { "in": "query", "name": "limit", "schema": { "default": 50, "type": "integer", "minimum": 1, "maximum": 100 } }, { "in": "query", "name": "offset", "schema": { "default": 0, "type": "integer", "minimum": 0, "maximum": 9007199254740991 } } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "entities": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "person", "organization", "place", "concept", "product", "event" ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "firstSeenAt": { "type": "string" }, "lastSeenAt": { "type": "string" }, "mentionCount": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "name", "type", "metadata", "firstSeenAt", "lastSeenAt", "mentionCount", "createdAt", "updatedAt" ], "additionalProperties": false } }, "total": { "type": "number" } }, "required": [ "entities", "total" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/entities/{entityId}": { "get": { "operationId": "memory-entities-get", "summary": "Get an entity", "description": "Get an entity by ID.", "tags": [ "memory-entities" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "entityId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "person", "organization", "place", "concept", "product", "event" ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "firstSeenAt": { "type": "string" }, "lastSeenAt": { "type": "string" }, "mentionCount": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "name", "type", "metadata", "firstSeenAt", "lastSeenAt", "mentionCount", "createdAt", "updatedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/memory/entities/{entityId}/relations": { "get": { "operationId": "memory-entities-getRelations", "summary": "Get entity relations", "description": "Get all relations for an entity (both incoming and outgoing edges).", "tags": [ "memory-entities" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "entityId", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "sourceEntityId": { "type": "string" }, "targetEntityId": { "type": "string" }, "relationType": { "type": "string" }, "strength": { "type": "number" }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "sourceEntity": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "person", "organization", "place", "concept", "product", "event" ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "firstSeenAt": { "type": "string" }, "lastSeenAt": { "type": "string" }, "mentionCount": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "name", "type", "metadata", "firstSeenAt", "lastSeenAt", "mentionCount", "createdAt", "updatedAt" ], "additionalProperties": false }, "targetEntity": { "type": "object", "properties": { "id": { "type": "string" }, "agentId": { "type": "string" }, "name": { "type": "string" }, "type": { "type": "string", "enum": [ "person", "organization", "place", "concept", "product", "event" ] }, "metadata": { "anyOf": [ { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} }, { "type": "null" } ] }, "firstSeenAt": { "type": "string" }, "lastSeenAt": { "type": "string" }, "mentionCount": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "agentId", "name", "type", "metadata", "firstSeenAt", "lastSeenAt", "mentionCount", "createdAt", "updatedAt" ], "additionalProperties": false } }, "required": [ "id", "agentId", "sourceEntityId", "targetEntityId", "relationType", "strength", "metadata", "createdAt", "updatedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/projects": { "get": { "operationId": "projects-list", "summary": "List projects", "description": "List all projects for the current organization.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "iconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "slug", "description", "iconUrl", "organizationId", "createdByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "post": { "operationId": "projects-create", "summary": "Create project", "description": "Create a new project in the current organization.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "description": { "type": "string", "maxLength": 500 } }, "required": [ "name" ] } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "iconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "slug", "description", "iconUrl", "organizationId", "createdByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/projects/{id}": { "get": { "operationId": "projects-get", "summary": "Get project", "description": "Get a project by ID.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "iconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "slug", "description", "iconUrl", "organizationId", "createdByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "patch": { "operationId": "projects-update", "summary": "Update project", "description": "Update a project's name, description, or icon.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1, "maxLength": 100 }, "description": { "type": "string", "maxLength": 500 }, "iconUrl": { "anyOf": [ { "type": "string", "format": "uri" }, { "type": "null" } ] } } } } } }, "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "iconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "slug", "description", "iconUrl", "organizationId", "createdByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } }, "delete": { "operationId": "projects-delete", "summary": "Delete project", "description": "Soft-delete a project.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "id", "schema": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } }, "required": [ "success" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } }, "/projects/by-slug/{slug}": { "get": { "operationId": "projects-getBySlug", "summary": "Get project by slug", "description": "Get a project by its slug.", "tags": [ "projects" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "in": "path", "name": "slug", "schema": { "type": "string" }, "required": true } ], "responses": { "200": { "description": "Successful response", "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "slug": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "iconUrl": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "organizationId": { "type": "string" }, "createdByUserId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string" }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "deletedAt": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } }, "required": [ "id", "name", "slug", "description", "iconUrl", "organizationId", "createdByUserId", "createdAt", "updatedAt", "deletedAt" ], "additionalProperties": false } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "400": { "description": "Invalid input data", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.BAD_REQUEST" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "401": { "description": "Authorization not provided", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.UNAUTHORIZED" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "403": { "description": "Insufficient access", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.FORBIDDEN" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "404": { "description": "Not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.NOT_FOUND" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } }, "429": { "description": "Rate limit exceeded. Retry after the number of seconds in `Retry-After`.", "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } }, "Retry-After": { "description": "Seconds to wait before retrying.", "schema": { "type": "integer" } } }, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Error" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/error.INTERNAL_SERVER_ERROR" } } }, "headers": { "RateLimit-Limit": { "description": "Requests permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Remaining": { "description": "Requests still permitted in the current window.", "schema": { "type": "integer" } }, "RateLimit-Reset": { "description": "Seconds until the current window resets.", "schema": { "type": "integer" } }, "RateLimit": { "description": "Service limit as an RFC 8941 structured field, e.g. `\"default\";r=199;t=60`.", "schema": { "type": "string" } }, "RateLimit-Policy": { "description": "Quota policy as an RFC 8941 structured field, e.g. `\"default\";q=200;w=60`.", "schema": { "type": "string" } } } } } } } }, "components": { "schemas": { "error.BAD_REQUEST": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Invalid input data" }, "code": { "type": "string", "description": "The error code", "example": "BAD_REQUEST" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Invalid input data error (400)", "description": "The error information", "example": { "code": "BAD_REQUEST", "message": "Invalid input data", "issues": [] } }, "error.UNAUTHORIZED": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Authorization not provided" }, "code": { "type": "string", "description": "The error code", "example": "UNAUTHORIZED" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Authorization not provided error (401)", "description": "The error information", "example": { "code": "UNAUTHORIZED", "message": "Authorization not provided", "issues": [] } }, "error.FORBIDDEN": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Insufficient access" }, "code": { "type": "string", "description": "The error code", "example": "FORBIDDEN" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Insufficient access error (403)", "description": "The error information", "example": { "code": "FORBIDDEN", "message": "Insufficient access", "issues": [] } }, "error.NOT_FOUND": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Not found" }, "code": { "type": "string", "description": "The error code", "example": "NOT_FOUND" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Not found error (404)", "description": "The error information", "example": { "code": "NOT_FOUND", "message": "Not found", "issues": [] } }, "error.INTERNAL_SERVER_ERROR": { "type": "object", "properties": { "message": { "type": "string", "description": "The error message", "example": "Internal server error" }, "code": { "type": "string", "description": "The error code", "example": "INTERNAL_SERVER_ERROR" }, "issues": { "description": "An array of issues that were responsible for the error", "example": [], "type": "array", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ], "additionalProperties": false } } }, "required": [ "message", "code" ], "additionalProperties": false, "title": "Internal server error error (500)", "description": "The error information", "example": { "code": "INTERNAL_SERVER_ERROR", "message": "Internal server error", "issues": [] } }, "__schema0": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid", "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$" }, "name": { "type": "string" }, "path": { "type": "string" }, "assetCount": { "type": "number" }, "children": { "type": "array", "items": { "$ref": "#/components/schemas/__schema0" } } }, "required": [ "id", "name", "path", "assetCount", "children" ], "additionalProperties": false }, "Error": { "type": "object", "required": [ "message", "code" ], "properties": { "message": { "type": "string", "description": "Human-readable description of what went wrong." }, "code": { "type": "string", "description": "Stable machine-readable error code." }, "issues": { "type": "array", "description": "Field-level validation problems, present on a 400.", "items": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } } } }, "securitySchemes": { "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "API Key", "description": "Bearer token authentication. Format: Bearer {api_key}" } } }, "security": [ { "bearerAuth": [] } ] }