diff --git a/CHANGELOG.md b/CHANGELOG.md index 449b4300..78359fe7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ## Unreleased +- Official API consumers: Number-scoped Meta templates (`cloudTemplates`), + service windows, Meta pricing counts, Cloud credential health and + reauthorization, QuickLink sync receipts, typing with an inbound message ID, + the Flow provider lifecycle, linked catalogs and Flow encryption keys, and + the Meta lifecycle webhook payload variants. Provider writes make one + attempt. Contracts are pinned to API `dev` `29abb7b`. +- Campaign records type the stored `sendWindow`; create and update requests + accept `CampaignSendWindowRequest`. +- Breaking for Flow drafts: `flows.list` and `flows.retrieve` now return the + unwrapped record in `response.data`, like the other Flow methods. Replace + `response.data.data` with `response.data`. + - `message.received` payload types include `replyChoice` (`kind` `button` or `list` and the `id` you assigned) and `parentMessageId`, and the linked-device message `type` union adds `button_reply`, `list_reply`, and diff --git a/README.md b/README.md index fe09c0a4..e02b022a 100644 --- a/README.md +++ b/README.md @@ -4,13 +4,13 @@ Handwritten API clients, UI packages, and developer tooling for Polymorfa. The development branch contains the TypeScript server SDK, a framework-neutral browser runtime, shared UI contracts, Web Components, React bindings, thin -Next.js server helpers, and a production-gated developer assistant. It follows -the Messaging and Platform contracts from API source commit -`2dd0c1563b1fc4e6525f708afc12e0685110cfe0`, now merged into API `dev` -by PR #260. Graph-compatible -APIs are outside this SDK's initial scope. +Next.js server helpers, and a production-gated developer assistant. The exact Messaging and Platform sources are pinned in +`contracts/source.json`; the Graph-compatible catalog and Flow encryption +routes are pinned to the same API commit in `contracts/cloud-api-supplements.json`. Full Graph API parity +is outside this SDK's scope; `cloudCatalogs.list` and `flowEncryption` provide +typed clients for their respective Graph resources. -The same API revision adds an enrolled hosted message history beta. +The API includes an enrolled hosted message history beta. `MessagingClient.chats` has typed conversation and message reads for server credentials. These methods do not make the beta available before enrollment, HMS enablement, deployment, and SDK publication. @@ -139,6 +139,10 @@ The handwritten Messaging resources in this milestone are: - `quickLinks`: create, retrieve, and cancel hosted QuickLink pairing sessions - `cloudOnboarding`: continue an issued Meta Cloud API QuickLink from a trusted server +- `cloudTemplates`: list, retrieve, create, edit and delete Meta templates for a + Number with an Official API connection; separate from project template drafts +- `cloudCatalogs`: read WABA product-catalog links through the Graph facade +- `flowEncryption`: read or register a public Flow encryption key for one Meta phone number - `business`: manage the connected Business App profile, commerce catalog, products, collections, orders, compliance, linked accounts, and eligibility - `calls`: reject an identified incoming Linked Device call @@ -906,7 +910,7 @@ and readiness. Native send/reaction requests and edits accept `transport: "auto" | "linked_devices" | "official_api"`. `chats.deleteMessage` accepts the choice in its options. Explicit choices never fall back. Raw Graph-compatible requests can -use `graphTransportHeaders(transport)`; Graph remains outside handwritten method +use `graphTransportHeaders(transport)`; Other Graph operations remain outside handwritten method coverage. Routing details appear in response `metadata.transport`, `metadata.routingReason`, and `metadata.operationId` when supplied by the API. diff --git a/contracts/README.md b/contracts/README.md index 2e6b7d71..42656c32 100644 --- a/contracts/README.md +++ b/contracts/README.md @@ -43,26 +43,42 @@ published SDK package before updating their pinned dependency. The two public Flow draft reads in the pinned Platform snapshot are covered by `Client.project(projectId).flows.list` and `.retrieve`. The API declares both -public, project-bound, and `sessions:read`. The merged API runtime at -`2fb3eec8624c5785f72f81f163a27c1ce4e19767` registers them with server-key -authentication. The SDK snapshot below also includes the later campaign -reschedule operations, which are tracked separately by SDK PR #310. +public, project-bound, and `sessions:read`. The snapshots are byte-identical copies of the Messaging and Platform OpenAPI -files at API `dev` merge commit `5f6a2b1470821c1a2b4077aa8de14214faede57a`. This revision adds ad-hoc and group-ID placement, -participant re-ring, connection media controls, emoji reactions, raised hands -and scoped call record detail. It also documents automatic SIP caller identity -when no From user override is set. The API merge also adds campaign reschedule -routes. SDK PR #310 owns their methods; the coverage ledger records both as -excluded until that PR merges. The SDK webhook catalog and payload types include -the `campaign.rescheduled` event in this pinned snapshot. `source.json` records source paths and SHA-256 -hashes. The refresh also carries an audio-codec description and corrects an -escaped webhook-header control-character pattern; no header fields or SDK -serialization changed. This revision also declares the optional `handRaised` -boolean on webhook call participants, matching the existing SDK event types. -SDK publication, deployment and the CLI's exact -registry pin remain separate release gates. The call-link preview request schema -accepts `session` and `token` together while remaining a closed object. +files at API `dev` merge commit `29abb7b66a8e225af4df5cf354e9836ccb2ce04c` +(API PR #362). This single revision contains every merged Official API +contract the SDK consumes: Number-scoped Cloud templates and template editing, +customer service windows, Meta pricing counts, Cloud credential health and +reauthorization, QuickLink sync receipts, typing with an inbound message ID, +the Meta lifecycle webhook payloads, and the Flow provider lifecycle. It also +contains the merged campaign send windows and rate-limit headers. + +- `MessagingClient.cloudTemplates` covers list, retrieve, create, edit and + delete. Create, edit and delete make one network attempt even when a caller + supplies an idempotency key or retry override. Create and delete accept the + API's `Idempotency-Key`, so a manual retry with the same key returns + `409 idempotency_completed` rather than writing again. +- `MessagingClient.chats.getServiceWindow`, `MessagingClient.sessions.getMetaPricing`, + `getCloudCredentialHealth` and `reauthorizeCloudCredentials` cover the four + new Number reads and the reauthorization link. Reauthorization makes one attempt. +- `Client.project(projectId).flows` covers create, update, delete, upload, + publish, deprecate, discard, sync and receipts. The API now accepts server + API keys for these routes, so the earlier dashboard-only exclusions are + replaced. Provider writes make one attempt; `sync` reconciles an uncertain + operation without repeating it. +- The two Console-only account health reads are excluded. +- Campaign records type the stored `sendWindow`; create and update requests on + both surfaces accept it. + +250 fingerprints changed. Each was reviewed: 202 changed only by the new +`cloud_template_authority_restricted` public error code and the documented +`X-RateLimit-*` response headers. The rest add campaign `sendWindow`, the +QuickLink `sync` status and `reauthorization` purpose, the typing `id`, the +template `Idempotency-Key` header, typed Flow `metaLinks`, the feature +decision `experimentRevision`, and closed Platform campaign shapes. SDK types +follow each change on covered operations; feature evaluation stays excluded. `cloud-api-supplements.json` pins the Graph-compatible +catalog and Flow encryption routes to the same commit. The merged Campaigns failed-state follow-up updates the `campaign.failed` reason example and the public archive/delete `409` descriptions. It changes no @@ -91,7 +107,7 @@ from SDK `dev`. The three public Calls analytics operations are covered by `Client.calls.list`, `Client.calls.export`, and `Client.calls.stats`. `Client.calls.exportAll` walks export pages. The 13 public Voice operations are covered by `Client.voice.audio` and `Client.voice.providerCredentials`; their -13 Console counterparts are excluded. The full 517-operation snapshot includes +13 Console counterparts are excluded. The full 536-operation snapshot includes all 15 Functions routes already merged to API `dev`. HMS history adds four server-only Messaging reads under @@ -179,12 +195,12 @@ signed events with these names still decode as unknown events. | Status | Operations | | ------------------- | ---------: | -| Covered | 387 | +| Covered | 405 | | Missing | 0 | -| Excluded | 130 | +| Excluded | 131 | | Partial | 0 | | Changed fingerprint | 0 | -| Total | 517 | +| Total | 536 | This revision adds test event triggering (`POST /messaging/testing/{projectId}/events`) and fixture listing @@ -342,3 +358,7 @@ draft reads/writes no longer declare a plan-related 402, and launch/live sender edits declare the existing public 503 envelope. Request and successful response shapes remain unchanged for all eleven refreshed fingerprints; the existing transport error handling applies. Focused Campaigns and contract checks pass. + +The Graph coverage exclusion applies to the full Graph API, not the separately +typed `cloudCatalogs` and `flowEncryption` subsets recorded in +`cloud-api-supplements.json`. diff --git a/contracts/cloud-api-supplements.json b/contracts/cloud-api-supplements.json new file mode 100644 index 00000000..ef6b9a42 --- /dev/null +++ b/contracts/cloud-api-supplements.json @@ -0,0 +1,30 @@ +{ + "repository": "polymorfa/polymorfa", + "commit": "29abb7b66a8e225af4df5cf354e9836ccb2ce04c", + "branch": "dev", + "note": "Graph-compatible operations used by typed SDK methods. The full Graph API is outside the coverage ledger. All sources are merged on API dev at this exact commit. No SDK package or availability claim.", + "sources": [ + { + "sourcePath": "docs/api-reference/openapi.graph.json", + "sha256": "87e3a56aee42de041dd38db08d0b263123f84a5a4982ce0f20b780c3cfae3684", + "operationIds": ["graphListProductCatalogs"], + "methods": ["MessagingClient.cloudCatalogs.list"], + "merged": true + }, + { + "pullRequest": "https://github.com/polymorfa/polymorfa/pull/362", + "sourcePath": "apps/api/packages/api/src/routes/graph/flow-encryption.ts", + "sha256": "8138dced428eaa4f50c94f1ed48a6fff35ab3f55b188faad6d647ee6635a8129", + "operationIds": [ + "graphGetFlowEncryptionKey", + "graphRegisterFlowEncryptionKey" + ], + "methods": [ + "MessagingClient.flowEncryption.retrieve", + "MessagingClient.flowEncryption.register" + ], + "merged": true, + "note": "The published Graph OpenAPI at this commit omits these two routes; the route source is the exact contract." + } + ] +} diff --git a/contracts/coverage.json b/contracts/coverage.json index 1484791a..131adc0e 100644 --- a/contracts/coverage.json +++ b/contracts/coverage.json @@ -1,10 +1,10 @@ { "schemaVersion": 1, - "sourceCommit": "5f6a2b1470821c1a2b4077aa8de14214faede57a", + "sourceCommit": "29abb7b66a8e225af4df5cf354e9836ccb2ce04c", "excludedContracts": [ { "family": "graph", - "reason": "Graph-compatible APIs are outside the initial SDK scope." + "reason": "Full Graph API coverage is outside this ledger; the typed Graph subsets used by cloudCatalogs and flowEncryption are pinned in cloud-api-supplements.json." } ], "operations": [ @@ -13,7 +13,7 @@ "method": "DELETE", "path": "/messaging/projects/{projectSlug}/templates/{id}", "operationId": "deleteProjectTemplate", - "fingerprint": "1b1be00f9b7bf5e6a664515b957766389abc6abff0539a82660506d9a41b3ce6", + "fingerprint": "cb2a77dc708de18cd97ae8bab21978c0663306c9b8193bb483742b97320a1e48", "typescript": { "status": "covered", "method": "MessagingClient.templates.delete" @@ -24,7 +24,7 @@ "method": "DELETE", "path": "/messaging/quicklinks/{id}", "operationId": "cancelQuickLink", - "fingerprint": "9c0176929aab87ab08edc96635e191d786e20cc1350883d950fbb90c703100db", + "fingerprint": "3c2bfa96f94d31edfcae1567ff91063c01a1d7965f8ad4c963ea6f8a23ca983a", "typescript": { "status": "covered", "method": "MessagingClient.quickLinks.cancel" @@ -35,7 +35,7 @@ "method": "DELETE", "path": "/messaging/voip/calls/{id}", "operationId": "voipTeardown", - "fingerprint": "9e56c6f7db04e1bc6357f9f333bbc9e82877e669ef7ce64ef4744186a76c4b74", + "fingerprint": "167e1aa6737ce644593ed79f46362dfd9f6ef9dc045b48eb6880d7e67d5fbf1d", "typescript": { "status": "covered", "method": "MessagingClient.voip.end" @@ -46,7 +46,7 @@ "method": "DELETE", "path": "/messaging/webhooks/{id}", "operationId": "deleteWebhook", - "fingerprint": "42dc1f9c982baa5163313185ad44526260f08297625e636f80e047e62bdb8aa3", + "fingerprint": "371307aef2acbff759bdce6e1671d4fc2d1207aa88627411347811835993d1eb", "typescript": { "status": "covered", "method": "MessagingClient.webhooks.delete" @@ -57,7 +57,7 @@ "method": "DELETE", "path": "/messaging/{session}/business/collections/{collectionId}", "operationId": "deleteBusinessCollection", - "fingerprint": "359cc9498cc56b25e610192ad60ce5e9312c127d7f53f117bfa61b66f4547823", + "fingerprint": "e0865c5f7ef6045e937db86faf9f0bc53dc69b9fe5798c43ed1ba045c5558211", "typescript": { "status": "covered", "method": "MessagingClient.business.deleteCollection" @@ -68,7 +68,7 @@ "method": "DELETE", "path": "/messaging/{session}/business/products/{productId}", "operationId": "deleteBusinessProduct", - "fingerprint": "b22e533c227f7a2cabf2d7e59d1f06d6034834e68bfbf487e2b96ffe86797498", + "fingerprint": "15b4853329569adf9d4182229e016376c7f94cf58e269fc4386ff1a8eec3cd5e", "typescript": { "status": "covered", "method": "MessagingClient.business.deleteProduct" @@ -79,7 +79,7 @@ "method": "DELETE", "path": "/messaging/{session}/business/profile/cover-photo/{coverPhotoId}", "operationId": "deleteBusinessCoverPhoto", - "fingerprint": "c6cd9595dc9275fc5ed7347e14e322caedbf18e35027df5ab5f748241626b05a", + "fingerprint": "b0cde22ab7fa64a25936a7de840766bb01493ca44827ad74c9897da679f04a78", "typescript": { "status": "covered", "method": "MessagingClient.business.deleteCoverPhoto" @@ -90,7 +90,7 @@ "method": "DELETE", "path": "/messaging/{session}/business/quick-replies/{quickReplyId}", "operationId": "deleteBusinessQuickReply", - "fingerprint": "d6f516e90c1ef08c0d88e118f475371c0b96f34caa268f924a8e17f937ceeef8", + "fingerprint": "4046877d6a587a124d2a9cc3510ed3a391fb37685e62e04d34699c2586cb87da", "typescript": { "status": "covered", "method": "MessagingClient.quickReplies.delete" @@ -101,7 +101,7 @@ "method": "DELETE", "path": "/messaging/{session}/channels/{id}", "operationId": "deleteChannel", - "fingerprint": "0e985fa6e1f2036a5110f3f434516b7679c804aa5ddb17e5a30d1801356ac6c9", + "fingerprint": "2520638b75d03122d5f623d14274f6407f22a83990ccb5b581fd3ffc40452e9e", "typescript": { "status": "covered", "method": "MessagingClient.channels.delete" @@ -112,7 +112,7 @@ "method": "DELETE", "path": "/messaging/{session}/chats/{conversation}/messages/{messageId}", "operationId": "deleteMessage", - "fingerprint": "94193b84df0998d21761a3ca5a5a690701a87c758041b26e987ab8781605549e", + "fingerprint": "38b458e139f3920d0f0a18032df82faff6e1a6c23937bba0dbb2df7304234743", "typescript": { "status": "covered", "method": "MessagingClient.chats.deleteMessage" @@ -123,7 +123,7 @@ "method": "DELETE", "path": "/messaging/{session}/groups/{id}", "operationId": "deleteGroup", - "fingerprint": "71714977bb192d333583ffe7fba9dbbc00bee4b6eec7f83b927fab41f0dbcee5", + "fingerprint": "698d23ea767d7124ba45873465ba4674aa5f24642c35485f32204b14f1564fab", "typescript": { "status": "covered", "method": "MessagingClient.groups.delete" @@ -134,7 +134,7 @@ "method": "DELETE", "path": "/messaging/{session}/labels/{labelId}", "operationId": "deleteLabel", - "fingerprint": "bcddc5e8385eb16682751b2073102772fb0790e76c264c49443056e7875fd95f", + "fingerprint": "60697d658298a92995957095a999a0ae3a8e6d9e4513ef45bfbdd626dd83f21c", "typescript": { "status": "covered", "method": "MessagingClient.labels.delete" @@ -145,7 +145,7 @@ "method": "DELETE", "path": "/messaging/{session}/profile/picture", "operationId": "deleteProfilePicture", - "fingerprint": "d9d1df30dc425729ca2622d86163bd63f34dde26a71a6e4a479740438f06f22c", + "fingerprint": "13d169ce8cef843e35c7eff7ed9a25a59ed36327ddb1aa7b6ec32956fbcf4b9f", "typescript": { "status": "covered", "method": "MessagingClient.profile.deletePicture" @@ -162,45 +162,12 @@ "method": "SystemClient.health" } }, - { - "family": "messaging", - "method": "GET", - "path": "/messaging/bridge/route", - "operationId": "getBridgeRoute", - "fingerprint": "d321c70c2e126a58784a01def440996c3d756569bcbcc7681c714928eecbb28f", - "typescript": { - "status": "covered", - "method": "BridgeClient.routes.resolve" - } - }, - { - "family": "messaging", - "method": "GET", - "path": "/messaging/info/status", - "operationId": "getStatus", - "fingerprint": "155d24e33875fedebe35c630ab095a27d0237ea9777e2bf059b51dc542a6bb73", - "typescript": { - "status": "covered", - "method": "SystemClient.status" - } - }, - { - "family": "messaging", - "method": "GET", - "path": "/messaging/info/version", - "operationId": "getVersion", - "fingerprint": "44ef279481ab1a26863bbb18cb45024cb02b31fcf1dbfb989f8bb4c6b00137a4", - "typescript": { - "status": "covered", - "method": "SystemClient.version" - } - }, { "family": "messaging", "method": "GET", "path": "/messaging/media/{id}", "operationId": "downloadMedia", - "fingerprint": "adc79c6f62c2a11bc0fa37ac118616a60257012b11311fe6cb5ab0132b9b528f", + "fingerprint": "a6accc5f780f0a95900f68bde2898d1b20c532d7e75048848208acd9f2c7cdf6", "typescript": { "status": "covered", "method": "MessagingClient.media.download" @@ -211,7 +178,7 @@ "method": "GET", "path": "/messaging/media/{id}/info", "operationId": "getMediaInfo", - "fingerprint": "9bccf0601b961098d8c725210f43936a1c7ce9790db5f22e1f7adf06d7f02c13", + "fingerprint": "15fde40c24ea0437d8594122ba0bfd1a166da4e5eddfc512118c2e3e14a93917", "typescript": { "status": "covered", "method": "MessagingClient.media.retrieve" @@ -222,7 +189,7 @@ "method": "GET", "path": "/messaging/projects/{projectId}/health-policy", "operationId": "getProjectHealthPolicy", - "fingerprint": "8afc3e8389aaaf89b7403647becc6816fb057f4b5f526a6188becdcbc4fe29f1", + "fingerprint": "161fb9a7de5762a0c0b4863b6f8f6d450348c98fb6606c2d6d6e81bc49033be7", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.getProjectHealthPolicy" @@ -233,7 +200,7 @@ "method": "GET", "path": "/messaging/projects/{projectId}/insurance-evidence", "operationId": "getProjectInsuranceEvidence", - "fingerprint": "d79ac812a1f9333fd529622287f73225805280fe48830672d7649b3385b109b0", + "fingerprint": "0a3ae10ed98d6b1fe8b6a7168467d328d668fbcd51fdef7f43410d5ef7a158f2", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.getProjectInsuranceEvidence" @@ -244,7 +211,7 @@ "method": "GET", "path": "/messaging/projects/{projectId}/observation-policy", "operationId": "getProjectObservationPolicy", - "fingerprint": "611d31d626aefb74eba190298af0b5212beb954851a5094f95d28369af6ebcc5", + "fingerprint": "21665fac687b464992d5069af1dccef532b65775648aa146493f664674e748f6", "typescript": { "status": "covered", "method": "MessagingClient.observationPolicies.retrieveForProject" @@ -255,7 +222,7 @@ "method": "GET", "path": "/messaging/projects/{projectId}/safe-mode", "operationId": "getProjectSafeMode", - "fingerprint": "5eaf19a1bdd63c685ca5cb270c23f67cac02dbcaa674c0d1ca3c7a55553f1148", + "fingerprint": "897194a240e9839568daa918bdddc4c9fef20688cce51d579ef0b83dcc507122", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.getProjectSafeMode" @@ -266,7 +233,7 @@ "method": "GET", "path": "/messaging/projects/{projectId}/warmup-plan", "operationId": "getProjectWarmupPlan", - "fingerprint": "dc6009d92678ff376975e8627dbdc1e6def436cbd043e548ecd73568cd59e59c", + "fingerprint": "e36ff72af057f61e2e0b662e3794d9635e967c329817841631a851b544de2976", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.getProjectWarmupPlan" @@ -277,7 +244,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/campaigns", "operationId": "listCampaigns", - "fingerprint": "1534749a9e881ebec81bc42e58586f1224b9cc854dc8f39bba50bb59bb383c76", + "fingerprint": "258cc6a319e21c63188b1ae56114f4c960e36e2db7af11429b01fe5937dd36a6", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.list" @@ -288,7 +255,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/campaigns/{id}", "operationId": "getCampaign", - "fingerprint": "df0afb657e91437629b726fc004b1c769343ee277d1dcbe235955d6dc1432d9b", + "fingerprint": "335e8a1ca8b8d482d10854095b74e82db0c7e44f99307c0b2feb2c719d343489", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.retrieve" @@ -299,7 +266,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/analytics", "operationId": "getCampaignAnalytics", - "fingerprint": "7060015a6c91559b6ae6a0b7e8212219ddaf4c00675e0f9c3fbb7c3ceccdb00b", + "fingerprint": "411183477a4aee9dfffeb430f2e41c05e661dcd3480c326d2b5e2bcbd602a7f2", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.analytics" @@ -310,7 +277,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/recipients", "operationId": "listProjectCampaignRecipients", - "fingerprint": "1da5e8f138bd3870846848812374cf30e2da251a12e27a7c259e0f3e16a56730", + "fingerprint": "20fd60e4d4d16de98ede7beeced09f14299a97eda7353f017b940854a83c5c34", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.listRecipients" @@ -321,7 +288,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/templates", "operationId": "listProjectTemplates", - "fingerprint": "3f2c770aa94cb0bb961a8b186008e8c79a0beb406377772ab081afa13b954dd6", + "fingerprint": "75a066bcfc53b3b3f54229e9f432b1e164e10572355afc9b4e24d2c8a2aa9889", "typescript": { "status": "covered", "method": "MessagingClient.templates.list" @@ -332,7 +299,7 @@ "method": "GET", "path": "/messaging/projects/{projectSlug}/templates/{id}", "operationId": "getProjectTemplate", - "fingerprint": "e8ea66776eb1e7b2c1150a0dc2983595a72d5e967d5ab635a002bbac09b2c5d8", + "fingerprint": "0b98ef738202e6874e17c67ff859a9ca8d7bafb9ffb919cb0607d36572452464", "typescript": { "status": "covered", "method": "MessagingClient.templates.retrieve" @@ -343,7 +310,7 @@ "method": "GET", "path": "/messaging/quicklinks/availability", "operationId": "getHybridQuickLinkAvailability", - "fingerprint": "6cab8df0433d215f00bb441220ced92b53cf2989fefec133041a87b02e70b300", + "fingerprint": "c2a0393c0769ef89a48a1af5954ad51f6ad188b5461386dea49a0b3778055134", "typescript": { "status": "covered", "method": "MessagingClient.quickLinks.availability" @@ -354,7 +321,7 @@ "method": "GET", "path": "/messaging/quicklinks/{id}", "operationId": "getQuickLink", - "fingerprint": "ec5b9d70c6fa59f17906ad1c2691792167238971734260c354d0dc5e24e7675d", + "fingerprint": "44d47f0d011ebb53bea3dbcdb12251b65b6d5901c94f6529ed6c2e7bbcf158f0", "typescript": { "status": "covered", "method": "MessagingClient.quickLinks.retrieve" @@ -365,7 +332,7 @@ "method": "GET", "path": "/messaging/routing/hybrid", "operationId": "getHybridRoutingPolicy", - "fingerprint": "7f61cfbe908fbe8a1efd4f03c3ec185233b138bcb54c0ad82aab769a751d4e1a", + "fingerprint": "3cbbc67822527959a711f69b4af982582ec3267c8670bf1435442ac718be3482", "typescript": { "status": "covered", "method": "MessagingClient.hybridLink.getPolicy" @@ -376,7 +343,7 @@ "method": "GET", "path": "/messaging/testing/{projectId}/events/fixtures", "operationId": "listTestEventFixtures", - "fingerprint": "05b7145174ef35215dd9b6f51b83927279d12a1281e4f142f882e13c27fb5361", + "fingerprint": "f3f590f7284dd75aae00e5767f10092c02d1ff97a564f62c42bdea868c7b9805", "typescript": { "status": "covered", "method": "MessagingClient.testing.listEventFixtures" @@ -387,7 +354,7 @@ "method": "GET", "path": "/messaging/voip/calls/{id}/candidates", "operationId": "voipCandidates", - "fingerprint": "74f0e421efb2e1a53eaf7f7001161e13b43977b5aa452420955a2b3c02cb1aef", + "fingerprint": "138ef99b30346367bd16c926bdbddc2efa54b9e736bb59c439037f4efdad15d5", "typescript": { "status": "excluded", "reason": "used internally by the Calls SDK; not part of the public API" @@ -398,7 +365,7 @@ "method": "GET", "path": "/messaging/webhooks", "operationId": "listWebhooks", - "fingerprint": "4e9ad674048dc686894889047b19d1bb23619ccb912b0e70c6cc0489c37b6c87", + "fingerprint": "aeaa85fb8ce08d3871e3a6f8888366a8e7a60a2fc1c6aca99295b015b54350fc", "typescript": { "status": "covered", "method": "MessagingClient.webhooks.list" @@ -409,7 +376,7 @@ "method": "GET", "path": "/messaging/webhooks/{id}", "operationId": "getWebhook", - "fingerprint": "d8c7a12bca9355b3efaf3dcc7d144718bd7ffcde0afeb1969890e92cde2ae6af", + "fingerprint": "7a61900b48e5ca9985b29a345826c585f9b94538806da4a05c8e98c8bc99f902", "typescript": { "status": "covered", "method": "MessagingClient.webhooks.retrieve" @@ -420,7 +387,7 @@ "method": "GET", "path": "/messaging/{session}/business/catalog", "operationId": "getBusinessCatalog", - "fingerprint": "0343669a80027d2b3a15ffa36b247fa64dae908dd6e4d44daff1885404aa2e7b", + "fingerprint": "1f16a348878724684348df8ff42c3c9cbc3251f1353ef223e5ab1eeca55315aa", "typescript": { "status": "covered", "method": "MessagingClient.business.getCatalog" @@ -431,7 +398,7 @@ "method": "GET", "path": "/messaging/{session}/business/collections", "operationId": "getBusinessCollections", - "fingerprint": "d8dd52927e0d82edc771a4dc5e77876cd0556622ceffc58abdad71d13a78728d", + "fingerprint": "9f804fd65d2fba5b9ac9f94deae83281d47f7b2d45b91e0aa51b9c4c5d3bcbb1", "typescript": { "status": "covered", "method": "MessagingClient.business.listCollections" @@ -442,7 +409,7 @@ "method": "GET", "path": "/messaging/{session}/business/collections/{collectionId}", "operationId": "getBusinessCollection", - "fingerprint": "b5a5c7f941eb9f6ff9040dcf89ca94166f933415af1cf55dde784098d00ec26c", + "fingerprint": "1877edfa8cf9f7c6e3bf1f669ab7a1a1b2d9307aac0e78e095e6378e13616fb0", "typescript": { "status": "covered", "method": "MessagingClient.business.getCollection" @@ -453,7 +420,7 @@ "method": "GET", "path": "/messaging/{session}/business/compliance", "operationId": "getBusinessMerchantCompliance", - "fingerprint": "b6fbd1133265954a4108b4a222e9fa4128ac98e06327a12a092ff210c8070c3b", + "fingerprint": "da6557e689297e1908ccbc0f7162d02145eb2eed26106c490a570708b85918ce", "typescript": { "status": "covered", "method": "MessagingClient.business.getMerchantCompliance" @@ -464,7 +431,7 @@ "method": "GET", "path": "/messaging/{session}/business/eligibility", "operationId": "getBusinessEligibility", - "fingerprint": "1b040b988e1c1ba072a3e83be4482b4078bffa1e273a4ae72222d0c67675af1f", + "fingerprint": "731bc672f1e30a38d51ddae915059e35f30776b4d728a96f840f8d6e1c969b83", "typescript": { "status": "covered", "method": "MessagingClient.business.getEligibility" @@ -475,7 +442,7 @@ "method": "GET", "path": "/messaging/{session}/business/linked-accounts", "operationId": "getBusinessLinkedAccounts", - "fingerprint": "e0dbebc8e3df452862769a0d20e44d939f576143cc70f4f03a97e62bfbc0da39", + "fingerprint": "43d7404fb43467259ed7e7a0e10842a59ecf2d5b3a89759798edc1a1bdf4c038", "typescript": { "status": "covered", "method": "MessagingClient.business.getLinkedAccounts" @@ -486,7 +453,7 @@ "method": "GET", "path": "/messaging/{session}/business/products/{productId}", "operationId": "getBusinessProduct", - "fingerprint": "f8f826f843688fbdb9145870cd23dec351d886d45f46110531edda81ba01fd3c", + "fingerprint": "c136ac114131fb3170a830b80a58bab5391cf779810ca326e58523c9586acc8c", "typescript": { "status": "covered", "method": "MessagingClient.business.getProduct" @@ -497,7 +464,7 @@ "method": "GET", "path": "/messaging/{session}/business/profile", "operationId": "getOwnBusinessProfile", - "fingerprint": "a2d6752596ac3949ce4a58d0a61e925e694043f93e7c473451a2c117acdd154e", + "fingerprint": "6d54eee4eaac24edaf27c7cb633779e2ceb6b2aedf2b0fd0a362b44f4e57eb2e", "typescript": { "status": "covered", "method": "MessagingClient.business.getProfile" @@ -508,7 +475,7 @@ "method": "GET", "path": "/messaging/{session}/business/quick-replies", "operationId": "listBusinessQuickReplies", - "fingerprint": "bd9c3cab1c8cad3a8681ccea4b5394f190fa3a36c6c72edb8991ecfbfba11623", + "fingerprint": "0e9100d950eae0468cf2f7e809fd1d784e1dc6b3f7b57b6044be6854620bbf73", "typescript": { "status": "covered", "method": "MessagingClient.quickReplies.list" @@ -519,7 +486,7 @@ "method": "GET", "path": "/messaging/{session}/call-permissions/{to}", "operationId": "getCallPermission", - "fingerprint": "7ddf19fca942e2cb1bb6238002f25befd40bb09527e28d8be8b43d80f82130cf", + "fingerprint": "1d6545e244fc43f187e75191bcd276f854053767459192577f1265f6c09b984e", "typescript": { "status": "covered", "method": "MessagingClient.voip.retrieveCallPermission" @@ -530,7 +497,7 @@ "method": "GET", "path": "/messaging/{session}/channels", "operationId": "listChannels", - "fingerprint": "69c7395ff270a61853006079f6ea13d9cbe5d56077961ea4a906d52f6d2c8c1f", + "fingerprint": "4f48afa4ff7867261d69aa711419d828cb256aced8d3777bb7b44e3ab8e95b39", "typescript": { "status": "covered", "method": "MessagingClient.channels.list" @@ -541,7 +508,7 @@ "method": "GET", "path": "/messaging/{session}/channels/{id}", "operationId": "getChannel", - "fingerprint": "47a3626b8efe58e590dcffafced6cde94dd5a195d7fc2c302809d6fa4224f2bc", + "fingerprint": "f4fe3750f92b2147781e0c20250d12e171488fea388543581d694ae5461c3200", "typescript": { "status": "covered", "method": "MessagingClient.channels.retrieve" @@ -552,7 +519,7 @@ "method": "GET", "path": "/messaging/{session}/channels/{id}/message-updates", "operationId": "listChannelMessageUpdates", - "fingerprint": "d0a8540ab7d9d475638a1f30a3ab8a2e4b292a72b12d4c373375461e07c8a110", + "fingerprint": "c3c44206396ea12f910de96bbf9dccb69757c9d04bc5ddf7d446c455357131f0", "typescript": { "status": "covered", "method": "MessagingClient.channels.listMessageUpdates" @@ -563,7 +530,7 @@ "method": "GET", "path": "/messaging/{session}/channels/{id}/messages", "operationId": "listChannelMessages", - "fingerprint": "4435249048d4acb36667bd7e14ac2d7a8d17b06059aa8ca3610e9d3794b4d646", + "fingerprint": "afdc8cfcd639639bb74661ae666695537d4d09d0277de1cf3d747e29f2f676e1", "typescript": { "status": "covered", "method": "MessagingClient.channels.listMessages" @@ -574,7 +541,7 @@ "method": "GET", "path": "/messaging/{session}/chats", "operationId": "listChats", - "fingerprint": "efb75aef9b2cd4349d3627680dcfb5215958c700413abc233af7406dacf743ed", + "fingerprint": "d7e6419afdd6d4dcf6315703c7d55d9318bbd5c0cf5d205535be60dd6730eb0a", "typescript": { "status": "covered", "method": "MessagingClient.chats.list" @@ -585,7 +552,7 @@ "method": "GET", "path": "/messaging/{session}/chats/{conversation}", "operationId": "getChat", - "fingerprint": "4c7093395b06165fa3de12f0855fe07bfb0d613ac35e792e878093b9dada7768", + "fingerprint": "3d23b154846d78f4db43e88f9a64e45c95e90f4bb2d3a1d1b3931fd569dd9406", "typescript": { "status": "covered", "method": "MessagingClient.chats.retrieve" @@ -596,7 +563,7 @@ "method": "GET", "path": "/messaging/{session}/chats/{conversation}/messages", "operationId": "listChatMessages", - "fingerprint": "3516cbf0aacf56ef2ce638909d5507aef03e1ff916b539cc5b1413ea330a2fd2", + "fingerprint": "80b5836b8346eb58132b13ce1e9d75fbd61510c70f14468680a24851cf539261", "typescript": { "status": "covered", "method": "MessagingClient.chats.listMessages" @@ -607,7 +574,7 @@ "method": "GET", "path": "/messaging/{session}/chats/{conversation}/messages/{messageId}", "operationId": "getChatMessage", - "fingerprint": "28f8a6956df65a93b6370879059c7a258a811a8d4b680384c3728e47a309f92d", + "fingerprint": "d392d96a0ef3012d8c2ee51fa6729f20491740a13e13ee854360a4e33c57da9b", "typescript": { "status": "covered", "method": "MessagingClient.chats.retrieveMessage" @@ -618,18 +585,84 @@ "method": "GET", "path": "/messaging/{session}/chats/{conversation}/messages/{messageId}/media", "operationId": "getChatMessageMedia", - "fingerprint": "104d13ee3a51a7c02d4d78aac2f1d98bbe6967b7e60314aab1f0d5a84e9041e2", + "fingerprint": "fff403df5eb56d8cfd73b930641f5ea070b39eb9a4e2d8bb05aa7f9992ca7065", "typescript": { "status": "excluded", "reason": "Official API hosted-history media download is owned by SDK PR #316." } }, + { + "family": "messaging", + "method": "DELETE", + "path": "/messaging/{session}/templates/{name}", + "operationId": "deleteTemplate", + "fingerprint": "b735eeb4b30232c8764f53c57390621bd328937da611d7ae67d27010f685955f", + "typescript": { + "status": "covered", + "method": "MessagingClient.cloudTemplates.delete" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/{session}/chats/{conversation}/service-window", + "operationId": "getCustomerServiceWindow", + "fingerprint": "8c55bdc47ec9fe889f860dce79b94dee27c12c2f7dfd5baf92d739d540538b3f", + "typescript": { + "status": "covered", + "method": "MessagingClient.chats.getServiceWindow" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/{session}/cloud-credentials", + "operationId": "getCloudCredentialHealth", + "fingerprint": "61ea580de75ef99b4ba0f3d795f15c69e73be84d8255eb2e94bb1c0dec6fa379", + "typescript": { + "status": "covered", + "method": "MessagingClient.sessions.getCloudCredentialHealth" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/bridge/route", + "operationId": "getBridgeRoute", + "fingerprint": "5a5d584cb73764671e62b663cc726ae4652439cd5bc20247bf37ff0cda058349", + "typescript": { + "status": "covered", + "method": "BridgeClient.routes.resolve" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/info/status", + "operationId": "getStatus", + "fingerprint": "23338dd706e18d3d253e5c2306a188a4228b546fe8166c9c5baf252077c7162b", + "typescript": { + "status": "covered", + "method": "SystemClient.status" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/info/version", + "operationId": "getVersion", + "fingerprint": "cc8bde27daeb5d13ca1b720781867dd26c8bc148e29ad8f8136f04cf8545fe1d", + "typescript": { + "status": "covered", + "method": "SystemClient.version" + } + }, { "family": "messaging", "method": "GET", "path": "/messaging/{session}/contacts", "operationId": "listContacts", - "fingerprint": "97c8ed2eefae451c08722ecfa04018239943371732f53e79a846275eb3f9cdbb", + "fingerprint": "49fe2d372e54be9a3cb150b2167843f4118c7a6d56c4e596d4f31fe6f1ce39d4", "typescript": { "status": "covered", "method": "MessagingClient.contacts.list" @@ -640,7 +673,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/blocked", "operationId": "getBlocklist", - "fingerprint": "827304a10677b72d262692ef64e13c37f86ea3792c944ff8bf3c96640674e21d", + "fingerprint": "c4a6494582e362dff11496c38681f0dac1f5dfeae17f71499175794d38c23a3a", "typescript": { "status": "covered", "method": "MessagingClient.contacts.blocklist" @@ -651,7 +684,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/check", "operationId": "checkContacts", - "fingerprint": "41d3f2a9f031820d2535e65e1c1556bf63e107d78b8dc8defa1560c098996f19", + "fingerprint": "bd4937b5eee26cc79c23713c438cd430ebd272a64fc036fc915ae517898703b6", "typescript": { "status": "covered", "method": "MessagingClient.contacts.check" @@ -662,7 +695,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/{contactId}", "operationId": "getContact", - "fingerprint": "630edd70de0a1812b2904db8562455c2df2225eda80d04b845f0b08e9ddb6be7", + "fingerprint": "5dd685f43c14b3d6631e7d565f512e8d6dc08b547b4916ed27d4969e38f6b5af", "typescript": { "status": "covered", "method": "MessagingClient.contacts.retrieve" @@ -673,7 +706,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/{contactId}/business-profile", "operationId": "getBusinessProfile", - "fingerprint": "6243cac1a451121d42001d57877e51abba54c452d1c8c57b21225ec61a303bba", + "fingerprint": "92858969f2edb3b66b7577ab12b71d453954bed4609b18205a9382751389adf8", "typescript": { "status": "covered", "method": "MessagingClient.contacts.businessProfile" @@ -684,7 +717,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/{contactId}/devices", "operationId": "getUserDevices", - "fingerprint": "6653eed239848a27d05b35a971bb050737e418c5f818bacedd2e86a035126bda", + "fingerprint": "ec4a98691b704fef5f9e8b24e8ba00cfef5cd144c8fefa616ce870a9366a0a36", "typescript": { "status": "covered", "method": "MessagingClient.contacts.devices" @@ -695,7 +728,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/{contactId}/info", "operationId": "getUserInfo", - "fingerprint": "90653344655bcd6533e4262223c9eb94679e7490f7d6672df3808c31f528c6a2", + "fingerprint": "16ab8808307341c3d92952e1e6455a3d34f6da2e0ce6e1a1691d461b30ca192c", "typescript": { "status": "covered", "method": "MessagingClient.contacts.info" @@ -706,7 +739,7 @@ "method": "GET", "path": "/messaging/{session}/contacts/{contactId}/picture", "operationId": "getContactPicture", - "fingerprint": "447e93829c67b47b5a5ef5a1f3dbe6428db0e985743a3f49627597190ef3725f", + "fingerprint": "ab4611973273abee90eb4bd8476134e99444e5dc10bb6b38a443ccd3070d6515", "typescript": { "status": "covered", "method": "MessagingClient.contacts.picture" @@ -717,7 +750,7 @@ "method": "GET", "path": "/messaging/{session}/groups", "operationId": "listGroups", - "fingerprint": "557fdaae3fd9c9b5053f9a7ca03741232f446415ba0a8372f38744eca263ee76", + "fingerprint": "9154122ba60e0cb62765cb67727bc5299e1d9fbca87a63d1fc0854010200d564", "typescript": { "status": "covered", "method": "MessagingClient.groups.list" @@ -728,7 +761,7 @@ "method": "GET", "path": "/messaging/{session}/groups/join-info", "operationId": "getGroupJoinInfo", - "fingerprint": "df9e90196753b285abe9cd2220f8b9c52070cae3803739eb3ba2f54c11089518", + "fingerprint": "5d8e7ccb2cbf35c31efc6592382b1d4fc4b31f828696baddf8ece468129be756", "typescript": { "status": "covered", "method": "MessagingClient.groups.getJoinInfo" @@ -739,7 +772,7 @@ "method": "GET", "path": "/messaging/{session}/groups/{id}", "operationId": "getGroup", - "fingerprint": "051c41c85fff332132442add73be7d97d48690de74099bee5589343d0e0fea69", + "fingerprint": "da6799259bc5a50321a54155da14d1f65ea202ae063a4ff3e6602d41a66cb607", "typescript": { "status": "covered", "method": "MessagingClient.groups.retrieve" @@ -750,7 +783,7 @@ "method": "GET", "path": "/messaging/{session}/groups/{id}/invite-code", "operationId": "getGroupInviteCode", - "fingerprint": "a9dcd0a74eb65a8acae7b75e0f8b921b292343a1fdd054965195fc04afa6ece7", + "fingerprint": "36feabdf8bf346e8f30d77f49184f48c30d6a33f199afd7cef4a10f9de2fc362", "typescript": { "status": "covered", "method": "MessagingClient.groups.getInviteCode" @@ -761,7 +794,7 @@ "method": "GET", "path": "/messaging/{session}/groups/{id}/participants", "operationId": "getGroupParticipants", - "fingerprint": "85d01079ab4c01f365f1a09a3d95fb47dab7b8f9c18438b2eb566f6dd6ddceb0", + "fingerprint": "11e65580f103c42a613d8d210e207ce1dbb04a9c25178499f308f7a736573bf0", "typescript": { "status": "covered", "method": "MessagingClient.groups.listParticipants" @@ -772,7 +805,7 @@ "method": "GET", "path": "/messaging/{session}/hybrid-link", "operationId": "getHybridLinkState", - "fingerprint": "5856d04e61b223199fdc4577aaba39da07b0692c88466d95b99b03217e44570c", + "fingerprint": "be1244c259a3a74f7f8408e9318e7ead58d9da5ae41f202fe7a882926cace509", "typescript": { "status": "covered", "method": "MessagingClient.hybridLink.state" @@ -783,7 +816,7 @@ "method": "GET", "path": "/messaging/{session}/identities/resolve", "operationId": "resolveIdentity", - "fingerprint": "b4f5f2df9f32dc446dd03f1ef2ebe2a08d8b54e9136c2d3eabb4dc2777054e7a", + "fingerprint": "20a1c822be8fecacd1517d604623a5f480bd282c4bca690cb3834ecc854c210a", "typescript": { "status": "covered", "method": "MessagingClient.identities.resolve" @@ -794,7 +827,7 @@ "method": "GET", "path": "/messaging/{session}/labels", "operationId": "listLabels", - "fingerprint": "62b43c0f75936f3218a2905eba98d4ebd4ba7cb1ba073e6760dfbfe19349ea00", + "fingerprint": "f28df1a488754d674fa0d6c5ba61cb4eec5e78b57b7653917c0218e49247fe75", "typescript": { "status": "covered", "method": "MessagingClient.labels.list" @@ -805,18 +838,29 @@ "method": "GET", "path": "/messaging/{session}/labels/chats/{conversation}", "operationId": "getChatLabels", - "fingerprint": "9c1718d2c9779681a1477f805b395f04fc39a044a8d9721858db68b434d84176", + "fingerprint": "7b49da74ea7a09e279deadfbce76069b67c91b372af18df14bc7f05a9cc750c9", "typescript": { "status": "covered", "method": "MessagingClient.labels.listForChat" } }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/{session}/meta-pricing", + "operationId": "getMetaPricingSummary", + "fingerprint": "4c64914b5ee8e06af111e6ee99ae297cd206735e27b1313bff1746df0db16188", + "typescript": { + "status": "covered", + "method": "MessagingClient.sessions.getMetaPricing" + } + }, { "family": "messaging", "method": "GET", "path": "/messaging/{session}/observation-policy", "operationId": "getSessionObservationPolicy", - "fingerprint": "f682652452cd459b275c58d4702fa8451f3fe1e86a4d2c90150fc22d8af52c3e", + "fingerprint": "bda4166c2a34df128164925d97f614e109b14825904ed2223b93b5c88ec03cd1", "typescript": { "status": "covered", "method": "MessagingClient.observationPolicies.retrieveForSession" @@ -827,7 +871,7 @@ "method": "GET", "path": "/messaging/{session}/operations/{operationId}", "operationId": "getMessageOperation", - "fingerprint": "6cd745f7d7be9072271658936369ec0fac1a3db6d35f75d2feb603772b39a520", + "fingerprint": "883c5152aa8717fcc2bbef2656fe82e7f17136fd871512e02c8492b547555033", "typescript": { "status": "covered", "method": "MessagingClient.messages.operationStatus" @@ -838,7 +882,7 @@ "method": "GET", "path": "/messaging/{session}/pair/qr", "operationId": "getQRCode", - "fingerprint": "50fd6b66daa47375025cb30f122aeaccf996335d4e8ad6f29256dc31c8fdcf35", + "fingerprint": "e199af9c960391d1dcff183e153ee7247564e0a1f6bc729fd8f0ff883f0526ef", "typescript": { "status": "covered", "method": "MessagingClient.sessions.qr" @@ -849,7 +893,7 @@ "method": "GET", "path": "/messaging/{session}/presence", "operationId": "getPresence", - "fingerprint": "92e889a548d108d46b9e5300dfec1216dc816d5ccaf44eb5f6f2817ab8ee13c9", + "fingerprint": "2726c143d29f4f102abd4bdbf1564b458b53a43685ccec4d024a1b974d853716", "typescript": { "status": "covered", "method": "MessagingClient.presence.get" @@ -860,7 +904,7 @@ "method": "GET", "path": "/messaging/{session}/presence/{conversation}", "operationId": "getChatPresence", - "fingerprint": "3477e117477fb53842d89c3076e157c4947cd8a1fab509d3677496e5b8407f1b", + "fingerprint": "e2e18c3edaf948ef509db52d9a2bd2656d32e02fcae47f7cdeeb5e9a520d6b01", "typescript": { "status": "covered", "method": "MessagingClient.presence.getForChat" @@ -871,7 +915,7 @@ "method": "GET", "path": "/messaging/{session}/privacy", "operationId": "getPrivacySettings", - "fingerprint": "ea2f0ab02f5669ce4971ba218cd8b247449901c283d2cd22318cd5472c01ce1a", + "fingerprint": "125ec02995e951713354a5aba65ebdde025dec36c3124e4f8059e3493a61f4e7", "typescript": { "status": "covered", "method": "MessagingClient.privacy.get" @@ -882,7 +926,7 @@ "method": "GET", "path": "/messaging/{session}/profile", "operationId": "getProfile", - "fingerprint": "2d179fe40f833323b19fa33fb773822ab239973a913c91c368883e04ae426799", + "fingerprint": "9882ff83f23d59b129f94f8da9f99f0f0fae540f91509191908fac788ce3d0bb", "typescript": { "status": "covered", "method": "MessagingClient.profile.get" @@ -893,7 +937,7 @@ "method": "GET", "path": "/messaging/{session}/safe-mode", "operationId": "getSessionSafeMode", - "fingerprint": "13d0467c725ae1eb95694355d55891ac9a186ab4de5fec97facfc17e759c010e", + "fingerprint": "b1f8e6abb946e601482163fcf78df86429d78c3da8da538f82562d35d3602166", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.getSessionSafeMode" @@ -904,7 +948,7 @@ "method": "GET", "path": "/messaging/{session}/users/{id}/security-code", "operationId": "getUserSecurityCode", - "fingerprint": "e92fdd0e50a078e31049d6a9fd25ba6cc313c0e19a454281f9adcc768e6b6a07", + "fingerprint": "5da6e99f30f04cb11f8269fded481d04ba029718975b6f79395b7ff2ed9bfa59", "typescript": { "status": "covered", "method": "MessagingClient.users.getSecurityCode" @@ -926,7 +970,7 @@ "method": "GET", "path": "/quicklink/{token}", "operationId": "getQuickLinkState", - "fingerprint": "a462c6d28d81528102959bf45b83a44469433cf1b920a358a8d8a483b82620fa", + "fingerprint": "274c13e56fcc665f60ef60c49da60c4a7e13e17b438fb61067f70a095d0cf13a", "typescript": { "status": "excluded", "reason": "Credential-free public QuickLink participant route used only by the hosted QuickLink page, not the SDKs.", @@ -950,7 +994,7 @@ "method": "PATCH", "path": "/messaging/projects/{projectSlug}/campaigns/{id}", "operationId": "updateProjectCampaign", - "fingerprint": "fe6366542a59aaf35a743b1d4fc2819fc0c192aeca7db53e41a6370de886f3fa", + "fingerprint": "664650557033e5880afa9089fa83bc99ba7522499ffb402ef20faaa76d874859", "typescript": { "status": "excluded", "reason": "Messaging campaign update is owned by SDK PR #307." @@ -961,7 +1005,7 @@ "method": "PATCH", "path": "/messaging/projects/{projectSlug}/templates/{id}", "operationId": "updateProjectTemplate", - "fingerprint": "f32b61e565755f6c4c8e2abf76caee79466801323add172f5ba02d630e8b2603", + "fingerprint": "85edff54200d87f419810ff7cd99e156d5300ef49377dd6bb27453e52dd9f043", "typescript": { "status": "covered", "method": "MessagingClient.templates.update" @@ -972,7 +1016,7 @@ "method": "PATCH", "path": "/messaging/{session}/business/catalog/cart", "operationId": "setBusinessCartEnabled", - "fingerprint": "f7f94339bab5331a0323282442e040e46bf70aeaaf09ab6b3a887de3cdf2c2e0", + "fingerprint": "fea27ec788314c26403dd6c7a0833c437cf753832a14a114afe82f5eb3b01dfe", "typescript": { "status": "covered", "method": "MessagingClient.business.setCartEnabled" @@ -983,7 +1027,7 @@ "method": "PATCH", "path": "/messaging/{session}/business/collections/{collectionId}", "operationId": "updateBusinessCollection", - "fingerprint": "a7a9ea3f60c4700989177c97cb629788334199e945fda811b4a7e86e387e0692", + "fingerprint": "a376d520be0b9ce44eeb32b9d323067bde5556285b8fd0b0cb84e39e4e024ac3", "typescript": { "status": "covered", "method": "MessagingClient.business.updateCollection" @@ -994,7 +1038,7 @@ "method": "PATCH", "path": "/messaging/{session}/business/products/{productId}/visibility", "operationId": "setBusinessProductVisibility", - "fingerprint": "ce7c0a1832119bdd5f253f005b9a5acf4accf3c509670d318d62137d7f51350f", + "fingerprint": "3173b5f160c591bc26bbaeb323536c947f67a0ae386259294569256107a76826", "typescript": { "status": "covered", "method": "MessagingClient.business.setProductVisibility" @@ -1005,18 +1049,29 @@ "method": "PATCH", "path": "/messaging/{session}/business/profile", "operationId": "updateBusinessProfile", - "fingerprint": "9ab8d9a6567afcd5d04a8394fd3368100e138a07e53e431ffe383648d8b95111", + "fingerprint": "36dde5bf3b4e9f9218c838515ec1a10c48ae000140d2710ab52de1bee9f909ae", "typescript": { "status": "covered", "method": "MessagingClient.business.updateProfile" } }, + { + "family": "messaging", + "method": "PATCH", + "path": "/messaging/{session}/templates/{name}", + "operationId": "editTemplate", + "fingerprint": "989368741345d05cf266fe92ba5a2d06afd3252cffff00bbd0eb04720ca9796a", + "typescript": { + "status": "covered", + "method": "MessagingClient.cloudTemplates.update" + } + }, { "family": "messaging", "method": "PATCH", "path": "/quicklink/{token}/testing", "operationId": "customizeQuickLinkTesting", - "fingerprint": "9c07cbe18cd76e75c53b5ed4dc11bc1336b29c1e8b89bcd0895feb4a4a9ad0a3", + "fingerprint": "ac8d711fe5e8615e72c66c57c2a0d3ceb6bdaa4f2010e422b95cd7d87893ebeb", "typescript": { "status": "excluded", "reason": "Hosted QuickLink recipient and authenticated Console-only operations are outside the trusted-server SDK surface." @@ -1027,7 +1082,7 @@ "method": "POST", "path": "/messaging/cloud-api/embedded-signup", "operationId": "embeddedSignup", - "fingerprint": "ca09251cb32425a1dc7368c7c5c6af630ebd41dcec25e01717b89cd48cfabc0b", + "fingerprint": "0ead7e2f21dc7a19ca4b12212ce8441176e8d908b5ab93417a057503d7379537", "typescript": { "status": "covered", "method": "MessagingClient.cloudOnboarding.advance" @@ -1038,7 +1093,7 @@ "method": "POST", "path": "/messaging/features/evaluate", "operationId": "evaluateFeatures", - "fingerprint": "552c29c31cd255e674168226ef182a837b657036bc706b8ccb8e1a90bd530d22", + "fingerprint": "0e8ff4df2c673e89b172c0296dc0b2b13a425e233ade46c87046ada29382f95e", "typescript": { "status": "excluded", "reason": "Host-runtime feature evaluation is not a customer messaging operation in this SDK." @@ -1049,7 +1104,7 @@ "method": "POST", "path": "/messaging/media/{id}/download-and-save", "operationId": "downloadAndSaveMedia", - "fingerprint": "e3a5e9517ce5d654de83ec103972697c1a097a08c90b552738a188cd5a98e7c3", + "fingerprint": "a8bc1c655d27a986c4a14b9116a53a5962fa84c65982cb508bce50802f6029a5", "typescript": { "status": "covered", "method": "MessagingClient.media.persist" @@ -1060,7 +1115,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns", "operationId": "createCampaign", - "fingerprint": "4cedd525607544d02d4b31481358510b2ecb8b9c54cc6b0f749799e1011ff3f0", + "fingerprint": "66c4bd982a74c7a0b8baac6d2cdcfaa241cd092bf332379472b96b2002ecf94f", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.create" @@ -1071,7 +1126,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/launch", "operationId": "launchCampaign", - "fingerprint": "4af01830d796ffcfe37f6397cccc188c4546caf643b586a9925f137df9c7b4c2", + "fingerprint": "50460c1740e0fd356f7bc901f0874f347c512b5c0e1a97bb6bf1b16d1ebd7dc7", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.launch" @@ -1082,7 +1137,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/pause", "operationId": "pauseCampaign", - "fingerprint": "cd056dc9925cf81e94b47a9a345e08287dd4d765ce9beb31ba13d78de5fd51ef", + "fingerprint": "d6aebcf8d0cd7be6578771af254d60c6b7ad29a5374e5548138b684c75fc9364", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.pause" @@ -1093,7 +1148,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/recipients", "operationId": "addProjectCampaignRecipients", - "fingerprint": "943eefb8894a64fe72b01c6d16a7d8721e1ad1281a936acb6082c3cbd2fec855", + "fingerprint": "b3166f8994bd6e861c2f5234436c449cda761d63ee20f9c8ac845194d0ac58cb", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.addRecipients" @@ -1104,7 +1159,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/requeue", "operationId": "requeueCampaign", - "fingerprint": "0ed764141ea7484211a62c62c4496c37572548109cc0a5355c94cb02661c4f7d", + "fingerprint": "585629b462447781537560c72d448fcdd39f8a36d09b015997b6f28e892d16b7", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.requeue" @@ -1115,7 +1170,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/reschedule", "operationId": "rescheduleCampaign", - "fingerprint": "b6c239ea6b3e2dc5df21cccdde97afb239664089f6654170ae3db917d94e6676", + "fingerprint": "ec06e7d1909aab1fc0cb7adb2833230ef8d9ee629c20ba4a612d4223271d3756", "typescript": { "status": "excluded", "reason": "Campaign reschedule is owned by SDK PR #310 and will be covered when that PR merges." @@ -1126,7 +1181,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/resume", "operationId": "resumeCampaign", - "fingerprint": "9c0636666ce2e8678efc4a33a9b2fdac42435008f9a12486b57253c11df0764e", + "fingerprint": "96b4d82dee792af7abb835beb6b8b1a9f70295991d142fde0bb2e0706508a24f", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.resume" @@ -1137,7 +1192,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/campaigns/{id}/stop", "operationId": "stopCampaign", - "fingerprint": "6a09b0d2a67631403abfcd8b4eac52c29b25cfeb873f91d3a7f82236e8ced7d1", + "fingerprint": "24176e54daef3108c0de0b9cf8efc63accffc57444d2c396c2ce0e9e2241c545", "typescript": { "status": "covered", "method": "MessagingClient.campaigns.stop" @@ -1148,7 +1203,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/templates", "operationId": "createProjectTemplate", - "fingerprint": "7a023b3c396651a3dfa6b6bb09a5fa458127bc0ce719b3af7a1953dccf232026", + "fingerprint": "5c46af9d59d174eb94e4003e9c921e9e17b48a624f529f07bfca781f2f624de1", "typescript": { "status": "covered", "method": "MessagingClient.templates.create" @@ -1159,7 +1214,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/templates/{id}/preview", "operationId": "previewProjectTemplate", - "fingerprint": "c8681de0b498d25368e0d3a101af25a7675c599a6d25c505cc2df74123755433", + "fingerprint": "faf48da5a5369eaba28fb2a17fc725f1db94f1f42babe229237b31789148e757", "typescript": { "status": "covered", "method": "MessagingClient.templates.preview" @@ -1170,7 +1225,7 @@ "method": "POST", "path": "/messaging/projects/{projectSlug}/templates/{id}/submit", "operationId": "submitProjectTemplateToMeta", - "fingerprint": "22b195a6b593bb675f6b52477feab92a60bd41d7069ddc7b43229889ba35dd57", + "fingerprint": "3d6b39eb768c41acba8cc5bf73694cadc62b3c23a51c60bc30d9b8d5aeb637be", "typescript": { "status": "covered", "method": "MessagingClient.templates.submit" @@ -1181,7 +1236,7 @@ "method": "POST", "path": "/messaging/quicklinks", "operationId": "createQuickLink", - "fingerprint": "ea9ebff159f89abaa65fe3e03549b43c95b3d9521d95f651e1307561030595ca", + "fingerprint": "e695c7b6ad0c341cbe2f2d084adc031324e7c6b57b91ef96c353ba7a0fe96518", "typescript": { "status": "covered", "method": "MessagingClient.quickLinks.create" @@ -1192,7 +1247,7 @@ "method": "POST", "path": "/messaging/testing/{projectId}/events", "operationId": "triggerTestEvent", - "fingerprint": "b5257525dd5d250dd5df292894bf43b30c663c55a85c4c664033611e6f959118", + "fingerprint": "37ed7447a1254a6a1d49317d20983a8d85d09c8a0cc76b9c51ec6639e8cd5402", "typescript": { "status": "covered", "method": "MessagingClient.testing.triggerEvent" @@ -1203,7 +1258,7 @@ "method": "POST", "path": "/messaging/testing/{projectId}/history-fixtures", "operationId": "createTestingHistoryFixture", - "fingerprint": "cc82bc67e848516a5a8169c3ab66a0d66b91d7885003434ba140bdaa8d02a7cd", + "fingerprint": "b3283f6d917899fe8ff3a377bd6d6995a60f76c7ee891e0a06cda432606f4116", "typescript": { "status": "covered", "method": "MessagingClient.testing.createHistoryFixture" @@ -1214,7 +1269,7 @@ "method": "POST", "path": "/messaging/voip/call-links", "operationId": "voipCreateCallLink", - "fingerprint": "bf9fad45924d6db6e8ecc08b324c0f980fe86076784e6079e4ebc3c79905f6e7", + "fingerprint": "5308b4cc5f64827faf26533eb791569707cf1d4a7b75a4b1b9f9dff5b54a83da", "typescript": { "status": "covered", "method": "MessagingClient.voip.createCallLink" @@ -1225,7 +1280,7 @@ "method": "POST", "path": "/messaging/voip/call-links/preview", "operationId": "voipPreviewCallLink", - "fingerprint": "a0575bfda3c92adf4ed6a9c58e69ba44cd9fff3552c7874e9f3e0a1e91453fcf", + "fingerprint": "f6480de730fae89c70f869a9ec7bbd510f2f60dbeba43ab9b356c86f6e73f71d", "typescript": { "status": "covered", "method": "MessagingClient.voip.previewCallLink" @@ -1236,7 +1291,7 @@ "method": "POST", "path": "/messaging/voip/calls", "operationId": "voipPlaceCall", - "fingerprint": "9ea6f5d238b2a5aa840cd5050ad92be06bbe8bdab1ad9b0ed74bfb7ae33cd5b8", + "fingerprint": "5fa2d934969dc7f9fc49e43b17b79a75d5570187d0496eca8294ee17d77f77c5", "typescript": { "status": "covered", "method": "MessagingClient.voip.place" @@ -1247,7 +1302,7 @@ "method": "POST", "path": "/messaging/voip/calls/check", "operationId": "checkCall", - "fingerprint": "33adf8f2983a23af927b99e7b427aad6780668daa6195e78b0219117e592d64a", + "fingerprint": "0a497932b823978f42228c1f1eafea685b7848e7a6c5e198626098891708a922", "typescript": { "status": "covered", "method": "MessagingClient.voip.check" @@ -1258,7 +1313,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/accept", "operationId": "voipAcceptCall", - "fingerprint": "86db3378c2d5fb58b7e2494c6ae2d00762d73d8817126fadc0f77f9b342fed73", + "fingerprint": "564bf9eb2c6983813860b44baec6f3b6741265580c37c53d07bc6abb2c6a1058", "typescript": { "status": "covered", "method": "MessagingClient.voip.accept" @@ -1269,7 +1324,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/candidate", "operationId": "voipCandidate", - "fingerprint": "0d2c93046c09e15213b7b42a2c87d512034ad536866cfab97049e0cfb3a25b15", + "fingerprint": "ac7b1413282fe0bc1dfa5cd4b2bf089e07ca68729f676ebba4d010144bf4f7b5", "typescript": { "status": "excluded", "reason": "used internally by the Calls SDK; not part of the public API" @@ -1280,7 +1335,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/hand", "operationId": "setCallHandRaised", - "fingerprint": "65c68e95b86c19c75e9f7c7c8de6b4f58cc1ef537711a7570a48a37e9e7b6ca8", + "fingerprint": "795dee869763e6fa74d6ec3a280ee3348d231cd390825b6a45fb6b4938e3cf04", "typescript": { "status": "covered", "method": "MessagingClient.voip.setHandRaised" @@ -1291,7 +1346,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/leave", "operationId": "voipLeaveCall", - "fingerprint": "f7c2aec2289eec2eb3f0429f3f2ae75c4bf86c31de54600403395677e6d05aa9", + "fingerprint": "aa8f1555b262b5ef4b89e5517512dbabe884fcf09496aab4ae6caa0cd3208613", "typescript": { "status": "covered", "method": "MessagingClient.voip.leave" @@ -1302,7 +1357,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/offer", "operationId": "voipOffer", - "fingerprint": "d32154df56b41060a43b933d473ef211fad6d9cceae7a9abd5fd83781cf5c7b0", + "fingerprint": "703aeeade059df7b3092dafa7ff6e3fd2f12f455a6045f3e2193966c6724e4c9", "typescript": { "status": "excluded", "reason": "used internally by the Calls SDK; not part of the public API" @@ -1313,7 +1368,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/participants", "operationId": "voipAddParticipant", - "fingerprint": "6e39b8422b8e83739f3f5bda98eec541ca11e7feb2adb5f8f3c481d69d1b6a8b", + "fingerprint": "5f4c52ab291c313ca756497d037838f67f9e19eadffc171cd2bd3717c659f08c", "typescript": { "status": "covered", "method": "MessagingClient.voip.addParticipant" @@ -1324,7 +1379,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/participants/ring", "operationId": "voipRingParticipant", - "fingerprint": "1b273e5ddcdb6e2d57d3abcc2f05a01a51f93701f03579b9eec5928500e0a394", + "fingerprint": "2f2e8137397eba43fcb6d58352057fe29de236fda6596cf48fd1f13e00cb1b18", "typescript": { "status": "covered", "method": "MessagingClient.voip.ringParticipant" @@ -1335,7 +1390,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/reaction", "operationId": "sendCallReaction", - "fingerprint": "4ba89adf4ee046bb37aff1c45dcb0762fb47957ebb7fa15196325b241ff27b0b", + "fingerprint": "fb98957172041aff2356da2b9459bbe8e150d36b969025f0e39cba36545fc6fd", "typescript": { "status": "covered", "method": "MessagingClient.voip.sendReaction" @@ -1346,7 +1401,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/reject", "operationId": "voipRejectCall", - "fingerprint": "aac9ebc9522a756f68841ae99e9daa5e157f1af5e7151474401acfaa76da1aa1", + "fingerprint": "f37b96ddd49ce9016c288601c2b65ee9c5c8b45d645618e7198963befecbc9a0", "typescript": { "status": "covered", "method": "MessagingClient.voip.reject" @@ -1357,7 +1412,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/renegotiate", "operationId": "voipRenegotiate", - "fingerprint": "484038a1951bd5aafa95a7e96186d6934d3e8fcb980448ba67aa5a8563ae4016", + "fingerprint": "be470e30f2f47006919d143d7119d8ee120aef3e603d149f3c8690af9a274cd8", "typescript": { "status": "excluded", "reason": "used internally by the Calls SDK; not part of the public API" @@ -1368,7 +1423,7 @@ "method": "POST", "path": "/messaging/voip/calls/{id}/reports", "operationId": "voipReportCallDiagnostics", - "fingerprint": "12d0fd1b28b4ba0ab61e9645308e3e898ccfa5384f2b195c0330d03cd618d0c7", + "fingerprint": "ec03bc7ac40f86634e2a933e244682d8fed74e25684e400152cd0c29476c0ceb", "typescript": { "status": "covered", "method": "MessagingClient.voip.report" @@ -1379,7 +1434,7 @@ "method": "POST", "path": "/messaging/webhooks", "operationId": "createWebhook", - "fingerprint": "1ebca9abc706acd43d17d62c4365b340457bea04e903fbbe06bcacedab1266d6", + "fingerprint": "32af1d0b717b6b6536f9eaf8f0a6e1bd7d0ca4467bae530fa19b459299af948d", "typescript": { "status": "covered", "method": "MessagingClient.webhooks.create" @@ -1390,7 +1445,7 @@ "method": "POST", "path": "/messaging/{session}/business/catalog", "operationId": "createBusinessCatalog", - "fingerprint": "088834ce309b050c5de43571db571deb3f601aa6e9fcbc944e007f390d751dce", + "fingerprint": "2fc00d21e0ab00417cbd6d957e003acb0bb89f113c8bad0451be7eb392ac1969", "typescript": { "status": "covered", "method": "MessagingClient.business.createCatalog" @@ -1401,7 +1456,7 @@ "method": "POST", "path": "/messaging/{session}/business/collections", "operationId": "createBusinessCollection", - "fingerprint": "6566fce9d0136fa20ed2c506f3288d2d8736ee44baf4ca982a858590f4545862", + "fingerprint": "3eed793a2791ccaa9255d730be99b31d6a56e085b2a3d9c53aedc3b596e582eb", "typescript": { "status": "covered", "method": "MessagingClient.business.createCollection" @@ -1412,7 +1467,7 @@ "method": "POST", "path": "/messaging/{session}/business/collections/reorder", "operationId": "reorderBusinessCollections", - "fingerprint": "f2efe88f22d443cdf16e1e76c48752ab01b64e9381e8c7edadc83f4790b932b2", + "fingerprint": "8f14d4677939fcb9d99b8296a6c6fd215ed50f8e0c624acc090f3cecbf49332a", "typescript": { "status": "covered", "method": "MessagingClient.business.reorderCollections" @@ -1423,7 +1478,7 @@ "method": "POST", "path": "/messaging/{session}/business/collections/{collectionId}/appeal", "operationId": "appealBusinessCollection", - "fingerprint": "f0f9d43290b94408fcdcc9a5134dce1af245e71efbf157cab31dc470c4cf5345", + "fingerprint": "e438bc9131ac891c4d575c96fcdc2ef4af26f56f82a821735e9e375f6ed784e1", "typescript": { "status": "covered", "method": "MessagingClient.business.appealCollection" @@ -1434,7 +1489,7 @@ "method": "POST", "path": "/messaging/{session}/business/orders/{orderId}/lookup", "operationId": "getBusinessOrder", - "fingerprint": "1f7f11b1acbac7b43b8991b379526a2db723e4b0a3c0d5c0a02a08a1ec7e7964", + "fingerprint": "ac7e7e4aa00feeb8e0b1b32cfa0682bf0e9b27007acb8e57a62849e05d2b5903", "typescript": { "status": "covered", "method": "MessagingClient.business.getOrder" @@ -1445,7 +1500,7 @@ "method": "POST", "path": "/messaging/{session}/business/products", "operationId": "createBusinessProduct", - "fingerprint": "e41fc9fe18d68eb7fa869c39346c557c852b66b9bde60604bcbcd6434adfb1cb", + "fingerprint": "deb5f37d2bf501372984ba250ea7fe479511b1433f4c25ec81e69dee53acd82d", "typescript": { "status": "covered", "method": "MessagingClient.business.createProduct" @@ -1456,7 +1511,7 @@ "method": "POST", "path": "/messaging/{session}/business/products/{productId}/appeal", "operationId": "appealBusinessProduct", - "fingerprint": "a6b97f4924e240033e024a750ad77f4c6449af74a34bbd28282bf65602a2bc20", + "fingerprint": "007027011375fc25301bf5be72b7e0ab36bd9d062c8d243be89d7145edb55eba", "typescript": { "status": "covered", "method": "MessagingClient.business.appealProduct" @@ -1467,7 +1522,7 @@ "method": "POST", "path": "/messaging/{session}/business/quick-replies", "operationId": "createBusinessQuickReply", - "fingerprint": "959776cbfe2e691d99444f71333fae3bf15d75d498e245972c3895f77f1beebc", + "fingerprint": "82bf540ab265feeda5e63bd94d82f4819743bac58f01a9638f54c3aeaf265e3f", "typescript": { "status": "covered", "method": "MessagingClient.quickReplies.create" @@ -1478,7 +1533,7 @@ "method": "POST", "path": "/messaging/{session}/calls/{callId}/reject", "operationId": "rejectCall", - "fingerprint": "c21ae7e470d76f56c65947ad4bdfd4177d9f5abff4ee679a26bd2cf7efb6b95b", + "fingerprint": "73053cc0e9ce4414562ddb03dd65c84eea23a64a588b608b280203d0f3caff00", "typescript": { "status": "covered", "method": "MessagingClient.calls.reject" @@ -1489,7 +1544,7 @@ "method": "POST", "path": "/messaging/{session}/channels", "operationId": "createChannel", - "fingerprint": "bf2d992433f546d4f2256145bdc2d235c06b42d2932d7b8e30118db35aab4401", + "fingerprint": "484bea51da652abf25db2d165ed1f375c47469076d6acdddd96ddde720609603", "typescript": { "status": "covered", "method": "MessagingClient.channels.create" @@ -1500,7 +1555,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/follow", "operationId": "followChannel", - "fingerprint": "61ecc0d3f176000f10259d708a95a035b691a870fb6d0ed48d5c242c0637fbf4", + "fingerprint": "b04394c8cdb2c083d382a576a6175db432d17012b4c40fce0177369e50b1a7bd", "typescript": { "status": "covered", "method": "MessagingClient.channels.follow" @@ -1511,7 +1566,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/live-updates", "operationId": "subscribeChannelLiveUpdates", - "fingerprint": "88d0f5b8f3fb51bc0bf2182aad6ff7efb439e6c771386fdc567333e742ad7507", + "fingerprint": "96ce8d16716417fcd665259f00e5284814f3e27fd42759f5a8e140f9c9e182ae", "typescript": { "status": "covered", "method": "MessagingClient.channels.subscribeToLiveUpdates" @@ -1522,7 +1577,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/messages/{messageId}/reaction", "operationId": "reactToChannelMessage", - "fingerprint": "5071d9e728d5a6180aa869117a15635ec21b3d70bfeb35da92c595fd04989570", + "fingerprint": "a23191ced11078d1217d3c33e76ea39599b10399f7cbc33b84a8c6c7f5a48334", "typescript": { "status": "covered", "method": "MessagingClient.channels.reactToMessage" @@ -1533,7 +1588,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/messages/{messageId}/viewed", "operationId": "markChannelMessageViewed", - "fingerprint": "4f10d434be12fe3f5e7c5122c771b5403770c8b8ba5dcca72a59b94c8fc9c775", + "fingerprint": "7a44e2a41065295a89a5c2680929e06e3b211893d8d7a4b4f80f9b766dce39d6", "typescript": { "status": "covered", "method": "MessagingClient.channels.markMessageViewed" @@ -1544,7 +1599,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/mute", "operationId": "muteChannel", - "fingerprint": "c84e7240619e58893a1803625883cbd0ddeb87e287b89faafd3ec0a614da32af", + "fingerprint": "5c31c335dd88646bb2af67c69676f360aa297fa8d090eff3ccf92933caf31be9", "typescript": { "status": "covered", "method": "MessagingClient.channels.mute" @@ -1555,7 +1610,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/unfollow", "operationId": "unfollowChannel", - "fingerprint": "ff93e18f76d9922c6a4b86f1848dfd7b51d5fe91aacc688a26671b13325dba6f", + "fingerprint": "53e43628ac2aca78b4c9059ff5b8a3a30d501dd82fe36b6fc983d1b0de131dd0", "typescript": { "status": "covered", "method": "MessagingClient.channels.unfollow" @@ -1566,7 +1621,7 @@ "method": "POST", "path": "/messaging/{session}/channels/{id}/unmute", "operationId": "unmuteChannel", - "fingerprint": "e0b530177041e79f290550005cf7521cbb2b5b78c6209d3e3fd1534ffb9d69ba", + "fingerprint": "2bc82cbb590187c4bd1fbba2c59579dc978f879a14e3d5c8bd4dbf6b6b377a82", "typescript": { "status": "covered", "method": "MessagingClient.channels.unmute" @@ -1577,7 +1632,7 @@ "method": "POST", "path": "/messaging/{session}/chats/{conversation}/archive", "operationId": "archiveChat", - "fingerprint": "17a641b261ab588793d255167acbeeb1710dbd84c99e7975f5d24ec16632a091", + "fingerprint": "a77d6ec4b8fbda1707162e370de366134ad8fa09124186ac7d146637cf185dbe", "typescript": { "status": "covered", "method": "MessagingClient.chats.archive" @@ -1588,18 +1643,29 @@ "method": "POST", "path": "/messaging/{session}/chats/{conversation}/unarchive", "operationId": "unarchiveChat", - "fingerprint": "8acec6b0233c47893c31a324ab5be8cefcf7c57e939f16c6fa36d9a1318e34f8", + "fingerprint": "ebdf894479dfa7c5215c54b315a73b51599a782a50c6e42f97db402ddb07b727", "typescript": { "status": "covered", "method": "MessagingClient.chats.unarchive" } }, + { + "family": "messaging", + "method": "POST", + "path": "/messaging/{session}/cloud-credentials/reauthorize", + "operationId": "reauthorizeCloudCredentials", + "fingerprint": "91880b9e57bbbb8ed9765030099e789c10fde37b15c1a05d8c8c9bce877336f1", + "typescript": { + "status": "covered", + "method": "MessagingClient.sessions.reauthorizeCloudCredentials" + } + }, { "family": "messaging", "method": "POST", "path": "/messaging/{session}/contacts/{contactId}/block", "operationId": "blockContact", - "fingerprint": "9655fd43e2f1b3f4576168db1695cc13de7d4acd20658c1b5aac0e284fc996a7", + "fingerprint": "9b79fdc7a71f14ccb037f9c8860b9465cb6802fdca5cf5840b0d2931a0c01963", "typescript": { "status": "covered", "method": "MessagingClient.contacts.block" @@ -1610,7 +1676,7 @@ "method": "POST", "path": "/messaging/{session}/contacts/{contactId}/unblock", "operationId": "unblockContact", - "fingerprint": "1d0693fe2753ebd2589ee8d17373ed06b9c9c9896a807574c407966965136308", + "fingerprint": "5a7dc29c6a29312e6ceb9dcc37a190868773664983392153bed687fc6f9ba8f5", "typescript": { "status": "covered", "method": "MessagingClient.contacts.unblock" @@ -1621,7 +1687,7 @@ "method": "POST", "path": "/messaging/{session}/groups", "operationId": "createGroup", - "fingerprint": "a9ca7842f2d3bcd46ca833ba0b77d131624e326ba0e5c66424468c7c19a3a051", + "fingerprint": "a41639804edd7b30f0745dc2f3119644facad959a2383c1fbd0309205a1a3d13", "typescript": { "status": "covered", "method": "MessagingClient.groups.create" @@ -1632,7 +1698,7 @@ "method": "POST", "path": "/messaging/{session}/groups/join", "operationId": "joinGroup", - "fingerprint": "505f491cd538f6ebc33e8102f235161664193255a10219376a91435ba6bc1f88", + "fingerprint": "a8d1c49fcaedea5112f75d2ae2de183186802df8165023839d598878bcd3c2c4", "typescript": { "status": "covered", "method": "MessagingClient.groups.join" @@ -1643,7 +1709,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/admin/demote", "operationId": "demoteGroupAdmin", - "fingerprint": "d183bfae19ef39857f5d132c3b3e9ef8a15ef47de50ae64029461f41a6423624", + "fingerprint": "63c167ee8308e5dbd7bae9c5f7034af20531fcab8bdd2522fcb7fd45fa5daeef", "typescript": { "status": "covered", "method": "MessagingClient.groups.demoteParticipants" @@ -1654,7 +1720,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/admin/promote", "operationId": "promoteGroupAdmin", - "fingerprint": "36fa11e9425656bbe721d02bf46d931a763e119c00c05fe5c523056e73041d56", + "fingerprint": "ab047fdd7fec004664ec3dfca44eda460480ffb29be5af0fe24aa0d3817d4a94", "typescript": { "status": "covered", "method": "MessagingClient.groups.promoteParticipants" @@ -1665,7 +1731,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/invite-code/revoke", "operationId": "revokeGroupInviteCode", - "fingerprint": "2e0933c7bcf8ec4b2820162b127f0f9a2029971af59c65e6abc092d2c00b5142", + "fingerprint": "2a8903a61582b477863ee3ca6bd554f480d1aff208d323571ff74c5ea738f7af", "typescript": { "status": "covered", "method": "MessagingClient.groups.revokeInviteCode" @@ -1676,7 +1742,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/leave", "operationId": "leaveGroup", - "fingerprint": "f5634a097ef324614c7d503d9d0da851681ff3a767a8aea90fc6e52ac28b5b88", + "fingerprint": "391fda81361335f00ca7d17a11c99b359712253d9eb6490e5570a75b5946fe65", "typescript": { "status": "covered", "method": "MessagingClient.groups.leave" @@ -1687,7 +1753,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/participants/add", "operationId": "addGroupParticipants", - "fingerprint": "fbf5c232d456fa516ac90ede4804b9e4ba052de4036c283bd665282767311490", + "fingerprint": "3ed010a14986f5e77cc2cbaa84301d37e4c806adec9bf32890b93c62b27036c4", "typescript": { "status": "covered", "method": "MessagingClient.groups.addParticipants" @@ -1698,7 +1764,7 @@ "method": "POST", "path": "/messaging/{session}/groups/{id}/participants/remove", "operationId": "removeGroupParticipants", - "fingerprint": "0483bed4b31a574a8d8516a5f40162ba40390c9fe94d801f1a59ad5f5b50f7a8", + "fingerprint": "acc64aafa173a74f85d95aa930c65e69e2a0b83a9d3076fc6b1843712653d26e", "typescript": { "status": "covered", "method": "MessagingClient.groups.removeParticipants" @@ -1709,7 +1775,7 @@ "method": "POST", "path": "/messaging/{session}/labels", "operationId": "createLabel", - "fingerprint": "142e907aff3544c82b091694402a545e941e56af7e8dd480e9a3f0216646232a", + "fingerprint": "6b522fd69e9f4f0186e29c94a3e9917bd11c38a305e96029a59c34bc8544431e", "typescript": { "status": "covered", "method": "MessagingClient.labels.create" @@ -1720,7 +1786,7 @@ "method": "POST", "path": "/messaging/{session}/messages/react", "operationId": "sendReaction", - "fingerprint": "79deb5f04a3d6b0de7b5331f0148a96336ae44d829625f96516faade20407bcd", + "fingerprint": "5c1101c3d6111935c71b06a0acaa47d4d0f3ea1949817ec7d43144c003b417df", "typescript": { "status": "covered", "method": "MessagingClient.messages.react" @@ -1731,7 +1797,7 @@ "method": "POST", "path": "/messaging/{session}/messages/seen", "operationId": "sendSeen", - "fingerprint": "fecffceb6a3f570c5777674c352d20ce5acb56e2f57fbd59fba705e261a4830a", + "fingerprint": "32e29a2d0fb87305cc62113b2c7f191d509d10802f8a829808298941a3a859d7", "typescript": { "status": "covered", "method": "MessagingClient.messages.markSeen" @@ -1742,7 +1808,7 @@ "method": "POST", "path": "/messaging/{session}/messages/send", "operationId": "sendMessage", - "fingerprint": "a231c6095b087ba06d5d5db608c25ad428d49ed412ebec25855c5d0e841fbe32", + "fingerprint": "3163dc72ff884c458fbcfcbeb22d411800e13ca123bb652dd80ea0bff064a3f9", "typescript": { "status": "covered", "method": "MessagingClient.messages.send" @@ -1753,7 +1819,7 @@ "method": "POST", "path": "/messaging/{session}/messages/star", "operationId": "starMessage", - "fingerprint": "d06112be793c2bc0cfcf3f45af1d4c1e5a8a392797ec36dedf66ac1028a37584", + "fingerprint": "301576b63a9f7cca0601e1016797ccd64a757d1fcf50b85498704b8a57353efe", "typescript": { "status": "covered", "method": "MessagingClient.messages.star" @@ -1764,7 +1830,7 @@ "method": "POST", "path": "/messaging/{session}/messages/typing", "operationId": "setTyping", - "fingerprint": "8d5ddd310b46743def73f9f51d01053b0cc585fcf161a87ec1c5acba4b8fbe33", + "fingerprint": "692685d746510c751cc3ec12267e720fb85874fc970fbddbb4fd01a52d2db635", "typescript": { "status": "covered", "method": "MessagingClient.messages.setTyping" @@ -1775,7 +1841,7 @@ "method": "POST", "path": "/messaging/{session}/pair/code", "operationId": "requestPairCode", - "fingerprint": "548e42da84b680c442fa9f08038a0cbbdc4a7c5ef484254b21c025fce462e6b4", + "fingerprint": "94e73cc822ddfe18354f7622f7efc12d4cd67f16487462b6ebf5bef33900f7ef", "typescript": { "status": "covered", "method": "MessagingClient.sessions.requestPairingCode" @@ -1786,7 +1852,7 @@ "method": "POST", "path": "/messaging/{session}/presence", "operationId": "setPresence", - "fingerprint": "81b63d0f825dd57b40e5162ab0a8b2f78ce613aa11c43842f2bcb4a6c64d25da", + "fingerprint": "bd2225637d5cf468f97876bc7673f777fca39da33b8ef347844fbbac6bbbaaf2", "typescript": { "status": "covered", "method": "MessagingClient.presence.set" @@ -1797,7 +1863,7 @@ "method": "POST", "path": "/messaging/{session}/presence/{conversation}/subscribe", "operationId": "subscribePresence", - "fingerprint": "a833659c1e9f2f79414e846b7b2a01707800b24282379e5e371d5dddbd032002", + "fingerprint": "41ceaac35a4f69b30c7cd9ed2d7c747df29dfd87c7c8bfcf6309c01f65e4aec6", "typescript": { "status": "covered", "method": "MessagingClient.presence.subscribe" @@ -1866,7 +1932,7 @@ "method": "POST", "path": "/quicklink/{token}/history", "operationId": "chooseQuickLinkHistory", - "fingerprint": "432431a646f8bead00c097a9600d3435728a5114db82a76d0ff595098f1921d9", + "fingerprint": "05ebbba1d760f03fcf03d3216ab895f33e13396f98ccc7be55bc79667745ecc2", "typescript": { "status": "excluded", "reason": "Hosted QuickLink recipient and authenticated Console-only operations are outside the trusted-server SDK surface." @@ -1899,7 +1965,7 @@ "method": "POST", "path": "/quicklink/{token}/testing/start", "operationId": "startQuickLinkTesting", - "fingerprint": "0a49cae94073bb15d821218ccfd02c81f74e1d88ea48522ce6526bf06bf2d220", + "fingerprint": "a928d2923438e0c3f593cda298df36727b5f010f8af84c9b73579385a12ccdb9", "typescript": { "status": "excluded", "reason": "Hosted QuickLink recipient and authenticated Console-only operations are outside the trusted-server SDK surface." @@ -1910,7 +1976,7 @@ "method": "PUT", "path": "/messaging/projects/{projectId}/health-policy", "operationId": "updateProjectHealthPolicy", - "fingerprint": "48aea0f68aa03ac48436cab07ffa64bdfa0dfe2fee8444e8af8d948dabec0bf3", + "fingerprint": "e40095ff8ba93f69d49b397c7eeba64829f056d352aba3c7378e7617f2f19fb4", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.updateProjectHealthPolicy" @@ -1921,7 +1987,7 @@ "method": "PUT", "path": "/messaging/projects/{projectId}/insurance-evidence", "operationId": "updateProjectInsuranceEvidence", - "fingerprint": "8941aa7b26599f010cca39770b7bf68e9a7040ec005909cc62181f1e74e056d0", + "fingerprint": "07e8b86ce16157e90c8d2e8607d09a6beb72112e7f1419b2df0b330204b447a3", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.updateProjectInsuranceEvidence" @@ -1932,7 +1998,7 @@ "method": "PUT", "path": "/messaging/projects/{projectId}/safe-mode", "operationId": "updateProjectSafeMode", - "fingerprint": "5faf7acf5065c3de739be5bb8e7746f232627af8ecd836d55bc3e03a0a07ef26", + "fingerprint": "06cd9ad46c96e93f4a25346198ca6799a6dc0360c63b15fa83074d5e0dcac308", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.updateProjectSafeMode" @@ -1943,7 +2009,7 @@ "method": "PUT", "path": "/messaging/projects/{projectId}/warmup-plan", "operationId": "updateProjectWarmupPlan", - "fingerprint": "2b9c4f34bd2ea503f953e3a6411a46a0f21ef40e684e2bd1ec9c7dd948ebb9a5", + "fingerprint": "ab03f03a79a6c38141856459a2563306904b69c2ca2587429790c002af74ae2d", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.updateProjectWarmupPlan" @@ -1954,7 +2020,7 @@ "method": "PUT", "path": "/messaging/routing/hybrid", "operationId": "setHybridRoutingPolicy", - "fingerprint": "87335686e11577e2c6c68f4dc57051756af08cbbafd95b21355979af86763c54", + "fingerprint": "2d66376ab0ee46010501602fb07c266c3b97e5ce0221fad23b5847b98d4cd529", "typescript": { "status": "covered", "method": "MessagingClient.hybridLink.setPolicy" @@ -1965,7 +2031,7 @@ "method": "PUT", "path": "/messaging/webhooks/{id}", "operationId": "updateWebhook", - "fingerprint": "0a1a8b6de76e6ab824e9f60bf179a2403348a69c24e9ae564829187dfc325694", + "fingerprint": "63e48fe801674516e0ba63975e6cb943e8b0a1536570d487dc11928e03c166f6", "typescript": { "status": "covered", "method": "MessagingClient.webhooks.update" @@ -1976,7 +2042,7 @@ "method": "PUT", "path": "/messaging/{session}/business/compliance", "operationId": "setBusinessMerchantCompliance", - "fingerprint": "fc52465c0481189a44411c710cac8a7aaf8ea2812770165140dff3404724c79f", + "fingerprint": "cae2a913b4fef7154b1bafd5a514cf3ef4d254b23b0f5a2f8d67fdc0dcb4d0c9", "typescript": { "status": "covered", "method": "MessagingClient.business.setMerchantCompliance" @@ -1987,7 +2053,7 @@ "method": "PUT", "path": "/messaging/{session}/business/products/{productId}", "operationId": "updateBusinessProduct", - "fingerprint": "2c0b47a2e44111dc69f96cb26974d2a52c055950e9a5f5ec2c1b28f4364a5dd0", + "fingerprint": "153010f89256952ff24e1346daa29ee7c55261c7c28c8b97337b654fb7306edf", "typescript": { "status": "covered", "method": "MessagingClient.business.updateProduct" @@ -1998,7 +2064,7 @@ "method": "PUT", "path": "/messaging/{session}/business/profile/cover-photo", "operationId": "setBusinessCoverPhoto", - "fingerprint": "6dd89e9ae297cf36e6a8e381752297a22175793e12434579001316602237c497", + "fingerprint": "a20aa0c3728ada5e4638cb09268854a5743891fedd2d8eb635ef4025728f1ca9", "typescript": { "status": "covered", "method": "MessagingClient.business.setCoverPhoto" @@ -2009,7 +2075,7 @@ "method": "PUT", "path": "/messaging/{session}/business/quick-replies/{quickReplyId}", "operationId": "setBusinessQuickReply", - "fingerprint": "46d9bc72756dcc534bcfc947009a873e4aa24cbbde49885fb9b52392d2aba643", + "fingerprint": "db2df01359458cc7b8d48226184c8b26c653dcbd7f7f7ccc400f4e25f107a3bb", "typescript": { "status": "covered", "method": "MessagingClient.quickReplies.replace" @@ -2020,7 +2086,7 @@ "method": "PUT", "path": "/messaging/{session}/chats/{conversation}/disappearing", "operationId": "setChatDisappearingTimer", - "fingerprint": "5b401e12339f853a42040d73a93504705d1cdcebee91a5ecc775c2ceec8cd860", + "fingerprint": "1f446a6f1d50dffb64a0921234d4e3268ceead4d416f2478e970d576dc20fca9", "typescript": { "status": "covered", "method": "MessagingClient.chats.setDisappearingTimer" @@ -2031,7 +2097,7 @@ "method": "PUT", "path": "/messaging/{session}/chats/{conversation}/messages/{messageId}", "operationId": "editMessage", - "fingerprint": "a7a0c3e45a94bb77a8e6ea2fae1bf343cfd8972e65dff0cb1eab91a7b7e6ce2c", + "fingerprint": "c176762eca71a122f1bb8803284ae260f1a1ca59a82a0b3c9f4926f0b7313f17", "typescript": { "status": "covered", "method": "MessagingClient.chats.editMessage" @@ -2042,7 +2108,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/description", "operationId": "setGroupDescription", - "fingerprint": "33dc8f018ee4337dfd778849d0be81eb6582774b9c8449818ae58cc54760bf16", + "fingerprint": "e9c7cdd3f56ab848edfcee4462d23b2b7f9f88c8ddd48148a385a3770f8092f5", "typescript": { "status": "covered", "method": "MessagingClient.groups.setDescription" @@ -2053,7 +2119,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/picture", "operationId": "setGroupPicture", - "fingerprint": "8c58d71c69cf249d2c4311a0a60e445222fad6f0e5149e41fccb9d7a158cfc1c", + "fingerprint": "47ed0e856691579e93ac924889946970964923ae7105508615c69a05ee73fb40", "typescript": { "status": "covered", "method": "MessagingClient.groups.setPicture" @@ -2064,7 +2130,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/settings/info-edit", "operationId": "setGroupInfoEditing", - "fingerprint": "185bca6336adbb00a704fd52676b0ebf4f5284c9f3e2d4561f17935f33796f37", + "fingerprint": "dcba9557b786f02f09ed084bc262fa9091fca5382d74e6f854f94c054bf2d629", "typescript": { "status": "covered", "method": "MessagingClient.groups.setInfoEditing" @@ -2075,7 +2141,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/settings/join-approval", "operationId": "setGroupJoinApproval", - "fingerprint": "de669123d6e9437c876946bccc1f1581c996717e6397533ff02ec0e705e7a8fa", + "fingerprint": "b6d9e6edfb9141ecd5e04996c1e0c576461d65c30d414809760f0114ff39650f", "typescript": { "status": "covered", "method": "MessagingClient.groups.setJoinApproval" @@ -2086,7 +2152,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/settings/member-add", "operationId": "setGroupMemberAddMode", - "fingerprint": "fc6eda81991c5374bf357a20fe0155a5af5e7217b88d05e6d17e8924ab772ea8", + "fingerprint": "bb8fa6e70f15741dd04cfd245f3351dd365d065c835242555157fb1864f5ca86", "typescript": { "status": "covered", "method": "MessagingClient.groups.setMemberAddMode" @@ -2097,7 +2163,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/settings/messages", "operationId": "setGroupMessaging", - "fingerprint": "04f34bdc92f41e31a4677f8b51233777b2fb6def14bdc2c653b1b6474108180b", + "fingerprint": "e6172f97ac2aef3f33e632d5f4c17acba5f3d188fc6309770d7cc49f76d4ee59", "typescript": { "status": "covered", "method": "MessagingClient.groups.setMessaging" @@ -2108,7 +2174,7 @@ "method": "PUT", "path": "/messaging/{session}/groups/{id}/subject", "operationId": "setGroupSubject", - "fingerprint": "3cd0941470ffd1035a050df59517f0a4ac943d58d6b4550f3e54f9ff6040c619", + "fingerprint": "b7ff0c4e2d8a6eb284a9d314e6f708ce313b3c138dbde6e82f5b12429abb63f9", "typescript": { "status": "covered", "method": "MessagingClient.groups.setSubject" @@ -2119,7 +2185,7 @@ "method": "PUT", "path": "/messaging/{session}/hybrid-link", "operationId": "setHybridLinkPaused", - "fingerprint": "6281b7e34d8c0ee20e785b04cc380a918ac976a68fe1850c9f6ba7fec06991b7", + "fingerprint": "08b17b3ea57b7c95b91ba1595815e64c11b2b1d22aea709f5034c0edc5118d5c", "typescript": { "status": "covered", "method": "MessagingClient.hybridLink.setPaused" @@ -2130,7 +2196,7 @@ "method": "PUT", "path": "/messaging/{session}/labels/chats/{conversation}", "operationId": "setChatLabels", - "fingerprint": "41a067475d83bed90abe1b26a789673d3d006f933680bf12999b3752196c329d", + "fingerprint": "1d2f01d3562f1b7d6a0930ee10f8fb90bf8b6b5208133e9ec47e078193040d79", "typescript": { "status": "covered", "method": "MessagingClient.labels.replaceForChat" @@ -2141,7 +2207,7 @@ "method": "PUT", "path": "/messaging/{session}/labels/{labelId}", "operationId": "updateLabel", - "fingerprint": "a6fdea356455eff684918cf0dfaca2af8743122c8715e1248f7ad37fac95f27e", + "fingerprint": "8c07f7a374f0f352dece8f4998ccfd978cf894d390b95f83c863ecd2d35de08c", "typescript": { "status": "covered", "method": "MessagingClient.labels.update" @@ -2152,7 +2218,7 @@ "method": "PUT", "path": "/messaging/{session}/privacy/disappearing/default", "operationId": "setDefaultDisappearingTimer", - "fingerprint": "e4f2dacf3600aa8a27196ad945cce5f34e938f5ee30f270666b3f7343fac3eac", + "fingerprint": "da2e4cbe8affefba135f30cc8a83b741d4663166d849830124ae3357dc1c2752", "typescript": { "status": "covered", "method": "MessagingClient.privacy.setDefaultDisappearingTimer" @@ -2163,7 +2229,7 @@ "method": "PUT", "path": "/messaging/{session}/privacy/{setting}", "operationId": "setPrivacySetting", - "fingerprint": "30625dcfeb33711221e8a78813da1eca499f3743246696b074cd0bc9bee8f448", + "fingerprint": "afeee00f3561fce13c444014061920704defbba57b62f9dee1832c735b9e166a", "typescript": { "status": "covered", "method": "MessagingClient.privacy.set" @@ -2174,7 +2240,7 @@ "method": "PUT", "path": "/messaging/{session}/profile/name", "operationId": "setProfileName", - "fingerprint": "0d065c4792104b6f964fab2ca4dd758240f9324abc58a2534207203f96e0681e", + "fingerprint": "a2e82e17dd7de60dc87113d529201065bf54c002e9f40c369c95e1ad2dbc2515", "typescript": { "status": "covered", "method": "MessagingClient.profile.setName" @@ -2185,7 +2251,7 @@ "method": "PUT", "path": "/messaging/{session}/profile/picture", "operationId": "setProfilePicture", - "fingerprint": "e7e9bcbde6e6fc829d5f4bbe6bd180c5e84b007b7307c10a79ae7c5d849abf87", + "fingerprint": "3b7071198a4a3b84ca6b8a9e9231e0c4f1ed6194754f1244246b12a466a4979f", "typescript": { "status": "covered", "method": "MessagingClient.profile.setPicture" @@ -2196,7 +2262,7 @@ "method": "PUT", "path": "/messaging/{session}/profile/status", "operationId": "setProfileStatus", - "fingerprint": "371c99863bf82cc1cc82f21ab02b1a37e666283058ebaaafb3f19e149e7fe658", + "fingerprint": "e9425cdb9430a3893c0c1a1492ddc46a3b76048d7adfd1a267f05feae532ea1d", "typescript": { "status": "covered", "method": "MessagingClient.profile.setStatus" @@ -2207,7 +2273,7 @@ "method": "PUT", "path": "/messaging/{session}/safe-mode", "operationId": "updateSessionSafeMode", - "fingerprint": "6ccf24b2d751b3c08da762dfd662c9f033710110537ddb8462d137a7a9bb9f53", + "fingerprint": "7f9e27ad806527108e2700f3def1b1ae0672c942bcc66d31e31931bb4e650c40", "typescript": { "status": "covered", "method": "MessagingClient.banSafe.updateSessionSafeMode" @@ -2383,7 +2449,7 @@ "method": "DELETE", "path": "/platform/call-opt-outs/{optOutId}", "operationId": "deleteCallOptOut", - "fingerprint": "cf2c14da2016dd90327b480fcf758ba3ac733ec9c78bb423d885b7f9376841fb", + "fingerprint": "3aaf97627e42784abc758c36cb52984b74edeb92d0ce568081854e973dbb19a6", "typescript": { "status": "covered", "method": "Client.callOptOuts.delete" @@ -2418,9 +2484,8 @@ "operationId": "deleteFlow", "fingerprint": "8bcab74ed95d0d1703992967d16dab1d1dcc25b58c570148027bf2945f02d26c", "typescript": { - "status": "excluded", - "reason": "This dashboard-only route does not accept the organization server API key used by Client.", - "milestone": "credential-boundary" + "status": "covered", + "method": "Client.project(projectId).flows.delete" } }, { @@ -2505,7 +2570,7 @@ "method": "DELETE", "path": "/platform/sessions/{session}/client-rules", "operationId": "deleteClientRules", - "fingerprint": "0244a31a6978d23f8bde1f96ec97693c51fcfba857a6907dc0a705cca07c3899", + "fingerprint": "7ed7280c6d5893f65e0736112b2f909902d7c8c1958c0bb67749d6075645f21e", "typescript": { "status": "covered", "method": "MessagingClient.clientTokens.deleteRules" @@ -2516,7 +2581,7 @@ "method": "DELETE", "path": "/platform/sip-trunks/{trunkId}", "operationId": "deleteSipTrunk", - "fingerprint": "5ec2c1ad81eed4e835b1b9ad6288d53490a8747883d1e13e03217814cec85b1e", + "fingerprint": "98965866b349f6576c3b6874ead849e42b020cc33bf7badec00c36981c624123", "typescript": { "status": "covered", "method": "Client.sipTrunks.delete" @@ -2539,7 +2604,7 @@ "method": "DELETE", "path": "/platform/voice/audio/{assetId}", "operationId": "deleteVoiceAudio", - "fingerprint": "628b9421a3c1e60c13f9f96d7cdef30d2a85db84451ca27b8b2d11897f4b75f3", + "fingerprint": "bf43dcb9ca7d36e9ca56149f80f266525e737d995ca7276b5b9859ddd84e50a5", "typescript": { "status": "covered", "method": "Client.voice.audio.delete" @@ -2550,7 +2615,7 @@ "method": "DELETE", "path": "/platform/voice/provider-credentials/{credentialId}", "operationId": "deleteVoiceProviderCredential", - "fingerprint": "7f8da96bfd047ec605a33e1c74735b24765498e5d6e437f0c7bbea92b4068989", + "fingerprint": "26be5ad8774f5101ae33a3c6f414c0a80772d2151a040643bf5e9888b0b0d347", "typescript": { "status": "covered", "method": "Client.voice.providerCredentials.delete" @@ -2567,6 +2632,28 @@ "method": "Client.webhooks.delete" } }, + { + "family": "platform", + "method": "GET", + "path": "/api/account/cloud-health", + "operationId": "getAccountCloudHealth", + "fingerprint": "b1e9cb588150cd3af46ed7bdfb4e2385e7e7da00b922c4155c53d854cfef201c", + "typescript": { + "status": "excluded", + "reason": "Console-only redacted account health requires dashboard identity; not available to SDK credentials." + } + }, + { + "family": "platform", + "method": "GET", + "path": "/api/account/cloud-health/export", + "operationId": "exportAccountCloudHealth", + "fingerprint": "42e49e8b5b1fd75cc5bdee057483a1fcd657c846701275a637862052e4317bbc", + "typescript": { + "status": "excluded", + "reason": "Console-only redacted account health export requires dashboard identity; not available to SDK credentials." + } + }, { "family": "platform", "method": "GET", @@ -3177,7 +3264,7 @@ "method": "GET", "path": "/platform/call-opt-outs", "operationId": "listCallOptOuts", - "fingerprint": "c29dfe633323b8e56b0967a35e92a1969d34503326114b4e390259236d8186aa", + "fingerprint": "bb70f132ea96831cb1e18d5ef8de89324d8e0a057aea04c78ace7c3c91cd45df", "typescript": { "status": "covered", "method": "Client.callOptOuts.list" @@ -3188,7 +3275,7 @@ "method": "GET", "path": "/platform/call-policy", "operationId": "getCallPolicy", - "fingerprint": "86dd41e85ca27799e9ef18e94acb766ff78dc873c7f453ac6e9bdc3ed5f663e2", + "fingerprint": "9f438a1e553e489a45510e040cf54b638d2a654b6531682b8a3a3cbb97c44f9e", "typescript": { "status": "covered", "method": "Client.callPolicy.retrieve" @@ -3199,7 +3286,7 @@ "method": "GET", "path": "/platform/call-retention", "operationId": "getCallRetention", - "fingerprint": "06c1f95e5115d0c7d7c2f9f2d28b843d06f59a72f4c5a46fdc3d5f28cbb322da", + "fingerprint": "2b3c1250f64c3d0fb4a3a6023e2819573fb276b45eced67482957e6a6ebbf484", "typescript": { "status": "covered", "method": "Client.callRetention.retrieve" @@ -3221,7 +3308,7 @@ "method": "GET", "path": "/platform/calls/export", "operationId": "exportCallRecords", - "fingerprint": "4fdb20df1a28ecb1be5d59346cfbb1e6daca9178b21bc47205530747d3ce358f", + "fingerprint": "bc6ebd92416c61875542264c03e585afb978ed63fb7f218f1d89e53f56b01a86", "typescript": { "status": "covered", "method": "Client.calls.export" @@ -3254,7 +3341,7 @@ "method": "GET", "path": "/platform/campaigns", "operationId": "listPlatformCampaigns", - "fingerprint": "5b3da6a0dedd223a2445031682bd92ce2cd9d38ff5f0a87f93aadf68030d564c", + "fingerprint": "a103a7aff42594826b512cd5278567e1642d73e1ef7ec986f9a34e6c43c99bd3", "typescript": { "status": "covered", "method": "Client.campaigns.list" @@ -3265,7 +3352,7 @@ "method": "GET", "path": "/platform/campaigns/{campaignId}", "operationId": "getPlatformCampaign", - "fingerprint": "11bee4a4bab57d0bd7ea12d0db56c9ed2023e2ffd1e24f13c688fee9104f0484", + "fingerprint": "4f1c68c6b4beca679fb4ccfb17c3a34beff6d7964ab3722f471a8e5b2b8dee5b", "typescript": { "status": "covered", "method": "Client.campaigns.retrieve" @@ -3386,7 +3473,7 @@ "method": "GET", "path": "/platform/flows", "operationId": "listFlows", - "fingerprint": "ff24f726f7fe3f814e69848fa194b76fbe86b75ceef971dc42b96aeaf376805e", + "fingerprint": "f31f0fd78022787ecf7185301045efb91245f4b4a859c98fa15478f5a01980fc", "typescript": { "status": "covered", "method": "Client.project(projectId).flows.list" @@ -3397,12 +3484,56 @@ "method": "GET", "path": "/platform/flows/{flowId}", "operationId": "getFlow", - "fingerprint": "e50867709ca7af62570c6a70c1ab6dfe2e3d8a7e4ce7bb2f8080b1766afca109", + "fingerprint": "5094f5898af9367a102ea1313703eb317996cae5bcd31ea966f8b6212ed7317d", "typescript": { "status": "covered", "method": "Client.project(projectId).flows.retrieve" } }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/{session}/templates", + "operationId": "listTemplates", + "fingerprint": "d9bdbc4a71e8e25a2367ef607b747a130c9f54885ff600a00c6969ecea960e60", + "typescript": { + "status": "covered", + "method": "MessagingClient.cloudTemplates.list" + } + }, + { + "family": "messaging", + "method": "GET", + "path": "/messaging/{session}/templates/{name}", + "operationId": "getTemplate", + "fingerprint": "0a03842bd58168f60db58dca149b36b7cfb1f1753efe6ca680da57934f999031", + "typescript": { + "status": "covered", + "method": "MessagingClient.cloudTemplates.retrieve" + } + }, + { + "family": "messaging", + "method": "POST", + "path": "/messaging/{session}/templates", + "operationId": "createTemplate", + "fingerprint": "8351ab6e196335021a6af78d1cf2a37dcde548e2485328a27a661fbe2e6ccd91", + "typescript": { + "status": "covered", + "method": "MessagingClient.cloudTemplates.create" + } + }, + { + "family": "platform", + "method": "GET", + "path": "/platform/flows/{flowId}/receipts", + "operationId": "listFlowOperations", + "fingerprint": "f78626c1fee54ba4533c336e73b05a51d308ec99ed1d5555d65f96ae449e598e", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.receipts" + } + }, { "family": "platform", "method": "GET", @@ -3628,7 +3759,7 @@ "method": "GET", "path": "/platform/projects/{projectId}/events/stream", "operationId": "streamProjectEvents", - "fingerprint": "6197fbd6989c873ddbe6e5c945c82e39a8b3ee3a00eb8926ecb43c7430aa242c", + "fingerprint": "2f666e7807243987630475609796e432bc0cbd24c53c43811f6c9f26820cefd5", "typescript": { "status": "covered", "method": "Client.events.stream" @@ -3826,7 +3957,7 @@ "method": "GET", "path": "/platform/sessions/{sessionId}", "operationId": "getSession", - "fingerprint": "6b2f8f7f1496ad329d38cb2101521cf30cf9f75a9f882dc0556a3e24607f3f1c", + "fingerprint": "69e1d727b26f3c992abd4b1ec77a518c28846a95321a2f16ca0a22f9a6f0093f", "typescript": { "status": "covered", "method": "Client.sessions.retrieve" @@ -3837,7 +3968,7 @@ "method": "GET", "path": "/platform/sessions/{sessionId}/me", "operationId": "getSessionAccount", - "fingerprint": "b2c6e4b2a125054993ba08d2453edd2986caf8aa3deb690dfa51a28cbb32df32", + "fingerprint": "65783c7ca8a417faf88b1e7ecffe489f17a7bce9c4b89f0f7c1f679d436ed5e1", "typescript": { "status": "covered", "method": "MessagingClient.sessions.account" @@ -3870,7 +4001,7 @@ "method": "GET", "path": "/platform/sessions/{session}/call-settings", "operationId": "getCallSettings", - "fingerprint": "7c2c41cd18b135b0d6cb0ce11bedd5a756897685a20039a0c9b81c56cf6e8a7b", + "fingerprint": "ea35e71edd7f02b04d981e6d0312413e16910e37add3f37942459f2e81476377", "typescript": { "status": "covered", "method": "MessagingClient.voip.retrieveCallSettings" @@ -3881,7 +4012,7 @@ "method": "GET", "path": "/platform/sessions/{session}/client-rules", "operationId": "getClientRules", - "fingerprint": "865abbf3829b3217056a65140f7b47f1af64031559f6dbf3d765f35c8c5945cf", + "fingerprint": "b0839bb9abf5b2964ac1635415970a246f69173c222c9c8e91f1745ddae89583", "typescript": { "status": "covered", "method": "MessagingClient.clientTokens.retrieveRules" @@ -3892,7 +4023,7 @@ "method": "GET", "path": "/platform/sip-trunks", "operationId": "listSipTrunks", - "fingerprint": "1dcd5b0db6c5db32ee4a3473bb727ec55f7081eca98f91734e836a0fd6ec19f9", + "fingerprint": "9a5a9ef17a795465832fb624b860f0b97fc814cb3cb7acad0429cb0141b5086a", "typescript": { "status": "covered", "method": "Client.sipTrunks.list" @@ -3903,7 +4034,7 @@ "method": "GET", "path": "/platform/sip-trunks/{trunkId}", "operationId": "getSipTrunk", - "fingerprint": "6a73d5b4a51f45d35e122506a4762d2e8e0aeeccf918f75dca737cd18e5f9826", + "fingerprint": "8489724e85d9140c5804daaef711d8a7b7b8e322bfe89f18c1850d303d3e34a9", "typescript": { "status": "covered", "method": "Client.sipTrunks.retrieve" @@ -3914,7 +4045,7 @@ "method": "GET", "path": "/platform/sip/endpoint", "operationId": "getSipEndpoint", - "fingerprint": "fc06fe9600f15fdffcd6b5b115faaae377ff3229d6235b9fed62114ed22a00d9", + "fingerprint": "09d7595015af2449926b45554afdd0d310bb84ff71f5dddbd3bbf7662d8c86fb", "typescript": { "status": "covered", "method": "Client.sipTrunks.endpoint" @@ -3993,7 +4124,7 @@ "method": "GET", "path": "/platform/voice/audio", "operationId": "listVoiceAudio", - "fingerprint": "441531ea1a922ef65b8e43d84988f6e0a1916cffc325ad146cbd842a16fd7ad4", + "fingerprint": "9595e5c5c40a0f64446590aa4419bef0f5c2953fa35de21b0c8083f8d2f3bfde", "typescript": { "status": "covered", "method": "Client.voice.audio.list" @@ -4004,7 +4135,7 @@ "method": "GET", "path": "/platform/voice/audio/{assetId}", "operationId": "getVoiceAudio", - "fingerprint": "692966998fc60c01a79f8dc3dde724a6a0a7fbffd041cf58daa2514b82c21115", + "fingerprint": "bd5ebbb8faadf45c06ffd624aa123e4542af13aaf4dc6ee39d517722c8d1e2cc", "typescript": { "status": "covered", "method": "Client.voice.audio.retrieve" @@ -4015,7 +4146,7 @@ "method": "GET", "path": "/platform/voice/audio/{assetId}/preview", "operationId": "getVoiceAudioPreview", - "fingerprint": "a9e96bd7922b2377118eb001ee25da93ef777e4192e68da8b1289cbd8e0f9f96", + "fingerprint": "cbac58377ff758f57d156141c4b18c4e5d0c7141b696d34ac0906a13b2ca399d", "typescript": { "status": "covered", "method": "Client.voice.audio.previewUrl" @@ -4026,7 +4157,7 @@ "method": "GET", "path": "/platform/voice/provider-credentials", "operationId": "listVoiceProviderCredentials", - "fingerprint": "d3880ee66a9cb86cc09c5b7bd1539c055c778ffa8c74132fd641b130ad98aa02", + "fingerprint": "efc4699decea4a40f02b992eedccca76781b0a55611db84f1245b74784dbbc05", "typescript": { "status": "covered", "method": "Client.voice.providerCredentials.list" @@ -4037,7 +4168,7 @@ "method": "GET", "path": "/platform/voice/provider-credentials/{credentialId}", "operationId": "getVoiceProviderCredential", - "fingerprint": "3fc923e06ba764f92289880a0915e2014db432de101b210d4a914b2daa3b9c1e", + "fingerprint": "f213833fd63b1f476fc68e3f398a2ba1c705557c447b14760d7dad53210ff63a", "typescript": { "status": "covered", "method": "Client.voice.providerCredentials.retrieve" @@ -4191,7 +4322,7 @@ "method": "PATCH", "path": "/platform/campaigns/{campaignId}", "operationId": "updateCampaign", - "fingerprint": "b7af610a57c1f24db76241bd0bf60dce7528c2b4f6e7b2c9a9da68f23ab0d380", + "fingerprint": "9c0dd10a3f7f56b738a28de51816e6c4bc0015b8e7be74820897d17a580cb98e", "typescript": { "status": "covered", "method": "Client.campaigns.update" @@ -4213,11 +4344,10 @@ "method": "PATCH", "path": "/platform/flows/{flowId}", "operationId": "updateFlow", - "fingerprint": "39781c8329a8b7a413efa13f59b8de145c7a255fc43e521356b0d8539c5889b1", + "fingerprint": "4560fef3402f47053ab3c3a78983724f0c8b0c35ebd4afa1000cc9700dd4530f", "typescript": { - "status": "excluded", - "reason": "This dashboard-only route does not accept the organization server API key used by Client.", - "milestone": "credential-boundary" + "status": "covered", + "method": "Client.project(projectId).flows.update" } }, { @@ -4258,7 +4388,7 @@ "method": "PATCH", "path": "/platform/sip-trunks/{trunkId}", "operationId": "updateSipTrunk", - "fingerprint": "6315e726ab8b64dd320a5bb25107eb8e6ec599fb39240f918b265326889d800c", + "fingerprint": "3e872fe2fd22309e112edf57f40df973377950ddf40802200970fc00ae170e62", "typescript": { "status": "covered", "method": "Client.sipTrunks.update" @@ -4281,7 +4411,7 @@ "method": "PATCH", "path": "/platform/voice/audio/{assetId}", "operationId": "updateVoiceAudio", - "fingerprint": "f0cff58ca5e16ca4c26e433eee8ad7274efeeee1f7641376dd697cafa5cb9b4b", + "fingerprint": "8c6eadcb2b9bf92dcdc4736c820c2716de747906cd05b5d1d30c9a169a1c615a", "typescript": { "status": "covered", "method": "Client.voice.audio.update" @@ -4303,7 +4433,7 @@ "method": "POST", "path": "/api/account/features/enrollment", "operationId": "setFeatureEnrollment", - "fingerprint": "d75db3cce485433757417e6823ce482850b681620e3aea984682eefea473f8dc", + "fingerprint": "1da2a7266a296a7bab7ef512bed2fe7e387700052cf633a86fa01213d938da97", "typescript": { "status": "excluded", "reason": "Dashboard identity and account controls require a live browser account session; not part of the machine SDK." @@ -4314,7 +4444,7 @@ "method": "POST", "path": "/api/account/features/evaluate", "operationId": "evaluateAccountFeatures", - "fingerprint": "e17563fb6140a20ca812de3bdc508f74cf3ecc84f920ec36149fb85a35cf28f2", + "fingerprint": "736aca34d47fc379d728898da21888471e3f9052e15fba97706e01d418c400a7", "typescript": { "status": "excluded", "reason": "Dashboard identity and account controls require a live browser account session; not part of the machine SDK." @@ -4765,7 +4895,7 @@ "method": "POST", "path": "/platform/call-opt-outs", "operationId": "createCallOptOut", - "fingerprint": "66e4e06f946a6391f4b7d1956de339f883009a50c4ec0efa9b93cdde367a7830", + "fingerprint": "4d20b153a8932597ee663ad13d8184cc484428d80adec3133a77fb8a7a3b5565", "typescript": { "status": "covered", "method": "Client.callOptOuts.create" @@ -4776,7 +4906,7 @@ "method": "POST", "path": "/platform/call-opt-outs/import", "operationId": "importCallOptOuts", - "fingerprint": "2d94c647923f4e66dd1323e3fede119a01b1644b26abf8cac16abce11099fa47", + "fingerprint": "7b3bc4e3a51ceb3ff80c4a2206fe595e307572db41dfd67e5e0de01d519057ee", "typescript": { "status": "covered", "method": "Client.callOptOuts.import" @@ -4787,7 +4917,7 @@ "method": "POST", "path": "/platform/campaigns", "operationId": "createPlatformCampaign", - "fingerprint": "78e845758e756676217319c79cd02e6cdaf9ebbb5b034e5fe3f04b87a1398fc7", + "fingerprint": "f2898a01845fdb18c3f1c0fed9131c11ce6e6825972934fccf57da36aa649a15", "typescript": { "status": "covered", "method": "Client.campaigns.create" @@ -4897,7 +5027,7 @@ "method": "POST", "path": "/platform/client-tokens", "operationId": "mintClientToken", - "fingerprint": "cac531399a855f9159b8686b033e6a55e099e9f681f8719f8b075b0d91bbe844", + "fingerprint": "496842f9335fa0c8525fe5843e7dee1e6d915bd950c6cb043c588b546142791b", "typescript": { "status": "covered", "method": "MessagingClient.clientTokens.mint" @@ -4974,11 +5104,65 @@ "method": "POST", "path": "/platform/flows", "operationId": "createFlow", - "fingerprint": "2a8460c4c857b7a56269999357ab8f6f88b7c527f0941900198ae2b703664b3c", + "fingerprint": "ae9414e0e6564640c463962b34f60d76445da6c34a7cf0977af9b723e03aa24c", "typescript": { - "status": "excluded", - "reason": "This dashboard-only route does not accept the organization server API key used by Client.", - "milestone": "credential-boundary" + "status": "covered", + "method": "Client.project(projectId).flows.create" + } + }, + { + "family": "platform", + "method": "POST", + "path": "/platform/flows/{flowId}/deprecate", + "operationId": "deprecateFlow", + "fingerprint": "8a46b355c25b8418db0f46ba1a009a05b994e040ec60148f117dfa1f06b12e33", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.deprecate" + } + }, + { + "family": "platform", + "method": "POST", + "path": "/platform/flows/{flowId}/discard", + "operationId": "discardFlow", + "fingerprint": "e35bfc4cc4c2a66b1d2692da4ae872a87aed1be5cf95d0d3a0b51f7aceef2a4c", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.discard" + } + }, + { + "family": "platform", + "method": "POST", + "path": "/platform/flows/{flowId}/publish", + "operationId": "publishFlow", + "fingerprint": "c6d319fea49be90ee2bcdda9220025fd841b562b7be525b673bfdc1678900061", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.publish" + } + }, + { + "family": "platform", + "method": "POST", + "path": "/platform/flows/{flowId}/sync", + "operationId": "syncFlow", + "fingerprint": "260383c9fadc6697659795b688dc00ed3679f3b6aacd7c6ac16ab856fcfb3e46", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.sync" + } + }, + { + "family": "platform", + "method": "POST", + "path": "/platform/flows/{flowId}/upload", + "operationId": "uploadFlow", + "fingerprint": "025907bceb28ed9d30e47946e837b5bcd04f334274c3b1425609ca615ecede0f", + "typescript": { + "status": "covered", + "method": "Client.project(projectId).flows.upload" } }, { @@ -5107,7 +5291,7 @@ "method": "POST", "path": "/platform/projects/{projectId}/events/stream/{streamId}/ack", "operationId": "acknowledgeProjectEventStream", - "fingerprint": "5681f4181c434dc08e6da60f3d024d1e1ef8975e9e1f1d4b8093aa3e00031b4d", + "fingerprint": "5f8d0241ba5d221ac7d0374b718964b6b772513eefd31a2ff171ea152dd06102", "typescript": { "status": "covered", "method": "Client.events.acknowledgeStream" @@ -5239,7 +5423,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/handoff-ack", "operationId": "sessionHandoffAck", - "fingerprint": "da3f871558dde7b0e566247931a2306cf2ec56326296b3e5051a16a377a9a5b6", + "fingerprint": "df9f352dd42e11c6f8f6d933026c1578720535ae46c2ce1a918acf1b8855246f", "typescript": { "status": "excluded", "reason": "Encrypted session handoff remains outside the public SDK until its dedicated security and atomicity contract is complete.", @@ -5251,7 +5435,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/handoff-import", "operationId": "sessionHandoffImport", - "fingerprint": "a770d810789bcba6f8f599a7bf27c269670392fd9f4db5de898f5a7d579368df", + "fingerprint": "9fe3d3f06374c6e9af222380cab832dfb0965c35b144c56c6028793c2363c627", "typescript": { "status": "excluded", "reason": "Encrypted session handoff remains outside the public SDK until its dedicated security and atomicity contract is complete.", @@ -5263,7 +5447,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/handoff-keys", "operationId": "sessionHandoffKeys", - "fingerprint": "7a2b66940c18b1ec2947ff2d085132128eff7bfb58f976c1456234d13a06d125", + "fingerprint": "b12d3b4f3b7119c46496a9c045a72de47c7546be9fbb9a5b0eca32e14d473811", "typescript": { "status": "excluded", "reason": "Encrypted session handoff remains outside the public SDK until its dedicated security and atomicity contract is complete.", @@ -5275,7 +5459,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/logout", "operationId": "logoutSession", - "fingerprint": "6d3125bc828d3ada5baf9de74d9b3b7c20b159923ec9172dfce6ce88378c3569", + "fingerprint": "5b3209cae264ca724b3ced5d0fb743190b09e8ae63d82cea5cbfae6b37fb3ba5", "typescript": { "status": "covered", "method": "MessagingClient.sessions.logout" @@ -5286,7 +5470,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/restart", "operationId": "restartSession", - "fingerprint": "c3c5385ad68c96388f927d5edf0976548b4d1dbd6a0a56b656038e0a0a489299", + "fingerprint": "70f96f166ef06e1e15e386189f3c16dce6855fd40ce47f98b42b16e62069e387", "typescript": { "status": "covered", "method": "MessagingClient.sessions.restart" @@ -5330,7 +5514,7 @@ "method": "POST", "path": "/platform/sessions/{sessionId}/upload-appstate-keys", "operationId": "sessionUploadAppStateKeys", - "fingerprint": "6e901c9f8f049dcebcf4cf551a78141cc485424565e86768afe284f2329dd9e8", + "fingerprint": "a733dd2c968ca1f8461ca9e659c938004a6204627abd75d460387a573dae7859", "typescript": { "status": "excluded", "reason": "Encrypted session handoff remains outside the public SDK until its dedicated security and atomicity contract is complete.", @@ -5342,7 +5526,7 @@ "method": "POST", "path": "/platform/sip-trunks", "operationId": "createSipTrunk", - "fingerprint": "329d5890f952398891e1068e21a570142f239fb80e92ce99e4cedd45765b3aa5", + "fingerprint": "fe89a2ae83b195b660fce4c3b979e6b159cb80bada6d337fcb0ba093363bfd92", "typescript": { "status": "covered", "method": "Client.sipTrunks.create" @@ -5353,7 +5537,7 @@ "method": "POST", "path": "/platform/sip-trunks/{trunkId}/credentials", "operationId": "rotateSipTrunkCredentials", - "fingerprint": "3f11f2b9edc9d3df1fd9373254660d46a4003a83c514bd46c538b39fb29eba5b", + "fingerprint": "9e9d1767de6505acd9c737038f2ff01c2e9113a23b3fc6c9a0d2ba4100f94ab7", "typescript": { "status": "covered", "method": "Client.sipTrunks.rotateCredentials" @@ -5376,7 +5560,7 @@ "method": "POST", "path": "/platform/voice/audio", "operationId": "createVoiceAudioUpload", - "fingerprint": "396a9d4824b7432de8c3a9ffa3d3dcbd1ca2a28382f66508de25f729ec8ea067", + "fingerprint": "9231c5cf356be150b0ce435c372752b16e6b858f6e0f4b7e7221e408b98f3e1a", "typescript": { "status": "covered", "method": "Client.voice.audio.createUpload" @@ -5387,7 +5571,7 @@ "method": "POST", "path": "/platform/voice/audio/tts", "operationId": "synthesizeVoiceAudio", - "fingerprint": "07d35d10391d0c415b931d72be40f4ff379ea2c1a9612d0650f1e36448b8675a", + "fingerprint": "2e7b37f716405a98daa48475bffb25c0e0eaa4967ed63fc181648435f6155dd1", "typescript": { "status": "covered", "method": "Client.voice.audio.synthesize" @@ -5398,7 +5582,7 @@ "method": "POST", "path": "/platform/voice/audio/{assetId}/complete", "operationId": "completeVoiceAudioUpload", - "fingerprint": "90bdd3c5b155f6ca7b6995d41fbd7f6829f308dad67cfebf1237ca55d37592b9", + "fingerprint": "a166635378e5fdf4d1302eedffbb56b3dc41eeee6bb332bf44765d0ea5b3e4d4", "typescript": { "status": "covered", "method": "Client.voice.audio.complete" @@ -5409,7 +5593,7 @@ "method": "POST", "path": "/platform/voice/provider-credentials", "operationId": "createVoiceProviderCredential", - "fingerprint": "e477c153316c4867166cb5f6cf76bafda9861ef84759f66ab58b9776d9633381", + "fingerprint": "fb66daca5fee50424db4551b62744d699c08907322639ee0b9df24684fe581ac", "typescript": { "status": "covered", "method": "Client.voice.providerCredentials.create" @@ -5420,7 +5604,7 @@ "method": "POST", "path": "/platform/voice/provider-credentials/{credentialId}/verify", "operationId": "verifyVoiceProviderCredential", - "fingerprint": "51f0135ffae48493414f934cff7eff9f7a8b7d88cc2a825d1a9f9d145793f5f3", + "fingerprint": "125c282e150e0339eb3d518a0fd335d9205748e91a013ad91df5cd1f52f5af4b", "typescript": { "status": "covered", "method": "Client.voice.providerCredentials.verify" @@ -5585,7 +5769,7 @@ "method": "PUT", "path": "/platform/call-policy", "operationId": "updateCallPolicy", - "fingerprint": "27eecc385aa3dc2fda442e5d213b0005d8bc4381c38c9ad17d8ce959c367ae75", + "fingerprint": "ed8f2cd61889fde7de23923757b58fb443c0f9a1883fcb0e563d1abd5c815797", "typescript": { "status": "covered", "method": "Client.callPolicy.update" @@ -5596,7 +5780,7 @@ "method": "PUT", "path": "/platform/call-retention", "operationId": "updateCallRetention", - "fingerprint": "f9055157722cdf330a3554c635e5a2ab15eac0779ecd08e5a491e598523063a2", + "fingerprint": "f880ca2ec21bcb19fc039fe5305e30be90773eaae9151bbfe5ed1398aa2d865c", "typescript": { "status": "covered", "method": "Client.callRetention.update" @@ -5695,7 +5879,7 @@ "method": "PUT", "path": "/platform/sessions/{sessionId}", "operationId": "updateSession", - "fingerprint": "cb8c0c0a85e4e798694eb76a2df436cfc091602542686f5b586718eae348816a", + "fingerprint": "a3af01e8b9c23b5beb84f9cfbd14cf6b6969fd027e35cc8b4f47d924cfdda320", "typescript": { "status": "covered", "method": "Client.sessions.update" @@ -5717,7 +5901,7 @@ "method": "PUT", "path": "/platform/sessions/{session}/call-settings", "operationId": "updateCallSettings", - "fingerprint": "a19912633c51d8faab3fc1eaf94b51c4bce6c5bc73c55ba307c202f0fac9cd22", + "fingerprint": "ab423fca728b77bad57131b83049881b765409c1a37135422ba73a234555f28d", "typescript": { "status": "covered", "method": "MessagingClient.voip.updateCallSettings" @@ -5728,7 +5912,7 @@ "method": "PUT", "path": "/platform/sessions/{session}/client-rules", "operationId": "setClientRules", - "fingerprint": "ef3d20c9aecf22a9c46e8a8a812a247e20d52a2acc988714ae0c78d79c5b4c53", + "fingerprint": "03a890d1da1aef6817598f349b28856eb091cd5bb2e28a698aacdb65c1ab0b39", "typescript": { "status": "covered", "method": "MessagingClient.clientTokens.updateRules" diff --git a/contracts/openapi.messaging.json b/contracts/openapi.messaging.json index 3780b627..c6b7a5a8 100644 --- a/contracts/openapi.messaging.json +++ b/contracts/openapi.messaging.json @@ -173,6 +173,9 @@ "location", "contact", "phone_number_shared", + "native_flow_response", + "button_reply", + "list_reply", "poll", "sticker", "reaction", @@ -246,6 +249,36 @@ "paramsJson" ] }, + "replyChoice": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "button", + "list" + ], + "description": "Reply control the contact used: a reply or quick-reply button, or a list row." + }, + "id": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "description": "ID you assigned to the selected button or list row. It is never the visible label, except for a template quick-reply button sent without a payload, where WhatsApp returns the button text." + } + }, + "required": [ + "kind", + "id" + ], + "description": "Present when the contact selects a reply button or list row." + }, + "parentMessageId": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "WhatsApp ID of the message this one quotes, when WhatsApp supplies one. It is not necessarily a message you sent." + }, "media": { "type": "string" }, @@ -333,6 +366,36 @@ "paramsJson" ] }, + "replyChoice": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "button", + "list" + ], + "description": "Reply control the contact used: a reply or quick-reply button, or a list row." + }, + "id": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "description": "ID you assigned to the selected button or list row. It is never the visible label, except for a template quick-reply button sent without a payload, where WhatsApp returns the button text." + } + }, + "required": [ + "kind", + "id" + ], + "description": "Present when the contact selects a reply button or list row." + }, + "parentMessageId": { + "type": "string", + "minLength": 1, + "maxLength": 128, + "description": "WhatsApp ID of the message this one quotes, when WhatsApp supplies one. It is not necessarily a message you sent." + }, "interactive": { "type": "object", "additionalProperties": {} @@ -479,6 +542,31 @@ "payload" ] }, + "MetaPricingReport": { + "type": "object", + "properties": { + "billable": { + "type": "boolean", + "description": "Whether WhatsApp reported the message as billable. WhatsApp is deprecating this field; use `type`." + }, + "pricing_model": { + "type": "string", + "description": "WhatsApp pricing model, for example `PMP` (per-message pricing).", + "example": "PMP" + }, + "category": { + "type": "string", + "description": "WhatsApp pricing category, for example `marketing`, `utility`, `authentication` or `service`.", + "example": "utility" + }, + "type": { + "type": "string", + "description": "WhatsApp pricing type, for example `regular`, `free_customer_service` or `free_entry_point`.", + "example": "free_customer_service" + } + }, + "description": "Official API only. The pricing classification WhatsApp reported for this message, copied as reported. Meta bills your WhatsApp Business Account directly; this is not a Polymorfa charge and contains no price." + }, "MessageAckPayload": { "type": "object", "properties": { @@ -525,6 +613,9 @@ }, "timestamp": { "type": "number" + }, + "pricing": { + "$ref": "#/components/schemas/MetaPricingReport" } }, "required": [ @@ -874,7 +965,7 @@ "payload" ] }, - "SessionStatusPayload": { + "RuntimeSessionStatusPayload": { "type": "object", "properties": { "status": { @@ -913,6 +1004,52 @@ "status" ] }, + "CloudAccountStatusPayload": { + "type": "object", + "properties": { + "source": { + "type": "string", + "enum": [ + "meta" + ], + "description": "Always `meta`: a WhatsApp Business Account notification, not a connection-state change" + }, + "kind": { + "type": "string", + "enum": [ + "account_alerts", + "account_update", + "phone_number_name_update" + ], + "description": "WhatsApp notification field that produced the event" + }, + "wabaId": { + "type": "string", + "description": "WhatsApp Business Account id the notification belongs to", + "example": "102290129340398" + }, + "value": { + "type": "object", + "additionalProperties": {}, + "description": "The notification's `value` object exactly as WhatsApp sent it; its fields vary by notification" + } + }, + "required": [ + "source", + "kind", + "value" + ] + }, + "SessionStatusPayload": { + "anyOf": [ + { + "$ref": "#/components/schemas/RuntimeSessionStatusPayload" + }, + { + "$ref": "#/components/schemas/CloudAccountStatusPayload" + } + ] + }, "SessionStatusEvent": { "type": "object", "properties": { @@ -6109,7 +6246,7 @@ "payload" ] }, - "TemplateStatusPayload": { + "RuntimeTemplateStatusPayload": { "type": "object", "properties": { "templateName": { @@ -6152,6 +6289,72 @@ "qualityRating" ] }, + "CloudTemplateStatusPayload": { + "type": "object", + "properties": { + "kind": { + "type": "string", + "enum": [ + "message_template_status_update", + "message_template_quality_update" + ], + "description": "`message_template_status_update` for an approval change, `message_template_quality_update` for a quality change" + }, + "event": { + "type": "string", + "description": "New template status reported by WhatsApp; for a quality change, the new quality score", + "example": "APPROVED" + }, + "templateId": { + "type": "string", + "description": "WhatsApp template id", + "example": "1234567890" + }, + "templateName": { + "type": "string", + "description": "Template name", + "example": "order_update" + }, + "language": { + "type": "string", + "description": "Template language code", + "example": "en_US" + }, + "reason": { + "type": "string", + "description": "WhatsApp's explanation for the change, when supplied", + "example": "NONE" + }, + "previousQualityScore": { + "type": "string", + "description": "Quality score before a quality change", + "example": "GREEN" + }, + "newQualityScore": { + "type": "string", + "description": "Quality score after a quality change", + "example": "YELLOW" + }, + "wabaId": { + "type": "string", + "description": "WhatsApp Business Account id that owns the template", + "example": "102290129340398" + } + }, + "required": [ + "kind" + ] + }, + "TemplateStatusPayload": { + "anyOf": [ + { + "$ref": "#/components/schemas/RuntimeTemplateStatusPayload" + }, + { + "$ref": "#/components/schemas/CloudTemplateStatusPayload" + } + ] + }, "TemplateStatusEvent": { "type": "object", "properties": { @@ -7453,6 +7656,7 @@ "invalid_parameter", "invalid_credential", "entitlement_required", + "cloud_template_authority_restricted", "gate_limit_reached", "method_not_allowed", "permission_denied", @@ -8463,7 +8667,8 @@ "title", "buttonText", "sections" - ] + ], + "description": "On an official WhatsApp Business number, `title` is the header (at most 60 characters) and `description` the body (at most 1,024 characters); without `description`, `title` is the body. There, each section title allows at most 24 characters and is required when the list has more than one section, lists allow at most 10 rows in total, row titles at most 24 characters, row IDs at most 200, row descriptions at most 72, `buttonText` at most 20 and `footer` at most 60. Every number also limits `buttonText` to 64 UTF-8 bytes, row `id` to 256 bytes and `title` and `description` to 256 and 4,096 bytes, so multibyte text reaches those byte limits before the character limits. Content outside any limit returns `400`." } }, "required": [ @@ -8627,7 +8832,8 @@ "required": [ "body", "buttons" - ] + ], + "description": "On an official WhatsApp Business number, only `reply` buttons are sent; other button types return `501`. There, `body` allows at most 1,024 characters, `title` and `footer` at most 60, and each button needs a unique `id` and a unique `text` of at most 20 characters. Every number also limits each button `id` to 256 UTF-8 bytes. Content outside any limit returns `400`." } }, "required": [ @@ -8920,6 +9126,12 @@ "recording", "paused" ] + }, + "id": { + "type": "string", + "pattern": "^[1-9][0-9]{0,18}$", + "description": "Opaque Polymorfa resource ID. Keep this value as a string.", + "example": "739182640518203" } }, "required": [ @@ -9584,6 +9796,167 @@ "data" ] }, + "OfficialServiceWindow": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "open", + "closed", + "unknown" + ], + "description": "`open`: the person messaged, reacted or called this Number through the Official API in the last 24 hours, so free-form messages can be sent. `closed`: no such activity in the last 24 hours; only approved templates can be sent, and Polymorfa refuses free-form sends with `conversation_window_closed`. `unknown`: Polymorfa cannot prove the window is closed; sends are passed to WhatsApp, which decides." + }, + "reason": { + "type": "string", + "nullable": true, + "enum": [ + "not_tracked", + "tracking_started", + "notifications_interrupted", + "identity_unlinked", + null + ], + "description": "Why the state is `unknown`, otherwise null. `not_tracked`: no WhatsApp notification has been processed for this connection yet. `tracking_started`: tracking began less than 24 hours ago. `notifications_interrupted`: a WhatsApp notification could not be processed in the last 24 hours. `identity_unlinked`: someone without a phone number (or username ID) wrote in during the last 24 hours and could be this person." + }, + "openedAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "description": "When the person's latest known message, reaction or call started or reset the window. Null when none is known." + }, + "expiresAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "description": "`openedAt` plus 24 hours. In the past when the window has closed." + }, + "checkedAt": { + "type": "string", + "format": "date-time" + } + }, + "required": [ + "state", + "reason", + "openedAt", + "expiresAt", + "checkedAt" + ] + }, + "GetCustomerServiceWindowResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/OfficialServiceWindow" + } + }, + "required": [ + "success", + "data" + ] + }, + "MetaPricingGroup": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Pricing category as WhatsApp reported it, for example `marketing`, `utility`, `authentication` or `service`.", + "example": "utility" + }, + "pricingModel": { + "type": "string", + "description": "Pricing model as WhatsApp reported it, for example `PMP`.", + "example": "PMP" + }, + "pricingType": { + "type": "string", + "nullable": true, + "description": "Pricing type as WhatsApp reported it, for example `regular`, `free_customer_service` or `free_entry_point`. Null when not reported.", + "example": "regular" + }, + "billable": { + "type": "boolean", + "nullable": true, + "description": "The `billable` flag as WhatsApp reported it. Null when not reported." + }, + "messages": { + "type": "integer", + "minimum": 0, + "description": "Messages WhatsApp reported with this classification." + } + }, + "required": [ + "category", + "pricingModel", + "pricingType", + "billable", + "messages" + ] + }, + "MetaPricingSummary": { + "type": "object", + "properties": { + "source": { + "type": "string", + "enum": [ + "meta" + ], + "description": "Always `meta`: these are WhatsApp's own reports. Meta bills your WhatsApp Business Account directly. They are not a Polymorfa charge and contain no prices." + }, + "since": { + "type": "string", + "format": "date-time" + }, + "until": { + "type": "string", + "format": "date-time" + }, + "messages": { + "type": "integer", + "minimum": 0, + "description": "Messages with a WhatsApp pricing report in the period." + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/MetaPricingGroup" + } + } + }, + "required": [ + "source", + "since", + "until", + "messages", + "groups" + ] + }, + "GetMetaPricingSummaryResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/MetaPricingSummary" + } + }, + "required": [ + "success", + "data" + ] + }, "RejectCallRequest": { "type": "object", "properties": { @@ -15632,6 +16005,225 @@ "data" ] }, + "WaTemplate": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "tenantId": { + "type": "string" + }, + "session": { + "type": "string" + }, + "wabaId": { + "type": "string" + }, + "name": { + "type": "string" + }, + "language": { + "type": "string" + }, + "category": { + "type": "string", + "enum": [ + "UTILITY", + "MARKETING", + "AUTHENTICATION" + ] + }, + "status": { + "type": "string", + "enum": [ + "PENDING", + "APPROVED", + "REJECTED", + "PAUSED", + "DISABLED", + "DELETED", + "ARCHIVED", + "IN_APPEAL", + "LIMIT_EXCEEDED", + "PENDING_DELETION" + ] + }, + "components": { + "type": "array", + "items": {} + }, + "metaTemplateId": { + "type": "string" + }, + "rejectionReason": { + "type": "string" + }, + "qualityScore": { + "type": "string" + }, + "createdAt": { + "type": "string" + }, + "updatedAt": { + "type": "string" + } + }, + "required": [ + "id", + "tenantId", + "session", + "wabaId", + "name", + "language", + "category", + "status", + "components", + "createdAt", + "updatedAt" + ] + }, + "ListTemplatesResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/WaTemplate" + } + } + }, + "required": [ + "success", + "data" + ] + }, + "GetTemplateResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/WaTemplate" + } + }, + "required": [ + "success", + "data" + ] + }, + "EditTemplateAcceptedResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "type": "object", + "properties": { + "accepted": { + "type": "boolean", + "enum": [ + true + ] + }, + "name": { + "type": "string" + }, + "language": { + "type": "string" + } + }, + "required": [ + "accepted", + "name", + "language" + ] + } + }, + "required": [ + "success", + "data" + ] + }, + "EditTemplateRequest": { + "type": "object", + "properties": { + "components": { + "type": "array", + "items": {}, + "minItems": 1 + } + }, + "required": [ + "components" + ], + "additionalProperties": false + }, + "CreateTemplateResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/WaTemplate" + } + }, + "required": [ + "success", + "data" + ] + }, + "CreateTemplateRequest": { + "type": "object", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "pattern": "^[a-z0-9_]+$" + }, + "language": { + "type": "string", + "minLength": 2 + }, + "category": { + "type": "string", + "enum": [ + "UTILITY", + "MARKETING", + "AUTHENTICATION" + ] + }, + "components": { + "type": "array", + "items": {}, + "minItems": 1 + } + }, + "required": [ + "name", + "language", + "category", + "components" + ] + }, "MessageTemplate": { "type": "object", "properties": { @@ -15868,6 +16460,92 @@ "session" ] }, + "CampaignSendWindowRange": { + "type": "object", + "properties": { + "start": { + "type": "string", + "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$", + "description": "Local start time, `HH:MM` in 24-hour time, inclusive.", + "example": "09:00" + }, + "end": { + "type": "string", + "pattern": "^(([01][0-9]|2[0-3]):[0-5][0-9]|24:00)$", + "description": "Local end time, `HH:MM` in 24-hour time or `24:00`, exclusive. Must be later than `start`.", + "example": "18:00" + } + }, + "required": [ + "start", + "end" + ], + "additionalProperties": false + }, + "CampaignSendWindow": { + "type": "object", + "nullable": true, + "properties": { + "timeZone": { + "type": "string", + "description": "IANA time zone the window is written in.", + "example": "America/Sao_Paulo" + }, + "days": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ] + }, + "minItems": 1, + "maxItems": 7, + "uniqueItems": true, + "description": "Weekdays the campaign may send on, in the window's time zone. At least one; no repeats.", + "example": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday" + ] + }, + "hours": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CampaignSendWindowRange" + }, + "minItems": 1, + "maxItems": 4, + "description": "Local time ranges the campaign may send in on those days, at most 4. Ranges must not overlap. A range cannot cross midnight; use two ranges instead." + }, + "recipientTimeZone": { + "type": "boolean", + "description": "Evaluate the window in each recipient's own time zone. The zone comes from the recipient variable named by `timeZoneVariable` when it holds a valid IANA zone, otherwise from the phone number's country when that country uses one UTC offset, otherwise `timeZone`." + }, + "timeZoneVariable": { + "type": "string", + "pattern": "^[A-Za-z0-9_][A-Za-z0-9_.-]{0,63}$", + "description": "Recipient variable holding the recipient's IANA time zone, used when `recipientTimeZone` is true.", + "example": "timeZone" + } + }, + "required": [ + "timeZone", + "days", + "hours", + "recipientTimeZone", + "timeZoneVariable" + ], + "description": "When the campaign may send; null sends at any time." + }, "Campaign": { "type": "object", "properties": { @@ -15923,6 +16601,9 @@ }, "updatedAt": { "type": "number" + }, + "sendWindow": { + "$ref": "#/components/schemas/CampaignSendWindow" } }, "required": [ @@ -15941,7 +16622,8 @@ "launchedAt", "completedAt", "createdAt", - "updatedAt" + "updatedAt", + "sendWindow" ] }, "ListCampaignsResponse": { @@ -16020,6 +16702,72 @@ "data" ] }, + "CampaignSendWindowRequest": { + "type": "object", + "nullable": true, + "properties": { + "timeZone": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "description": "IANA time zone the window is written in, such as `America/Sao_Paulo`. When omitted, the team's time zone is stored, or `UTC` when the team has none.", + "example": "America/Sao_Paulo" + }, + "days": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ] + }, + "minItems": 1, + "maxItems": 7, + "uniqueItems": true, + "description": "Weekdays the campaign may send on, in the window's time zone. At least one; no repeats.", + "example": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday" + ] + }, + "hours": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CampaignSendWindowRange" + }, + "minItems": 1, + "maxItems": 4, + "description": "Local time ranges the campaign may send in on those days, at most 4. Ranges must not overlap. A range cannot cross midnight; use two ranges instead." + }, + "recipientTimeZone": { + "type": "boolean", + "default": false, + "description": "Evaluate the window in each recipient's own time zone. The zone comes from the recipient variable named by `timeZoneVariable` when it holds a valid IANA zone, otherwise from the phone number's country when that country uses one UTC offset, otherwise `timeZone`." + }, + "timeZoneVariable": { + "type": "string", + "pattern": "^[A-Za-z0-9_][A-Za-z0-9_.-]{0,63}$", + "default": "timeZone", + "description": "Recipient variable holding the recipient's IANA time zone, used when `recipientTimeZone` is true.", + "example": "timeZone" + } + }, + "required": [ + "days", + "hours" + ], + "additionalProperties": false, + "description": "When the campaign may send. Recipients outside the window stay `queued` and are sent when it next opens. `null` sends at any time." + }, "CampaignRecipientInput": { "type": "object", "properties": { @@ -16071,6 +16819,9 @@ "scheduledAt": { "type": "number" }, + "sendWindow": { + "$ref": "#/components/schemas/CampaignSendWindowRequest" + }, "recipients": { "type": "array", "items": { @@ -16128,6 +16879,17 @@ "minimum": 0, "maximum": 8640000000000000, "description": "Start time in milliseconds since the Unix epoch, or null to start at launch. Only an unlaunched draft can change it." + }, + "sendWindow": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/CampaignSendWindowRequest" + }, + { + "description": "When the campaign may send. Null removes the window. Only a draft or paused campaign can change it; a paused edit requires in-flight sends to have settled." + } + ] } }, "additionalProperties": false, @@ -16541,7 +17303,8 @@ "type": "string", "enum": [ "initial", - "add_connection" + "add_connection", + "reauthorization" ] }, "connectionGoal": { @@ -16973,6 +17736,77 @@ "data" ] }, + "CloudSyncStatus": { + "type": "object", + "properties": { + "contacts": { + "type": "object", + "properties": { + "request": { + "type": "string", + "enum": [ + "not_applicable", + "not_requested", + "pending", + "requesting", + "accepted", + "declined", + "unknown" + ], + "description": "Accepted means Meta returned a request receipt; it does not prove all contacts were delivered. Unknown means a one-time request may have been accepted without a saved receipt." + }, + "receiptRecorded": { + "type": "boolean" + } + }, + "required": [ + "request", + "receiptRecorded" + ] + }, + "history": { + "type": "object", + "properties": { + "request": { + "type": "string", + "enum": [ + "not_applicable", + "not_requested", + "pending", + "requesting", + "accepted", + "declined", + "unknown" + ] + }, + "receiptRecorded": { + "type": "boolean" + }, + "delivery": { + "type": "string", + "enum": [ + "not_applicable", + "not_requested", + "unconfirmed", + "partial", + "complete", + "declined" + ], + "description": "Partial and complete describe the latest history progress reported by Meta. Unconfirmed does not mean that no history exists." + } + }, + "required": [ + "request", + "receiptRecorded", + "delivery" + ] + } + }, + "required": [ + "contacts", + "history" + ] + }, "QuickLinkStatus": { "type": "object", "properties": { @@ -16983,7 +17817,8 @@ "type": "string", "enum": [ "initial", - "add_connection" + "add_connection", + "reauthorization" ] }, "connectionGoal": { @@ -17075,6 +17910,9 @@ "errorCode": { "type": "string", "nullable": true + }, + "sync": { + "$ref": "#/components/schemas/CloudSyncStatus" } }, "required": [ @@ -17084,9 +17922,10 @@ "contactsSync", "historySync", "historyProgress", - "errorCode" + "errorCode", + "sync" ], - "description": "Durable onboarding progress; omitted when the onboarding service is unavailable, null when no record exists." + "description": "Durable connection and sync progress; omitted when the onboarding service is unavailable, null when no record exists. Sync request and delivery evidence are independent of the connection stage." } }, "required": [ @@ -17121,6 +17960,171 @@ "data" ] }, + "CloudCredentialHealth": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "pending", + "healthy", + "action_required", + "unknown" + ], + "description": "`healthy`: every check passed. `action_required`: a check failed and the Number needs reauthorization or a change in Meta. `unknown`: Meta could not be reached or returned an incomplete answer; the check is retried. `pending`: not checked since the credentials were saved." + }, + "checkedAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "description": "When the last validation completed, or null before the first one." + }, + "nextCheckAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "description": "When the next scheduled validation becomes due." + }, + "token": { + "type": "object", + "properties": { + "status": { + "type": "string", + "enum": [ + "valid", + "expired", + "invalid", + "unknown" + ] + }, + "expiresAt": { + "type": "string", + "nullable": true, + "format": "date-time", + "description": "Expiry reported by Meta; null for a token without an expiry or when unknown." + } + }, + "required": [ + "status", + "expiresAt" + ] + }, + "missingPermissions": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "whatsapp_business_messaging", + "whatsapp_business_management" + ] + }, + "description": "Required permissions the saved token lacks for this WhatsApp Business Account." + }, + "phoneRegistration": { + "type": "string", + "enum": [ + "registered", + "not_registered", + "unknown" + ], + "description": "Whether Meta reports the phone number as connected to the Cloud API." + }, + "webhookSubscription": { + "type": "string", + "enum": [ + "subscribed", + "not_subscribed", + "unknown" + ], + "description": "Whether the app that issued the token is subscribed to the WhatsApp Business Account's webhooks." + }, + "failureCode": { + "type": "string", + "nullable": true, + "enum": [ + "app_credentials_rejected", + "token_expired", + "token_invalid", + "token_app_mismatch", + "permission_missing", + "phone_not_registered", + "webhook_not_subscribed", + "credentials_unreadable", + "meta_unavailable", + "meta_response_invalid", + null + ], + "description": "The first failed or inconclusive check, or null when healthy." + } + }, + "required": [ + "status", + "checkedAt", + "nextCheckAt", + "token", + "missingPermissions", + "phoneRegistration", + "webhookSubscription", + "failureCode" + ] + }, + "CloudCredentialHealthResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/CloudCredentialHealth" + } + }, + "required": [ + "success", + "data" + ] + }, + "CloudReauthorization": { + "type": "object", + "properties": { + "quicklinkId": { + "type": "string", + "description": "QuickLink identifier, prefixed `ql_`. Read its progress with `GET /messaging/quicklinks/{id}`." + }, + "url": { + "type": "string", + "description": "Hosted link. Share it only with the person who manages the Number's Meta assets." + }, + "session": { + "type": "string" + } + }, + "required": [ + "quicklinkId", + "url", + "session" + ] + }, + "CloudReauthorizationResponse": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "enum": [ + true + ] + }, + "data": { + "$ref": "#/components/schemas/CloudReauthorization" + } + }, + "required": [ + "success", + "data" + ] + }, "PublicQuickLinkError": { "type": "object", "properties": { @@ -17366,7 +18370,8 @@ "type": "string", "enum": [ "initial", - "add_connection" + "add_connection", + "reauthorization" ] }, "connectionGoal": { @@ -17485,6 +18490,9 @@ "errorCode": { "type": "string", "nullable": true + }, + "sync": { + "$ref": "#/components/schemas/CloudSyncStatus" } }, "required": [ @@ -17494,7 +18502,8 @@ "contactsSync", "historySync", "historyProgress", - "errorCode" + "errorCode", + "sync" ] }, "methods": { @@ -18203,6 +19212,29 @@ ] } }, + "headers": { + "X-RateLimit-Limit": { + "description": "Team request quota per rolling minute, when the per-team request limiter applies.", + "schema": { + "type": "integer", + "minimum": 1 + } + }, + "X-RateLimit-Remaining": { + "description": "Requests left in the per-team quota; zero when this limiter rejects the request.", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "X-RateLimit-Reset": { + "description": "Unix timestamp in seconds when the oldest counted request leaves the rolling window, when the per-team request limiter applies. Follow Retry-After on a rejected request.", + "schema": { + "type": "integer", + "minimum": 0 + } + } + }, "securitySchemes": { "BearerAuth": { "type": "http", @@ -18283,6 +19315,17 @@ "$ref": "#/components/schemas/VersionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } } @@ -18305,6 +19348,17 @@ "$ref": "#/components/schemas/StatusResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } } @@ -18374,6 +19428,17 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -18395,6 +19460,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -18416,6 +19492,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -18513,6 +19600,12 @@ "type": "string", "nullable": true }, + "experimentRevision": { + "type": "integer", + "minimum": 1, + "nullable": true, + "description": "Published experiment policy revision for an assigned native experiment; null otherwise." + }, "experimentAssigned": { "type": "boolean" } @@ -18523,6 +19616,7 @@ "available", "enrolled", "variant", + "experimentRevision", "experimentAssigned" ] }, @@ -18559,10 +19653,32 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { "description": "Invalid feature request", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -18584,6 +19700,17 @@ }, "401": { "description": "Authentication required", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -18605,6 +19732,17 @@ }, "403": { "description": "Credential cannot access feature evaluation", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -18626,6 +19764,17 @@ }, "413": { "description": "Request exceeds 16 KiB", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -18655,7 +19804,7 @@ "Pairing" ], "summary": "Get QR code for device pairing", - "description": "**Protocols:** Linked Device API\n\n**Required scope:** `sessions:manage`\n\nEnterprise only. Your team must have direct-pairing access enabled. Use [QuickLink](/integrations/quicklink) for standard connections. Requests without direct-pairing access return 403.", + "description": "**Protocols:** Linked Device API\n\n**Required scope:** `sessions:manage`\n\nDirect-pairing access must be enabled for the team that owns this Number. Use [QuickLink](/integrations/quicklink) when direct pairing is unavailable. Requests without access return 403.", "security": [ { "BearerAuth": [] @@ -18700,6 +19849,17 @@ "format": "binary" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -18721,6 +19881,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -18742,10 +19913,21 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { - "description": "Enterprise direct-pairing access is required. Use QuickLink for standard connections.", + "description": "Direct-pairing access is required for this Number. Use QuickLink when it is unavailable.", "content": { "application/json": { "schema": { @@ -18763,6 +19945,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -18784,6 +19977,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -18805,6 +20009,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -18823,7 +20038,7 @@ "Pairing" ], "summary": "Request a pairing code for a phone number", - "description": "**Protocols:** Linked Device API\n\n**Required scope:** `sessions:manage`\n\nEnterprise only. Your team must have direct-pairing access enabled. Use [QuickLink](/integrations/quicklink) for standard connections. Requests without direct-pairing access return 403.", + "description": "**Protocols:** Linked Device API\n\n**Required scope:** `sessions:manage`\n\nDirect-pairing access must be enabled for the team that owns this Number. Use [QuickLink](/integrations/quicklink) when direct pairing is unavailable. Requests without access return 403.", "security": [ { "BearerAuth": [] @@ -18858,6 +20073,17 @@ "$ref": "#/components/schemas/RequestPairCodeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -18879,6 +20105,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -18900,10 +20137,21 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { - "description": "Enterprise direct-pairing access is required. Use QuickLink for standard connections.", + "description": "Direct-pairing access is required for this Number. Use QuickLink when it is unavailable.", "content": { "application/json": { "schema": { @@ -18921,6 +20169,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -18942,6 +20201,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -18963,6 +20233,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -19030,6 +20311,17 @@ "$ref": "#/components/schemas/HybridRoutingPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -19040,6 +20332,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19050,6 +20353,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -19060,6 +20374,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -19070,6 +20395,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -19080,6 +20416,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -19090,6 +20437,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -19100,6 +20458,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -19172,6 +20541,17 @@ "$ref": "#/components/schemas/HybridRoutingPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -19182,6 +20562,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19192,6 +20583,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -19202,6 +20604,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -19212,6 +20625,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -19222,6 +20646,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -19232,6 +20667,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -19242,6 +20688,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -19284,6 +20741,17 @@ "$ref": "#/components/schemas/HybridLinkStateResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -19294,6 +20762,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19304,6 +20783,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -19314,6 +20804,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -19324,6 +20825,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -19334,6 +20846,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -19344,6 +20867,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -19354,6 +20888,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -19420,6 +20965,17 @@ "$ref": "#/components/schemas/HybridLinkPauseResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -19430,6 +20986,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19440,6 +21007,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -19450,6 +21028,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -19460,6 +21049,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -19470,6 +21070,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -19480,6 +21091,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -19490,6 +21112,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -19587,6 +21220,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -19622,6 +21264,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -19633,6 +21284,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19643,6 +21305,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -19653,6 +21326,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -19663,6 +21347,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -19673,6 +21368,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -19723,6 +21429,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -19734,6 +21449,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -19754,6 +21480,15 @@ "call_permission_request" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -19796,81 +21531,30 @@ "schema": { "type": "string" } - } - } - }, - "502": { - "description": "Messaging provider failure", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - } - } - }, - "headers": { - "X-Polymorfa-Operation-Id": { - "description": "Hybrid operation ID when a send is reserved. Read its status after an uncertain result; do not submit a new key.", - "schema": { - "type": "string", - "format": "uuid" - } }, - "X-Polymorfa-Transport": { - "description": "Transport selected by Hybrid routing, when a route was admitted.", - "schema": { - "type": "string", - "enum": [ - "linked_devices", - "official_api" - ] - } + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" }, - "X-Polymorfa-Routing-Reason": { - "description": "Reason for the selected Hybrid route, when a route was admitted.", - "schema": { - "type": "string" - } + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, - "503": { - "description": "Session or service unavailable", + "501": { + "description": "`operation_not_supported`: the number's connection cannot send this content, such as a poll, or a URL, call or copy-code button on an official WhatsApp Business number", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicError" } } - }, - "headers": { - "X-Polymorfa-Operation-Id": { - "description": "Hybrid operation ID when a send is reserved. Read its status after an uncertain result; do not submit a new key.", - "schema": { - "type": "string", - "format": "uuid" - } - }, - "X-Polymorfa-Transport": { - "description": "Transport selected by Hybrid routing, when a route was admitted.", - "schema": { - "type": "string", - "enum": [ - "linked_devices", - "official_api" - ] - } - }, - "X-Polymorfa-Routing-Reason": { - "description": "Reason for the selected Hybrid route, when a route was admitted.", - "schema": { - "type": "string" - } - } } }, - "504": { - "description": "Result unknown after timeout", + "502": { + "description": "Messaging provider failure", "content": { "application/json": { "schema": { @@ -19901,6 +21585,103 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "503": { + "description": "Session or service unavailable", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + }, + "headers": { + "X-Polymorfa-Operation-Id": { + "description": "Hybrid operation ID when a send is reserved. Read its status after an uncertain result; do not submit a new key.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Polymorfa-Transport": { + "description": "Transport selected by Hybrid routing, when a route was admitted.", + "schema": { + "type": "string", + "enum": [ + "linked_devices", + "official_api" + ] + } + }, + "X-Polymorfa-Routing-Reason": { + "description": "Reason for the selected Hybrid route, when a route was admitted.", + "schema": { + "type": "string" + } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "504": { + "description": "Result unknown after timeout", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + }, + "headers": { + "X-Polymorfa-Operation-Id": { + "description": "Hybrid operation ID when a send is reserved. Read its status after an uncertain result; do not submit a new key.", + "schema": { + "type": "string", + "format": "uuid" + } + }, + "X-Polymorfa-Transport": { + "description": "Transport selected by Hybrid routing, when a route was admitted.", + "schema": { + "type": "string", + "enum": [ + "linked_devices", + "official_api" + ] + } + }, + "X-Polymorfa-Routing-Reason": { + "description": "Reason for the selected Hybrid route, when a route was admitted.", + "schema": { + "type": "string" + } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } } @@ -19956,6 +21737,17 @@ "$ref": "#/components/schemas/MessageActionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -19966,6 +21758,17 @@ "$ref": "#/components/schemas/AsyncAcceptedResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -19976,6 +21779,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -19986,6 +21800,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -19996,6 +21821,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -20006,6 +21842,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -20016,6 +21863,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -20026,6 +21884,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -20036,6 +21905,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -20046,6 +21926,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -20056,6 +21947,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "504": { @@ -20066,6 +21968,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -20087,6 +22000,7 @@ "Messages" ], "summary": "Set typing indicator for a chat", + "description": "**Protocols:** Linked Device API · Meta Cloud API\n\n**Required scope:** `messages:write`\n\nOn a Linked Devices number, `state` sets typing, recording or paused. On an official WhatsApp Business number, send `state: \"typing\"` with the `id` of a message you received; this marks that message read and shows a typing indicator until you reply or 25 seconds pass. On a Number with both connections, this method uses the Linked Devices connection; use the Graph API status request for official typing. Other states return `501`, and a missing `id` returns `400`.", "security": [ { "BearerAuth": [] @@ -20121,6 +22035,17 @@ "$ref": "#/components/schemas/MessageActionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -20131,6 +22056,17 @@ "$ref": "#/components/schemas/AsyncAcceptedResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -20141,6 +22077,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -20151,6 +22098,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -20161,6 +22119,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -20171,6 +22140,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -20181,6 +22161,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -20191,10 +22182,42 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { "description": "Unexpected service failure", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "501": { + "description": "`operation_not_supported`: official WhatsApp Business numbers support only the `typing` state", "content": { "application/json": { "schema": { @@ -20211,6 +22234,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -20221,6 +22255,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "504": { @@ -20231,16 +22276,27 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, "x-mint": { - "content": "Linked Device API messages:write" + "content": "Linked Device API Meta Cloud API messages:write" }, "x-protocols": [ - "Linked Device API" - ], - "description": "**Protocols:** Linked Device API\n\n**Required scope:** `messages:write`" + "Linked Device API", + "Meta Cloud API" + ] } }, "/messaging/{session}/messages/react": { @@ -20319,6 +22375,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20354,6 +22419,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20365,6 +22439,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -20375,6 +22460,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -20385,6 +22481,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -20395,6 +22502,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -20405,6 +22523,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -20455,6 +22584,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20490,6 +22628,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20525,6 +22672,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20560,6 +22716,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -20595,6 +22760,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } } @@ -20651,6 +22825,17 @@ "$ref": "#/components/schemas/MessageActionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -20661,6 +22846,17 @@ "$ref": "#/components/schemas/AsyncAcceptedResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -20671,6 +22867,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -20681,6 +22888,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -20691,6 +22909,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -20701,6 +22930,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -20711,6 +22951,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -20721,6 +22972,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -20731,6 +22993,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -20741,6 +23014,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -20751,6 +23035,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "504": { @@ -20761,6 +23056,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -20815,6 +23121,17 @@ "$ref": "#/components/schemas/MessageOperationResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -20825,6 +23142,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -20835,6 +23163,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -20845,6 +23184,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -20855,6 +23205,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -20865,6 +23226,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -20875,6 +23247,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -20980,6 +23363,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -21002,6 +23394,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -21023,6 +23426,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -21044,6 +23458,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -21065,6 +23490,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -21108,6 +23544,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -21171,6 +23616,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } } @@ -21279,6 +23733,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -21301,6 +23764,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -21322,6 +23796,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -21343,6 +23828,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -21364,6 +23860,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -21407,6 +23914,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -21470,6 +23986,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } } @@ -21536,6 +24061,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -21554,6 +24088,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -21564,6 +24109,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -21574,6 +24130,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -21584,6 +24151,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -21594,6 +24172,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -21645,6 +24234,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -21666,6 +24266,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -21687,6 +24298,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -21708,6 +24330,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -21729,6 +24362,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -21750,6 +24394,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -21802,6 +24457,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -21823,6 +24489,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -21844,6 +24521,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -21865,6 +24553,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -21886,6 +24585,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -21907,6 +24617,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -21968,6 +24689,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -21989,6 +24721,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22010,6 +24753,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22031,6 +24785,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22052,6 +24817,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -22073,6 +24849,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -22180,6 +24967,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -22198,6 +24994,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22208,6 +25015,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22218,6 +25036,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22228,6 +25057,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -22238,6 +25078,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -22293,6 +25144,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -22311,6 +25171,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22321,6 +25192,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22331,6 +25213,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22341,6 +25234,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -22351,6 +25255,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -22489,6 +25404,15 @@ "schema": { "type": "string" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -22507,6 +25431,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22517,6 +25452,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22527,6 +25473,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22537,6 +25494,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -22547,6 +25515,17 @@ "$ref": "#/components/schemas/PublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -22687,6 +25666,247 @@ ] } }, + "/messaging/{session}/chats/{conversation}/service-window": { + "get": { + "operationId": "getCustomerServiceWindow", + "tags": [ + "Chats" + ], + "summary": "Get the customer service window", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `chats:read`\n\nReturns whether free-form messages can be sent to a person from a Number's active Official API connection. WhatsApp's customer service window opens for 24 hours when the person messages or calls the Number. Outside it, only approved templates can be sent. Beta: requires team enrollment.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "chats:read", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 1, + "description": "Number ID." + }, + "required": true, + "name": "session", + "in": "path" + }, + { + "schema": { + "type": "string", + "description": "Conversation ID or E.164 phone number." + }, + "required": true, + "name": "conversation", + "in": "path" + } + ], + "responses": { + "200": { + "description": "The window state", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCustomerServiceWindowResponse" + } + } + } + }, + "400": { + "description": "A parameter is invalid.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "401": { + "description": "The credential is missing or invalid.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "403": { + "description": "The credential lacks the scope, is a client token, or the team is not enrolled in the beta.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "404": { + "description": "The Number or conversation is unavailable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "409": { + "description": "The Number has no Official API connection (`unsupported_for_connection`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "503": { + "description": "The Number's regional evidence service is temporarily unavailable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + } + }, + "x-mint": { + "content": "Meta Cloud API chats:read" + }, + "x-protocols": [ + "Meta Cloud API" + ] + } + }, + "/messaging/{session}/meta-pricing": { + "get": { + "operationId": "getMetaPricingSummary", + "tags": [ + "Sessions" + ], + "summary": "Summarize Meta-reported pricing", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `sessions:read`\n\nCounts the messages sent from the Number's active Official API connection generation by the pricing classification WhatsApp reported for each one. Meta bills your WhatsApp Business Account directly. These counts are not a Polymorfa charge and contain no prices. Each message is counted in the period of its first pricing report. Beta: requires team enrollment.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "sessions:read", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 1, + "description": "Number ID." + }, + "required": true, + "name": "session", + "in": "path" + }, + { + "schema": { + "type": "string", + "format": "date-time", + "description": "Start of the period, inclusive (ISO 8601). Defaults to 30 days before `until`." + }, + "required": false, + "name": "since", + "in": "query" + }, + { + "schema": { + "type": "string", + "format": "date-time", + "description": "End of the period, exclusive (ISO 8601). Defaults to now. The period can be at most 93 days." + }, + "required": false, + "name": "until", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Meta-reported message counts", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetMetaPricingSummaryResponse" + } + } + } + }, + "400": { + "description": "A parameter is invalid.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "401": { + "description": "The credential is missing or invalid.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "403": { + "description": "The credential lacks the scope, is a client token, or the team is not enrolled in the beta.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "404": { + "description": "The Number is unavailable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "409": { + "description": "The Number has no Official API connection (`unsupported_for_connection`).", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "503": { + "description": "The Number's regional evidence service is temporarily unavailable.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + } + }, + "x-mint": { + "content": "Meta Cloud API sessions:read" + }, + "x-protocols": [ + "Meta Cloud API" + ] + } + }, "/messaging/{session}/calls/{callId}/reject": { "post": { "operationId": "rejectCall", @@ -22738,6 +25958,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -22759,6 +25990,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22780,6 +26022,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22801,6 +26054,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22822,6 +26086,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -22843,6 +26118,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -22897,6 +26183,17 @@ "$ref": "#/components/schemas/GetCallPermissionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -22918,6 +26215,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -22939,6 +26247,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -22960,6 +26279,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -22981,6 +26311,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -23002,6 +26343,17 @@ "docs": "https://docs.polymorfa.com/api/errors#unsupported-for-connection" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -23023,6 +26375,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -23067,6 +26430,17 @@ "$ref": "#/components/schemas/CheckCallResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -23088,6 +26462,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -23109,6 +26494,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -23130,6 +26526,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -23151,6 +26558,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -23172,6 +26590,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -23193,6 +26622,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -23247,6 +26687,17 @@ "$ref": "#/components/schemas/VoipOfferResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -23268,6 +26719,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -23289,6 +26751,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -23310,6 +26783,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -23331,6 +26815,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -23352,6 +26847,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-claimed" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -23373,6 +26879,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -23394,6 +26911,17 @@ "docs": "https://docs.polymorfa.com/api/errors#rate-limit-exceeded" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -23415,6 +26943,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -23436,6 +26975,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -23490,6 +27040,17 @@ "$ref": "#/components/schemas/VoipRenegotiateResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -23511,6 +27072,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -23532,6 +27104,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -23553,6 +27136,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -23574,6 +27168,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -23595,6 +27200,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-claimed" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -23616,6 +27232,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -23637,6 +27264,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -23658,6 +27296,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -23699,6 +27348,17 @@ "$ref": "#/components/schemas/VoipPlacedCallResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -23720,6 +27380,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -23741,6 +27412,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -23762,6 +27444,17 @@ "docs": "https://docs.polymorfa.com/api/errors#gate-limit-reached" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -23783,6 +27476,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-permission-required" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -23804,6 +27508,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -23825,6 +27540,17 @@ "docs": "https://docs.polymorfa.com/api/errors#unsupported-for-connection" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -23846,6 +27572,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -23867,6 +27604,17 @@ "docs": "https://docs.polymorfa.com/api/errors#rate-limit-exceeded" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -23888,6 +27636,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "501": { @@ -23909,6 +27668,17 @@ "docs": "https://docs.polymorfa.com/api/errors#operation-not-supported" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -23930,6 +27700,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -23951,6 +27732,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -24003,6 +27795,17 @@ "$ref": "#/components/schemas/VoipAcceptCallResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -24024,6 +27827,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -24045,6 +27859,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -24066,6 +27891,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -24087,6 +27923,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -24108,6 +27955,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-claimed" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -24129,6 +27987,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -24150,6 +28019,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -24171,6 +28051,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -24223,6 +28114,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -24244,6 +28146,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -24265,6 +28178,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -24286,6 +28210,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -24307,6 +28242,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -24328,6 +28274,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-not-ringing" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -24349,6 +28306,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -24370,6 +28338,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -24391,6 +28370,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -24444,6 +28434,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -24465,6 +28466,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -24486,6 +28498,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -24507,6 +28530,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -24528,6 +28562,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -24549,6 +28594,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -24570,6 +28626,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -24591,6 +28658,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -24612,6 +28690,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -24664,6 +28753,17 @@ "$ref": "#/components/schemas/VoipAddParticipantResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -24685,6 +28785,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -24706,6 +28817,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -24727,6 +28849,17 @@ "docs": "https://docs.polymorfa.com/api/errors#number-restricted" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -24748,6 +28881,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -24769,6 +28913,17 @@ "docs": "https://docs.polymorfa.com/api/errors#unsupported-for-connection" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -24790,6 +28945,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -24811,6 +28977,17 @@ "docs": "https://docs.polymorfa.com/api/errors#rate-limit-exceeded" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -24832,6 +29009,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -24853,6 +29041,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -24906,6 +29105,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -24927,6 +29137,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -24948,6 +29169,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -24969,6 +29201,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -24990,6 +29233,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -25011,6 +29265,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -25032,6 +29297,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -25053,6 +29329,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -25074,6 +29361,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -25118,6 +29416,17 @@ "$ref": "#/components/schemas/VoipCandidatesEnvelope" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -25139,6 +29448,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -25160,6 +29480,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -25181,6 +29512,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -25202,6 +29544,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -25223,6 +29576,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -25244,6 +29608,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -25265,6 +29640,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -25286,6 +29672,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -25340,6 +29737,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -25361,6 +29769,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -25382,6 +29801,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -25403,6 +29833,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -25424,6 +29865,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -25445,6 +29897,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -25466,6 +29929,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -25487,6 +29961,17 @@ "docs": "https://docs.polymorfa.com/api/errors#rate-limit-exceeded" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -25508,6 +29993,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -25529,6 +30025,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -25572,6 +30079,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -25593,6 +30111,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -25614,6 +30143,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -25635,6 +30175,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -25656,6 +30207,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -25677,6 +30239,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -25698,6 +30271,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-gone" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -25719,6 +30303,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -25740,6 +30335,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -25780,6 +30386,17 @@ "$ref": "#/components/schemas/ListGroupsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -25801,6 +30418,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -25822,6 +30450,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -25843,6 +30482,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -25864,6 +30514,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -25885,6 +30546,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -25936,6 +30608,17 @@ "$ref": "#/components/schemas/CreateGroupResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -25957,6 +30640,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -25978,6 +30672,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -25999,6 +30704,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26020,6 +30736,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26041,6 +30768,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26094,6 +30832,17 @@ "$ref": "#/components/schemas/GetGroupJoinInfoResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26115,6 +30864,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26136,6 +30896,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26157,6 +30928,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26178,6 +30960,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26199,6 +30992,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26252,6 +31056,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26273,6 +31088,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26294,6 +31120,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26315,6 +31152,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26336,6 +31184,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26357,6 +31216,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26410,6 +31280,17 @@ "$ref": "#/components/schemas/GetGroupResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26431,6 +31312,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26452,6 +31344,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26473,6 +31376,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26494,6 +31408,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26515,6 +31440,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26566,6 +31502,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26587,6 +31534,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26608,6 +31566,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26629,6 +31598,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26650,6 +31630,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26671,6 +31662,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26724,6 +31726,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26745,6 +31758,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26766,6 +31790,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26787,6 +31822,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26808,6 +31854,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26829,6 +31886,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -26891,6 +31959,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -26912,6 +31991,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -26933,6 +32023,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -26954,6 +32055,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -26975,6 +32087,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -26996,6 +32119,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27058,6 +32192,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27079,6 +32224,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27100,6 +32256,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27121,6 +32288,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27142,6 +32320,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27163,6 +32352,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27216,6 +32416,17 @@ "$ref": "#/components/schemas/GetGroupInviteCodeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27237,6 +32448,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27258,6 +32480,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27279,6 +32512,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27300,6 +32544,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27321,6 +32576,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27374,6 +32640,17 @@ "$ref": "#/components/schemas/RevokeGroupInviteCodeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27395,6 +32672,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27416,6 +32704,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27437,6 +32736,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27458,6 +32768,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27479,6 +32800,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27532,6 +32864,17 @@ "$ref": "#/components/schemas/GetGroupParticipantsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27553,6 +32896,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27574,6 +32928,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27595,6 +32960,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27616,6 +32992,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27637,6 +33024,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27699,6 +33097,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27720,6 +33129,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27741,6 +33161,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27762,6 +33193,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27783,6 +33225,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27804,6 +33257,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -27866,6 +33330,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -27887,6 +33362,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -27908,6 +33394,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -27929,6 +33426,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -27950,6 +33458,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -27971,6 +33490,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28033,6 +33563,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28054,6 +33595,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28075,6 +33627,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28096,6 +33659,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28117,6 +33691,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28138,6 +33723,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28200,6 +33796,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28221,6 +33828,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28242,6 +33860,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28263,6 +33892,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28284,6 +33924,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28305,6 +33956,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28367,6 +34029,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28388,6 +34061,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28409,6 +34093,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28430,6 +34125,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28451,6 +34157,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28472,6 +34189,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28534,6 +34262,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28555,6 +34294,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28576,6 +34326,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28597,6 +34358,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28618,6 +34390,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28639,6 +34422,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28701,6 +34495,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28722,6 +34527,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28743,6 +34559,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28764,6 +34591,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28785,6 +34623,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28806,6 +34655,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -28868,6 +34728,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -28889,6 +34760,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -28910,6 +34792,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -28931,6 +34824,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -28952,6 +34856,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -28973,6 +34888,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29035,6 +34961,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29056,6 +34993,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29077,6 +35025,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29098,6 +35057,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29119,6 +35089,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29140,6 +35121,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29184,6 +35176,17 @@ "$ref": "#/components/schemas/ListContactsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29205,6 +35208,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29226,6 +35240,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29247,6 +35272,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29268,6 +35304,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29289,6 +35336,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29353,6 +35411,17 @@ "$ref": "#/components/schemas/CheckContactsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29374,6 +35443,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29395,6 +35475,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29416,6 +35507,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29437,6 +35539,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29458,6 +35571,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29502,6 +35626,17 @@ "$ref": "#/components/schemas/GetBlocklistResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29523,6 +35658,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29544,6 +35690,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29565,6 +35722,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29586,6 +35754,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29607,6 +35786,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29660,6 +35850,17 @@ "$ref": "#/components/schemas/GetContactResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29681,6 +35882,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29702,6 +35914,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29723,6 +35946,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29744,6 +35978,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29765,6 +36010,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29818,6 +36074,17 @@ "$ref": "#/components/schemas/GetContactPictureResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29839,6 +36106,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -29860,6 +36138,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -29881,6 +36170,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -29902,6 +36202,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -29923,6 +36234,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -29976,6 +36298,17 @@ "$ref": "#/components/schemas/GetUserInfoResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -29997,6 +36330,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30018,6 +36362,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30039,6 +36394,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30060,6 +36426,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30081,6 +36458,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30134,6 +36522,17 @@ "$ref": "#/components/schemas/GetUserDevicesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30155,6 +36554,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30176,6 +36586,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30197,6 +36618,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30218,6 +36650,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30239,6 +36682,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30292,6 +36746,17 @@ "$ref": "#/components/schemas/GetBusinessProfileResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30313,6 +36778,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30334,6 +36810,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30355,6 +36842,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30376,6 +36874,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30397,6 +36906,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30450,6 +36970,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30471,6 +37002,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30492,6 +37034,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30513,6 +37066,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30534,6 +37098,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30555,6 +37130,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30608,6 +37194,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30629,6 +37226,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30650,6 +37258,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30671,6 +37290,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30692,6 +37322,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30713,6 +37354,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30757,6 +37409,17 @@ "$ref": "#/components/schemas/GetBusinessLinkedAccountsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30778,6 +37441,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30799,6 +37473,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30820,6 +37505,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30841,6 +37537,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -30862,6 +37569,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -30906,6 +37624,17 @@ "$ref": "#/components/schemas/GetBusinessEligibilityResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -30927,6 +37656,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -30948,6 +37688,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -30969,6 +37720,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -30990,6 +37752,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31011,6 +37784,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31055,6 +37839,17 @@ "$ref": "#/components/schemas/GetOwnBusinessProfileResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31076,6 +37871,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31097,6 +37903,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31118,6 +37935,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31139,6 +37967,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31160,6 +37999,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31212,6 +38062,17 @@ "$ref": "#/components/schemas/UpdateBusinessProfileResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31233,6 +38094,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31254,6 +38126,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31275,6 +38158,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31296,6 +38190,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31317,6 +38222,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31371,6 +38287,17 @@ "$ref": "#/components/schemas/SetBusinessCoverPhotoResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31392,6 +38319,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31413,6 +38351,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31434,6 +38383,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31455,6 +38415,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31476,6 +38447,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31530,6 +38512,17 @@ "$ref": "#/components/schemas/DeleteBusinessCoverPhotoResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31551,6 +38544,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31572,6 +38576,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31593,6 +38608,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31614,6 +38640,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31635,6 +38672,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31679,6 +38727,17 @@ "$ref": "#/components/schemas/GetBusinessMerchantComplianceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31700,6 +38759,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31721,6 +38791,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31742,6 +38823,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31763,6 +38855,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31784,6 +38887,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31836,6 +38950,17 @@ "$ref": "#/components/schemas/SetBusinessMerchantComplianceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -31857,6 +38982,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -31878,6 +39014,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -31899,6 +39046,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -31920,6 +39078,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -31941,6 +39110,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -31995,6 +39175,17 @@ "$ref": "#/components/schemas/CreateBusinessQuickReplyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32016,6 +39207,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32037,6 +39239,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32058,6 +39271,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32079,6 +39303,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32100,6 +39335,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32142,6 +39388,17 @@ "$ref": "#/components/schemas/ListBusinessQuickRepliesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32163,6 +39420,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32184,6 +39452,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32205,6 +39484,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32226,6 +39516,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32247,6 +39548,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32312,6 +39624,17 @@ "$ref": "#/components/schemas/SetBusinessQuickReplyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32333,6 +39656,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32354,6 +39688,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32375,6 +39720,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32396,6 +39752,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32417,6 +39784,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32470,6 +39848,17 @@ "$ref": "#/components/schemas/DeleteBusinessQuickReplyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32491,6 +39880,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32512,6 +39912,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32533,6 +39944,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32554,6 +39976,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32575,6 +40008,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32668,6 +40112,17 @@ "$ref": "#/components/schemas/GetBusinessCatalogResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32689,6 +40144,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32710,6 +40176,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32731,6 +40208,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32752,6 +40240,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32773,6 +40272,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -32794,6 +40304,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32836,6 +40357,17 @@ "$ref": "#/components/schemas/CreateBusinessCatalogResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -32857,6 +40389,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -32878,6 +40421,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -32899,6 +40453,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -32920,6 +40485,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -32941,6 +40517,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -32995,6 +40582,17 @@ "$ref": "#/components/schemas/SetBusinessCartEnabledResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33016,6 +40614,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33037,6 +40646,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33058,6 +40678,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33079,6 +40710,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33100,6 +40742,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -33163,6 +40816,17 @@ "$ref": "#/components/schemas/GetBusinessProductResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33184,6 +40848,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33205,6 +40880,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33226,6 +40912,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33247,6 +40944,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33268,6 +40976,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -33289,6 +41008,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -33350,6 +41080,17 @@ "$ref": "#/components/schemas/UpdateBusinessProductResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33371,6 +41112,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33392,6 +41144,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33413,6 +41176,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33434,6 +41208,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33455,6 +41240,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -33506,6 +41302,17 @@ "$ref": "#/components/schemas/DeleteBusinessProductResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33527,6 +41334,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33548,6 +41366,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33569,6 +41398,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33590,6 +41430,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33611,6 +41462,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -33665,6 +41527,17 @@ "$ref": "#/components/schemas/CreateBusinessProductResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33686,6 +41559,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33707,6 +41591,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33728,6 +41623,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33749,6 +41655,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33770,6 +41687,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -33833,6 +41761,17 @@ "$ref": "#/components/schemas/SetBusinessProductVisibilityResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -33854,6 +41793,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -33875,6 +41825,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -33896,6 +41857,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -33917,6 +41889,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -33938,6 +41921,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34001,6 +41995,17 @@ "$ref": "#/components/schemas/AppealBusinessProductResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34022,6 +42027,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34043,6 +42059,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -34064,6 +42091,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -34085,6 +42123,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -34106,6 +42155,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34209,6 +42269,17 @@ "$ref": "#/components/schemas/GetBusinessCollectionsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34230,6 +42301,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34251,6 +42333,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -34272,6 +42365,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -34293,6 +42397,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -34314,6 +42429,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -34335,6 +42461,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34387,6 +42524,17 @@ "$ref": "#/components/schemas/CreateBusinessCollectionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34408,6 +42556,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34429,6 +42588,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -34450,6 +42620,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -34471,6 +42652,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -34492,6 +42684,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34594,6 +42797,17 @@ "$ref": "#/components/schemas/GetBusinessCollectionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34615,6 +42829,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34636,6 +42861,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -34657,6 +42893,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -34678,6 +42925,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -34699,6 +42957,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -34720,6 +42989,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34781,6 +43061,17 @@ "$ref": "#/components/schemas/UpdateBusinessCollectionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34802,6 +43093,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34823,6 +43125,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -34844,6 +43157,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -34865,6 +43189,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -34886,6 +43221,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -34937,6 +43283,17 @@ "$ref": "#/components/schemas/DeleteBusinessCollectionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -34958,6 +43315,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -34979,6 +43347,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35000,6 +43379,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35021,6 +43411,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35042,6 +43443,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35096,6 +43508,17 @@ "$ref": "#/components/schemas/ReorderBusinessCollectionsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35117,6 +43540,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35138,6 +43572,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35159,6 +43604,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35180,6 +43636,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35201,6 +43668,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35264,6 +43742,17 @@ "$ref": "#/components/schemas/AppealBusinessCollectionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35285,6 +43774,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35306,6 +43806,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35327,6 +43838,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35348,6 +43870,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35369,6 +43902,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35432,6 +43976,17 @@ "$ref": "#/components/schemas/GetBusinessOrderResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35453,6 +44008,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35474,6 +44040,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35495,6 +44072,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35516,6 +44104,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35537,6 +44136,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -35558,6 +44168,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35638,6 +44259,17 @@ "$ref": "#/components/schemas/ResolveIdentityResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35659,6 +44291,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35680,6 +44323,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35701,6 +44355,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35722,6 +44387,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35743,6 +44419,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35796,6 +44483,17 @@ "$ref": "#/components/schemas/UserSecurityCodeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35817,6 +44515,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35838,6 +44547,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -35859,6 +44579,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -35880,6 +44611,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -35901,6 +44643,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -35945,6 +44698,17 @@ "$ref": "#/components/schemas/ListChannelsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -35966,6 +44730,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -35987,6 +44762,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36008,6 +44794,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36029,6 +44826,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36050,6 +44858,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36101,6 +44920,17 @@ "$ref": "#/components/schemas/CreateChannelResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36122,6 +44952,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -36143,6 +44984,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36164,6 +45016,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36185,6 +45048,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36206,6 +45080,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36259,6 +45144,17 @@ "$ref": "#/components/schemas/GetChannelResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36280,6 +45176,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -36301,6 +45208,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36322,6 +45240,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36343,6 +45272,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36364,6 +45304,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36415,6 +45366,17 @@ "$ref": "#/components/schemas/DeleteChannelResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36436,6 +45398,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -36457,6 +45430,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36478,6 +45462,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36499,6 +45494,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36520,6 +45526,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "502": { @@ -36541,6 +45558,17 @@ "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36615,6 +45643,17 @@ "$ref": "#/components/schemas/ListChannelMessagesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36636,6 +45675,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -36657,6 +45707,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36678,6 +45739,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36699,6 +45771,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36720,6 +45803,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36804,6 +45898,17 @@ "$ref": "#/components/schemas/ListChannelMessageUpdatesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36825,6 +45930,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -36846,6 +45962,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -36867,6 +45994,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -36888,6 +46026,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -36909,6 +46058,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -36971,6 +46131,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -36992,6 +46163,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37013,6 +46195,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37034,6 +46227,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37055,6 +46259,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -37076,6 +46291,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37158,6 +46384,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -37179,6 +46416,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37200,6 +46448,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37221,6 +46480,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37242,6 +46512,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -37262,6 +46543,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -37301,6 +46591,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37354,6 +46655,17 @@ "$ref": "#/components/schemas/ChannelLiveUpdatesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -37375,6 +46687,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37396,6 +46719,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37417,6 +46751,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37438,6 +46783,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -37459,6 +46815,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37512,6 +46879,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -37533,6 +46911,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37554,6 +46943,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37575,6 +46975,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37596,6 +47007,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -37617,6 +47039,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37670,6 +47103,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -37691,6 +47135,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37712,6 +47167,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37733,6 +47199,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37754,6 +47231,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -37775,6 +47263,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37828,6 +47327,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -37849,6 +47359,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -37870,6 +47391,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -37891,6 +47423,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -37912,6 +47455,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -37933,6 +47487,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -37986,6 +47551,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38007,6 +47583,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38028,6 +47615,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38049,6 +47647,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38070,6 +47679,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38091,6 +47711,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38144,6 +47775,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -38154,6 +47796,17 @@ "$ref": "#/components/schemas/AsyncAcceptedResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38175,6 +47828,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38196,6 +47860,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38217,6 +47892,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38238,6 +47924,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38259,6 +47956,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38301,6 +48009,17 @@ "$ref": "#/components/schemas/GetPresenceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38322,6 +48041,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38343,6 +48073,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38364,6 +48105,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38385,6 +48137,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38406,6 +48169,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38458,6 +48232,17 @@ "$ref": "#/components/schemas/GetChatPresenceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38479,6 +48264,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38500,6 +48296,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38521,6 +48328,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38542,6 +48360,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38563,6 +48392,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38615,6 +48455,17 @@ "$ref": "#/components/schemas/SubscribePresenceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -38625,6 +48476,17 @@ "$ref": "#/components/schemas/AsyncAcceptedResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38646,6 +48508,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38667,6 +48540,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38688,6 +48572,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38709,6 +48604,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -38730,6 +48636,17 @@ "docs": "https://docs.polymorfa.com/api/errors#rate-limit-exceeded" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38751,6 +48668,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38796,6 +48724,17 @@ "$ref": "#/components/schemas/GetProjectSafeModeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -38817,6 +48756,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -38838,6 +48788,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -38859,6 +48820,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -38880,6 +48852,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -38901,6 +48884,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -38996,6 +48990,17 @@ "$ref": "#/components/schemas/UpdateProjectSafeModeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39017,6 +49022,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39038,6 +49054,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -39059,6 +49086,17 @@ "docs": "https://docs.polymorfa.com/api/errors#entitlement-required" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39080,6 +49118,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -39101,6 +49150,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -39122,6 +49182,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -39143,6 +49214,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -39184,6 +49266,17 @@ "$ref": "#/components/schemas/GetSessionSafeModeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39205,6 +49298,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39226,6 +49330,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39247,6 +49362,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -39268,6 +49394,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -39289,6 +49426,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -39381,6 +49529,17 @@ "$ref": "#/components/schemas/UpdateSessionSafeModeResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39402,6 +49561,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39423,6 +49593,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -39444,6 +49625,17 @@ "docs": "https://docs.polymorfa.com/api/errors#entitlement-required" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39465,6 +49657,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -39486,6 +49689,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -39507,6 +49721,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -39528,6 +49753,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -39572,6 +49808,17 @@ "$ref": "#/components/schemas/GetProjectWarmupPlanResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39593,6 +49840,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39614,6 +49872,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39635,6 +49904,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -39656,6 +49936,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -39677,6 +49968,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -39743,6 +50045,17 @@ "$ref": "#/components/schemas/UpdateProjectWarmupPlanResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39764,6 +50077,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39785,6 +50109,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -39806,6 +50141,17 @@ "docs": "https://docs.polymorfa.com/api/errors#entitlement-required" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39827,6 +50173,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -39848,6 +50205,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -39869,6 +50237,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -39890,6 +50269,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -39931,6 +50321,17 @@ "$ref": "#/components/schemas/GetProjectHealthPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -39952,6 +50353,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -39973,6 +50385,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -39994,6 +50417,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40015,6 +50449,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40036,6 +50481,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40087,6 +50543,17 @@ "$ref": "#/components/schemas/UpdateProjectHealthPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40108,6 +50575,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40129,6 +50607,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40150,6 +50639,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40171,6 +50671,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -40192,6 +50703,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40213,6 +50735,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40255,6 +50788,17 @@ "$ref": "#/components/schemas/GetProjectInsuranceEvidenceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40276,6 +50820,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40297,6 +50852,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40318,6 +50884,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40339,6 +50916,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40360,6 +50948,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40418,6 +51017,17 @@ "$ref": "#/components/schemas/UpdateProjectInsuranceEvidenceResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40439,6 +51049,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40460,6 +51081,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40481,6 +51113,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40502,6 +51145,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40523,6 +51177,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -40544,6 +51209,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40586,6 +51262,17 @@ "$ref": "#/components/schemas/GetProjectObservationPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40607,6 +51294,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40628,6 +51326,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40649,6 +51358,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40670,6 +51390,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40691,6 +51422,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40734,6 +51476,17 @@ "$ref": "#/components/schemas/GetSessionObservationPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40755,6 +51508,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40776,6 +51540,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40797,6 +51572,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40818,6 +51604,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40839,6 +51636,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -40883,6 +51691,17 @@ "$ref": "#/components/schemas/GetProfileResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -40904,6 +51723,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -40925,6 +51755,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -40946,6 +51787,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -40967,6 +51819,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -40988,6 +51851,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41041,6 +51915,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41062,6 +51947,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41083,6 +51979,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41104,6 +52011,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41125,6 +52043,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41146,6 +52075,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41199,6 +52139,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41220,6 +52171,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41241,6 +52203,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41262,6 +52235,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41283,6 +52267,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41304,6 +52299,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41357,6 +52363,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41378,6 +52395,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41399,6 +52427,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41420,6 +52459,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41441,6 +52491,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41462,6 +52523,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41504,6 +52576,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41525,6 +52608,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41546,6 +52640,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41567,6 +52672,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41588,6 +52704,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41609,6 +52736,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41653,6 +52791,17 @@ "$ref": "#/components/schemas/PrivacySettingsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41674,6 +52823,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41695,6 +52855,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41716,6 +52887,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41737,6 +52919,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41758,6 +52951,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41811,6 +53015,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -41832,6 +53047,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -41853,6 +53079,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -41874,6 +53111,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -41895,6 +53143,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -41916,6 +53175,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -41989,6 +53259,17 @@ "$ref": "#/components/schemas/UpdatedPrivacySettingsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42010,6 +53291,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42031,6 +53323,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42052,6 +53355,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42073,6 +53387,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42094,6 +53419,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42150,6 +53486,17 @@ "$ref": "#/components/schemas/ListLabelsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42171,6 +53518,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42192,6 +53550,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42213,6 +53582,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42234,6 +53614,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42255,6 +53646,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42306,6 +53708,17 @@ "$ref": "#/components/schemas/CreateLabelResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42327,6 +53740,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42348,6 +53772,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42369,6 +53804,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42390,6 +53836,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42411,6 +53868,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42472,6 +53940,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42493,6 +53972,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42514,6 +54004,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42535,6 +54036,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42556,6 +54068,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -42577,6 +54100,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42598,6 +54132,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42648,6 +54193,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42669,6 +54225,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42690,6 +54257,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42711,6 +54289,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42732,6 +54321,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42753,6 +54353,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42817,6 +54428,17 @@ "$ref": "#/components/schemas/GetChatLabelsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -42838,6 +54460,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -42859,6 +54492,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -42880,6 +54524,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -42901,6 +54556,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -42922,6 +54588,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -42981,6 +54658,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43002,6 +54690,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43023,6 +54722,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43044,6 +54754,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43065,6 +54786,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -43086,6 +54818,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43107,6 +54850,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43141,6 +54895,17 @@ "$ref": "#/components/schemas/ListWebhooksResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43162,6 +54927,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43183,6 +54959,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43204,6 +54991,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43225,6 +55023,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43246,6 +55055,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43284,6 +55104,17 @@ "$ref": "#/components/schemas/CreateWebhookResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43305,6 +55136,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43326,6 +55168,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43347,6 +55200,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43368,6 +55232,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43389,6 +55264,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43430,6 +55316,17 @@ "$ref": "#/components/schemas/GetWebhookResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43451,6 +55348,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43472,6 +55380,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43493,6 +55412,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43514,6 +55444,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43535,6 +55476,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43583,6 +55535,17 @@ "$ref": "#/components/schemas/UpdateWebhookResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43604,6 +55567,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43625,6 +55599,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43646,6 +55631,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43667,6 +55663,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43688,6 +55695,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43727,6 +55745,17 @@ "$ref": "#/components/schemas/SuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -43748,6 +55777,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -43769,6 +55809,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -43790,6 +55841,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -43811,6 +55873,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -43832,6 +55905,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -43866,157 +55950,30 @@ ], "responses": { "200": { - "description": "Media binary stream" - }, - "302": { - "description": "Redirect to S3" - }, - "400": { - "description": "Bad request — request body or params failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "invalid_parameter", - "message": "Correct the invalid request field.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" - } - } - } - }, - "401": { - "description": "Missing or invalid authentication token", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "authentication_error", - "code": "invalid_credential", - "message": "Supply a valid credential.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" - } - } - } - }, - "403": { - "description": "Authenticated but not permitted (missing scope or rule violation)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "permission_error", - "code": "permission_denied", - "message": "The credential does not have access to this resource.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#permission-denied" - } - } - } - }, - "404": { - "description": "Resource not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "resource_not_found", - "message": "The resource is unavailable to this caller.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" - } + "description": "Media binary stream", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" - } - } - } - } - }, - "x-mint": { - "content": "Linked Device API media:read" - }, - "x-protocols": [ - "Linked Device API" - ], - "description": "**Protocols:** Linked Device API\n\n**Required scope:** `media:read`" - } - }, - "/messaging/media/{id}/info": { - "get": { - "operationId": "getMediaInfo", - "tags": [ - "Media" - ], - "summary": "Get media metadata", - "security": [ - { - "BearerAuth": [] - } - ], - "x-required-scope": "media:read", - "parameters": [ - { - "schema": { - "type": "string" - }, - "required": true, - "name": "id", - "in": "path" - } - ], - "responses": { - "200": { - "description": "Media info", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetMediaInfoResponse" - } + "302": { + "description": "Redirect to S3", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -44039,6 +55996,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -44060,6 +56028,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -44081,6 +56060,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -44102,6 +56092,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -44123,6 +56124,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -44135,19 +56147,19 @@ "description": "**Protocols:** Linked Device API\n\n**Required scope:** `media:read`" } }, - "/messaging/media/{id}/download-and-save": { - "post": { - "operationId": "downloadAndSaveMedia", + "/messaging/media/{id}/info": { + "get": { + "operationId": "getMediaInfo", "tags": [ "Media" ], - "summary": "Download media and persist it to the tenant's S3 bucket", + "summary": "Get media metadata", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "media:manage", + "x-required-scope": "media:read", "parameters": [ { "schema": { @@ -44160,13 +56172,24 @@ ], "responses": { "200": { - "description": "Persistence queued or already persisted", + "description": "Media info", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "$ref": "#/components/schemas/GetMediaInfoResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -44188,6 +56211,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -44209,6 +56243,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -44230,6 +56275,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -44251,6 +56307,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -44272,202 +56339,71 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, "x-mint": { - "content": "Linked Device API media:manage" + "content": "Linked Device API media:read" }, "x-protocols": [ "Linked Device API" ], - "description": "**Protocols:** Linked Device API\n\n**Required scope:** `media:manage`" + "description": "**Protocols:** Linked Device API\n\n**Required scope:** `media:read`" } }, - "/messaging/projects/{projectSlug}/templates": { - "get": { - "operationId": "listProjectTemplates", + "/messaging/media/{id}/download-and-save": { + "post": { + "operationId": "downloadAndSaveMedia", "tags": [ - "Templates" + "Media" ], - "summary": "List project message templates", + "summary": "Download media and persist it to the tenant's S3 bucket", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "templates:read", + "x-required-scope": "media:manage", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", + "name": "id", "in": "path" } ], "responses": { "200": { - "description": "Templates", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListProjectTemplatesResponse" - } - } - } - }, - "400": { - "description": "Bad request — request body or params failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "invalid_parameter", - "message": "Correct the invalid request field.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" - } - } - } - }, - "401": { - "description": "Missing or invalid authentication token", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "authentication_error", - "code": "invalid_credential", - "message": "Supply a valid credential.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" - } - } - } - }, - "403": { - "description": "Authenticated but not permitted (missing scope or rule violation)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "permission_error", - "code": "permission_denied", - "message": "The credential does not have access to this resource.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#permission-denied" - } - } - } - }, - "404": { - "description": "Resource not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "resource_not_found", - "message": "The resource is unavailable to this caller.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" - } - } - } - }, - "500": { - "description": "Internal server error", + "description": "Persistence queued or already persisted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" + "$ref": "#/components/schemas/SuccessResponse" } } - } - } - }, - "x-mint": { - "content": "templates:read" - }, - "description": "**Required scope:** `templates:read`" - }, - "post": { - "operationId": "createProjectTemplate", - "tags": [ - "Templates" - ], - "summary": "Create a project message template", - "security": [ - { - "BearerAuth": [] - } - ], - "x-required-scope": "templates:manage", - "parameters": [ - { - "schema": { - "type": "string" }, - "required": true, - "name": "projectSlug", - "in": "path" - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateMessageTemplateRequest" - } - } - } - }, - "responses": { - "201": { - "description": "Created", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateProjectTemplateResponse" - } + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -44490,6 +56426,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -44511,6 +56458,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -44532,6 +56490,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -44553,6 +56522,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -44574,53 +56554,60 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, "x-mint": { - "content": "templates:manage" + "content": "Linked Device API media:manage" }, - "description": "**Required scope:** `templates:manage`" + "x-protocols": [ + "Linked Device API" + ], + "description": "**Protocols:** Linked Device API\n\n**Required scope:** `media:manage`" } }, - "/messaging/projects/{projectSlug}/templates/{id}": { + "/messaging/{session}/templates": { "get": { - "operationId": "getProjectTemplate", + "operationId": "listTemplates", "tags": [ "Templates" ], - "summary": "Get a project message template", + "summary": "List templates for a Number", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `messages:write`\n\nFor a real Official API Number, including a Hybrid Number, reads the complete template catalog of its WhatsApp Business Account from Meta, stores it, and returns it. A test-mode Cloud Number uses its simulated catalog. A Number with only a Linked Devices connection receives 400. If a catalog read is incomplete, the request fails with 502 and the stored templates are unchanged.", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "templates:read", + "x-required-scope": "messages:write", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", - "in": "path" - }, - { - "schema": { - "type": "string" - }, - "required": true, - "name": "id", + "name": "session", "in": "path" } ], "responses": { "200": { - "description": "Template", + "description": "Template list", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetProjectTemplateResponse" + "$ref": "#/components/schemas/ListTemplatesResponse" } } } @@ -44729,59 +56716,107 @@ } } } + }, + "502": { + "description": "Meta did not return a complete template catalog; the stored templates are unchanged", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "upstream_error", + "code": "upstream_failure", + "message": "The messaging provider could not complete the request.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" + } + } + } + }, + "503": { + "description": "The Number's WhatsApp Business Account is not available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "service_unavailable", + "message": "A required service is unavailable. Check completion before repeating a write.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" + } + } + } } }, "x-mint": { - "content": "templates:read" + "content": "Meta Cloud API messages:write" }, - "description": "**Required scope:** `templates:read`" + "x-protocols": [ + "Meta Cloud API" + ] }, - "patch": { - "operationId": "updateProjectTemplate", + "post": { + "operationId": "createTemplate", "tags": [ "Templates" ], - "summary": "Update a project message template", + "summary": "Create a template for a Number", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `messages:write`\n\nSubmits the template to Meta for a real Official API Number, including a Hybrid Number, or to the simulator for a test-mode Cloud Number, then stores the receipt. If the provider accepts the template but the receipt cannot be stored, the API imports it from one catalog read; if that also fails, it returns 500 with `template was submitted but could not be stored`. Do not resubmit in that case: list templates to load it. A retry with the same `Idempotency-Key` returns `409 idempotency_completed`. The returned status is the one in the response, or `PENDING` when none is returned. For real Official API Numbers, later approval, rejection and quality changes arrive as `template.status` webhook events and appear in the next list. A Number with only a Linked Devices connection receives 400.", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "templates:manage", + "x-required-scope": "messages:write", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", + "name": "session", "in": "path" }, { + "name": "Idempotency-Key", + "in": "header", + "required": false, + "description": "Unique key, 1 to 255 bytes of UTF-8, that makes this write safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version`, and request never runs the write again: it returns `409 idempotency_completed` when the original succeeded, or the original server error, with `Idempotent-Replayed: true`. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", "schema": { - "type": "string" - }, - "required": true, - "name": "id", - "in": "path" + "type": "string", + "minLength": 1, + "maxLength": 255 + } } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateMessageTemplateRequest" + "$ref": "#/components/schemas/CreateTemplateRequest" } } } }, "responses": { - "200": { - "description": "Updated", + "201": { + "description": "Template submitted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateProjectTemplateResponse" + "$ref": "#/components/schemas/CreateTemplateResponse" } } } @@ -44870,76 +56905,26 @@ } } }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { + "409": { + "description": "The Idempotency-Key already succeeded (`idempotency_completed`), was used for a different request (`idempotency_conflict`), belongs to a request that is still running (`idempotency_in_progress`, with Retry-After), or belongs to a request whose outcome was not recorded (`idempotency_outcome_unknown`)", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying `idempotency_in_progress`.", "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" + "type": "integer", + "minimum": 0 } - } - } - } - }, - "x-mint": { - "content": "templates:manage" - }, - "description": "**Required scope:** `templates:manage`" - }, - "delete": { - "operationId": "deleteProjectTemplate", - "tags": [ - "Templates" - ], - "summary": "Delete a project message template", - "security": [ - { - "BearerAuth": [] - } - ], - "x-required-scope": "templates:manage", - "parameters": [ - { - "schema": { - "type": "string" - }, - "required": true, - "name": "projectSlug", - "in": "path" - }, - { - "schema": { - "type": "string" - }, - "required": true, - "name": "id", - "in": "path" - } - ], - "responses": { - "200": { - "description": "Deleted", - "content": { - "application/json": { + }, + "Idempotent-Replayed": { + "description": "`true` when this response reports the recorded outcome of an earlier request with the same Idempotency-Key.", "schema": { - "$ref": "#/components/schemas/SuccessResponse" + "type": "string", + "enum": [ + "true" + ] } } - } - }, - "400": { - "description": "Bad request — request body or params failed validation", + }, "content": { "application/json": { "schema": { @@ -44947,20 +56932,19 @@ }, "example": { "error": { - "type": "invalid_request_error", - "code": "invalid_parameter", - "message": "Correct the invalid request field.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + "type": "conflict_error", + "code": "idempotency_conflict", + "message": "This Idempotency-Key was already used with a different request. Use a new key for a different request.", + "param": null }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + "docs": "https://docs.polymorfa.com/api/errors#idempotency-conflict" } } } }, - "401": { - "description": "Missing or invalid authentication token", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -44968,20 +56952,20 @@ }, "example": { "error": { - "type": "authentication_error", - "code": "invalid_credential", - "message": "Supply a valid credential.", + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } } }, - "403": { - "description": "Authenticated but not permitted (missing scope or rule violation)", + "502": { + "description": "Meta did not complete the request", "content": { "application/json": { "schema": { @@ -44989,20 +56973,20 @@ }, "example": { "error": { - "type": "permission_error", - "code": "permission_denied", - "message": "The credential does not have access to this resource.", + "type": "upstream_error", + "code": "upstream_failure", + "message": "The messaging provider could not complete the request.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } } }, - "404": { - "description": "Resource not found", + "503": { + "description": "The Number's WhatsApp Business Account is not available", "content": { "application/json": { "schema": { @@ -45010,20 +56994,20 @@ }, "example": { "error": { - "type": "invalid_request_error", - "code": "resource_not_found", - "message": "The resource is unavailable to this caller.", + "type": "api_error", + "code": "service_unavailable", + "message": "A required service is unavailable. Check completion before repeating a write.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } } }, - "500": { - "description": "Internal server error", + "default": { + "description": "Meta returned a 400-599 error status; the mutation may have an unknown outcome", "content": { "application/json": { "schema": { @@ -45045,31 +57029,34 @@ } }, "x-mint": { - "content": "templates:manage" + "content": "Meta Cloud API messages:write" }, - "description": "**Required scope:** `templates:manage`" + "x-protocols": [ + "Meta Cloud API" + ] } }, - "/messaging/projects/{projectSlug}/templates/{id}/preview": { - "post": { - "operationId": "previewProjectTemplate", + "/messaging/{session}/templates/{name}": { + "get": { + "operationId": "getTemplate", "tags": [ "Templates" ], - "summary": "Render a template preview (idealized) or surface-specific output", + "summary": "Get a template by name", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `messages:write`\n\nRefreshes the Number's provider or simulated template catalog and returns the template with this name and language. `language` defaults to `en_US`. Fails with 502 if the catalog read is incomplete. Real Official API Numbers, including Hybrid Numbers, and test-mode Cloud Numbers are supported. A Number with only a Linked Devices connection receives 400.", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "templates:read", + "x-required-scope": "messages:write", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", + "name": "session", "in": "path" }, { @@ -45077,26 +57064,25 @@ "type": "string" }, "required": true, - "name": "id", + "name": "name", "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "language", + "in": "query" } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PreviewMessageTemplateRequest" - } - } - } - }, "responses": { "200": { - "description": "Rendered", + "description": "Template detail", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/PreviewProjectTemplateResponse" + "$ref": "#/components/schemas/GetTemplateResponse" } } } @@ -45205,35 +57191,77 @@ } } } + }, + "502": { + "description": "Meta did not return a complete template catalog; the stored templates are unchanged", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "upstream_error", + "code": "upstream_failure", + "message": "The messaging provider could not complete the request.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" + } + } + } + }, + "503": { + "description": "The Number's WhatsApp Business Account is not available", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "service_unavailable", + "message": "A required service is unavailable. Check completion before repeating a write.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" + } + } + } } }, "x-mint": { - "content": "templates:read" + "content": "Meta Cloud API messages:write" }, - "description": "**Required scope:** `templates:read`" - } - }, - "/messaging/projects/{projectSlug}/templates/{id}/submit": { - "post": { - "operationId": "submitProjectTemplateToMeta", + "x-protocols": [ + "Meta Cloud API" + ] + }, + "patch": { + "operationId": "editTemplate", "tags": [ "Templates" ], - "summary": "Submit a project template to Meta for approval on a Cloud-API session", - "description": "**Required scope:** `templates:manage`\n\nRenders the canonical template into a Meta create-template payload and submits it through the given cloud_api session. Records a per-session approval pointer (cloudLinks) and returns the updated template. The Meta review verdict arrives later via webhook.", + "summary": "Submit a change to a Meta template", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `messages:write`\n\nChanges the components of one template language in the Number's owned WhatsApp Business Account. A 202 response means Meta accepted the edit request; read the template status to establish whether it is available to send. If the outcome is unknown, read the template again before deciding whether to retry. The Number needs an active Official API connection, including when it also has a Linked Devices connection. A test-mode Cloud Number or a Number with only a Linked Devices connection receives 400.", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "templates:manage", + "x-required-scope": "messages:write", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", + "name": "session", "in": "path" }, { @@ -45241,26 +57269,34 @@ "type": "string" }, "required": true, - "name": "id", + "name": "name", "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": false, + "name": "language", + "in": "query" } ], "requestBody": { "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SubmitMessageTemplateRequest" + "$ref": "#/components/schemas/EditTemplateRequest" } } } }, "responses": { - "200": { - "description": "Submitted", + "202": { + "description": "Meta accepted the edit request", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/SubmitProjectTemplateResponse" + "$ref": "#/components/schemas/EditTemplateAcceptedResponse" } } } @@ -45349,69 +57385,18 @@ } } }, - "500": { - "description": "Internal server error", + "402": { + "description": "Account or billing authority refused the edit before Meta", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" - } - } - } - } - }, - "x-mint": { - "content": "templates:manage" - } - } - }, - "/messaging/projects/{projectSlug}/campaigns": { - "get": { - "operationId": "listCampaigns", - "tags": [ - "Campaigns" - ], - "summary": "List campaigns", - "security": [ - { - "BearerAuth": [] - } - ], - "x-required-scope": "campaigns:read", - "parameters": [ - { - "schema": { - "type": "string" - }, - "required": true, - "name": "projectSlug", - "in": "path" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ListCampaignsResponse" } } } }, - "400": { - "description": "Bad request — request body or params failed validation", + "409": { + "description": "The template changed before the edit was sent to Meta; read it and try again", "content": { "application/json": { "schema": { @@ -45419,20 +57404,20 @@ }, "example": { "error": { - "type": "invalid_request_error", - "code": "invalid_parameter", - "message": "Correct the invalid request field.", + "type": "conflict_error", + "code": "state_conflict", + "message": "The request conflicts with the resource state.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } } }, - "401": { - "description": "Missing or invalid authentication token", + "500": { + "description": "Internal server error", "content": { "application/json": { "schema": { @@ -45440,20 +57425,20 @@ }, "example": { "error": { - "type": "authentication_error", - "code": "invalid_credential", - "message": "Supply a valid credential.", + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } } }, - "403": { - "description": "Authenticated but not permitted (missing scope or rule violation)", + "502": { + "description": "Meta did not return a complete template catalog; the stored templates are unchanged", "content": { "application/json": { "schema": { @@ -45461,20 +57446,20 @@ }, "example": { "error": { - "type": "permission_error", - "code": "permission_denied", - "message": "The credential does not have access to this resource.", + "type": "upstream_error", + "code": "upstream_failure", + "message": "The messaging provider could not complete the request.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" } } } }, - "404": { - "description": "Resource not found", + "503": { + "description": "The edit was not sent to Meta, or its outcome is unknown; the message says which. Read the template from Meta before retrying an unknown outcome", "content": { "application/json": { "schema": { @@ -45482,65 +57467,64 @@ }, "example": { "error": { - "type": "invalid_request_error", - "code": "resource_not_found", - "message": "The resource is unavailable to this caller.", + "type": "api_error", + "code": "service_unavailable", + "message": "A required service is unavailable. Check completion before repeating a write.", "param": null, "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" }, "data": null, - "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } } }, - "500": { - "description": "Internal server error", + "default": { + "description": "Meta rejected the edit with a 4xx status; an unknown outcome uses 503", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } } } }, "x-mint": { - "content": "campaigns:read" + "content": "Meta Cloud API messages:write" }, - "description": "**Required scope:** `campaigns:read`" + "x-protocols": [ + "Meta Cloud API" + ] }, - "post": { - "operationId": "createCampaign", + "delete": { + "operationId": "deleteTemplate", "tags": [ - "Campaigns" + "Templates" ], - "summary": "Create a campaign", - "description": "**Required scope:** `campaigns:manage`\n\nCreates a draft campaign on any plan. `senderConfig.sessionIds` may name numbers that are not yet on a plan that includes Campaigns; launch checks the selection. It is refused with `403 bansafe_org_suspended` while the team is suspended and `400` when `senderConfig.sessionIds` is malformed or a per-number cap is above its safety ceiling.", + "summary": "Delete a template", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `messages:write`\n\nDeletes every language of the named template from Meta for a real Official API Number, including a Hybrid Number, or from the simulated catalog for a test-mode Cloud Number, then removes the stored copies. A confirmed provider deletion succeeds even if local cleanup fails; the next complete catalog read reconciles the mirror. If the provider rejects the deletion or its result is unknown, the stored templates are kept. A Number with only a Linked Devices connection receives 400.", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "campaigns:manage", + "x-required-scope": "messages:write", "parameters": [ { "schema": { "type": "string" }, "required": true, - "name": "projectSlug", + "name": "session", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "name", "in": "path" }, { @@ -45555,22 +57539,13 @@ } } ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CreateCampaignRequest" - } - } - } - }, "responses": { "200": { - "description": "OK", + "description": "Template deleted", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/CreateCampaignResponse" + "$ref": "#/components/schemas/SuccessResponse" } } } @@ -45717,26 +57692,71 @@ } } } + }, + "502": { + "description": "Meta did not complete the request", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "upstream_error", + "code": "upstream_failure", + "message": "The messaging provider could not complete the request.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#upstream-failure" + } + } + } + }, + "default": { + "description": "Meta returned a 400-599 error status; the mutation may have an unknown outcome", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + } } }, "x-mint": { - "content": "campaigns:manage" - } + "content": "Meta Cloud API messages:write" + }, + "x-protocols": [ + "Meta Cloud API" + ] } }, - "/messaging/projects/{projectSlug}/campaigns/{id}": { + "/messaging/projects/{projectSlug}/templates": { "get": { - "operationId": "getCampaign", + "operationId": "listProjectTemplates", "tags": [ - "Campaigns" + "Templates" ], - "summary": "Get a campaign", + "summary": "List project message templates", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "campaigns:read", + "x-required-scope": "templates:read", "parameters": [ { "schema": { @@ -45745,25 +57765,28 @@ "required": true, "name": "projectSlug", "in": "path" - }, - { - "schema": { - "type": "string" - }, - "required": true, - "name": "id", - "in": "path" } ], "responses": { "200": { - "description": "OK", + "description": "Templates", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetCampaignResponse" + "$ref": "#/components/schemas/ListProjectTemplatesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -45785,6 +57808,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -45806,6 +57840,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -45827,6 +57872,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -45848,6 +57904,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -45869,27 +57936,37 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, "x-mint": { - "content": "campaigns:read" + "content": "templates:read" }, - "description": "**Required scope:** `campaigns:read`" + "description": "**Required scope:** `templates:read`" }, - "patch": { - "operationId": "updateProjectCampaign", + "post": { + "operationId": "createProjectTemplate", "tags": [ - "Campaigns" + "Templates" ], - "summary": "Update a campaign", - "description": "**Required scope:** `campaigns:manage`\n\nUpdates the fields you send and leaves the rest unchanged. On an unlaunched draft, a new `senderConfig` passes the same checks as create, on any plan; launch checks the selection against live plans. Once the campaign has launched, including a scheduled launch that has not started, a new `senderConfig` must pass the launch checks and can answer `402 campaigns_not_entitled` or `400 invalid_parameter`. `recipientListId` and a different `scheduledAt` are accepted only while the campaign is an unlaunched draft; afterwards they answer `409`. A sender change to a draft that launches while the change is being saved also answers `409`. A non-null `scheduledAt` must be integer Unix milliseconds within the JavaScript Date range.", + "summary": "Create a project message template", "security": [ { "BearerAuth": [] } ], - "x-required-scope": "campaigns:manage", + "x-required-scope": "templates:manage", "parameters": [ { "schema": { @@ -45898,36 +57975,37 @@ "required": true, "name": "projectSlug", "in": "path" - }, - { - "schema": { - "type": "string", - "format": "uuid" - }, - "required": true, - "name": "id", - "in": "path" } ], "requestBody": { - "required": true, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCampaignRequest" + "$ref": "#/components/schemas/CreateMessageTemplateRequest" } } } }, "responses": { - "200": { - "description": "OK", + "201": { + "description": "Created", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/UpdateCampaignResponse" + "$ref": "#/components/schemas/CreateProjectTemplateResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -45949,6 +58027,2079 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:manage" + }, + "description": "**Required scope:** `templates:manage`" + } + }, + "/messaging/projects/{projectSlug}/templates/{id}": { + "get": { + "operationId": "getProjectTemplate", + "tags": [ + "Templates" + ], + "summary": "Get a project message template", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "templates:read", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Template", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetProjectTemplateResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:read" + }, + "description": "**Required scope:** `templates:read`" + }, + "patch": { + "operationId": "updateProjectTemplate", + "tags": [ + "Templates" + ], + "summary": "Update a project message template", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "templates:manage", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateMessageTemplateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Updated", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateProjectTemplateResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:manage" + }, + "description": "**Required scope:** `templates:manage`" + }, + "delete": { + "operationId": "deleteProjectTemplate", + "tags": [ + "Templates" + ], + "summary": "Delete a project message template", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "templates:manage", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Deleted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SuccessResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:manage" + }, + "description": "**Required scope:** `templates:manage`" + } + }, + "/messaging/projects/{projectSlug}/templates/{id}/preview": { + "post": { + "operationId": "previewProjectTemplate", + "tags": [ + "Templates" + ], + "summary": "Render a template preview (idealized) or surface-specific output", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "templates:read", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreviewMessageTemplateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Rendered", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PreviewProjectTemplateResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:read" + }, + "description": "**Required scope:** `templates:read`" + } + }, + "/messaging/projects/{projectSlug}/templates/{id}/submit": { + "post": { + "operationId": "submitProjectTemplateToMeta", + "tags": [ + "Templates" + ], + "summary": "Submit a project template to Meta for approval on a Cloud-API session", + "description": "**Required scope:** `templates:manage`\n\nRenders the canonical template into a Meta create-template payload and submits it through the given cloud_api session. Records a per-session approval pointer (cloudLinks) and returns the updated template. Incomplete or invalid definitions return 400 before submission; passing local validation does not guarantee Meta approval. Read the Number's template catalog for the review status.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "templates:manage", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubmitMessageTemplateRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Submitted", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/SubmitProjectTemplateResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "templates:manage" + } + } + }, + "/messaging/projects/{projectSlug}/campaigns": { + "get": { + "operationId": "listCampaigns", + "tags": [ + "Campaigns" + ], + "summary": "List campaigns", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "campaigns:read", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ListCampaignsResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "campaigns:read" + }, + "description": "**Required scope:** `campaigns:read`" + }, + "post": { + "operationId": "createCampaign", + "tags": [ + "Campaigns" + ], + "summary": "Create a campaign", + "description": "**Required scope:** `campaigns:manage`\n\nCreates a draft campaign on any plan. `senderConfig.sessionIds` may name numbers that are not yet on a plan that includes Campaigns; launch checks the selection. It is refused with `403 bansafe_org_suspended` while the team is suspended and `400` when `senderConfig.sessionIds` is malformed or a per-number cap is above its safety ceiling.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "campaigns:manage", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "name": "Idempotency-Key", + "in": "header", + "required": false, + "description": "Unique key, 1 to 255 bytes of UTF-8, that makes this write safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version`, and request never runs the write again: it returns `409 idempotency_completed` when the original succeeded, or the original server error, with `Idempotent-Replayed: true`. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", + "schema": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + ], + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCampaignRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateCampaignResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "409": { + "description": "The Idempotency-Key already succeeded (`idempotency_completed`), was used for a different request (`idempotency_conflict`), belongs to a request that is still running (`idempotency_in_progress`, with Retry-After), or belongs to a request whose outcome was not recorded (`idempotency_outcome_unknown`)", + "headers": { + "Retry-After": { + "description": "Seconds to wait before retrying `idempotency_in_progress`.", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "Idempotent-Replayed": { + "description": "`true` when this response reports the recorded outcome of an earlier request with the same Idempotency-Key.", + "schema": { + "type": "string", + "enum": [ + "true" + ] + } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "conflict_error", + "code": "idempotency_conflict", + "message": "This Idempotency-Key was already used with a different request. Use a new key for a different request.", + "param": null + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#idempotency-conflict" + } + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "campaigns:manage" + } + } + }, + "/messaging/projects/{projectSlug}/campaigns/{id}": { + "get": { + "operationId": "getCampaign", + "tags": [ + "Campaigns" + ], + "summary": "Get a campaign", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "campaigns:read", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetCampaignResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "campaigns:read" + }, + "description": "**Required scope:** `campaigns:read`" + }, + "patch": { + "operationId": "updateProjectCampaign", + "tags": [ + "Campaigns" + ], + "summary": "Update a campaign", + "description": "**Required scope:** `campaigns:manage`\n\nUpdates the fields you send and leaves the rest unchanged. On an unlaunched draft, a new `senderConfig` passes the same checks as create, on any plan; launch checks the selection against live plans. Once the campaign has launched, including a scheduled launch that has not started, a new `senderConfig` must pass the launch checks and can answer `402 campaigns_not_entitled` or `400 invalid_parameter`. `recipientListId` and a different `scheduledAt` are accepted only while the campaign is an unlaunched draft; afterwards they answer `409`. A sender change to a draft that launches while the change is being saved also answers `409`. `sendWindow` changes only while draft or paused; a paused edit answers `409` while sends are in progress. A non-null `scheduledAt` must be integer Unix milliseconds within the JavaScript Date range.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "campaigns:manage", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string", + "format": "uuid" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCampaignRequest" + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdateCampaignResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -45970,6 +60121,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -45991,6 +60153,300 @@ "docs": "https://docs.polymorfa.com/api/errors#campaigns-not-entitled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "403": { + "description": "Authenticated but not permitted (missing scope or rule violation)", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "permission_error", + "code": "permission_denied", + "message": "The credential does not have access to this resource.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#permission-denied" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "404": { + "description": "Resource not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "resource_not_found", + "message": "The resource is unavailable to this caller.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "409": { + "description": "`state_conflict`: the campaign has launched and the audience or start time can no longer change, it launched while its sending numbers were being changed, or its send window cannot change in the current state or while sends are in progress", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "conflict_error", + "code": "state_conflict", + "message": "The request conflicts with the resource state.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#state-conflict" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "500": { + "description": "Internal server error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "internal_error", + "message": "An unexpected service failure occurred. Keep the request ID for support.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#internal-error" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "503": { + "description": "`service_unavailable`: number eligibility for a launched campaign's new sender selection could not be checked. Nothing was changed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "api_error", + "code": "service_unavailable", + "message": "A required service is unavailable. Check completion before repeating a write.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + } + }, + "x-mint": { + "content": "campaigns:manage" + } + } + }, + "/messaging/projects/{projectSlug}/campaigns/{id}/analytics": { + "get": { + "operationId": "getCampaignAnalytics", + "tags": [ + "Campaigns" + ], + "summary": "Campaign analytics (funnel, response timing, retries)", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "campaigns:read", + "parameters": [ + { + "schema": { + "type": "string" + }, + "required": true, + "name": "projectSlug", + "in": "path" + }, + { + "schema": { + "type": "string" + }, + "required": true, + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CampaignAnalyticsResponse" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "400": { + "description": "Bad request — request body or params failed validation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "invalid_request_error", + "code": "invalid_parameter", + "message": "Correct the invalid request field.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + } + }, + "401": { + "description": "Missing or invalid authentication token", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + }, + "example": { + "error": { + "type": "authentication_error", + "code": "invalid_credential", + "message": "Supply a valid credential.", + "param": null, + "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" + }, + "data": null, + "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" + } + } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -46012,6 +60468,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -46033,26 +60500,16 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } - } - }, - "409": { - "description": "`state_conflict`: the campaign has launched and the audience or start time can no longer change, or it launched while its sending numbers were being changed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "conflict_error", - "code": "state_conflict", - "message": "The request conflicts with the resource state.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#state-conflict" - } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -46075,179 +60532,16 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } - } - }, - "503": { - "description": "`service_unavailable`: number eligibility for a launched campaign's new sender selection could not be checked. Nothing was changed", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "service_unavailable", - "message": "A required service is unavailable. Check completion before repeating a write.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" - } - } - } - } - }, - "x-mint": { - "content": "campaigns:manage" - } - } - }, - "/messaging/projects/{projectSlug}/campaigns/{id}/analytics": { - "get": { - "operationId": "getCampaignAnalytics", - "tags": [ - "Campaigns" - ], - "summary": "Campaign analytics (funnel, response timing, retries)", - "security": [ - { - "BearerAuth": [] - } - ], - "x-required-scope": "campaigns:read", - "parameters": [ - { - "schema": { - "type": "string" - }, - "required": true, - "name": "projectSlug", - "in": "path" - }, - { - "schema": { - "type": "string" }, - "required": true, - "name": "id", - "in": "path" - } - ], - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CampaignAnalyticsResponse" - } - } - } - }, - "400": { - "description": "Bad request — request body or params failed validation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "invalid_parameter", - "message": "Correct the invalid request field.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" - } - } - } - }, - "401": { - "description": "Missing or invalid authentication token", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "authentication_error", - "code": "invalid_credential", - "message": "Supply a valid credential.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" - } - } - } - }, - "403": { - "description": "Authenticated but not permitted (missing scope or rule violation)", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "permission_error", - "code": "permission_denied", - "message": "The credential does not have access to this resource.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#permission-denied" - } - } - } - }, - "404": { - "description": "Resource not found", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "invalid_request_error", - "code": "resource_not_found", - "message": "The resource is unavailable to this caller.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" - } - } - } - }, - "500": { - "description": "Internal server error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PublicError" - }, - "example": { - "error": { - "type": "api_error", - "code": "internal_error", - "message": "An unexpected service failure occurred. Keep the request ID for support.", - "param": null, - "request_id": "5f0c2a8e-3b1d-4c6f-9e2a-7d4b1c8f6a30" - }, - "data": null, - "docs": "https://docs.polymorfa.com/api/errors#internal-error" - } + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } } @@ -46319,6 +60613,17 @@ "$ref": "#/components/schemas/LaunchCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -46340,6 +60645,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -46361,6 +60677,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -46382,6 +60709,17 @@ "docs": "https://docs.polymorfa.com/api/errors#campaigns-not-entitled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -46403,6 +60741,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -46424,6 +60773,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -46462,6 +60822,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -46484,6 +60853,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -46505,6 +60885,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -46565,6 +60956,17 @@ "$ref": "#/components/schemas/PauseCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -46586,6 +60988,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -46607,6 +61020,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -46628,6 +61052,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -46649,6 +61084,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -46687,6 +61133,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -46709,6 +61164,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -46769,6 +61235,17 @@ "$ref": "#/components/schemas/ResumeCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -46790,6 +61267,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -46811,6 +61299,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -46832,6 +61331,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -46853,6 +61363,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -46891,6 +61412,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -46913,6 +61443,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -46973,6 +61514,17 @@ "$ref": "#/components/schemas/StopCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -46994,6 +61546,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47015,6 +61578,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47036,6 +61610,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47057,6 +61642,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -47095,6 +61691,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -47117,6 +61722,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -47187,6 +61803,17 @@ "$ref": "#/components/schemas/RescheduleCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -47208,6 +61835,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47229,6 +61867,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47250,6 +61899,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47271,6 +61931,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -47309,6 +61980,15 @@ "true" ] } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } } }, @@ -47331,6 +62011,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -47388,6 +62079,17 @@ "$ref": "#/components/schemas/RequeueCampaignResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -47409,6 +62111,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47430,6 +62143,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47451,6 +62175,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47472,6 +62207,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -47493,6 +62239,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -47580,6 +62337,17 @@ "$ref": "#/components/schemas/ListCampaignRecipientsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -47601,6 +62369,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47622,6 +62401,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47643,6 +62433,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47664,6 +62465,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -47685,6 +62497,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -47741,6 +62564,17 @@ "$ref": "#/components/schemas/AddCampaignRecipientsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -47762,6 +62596,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47783,6 +62628,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47804,6 +62660,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47825,6 +62692,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -47846,6 +62724,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -47867,6 +62756,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -47907,6 +62807,17 @@ "$ref": "#/components/schemas/QuickLinkResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -47928,6 +62839,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -47949,6 +62871,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -47970,6 +62903,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -47991,6 +62935,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -48012,6 +62967,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -48063,6 +63029,17 @@ "$ref": "#/components/schemas/HybridQuickLinkAvailabilityResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -48084,6 +63061,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -48105,6 +63093,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -48126,6 +63125,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -48147,6 +63157,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -48168,6 +63189,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -48209,6 +63241,17 @@ "$ref": "#/components/schemas/QuickLinkStatusResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -48230,6 +63273,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -48251,6 +63305,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -48272,6 +63337,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -48293,6 +63369,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -48314,6 +63401,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -48328,7 +63426,7 @@ "QuickLink" ], "summary": "Cancel a QuickLink", - "description": "**Required scope:** `quicklink:manage`\n\nCancels pending onboarding. Initial Number cleanup is accepted asynchronously and completes only after runtime teardown. A supplementary link cancels only its pending addition and preserves the Number. Accepted provider work must finish before cancellation.", + "description": "**Required scope:** `quicklink:manage`\n\nCancels pending onboarding. Initial Number cleanup is accepted asynchronously and completes only after runtime teardown. Supplementary and reauthorization links cancel only their pending attempts; the existing Number remains. Accepted provider work must finish before cancellation.", "security": [ { "BearerAuth": [] @@ -48369,6 +63467,17 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "202": { @@ -48394,6 +63503,17 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -48415,6 +63535,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -48436,6 +63567,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -48457,6 +63599,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -48478,6 +63631,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -48499,6 +63663,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -48507,6 +63682,258 @@ } } }, + "/messaging/{session}/cloud-credentials": { + "get": { + "operationId": "getCloudCredentialHealth", + "tags": [ + "Sessions" + ], + "summary": "Read Meta Cloud API credential health", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `sessions:read`\n\nReturns the latest recurring validation of the Number's Meta Cloud API credentials: token validity, required permissions, phone registration and webhook subscription.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "sessions:read", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "required": true, + "name": "session", + "in": "path" + } + ], + "responses": { + "200": { + "description": "Credential health", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloudCredentialHealthResponse" + } + } + } + }, + "400": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "401": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "403": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "404": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "409": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "500": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "503": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + } + }, + "x-mint": { + "content": "Meta Cloud API sessions:read" + }, + "x-protocols": [ + "Meta Cloud API" + ] + } + }, + "/messaging/{session}/cloud-credentials/reauthorize": { + "post": { + "operationId": "reauthorizeCloudCredentials", + "tags": [ + "Sessions" + ], + "summary": "Start guided Meta Cloud API reauthorization", + "description": "**Protocols:** Meta Cloud API\n\n**Required scope:** `quicklink:manage`\n\nRequires a project token with `quicklink:manage`. Creates a QuickLink with purpose `reauthorization` that renews the Number's Meta authorization through Embedded Signup. The link is bound to the same Number and phone number and always uses the Meta Cloud API. The Number must be stopped or disconnected; this request never stops it. Cancelling the link before Meta work starts keeps the Number.", + "security": [ + { + "BearerAuth": [] + } + ], + "x-required-scope": "quicklink:manage", + "parameters": [ + { + "schema": { + "type": "string", + "minLength": 1, + "maxLength": 128 + }, + "required": true, + "name": "session", + "in": "path" + } + ], + "responses": { + "201": { + "description": "Reauthorization link created", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CloudReauthorizationResponse" + } + } + } + }, + "400": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "401": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "402": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "403": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "404": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "409": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "500": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "501": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + }, + "503": { + "description": "Request failed", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/PublicError" + } + } + } + } + }, + "x-mint": { + "content": "Meta Cloud API quicklink:manage" + }, + "x-protocols": [ + "Meta Cloud API" + ] + } + }, "/quicklink/{token}/phone": { "post": { "operationId": "confirmQuickLinkPhone", @@ -50299,6 +65726,17 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -50320,6 +65758,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -50341,6 +65790,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -50362,6 +65822,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -50383,10 +65854,32 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { "description": "Direct session signup was retired; create a QuickLink first", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50425,6 +65918,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -50529,10 +66033,32 @@ ] } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { "description": "Invalid fixture", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50554,6 +66080,17 @@ }, "403": { "description": "Test access required", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50575,6 +66112,17 @@ }, "404": { "description": "Project not found", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50596,6 +66144,17 @@ }, "502": { "description": "Test runtime unavailable", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50655,10 +66214,32 @@ "$ref": "#/components/schemas/TestEventFixtureList" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { "description": "Test numbers access required, or a client token was used", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50680,6 +66261,17 @@ }, "404": { "description": "Project not found", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50701,6 +66293,17 @@ }, "502": { "description": "Test access could not be verified", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50780,10 +66383,32 @@ "$ref": "#/components/schemas/TriggerTestEventResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { "description": "Invalid fixture, override, or real session", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50805,6 +66430,17 @@ }, "403": { "description": "Test numbers access required, or a client token was used", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50826,6 +66462,17 @@ }, "404": { "description": "Project or Test number not found", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50847,6 +66494,17 @@ }, "429": { "description": "Test event rate limit reached", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { @@ -50868,6 +66526,17 @@ }, "502": { "description": "Test event delivery unavailable. Retry with the same Idempotency-Key to avoid a second event.", + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } + }, "content": { "application/json": { "schema": { diff --git a/contracts/openapi.platform.json b/contracts/openapi.platform.json index 2fa5cc12..d61c281b 100644 --- a/contracts/openapi.platform.json +++ b/contracts/openapi.platform.json @@ -3,7 +3,7 @@ "info": { "title": "Polymorfa Console & Management API", "version": "1.0.0", - "description": "Complete console/management surface. Resource-oriented REST: `{param}` path variables, single-word action sub-resources.\n\nNamespaces decide inclusion:\n- `/platform/…` — **public registry** (220 endpoints): each endpoint declares either a scoped `pmfa_` organization key or a verified live dashboard JWT, or dashboard-only authorization when a specific user's authority is required. Only implemented handlers are published to customers and SDKs.\n- `/console/…` — **console-only** (99 endpoints): verified dashboard identity. EXCLUDED from the published spec; reason per endpoint.\n\nThe published customer spec = this document filtered to `x-audience: public` endpoints with an implemented runtime handler.\nMost transitional body/response schemas remain loose (`additionalProperties: true`); session-control operations use explicit strict schemas." + "description": "Complete console/management surface. Resource-oriented REST: `{param}` path variables, single-word action sub-resources.\n\nNamespaces decide inclusion:\n- `/platform/…` — **public registry** (226 endpoints): each endpoint declares either a scoped `pmfa_` organization key or a verified live dashboard JWT, or dashboard-only authorization when a specific user's authority is required. Only implemented handlers are published to customers and SDKs.\n- `/console/…` — **console-only** (99 endpoints): verified dashboard identity. EXCLUDED from the published spec; reason per endpoint.\n\nThe published customer spec = this document filtered to `x-audience: public` endpoints with an implemented runtime handler.\nMost transitional body/response schemas remain loose (`additionalProperties: true`); session-control operations use explicit strict schemas." }, "servers": [ { @@ -15,6 +15,52 @@ } ], "paths": { + "/api/account/cloud-health": { + "get": { + "operationId": "getAccountCloudHealth", + "summary": "Read a Number's redacted Meta account health", + "tags": ["Account"], + "x-audience": "console", + "x-dashboard-only": true, + "x-excluded-reason": "Dashboard identity and live organization membership are required; the account projection is not an API-key operation.", + "security": [{"ConsoleSession": []}], + "parameters": [ + {"name": "projectId", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, + {"name": "session", "in": "query", "required": true, "schema": {"type": "string"}} + ], + "responses": { + "200": {"description": "Redacted account, connection, webhook and messaging evidence with a scan ID and observation time", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccountCloudHealthResponse"}}}}, + "400": {"description": "Invalid project or Number"}, + "401": {"description": "Missing or invalid dashboard JWT, or identity no longer active", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DashboardUnauthorizedError"}}}}, + "403": {"description": "Cloud onboarding is unavailable"}, + "404": {"description": "Active Cloud connection or health projection not found"}, + "503": {"description": "Health projection unavailable"} + } + } + }, + "/api/account/cloud-health/export": { + "get": { + "operationId": "exportAccountCloudHealth", + "summary": "Download a Number's redacted Meta account health", + "tags": ["Account"], + "x-audience": "console", + "x-dashboard-only": true, + "x-excluded-reason": "Dashboard identity and live organization membership are required; diagnostics are not an API-key operation.", + "security": [{"ConsoleSession": []}], + "parameters": [ + {"name": "projectId", "in": "query", "required": true, "schema": {"type": "string", "format": "uuid"}}, + {"name": "session", "in": "query", "required": true, "schema": {"type": "string"}} + ], + "responses": { + "200": {"description": "JSON attachment with the same redacted projection as the account read", "headers": {"Content-Disposition": {"description": "Attachment filename for the redacted JSON export", "schema": {"type": "string"}}}, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/AccountCloudHealthResponse"}}}}, + "400": {"description": "Invalid project or Number"}, + "401": {"description": "Missing or invalid dashboard JWT, or identity no longer active", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/DashboardUnauthorizedError"}}}}, + "403": {"description": "Cloud onboarding is unavailable"}, + "404": {"description": "Active Cloud connection or health projection not found"}, + "503": {"description": "Health projection unavailable"} + } + } + }, "/api/account/meta-app": { "get": { "operationId": "getTeamMetaApp", @@ -366,6 +412,15 @@ "type": "string", "example": "no-cache, no-transform" } + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -384,6 +439,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -394,6 +460,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -404,6 +481,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "406": { @@ -414,6 +502,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "410": { @@ -424,6 +523,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -434,6 +544,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -444,6 +565,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -506,6 +638,17 @@ "$ref": "#/components/schemas/PlatformAccessEventStreamAckResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -516,6 +659,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -526,6 +680,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -536,6 +701,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -546,6 +722,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -556,6 +743,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "429": { @@ -566,6 +764,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -576,6 +785,17 @@ "$ref": "#/components/schemas/PlatformAccessPublicError" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -624,6 +844,17 @@ "$ref": "#/components/schemas/PlatformAccessMintClientTokenResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -645,6 +876,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -666,6 +908,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -687,6 +940,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -708,6 +972,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -729,6 +1004,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -771,6 +1057,17 @@ "$ref": "#/components/schemas/PlatformAccessGetClientRulesResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -792,6 +1089,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -813,6 +1121,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -834,6 +1153,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -855,6 +1185,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -876,6 +1217,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -933,6 +1285,17 @@ "$ref": "#/components/schemas/PlatformAccessSuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -954,6 +1317,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -975,6 +1349,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -996,6 +1381,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1017,6 +1413,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1038,6 +1445,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1078,6 +1496,17 @@ "$ref": "#/components/schemas/PlatformAccessSuccessResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -1099,6 +1528,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -1120,6 +1560,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -1141,6 +1592,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1162,6 +1624,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1183,6 +1656,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1227,6 +1711,17 @@ "$ref": "#/components/schemas/PlatformAccessGetCallSettingsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -1248,6 +1743,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -1269,6 +1775,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -1290,6 +1807,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1311,6 +1839,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1332,6 +1871,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1385,6 +1935,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateCallSettingsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -1406,6 +1967,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -1427,6 +1999,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -1448,6 +2031,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1469,6 +2063,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -1490,6 +2095,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1511,6 +2127,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1543,6 +2170,17 @@ "$ref": "#/components/schemas/PlatformAccessGetCallRetentionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -1564,6 +2202,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -1585,6 +2234,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -1606,6 +2266,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1627,6 +2298,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1648,6 +2330,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1688,6 +2381,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateCallRetentionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -1709,6 +2413,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -1730,6 +2445,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -1751,6 +2477,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -1772,6 +2509,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -1793,6 +2541,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -1814,6 +2573,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -1976,6 +2746,15 @@ }, "required": false, "description": "Cursor for the next page. Absent on the last page." + }, + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" } }, "content": { @@ -2012,6 +2791,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2033,6 +2823,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2054,6 +2855,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2075,6 +2887,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2096,6 +2919,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2128,6 +2962,17 @@ "$ref": "#/components/schemas/PlatformAccessGetSipEndpointResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2149,6 +2994,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2170,6 +3026,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2191,6 +3058,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2212,6 +3090,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2233,6 +3122,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2277,6 +3177,17 @@ "$ref": "#/components/schemas/PlatformAccessListSipTrunksResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2298,6 +3209,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2319,6 +3241,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2340,6 +3273,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2361,6 +3305,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2382,6 +3337,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2422,6 +3388,17 @@ "$ref": "#/components/schemas/PlatformAccessCreateSipTrunkResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2443,6 +3420,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2464,6 +3452,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2485,6 +3484,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2506,6 +3516,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -2527,6 +3548,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-trunk-limit" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2548,6 +3580,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -2569,6 +3612,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2611,6 +3665,17 @@ "$ref": "#/components/schemas/PlatformAccessGetSipTrunkResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2632,6 +3697,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2653,6 +3729,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2674,6 +3761,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2695,6 +3793,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2716,6 +3825,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2768,6 +3888,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateSipTrunkResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2789,6 +3920,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2810,6 +3952,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -2831,6 +3984,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -2852,6 +4016,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -2873,6 +4048,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-trunk-revision-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -2894,6 +4080,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -2915,6 +4112,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -2956,6 +4164,17 @@ "$ref": "#/components/schemas/PlatformAccessDeleteSipTrunkResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -2977,6 +4196,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -2998,6 +4228,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3019,6 +4260,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3040,6 +4292,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -3061,6 +4324,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-trunk-in-use" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3082,6 +4356,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3125,6 +4410,17 @@ "$ref": "#/components/schemas/PlatformAccessRotateSipTrunkCredentialsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3146,6 +4442,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -3167,6 +4474,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3188,6 +4506,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3209,6 +4538,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -3230,6 +4570,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3251,6 +4602,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -3272,6 +4634,17 @@ "docs": "https://docs.polymorfa.com/api/errors#sip-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3304,6 +4677,17 @@ "$ref": "#/components/schemas/PlatformAccessGetCallPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3325,6 +4709,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -3346,6 +4741,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3367,6 +4773,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3388,6 +4805,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3409,6 +4837,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3449,6 +4888,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateCallPolicyResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3470,6 +4920,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -3491,6 +4952,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3512,6 +4984,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3533,6 +5016,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -3554,6 +5048,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3575,6 +5080,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3651,6 +5167,17 @@ "$ref": "#/components/schemas/PlatformAccessListCallOptOutsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3672,6 +5199,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -3693,6 +5231,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3714,6 +5263,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3735,6 +5295,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3756,6 +5327,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3796,6 +5378,17 @@ "$ref": "#/components/schemas/PlatformAccessExistingCallOptOutResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "201": { @@ -3806,6 +5399,17 @@ "$ref": "#/components/schemas/PlatformAccessCreateCallOptOutResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3827,6 +5431,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -3848,6 +5463,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -3869,6 +5495,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -3890,6 +5527,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -3911,6 +5559,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-opt-out-limit" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -3932,6 +5591,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -3974,6 +5644,17 @@ "$ref": "#/components/schemas/PlatformAccessImportCallOptOutsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -3995,6 +5676,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4016,6 +5708,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4037,6 +5740,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4058,6 +5772,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -4079,6 +5804,17 @@ "docs": "https://docs.polymorfa.com/api/errors#call-opt-out-limit" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -4100,6 +5836,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -4143,6 +5890,17 @@ "$ref": "#/components/schemas/PlatformAccessDeleteCallOptOutResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -4164,6 +5922,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4185,6 +5954,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4206,6 +5986,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4227,6 +6018,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -4248,6 +6050,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -4321,6 +6134,17 @@ "$ref": "#/components/schemas/PlatformAccessListVoiceAudioResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -4342,6 +6166,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4363,6 +6198,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4384,6 +6230,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4405,6 +6262,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -4426,6 +6294,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -4466,6 +6345,17 @@ "$ref": "#/components/schemas/PlatformAccessCreateVoiceAudioUploadResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -4487,6 +6377,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4508,6 +6409,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -4529,6 +6441,17 @@ "docs": "https://docs.polymorfa.com/api/errors#gate-limit-reached" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4550,6 +6473,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4571,6 +6505,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -4592,6 +6537,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -4613,6 +6569,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -4634,6 +6601,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -4676,6 +6654,17 @@ "$ref": "#/components/schemas/PlatformAccessSynthesizeVoiceAudioResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -4697,6 +6686,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4718,6 +6718,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -4739,6 +6750,17 @@ "docs": "https://docs.polymorfa.com/api/errors#gate-limit-reached" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4760,6 +6782,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4781,6 +6814,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -4802,6 +6846,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "422": { @@ -4823,6 +6878,17 @@ "docs": "https://docs.polymorfa.com/api/errors#provider-credential-invalid" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -4844,6 +6910,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -4865,6 +6942,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -4908,6 +6996,17 @@ "$ref": "#/components/schemas/PlatformAccessCompleteVoiceAudioUploadResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -4929,6 +7028,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -4950,6 +7060,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -4971,6 +7092,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -4992,6 +7124,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -5013,6 +7156,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5034,6 +7188,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -5055,6 +7220,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5097,6 +7273,17 @@ "$ref": "#/components/schemas/PlatformAccessGetVoiceAudioResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5118,6 +7305,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5139,6 +7337,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -5160,6 +7369,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -5181,6 +7401,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5202,6 +7433,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5254,6 +7496,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateVoiceAudioResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5275,6 +7528,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5296,6 +7560,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -5317,6 +7592,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -5338,6 +7624,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -5359,6 +7656,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-asset-revision-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5380,6 +7688,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5421,6 +7740,17 @@ "$ref": "#/components/schemas/PlatformAccessDeleteVoiceAudioResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5442,6 +7772,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5463,6 +7804,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -5484,6 +7836,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -5505,6 +7868,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -5526,6 +7900,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-asset-in-use" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5547,6 +7932,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5590,6 +7986,17 @@ "$ref": "#/components/schemas/PlatformAccessGetVoiceAudioPreviewResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5611,6 +8018,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5632,6 +8050,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -5653,6 +8082,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -5674,6 +8114,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -5695,6 +8146,17 @@ "docs": "https://docs.polymorfa.com/api/errors#asset-not-ready" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5716,6 +8178,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -5737,6 +8210,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5781,6 +8265,17 @@ "$ref": "#/components/schemas/PlatformAccessListVoiceProviderCredentialsResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5802,6 +8297,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5823,6 +8329,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -5844,6 +8361,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -5865,6 +8393,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -5886,6 +8425,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -5926,6 +8476,17 @@ "$ref": "#/components/schemas/PlatformAccessCreateVoiceProviderCredentialResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -5947,6 +8508,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -5968,6 +8540,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "402": { @@ -5989,6 +8572,17 @@ "docs": "https://docs.polymorfa.com/api/errors#gate-limit-reached" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6010,6 +8604,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6031,6 +8636,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -6052,6 +8668,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "422": { @@ -6073,6 +8700,17 @@ "docs": "https://docs.polymorfa.com/api/errors#provider-credential-invalid" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6094,6 +8732,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -6115,6 +8764,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -6157,6 +8817,17 @@ "$ref": "#/components/schemas/PlatformAccessGetVoiceProviderCredentialResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -6178,6 +8849,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -6199,6 +8881,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6220,6 +8913,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6241,6 +8945,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6262,6 +8977,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -6304,6 +9030,17 @@ "$ref": "#/components/schemas/PlatformAccessDeleteVoiceProviderCredentialResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -6325,6 +9062,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -6346,6 +9094,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6367,6 +9126,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6388,6 +9158,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6409,6 +9190,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -6452,6 +9244,17 @@ "$ref": "#/components/schemas/PlatformAccessVerifyVoiceProviderCredentialResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -6473,6 +9276,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -6494,6 +9308,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6515,6 +9340,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-not-enabled" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6536,6 +9372,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6557,6 +9404,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -6578,6 +9436,17 @@ "docs": "https://docs.polymorfa.com/api/errors#voice-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -6619,6 +9488,17 @@ "$ref": "#/components/schemas/PlatformAccessGetSessionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -6640,6 +9520,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -6661,6 +9552,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6682,6 +9584,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6703,6 +9616,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6724,6 +9648,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -6773,6 +9708,17 @@ "$ref": "#/components/schemas/PlatformAccessUpdateSessionResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -6794,6 +9740,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -6815,6 +9772,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -6836,6 +9804,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -6857,6 +9836,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "409": { @@ -6878,6 +9868,17 @@ "docs": "https://docs.polymorfa.com/api/errors#state-conflict" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -6899,6 +9900,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "503": { @@ -6920,6 +9932,17 @@ "docs": "https://docs.polymorfa.com/api/errors#service-unavailable" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7131,6 +10154,17 @@ "$ref": "#/components/schemas/PlatformAccessOperationAccepted" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7152,6 +10186,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7173,6 +10218,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7194,6 +10250,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7215,6 +10282,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7236,6 +10314,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7278,6 +10367,17 @@ "$ref": "#/components/schemas/PlatformAccessOperationAccepted" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7299,6 +10399,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7320,6 +10431,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7341,6 +10463,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7362,6 +10495,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7383,6 +10527,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7425,6 +10580,17 @@ "$ref": "#/components/schemas/PlatformAccessGetSessionAccountResponse" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7446,6 +10612,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7467,6 +10644,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7488,6 +10676,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7509,6 +10708,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7530,6 +10740,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7572,6 +10793,17 @@ "$ref": "#/components/schemas/PlatformAccessHandoffKeysSuccess" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7593,6 +10825,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7614,6 +10857,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7635,6 +10889,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7656,6 +10921,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7677,6 +10953,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7728,6 +11015,17 @@ "$ref": "#/components/schemas/PlatformAccessHandoffImportSuccess" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7749,6 +11047,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7770,6 +11079,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7791,6 +11111,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7812,6 +11143,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7833,6 +11175,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -7884,6 +11237,17 @@ "$ref": "#/components/schemas/PlatformAccessUploadAppStateKeysSuccess" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -7905,6 +11269,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -7926,6 +11301,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -7947,6 +11333,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -7968,6 +11365,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -7989,6 +11397,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -8040,6 +11459,17 @@ "$ref": "#/components/schemas/PlatformAccessHandoffAckSuccess" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "400": { @@ -8061,6 +11491,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-parameter" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "401": { @@ -8082,6 +11523,17 @@ "docs": "https://docs.polymorfa.com/api/errors#invalid-credential" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "403": { @@ -8103,6 +11555,17 @@ "docs": "https://docs.polymorfa.com/api/errors#permission-denied" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "404": { @@ -8124,6 +11587,17 @@ "docs": "https://docs.polymorfa.com/api/errors#resource-not-found" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } }, "500": { @@ -8145,6 +11619,17 @@ "docs": "https://docs.polymorfa.com/api/errors#internal-error" } } + }, + "headers": { + "X-RateLimit-Limit": { + "$ref": "#/components/headers/X-RateLimit-Limit" + }, + "X-RateLimit-Remaining": { + "$ref": "#/components/headers/X-RateLimit-Remaining" + }, + "X-RateLimit-Reset": { + "$ref": "#/components/headers/X-RateLimit-Reset" + } } } }, @@ -15740,8 +19225,8 @@ "tags": [ "campaigns" ], - "summary": "List platform campaigns", - "description": "Public Management API. Requires `campaigns:read`. Project tokens only access resources in their own project.", + "summary": "List campaigns", + "description": "Lists campaigns in the selected project, including each campaign's stored send window and delivery counts.\n\nRequires `campaigns:read`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -15792,19 +19277,34 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataEnvelope" + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PlatformCampaign" + } + } + }, + "required": [ + "data" + ] } } } }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, - "501": { - "$ref": "#/components/responses/NotImplemented" + "404": { + "$ref": "#/components/responses/NotFound" } } }, @@ -15861,8 +19361,7 @@ "additionalProperties": false, "properties": { "data": { - "type": "object", - "additionalProperties": true + "$ref": "#/components/schemas/PlatformCampaign" } }, "required": [ @@ -15894,7 +19393,7 @@ "campaigns" ], "summary": "Get campaign", - "description": "Public Management API. Requires `campaigns:read`. Project tokens only access resources in their own project.", + "description": "Returns one campaign and its stored send window, or null when no matching campaign exists in the selected project.\n\nRequires `campaigns:read`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -15946,19 +19445,36 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataEnvelope" + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/PlatformCampaign" + } + ] + } + }, + "required": [ + "data" + ] } } } }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, - "501": { - "$ref": "#/components/responses/NotImplemented" + "404": { + "$ref": "#/components/responses/NotFound" } } }, @@ -15968,7 +19484,7 @@ "campaigns" ], "summary": "Update campaign", - "description": "Updates a campaign. On an unlaunched draft, a new `senderConfig` passes the same checks as create and plans are checked at launch. Once the campaign has launched, including a scheduled launch that has not started, a new `senderConfig` passes the launch checks and can answer `402 campaigns_not_entitled` or `400 invalid_parameter`. `recipientListId` points the campaign at another audience while it is still an unlaunched draft and replaces its existing recipients; after launch it answers `409`. A sender edit to a draft that launches while the edit is being saved also answers `409`. A changed `scheduledAt` after launch answers `409`; use reschedule to move a scheduled start. A non-null `scheduledAt` must be integer Unix milliseconds from zero through the JavaScript Date maximum.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "description": "Updates a campaign. On an unlaunched draft, a new `senderConfig` passes the same checks as create and plans are checked at launch. Once the campaign has launched, including a scheduled launch that has not started, a new `senderConfig` passes the launch checks and can answer `402 campaigns_not_entitled` or `400 invalid_parameter`. `recipientListId` points the campaign at another audience while it is still an unlaunched draft and replaces its existing recipients; after launch it answers `409`. A sender edit to a draft that launches while the edit is being saved also answers `409`. A changed `scheduledAt` after launch answers `409`; use reschedule to move a scheduled start. A non-null `scheduledAt` must be integer Unix milliseconds from zero through the JavaScript Date maximum. `sendWindow` changes only while the campaign is a draft or paused; a running campaign answers `409`, so pause it first. An edit to a paused campaign also answers `409` while sends are in progress; retry after they settle. A stalled send that has not reached the provider can be recovered on a later edit attempt. If delivery may have started, the edit waits for a definite result rather than sending the recipient again. A new window applies to the remaining recipients when the campaign resumes.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16000,6 +19516,213 @@ } } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/UpdatePlatformCampaignRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/PlatformCampaign" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "402": { + "$ref": "#/components/responses/PaymentRequired" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/CampaignEligibilityUnavailable" + } + } + }, + "delete": { + "operationId": "deleteCampaign", + "tags": [ + "campaigns" + ], + "summary": "Delete campaign", + "description": "Deletes a draft, completed, failed, cancelled or archived campaign. Any other campaign is refused with `409`; stop it first. A completed or failed campaign with a final event pending delivery or an active delivery run is also refused with `409`; retry after both finish.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "campaigns:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "campaignId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "projectId", + "in": "query", + "required": false, + "description": "Project the campaign belongs to. Required with a team API key; a project token is bound to its own project and omits it.", + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "type": "object", + "additionalProperties": false, + "required": [ + "removed" + ], + "properties": { + "removed": { + "type": "boolean", + "enum": [ + true + ] + } + } + } + }, + "required": [ + "data" + ] + } + } + } + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + } + } + } + }, + "/platform/campaigns/{campaignId}/launch": { + "post": { + "operationId": "launchPlatformCampaign", + "tags": [ + "campaigns" + ], + "summary": "Launch campaign", + "description": "Starts a draft campaign. It begins sending at `scheduledAt`, or right away when no start time is set. Launch checks the stored sender selection against live plans: `402 campaigns_not_entitled` when a selected number is missing or its plan does not include Campaigns, or when an unselected campaign's project has no such number; `400 invalid_parameter` on `senderConfig.sessionIds` when a selected number is not connected or the selection mixes sending types; `400 campaign_throughput_capped` when a requested throughput is above its ceiling. `409` means the campaign is not a draft, is already launched and waiting for its start time, or its sending numbers changed during the launch.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "campaigns:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "campaignId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "Idempotency-Key", + "in": "header", + "required": false, + "description": "Optional unique key, 1 to 255 bytes, that makes this request safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version` and request never runs it again: it returns `409 idempotency_completed` when the original succeeded, or the original server error. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", + "schema": { + "type": "string", + "minLength": 1, + "maxLength": 255 + } + } + ], "requestBody": { "required": false, "content": { @@ -16036,7 +19759,36 @@ "properties": { "data": { "type": "object", - "additionalProperties": true + "additionalProperties": true, + "required": [ + "id", + "status", + "operationId" + ], + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "running", + "paused", + "cancelling", + "cancelled", + "completed", + "failed", + "archived" + ] + }, + "operationId": { + "type": "string", + "format": "uuid", + "description": "The operation that carries this lifecycle action." + } + } } }, "required": [ @@ -16068,14 +19820,16 @@ "$ref": "#/components/responses/CampaignEligibilityUnavailable" } } - }, - "delete": { - "operationId": "deleteCampaign", + } + }, + "/platform/campaigns/{campaignId}/pause": { + "post": { + "operationId": "pausePlatformCampaign", "tags": [ "campaigns" ], - "summary": "Delete campaign", - "description": "Deletes a draft, completed, failed, cancelled or archived campaign. Any other campaign is refused with `409`; stop it first. A completed or failed campaign with a final event pending delivery or an active delivery run is also refused with `409`; retry after both finish.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Pause campaign", + "description": "Pauses a running campaign. Sends already in progress can still finish. `409` means the campaign is not running or has no active delivery run to pause.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16098,15 +19852,28 @@ } }, { - "name": "projectId", - "in": "query", + "name": "Idempotency-Key", + "in": "header", "required": false, - "description": "Project the campaign belongs to. Required with a team API key; a project token is bound to its own project and omits it.", + "description": "Optional unique key, 1 to 255 bytes, that makes this request safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version` and request never runs it again: it returns `409 idempotency_completed` when the original succeeded, or the original server error. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", "schema": { - "type": "string" + "type": "string", + "minLength": 1, + "maxLength": 255 } } ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + }, "responses": { "200": { "description": "Success", @@ -16132,16 +19899,34 @@ "properties": { "data": { "type": "object", - "additionalProperties": false, + "additionalProperties": true, "required": [ - "removed" + "id", + "status", + "operationId" ], "properties": { - "removed": { - "type": "boolean", + "id": { + "type": "string", + "format": "uuid" + }, + "status": { + "type": "string", "enum": [ - true + "draft", + "running", + "paused", + "cancelling", + "cancelled", + "completed", + "failed", + "archived" ] + }, + "operationId": { + "type": "string", + "format": "uuid", + "description": "The operation that carries this lifecycle action." } } } @@ -16168,14 +19953,14 @@ } } }, - "/platform/campaigns/{campaignId}/launch": { + "/platform/campaigns/{campaignId}/resume": { "post": { - "operationId": "launchPlatformCampaign", + "operationId": "resumePlatformCampaign", "tags": [ "campaigns" ], - "summary": "Launch campaign", - "description": "Starts a draft campaign. It begins sending at `scheduledAt`, or right away when no start time is set. Launch checks the stored sender selection against live plans: `402 campaigns_not_entitled` when a selected number is missing or its plan does not include Campaigns, or when an unselected campaign's project has no such number; `400 invalid_parameter` on `senderConfig.sessionIds` when a selected number is not connected or the selection mixes sending types; `400 campaign_throughput_capped` when a requested throughput is above its ceiling. `409` means the campaign is not a draft, is already launched and waiting for its start time, or its sending numbers changed during the launch.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Resume campaign", + "description": "Resumes a paused campaign. Its remaining recipients are sent after the same checks as before the pause. `409` means the campaign is not paused or has no active delivery run to resume.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16284,15 +20069,9 @@ } } }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, "401": { "$ref": "#/components/responses/Unauthorized" }, - "402": { - "$ref": "#/components/responses/PaymentRequired" - }, "403": { "$ref": "#/components/responses/Forbidden" }, @@ -16301,21 +20080,18 @@ }, "409": { "$ref": "#/components/responses/Conflict" - }, - "503": { - "$ref": "#/components/responses/CampaignEligibilityUnavailable" } } } }, - "/platform/campaigns/{campaignId}/pause": { + "/platform/campaigns/{campaignId}/stop": { "post": { - "operationId": "pausePlatformCampaign", + "operationId": "stopPlatformCampaign", "tags": [ "campaigns" ], - "summary": "Pause campaign", - "description": "Pauses a running campaign. Sends already in progress can still finish. `409` means the campaign is not running or has no active delivery run to pause.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Stop campaign", + "description": "Cancels a draft, running or paused campaign. Recipients not yet sent are not sent. The campaign moves to `cancelling` and then to `cancelled` once sends already in progress finish; a campaign with no active delivery run is `cancelled` immediately and `operationId` is null. `409` means the campaign is already finished or cancelled.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16412,7 +20188,8 @@ "operationId": { "type": "string", "format": "uuid", - "description": "The operation that carries this lifecycle action." + "nullable": true, + "description": "The operation that stops the campaign. Null when the campaign had no active delivery run and was cancelled immediately." } } } @@ -16439,14 +20216,14 @@ } } }, - "/platform/campaigns/{campaignId}/resume": { + "/platform/campaigns/{campaignId}/reschedule": { "post": { - "operationId": "resumePlatformCampaign", + "operationId": "reschedulePlatformCampaign", "tags": [ "campaigns" ], - "summary": "Resume campaign", - "description": "Resumes a paused campaign. Its remaining recipients are sent after the same checks as before the pause. `409` means the campaign is not paused or has no active delivery run to resume.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Reschedule campaign", + "description": "Moves the start of a launched campaign that is still waiting for it. Set `scheduledAt` to a later or earlier time, or to `null` to start now. The response returns the campaign with its new `scheduledAt`; sending the current start time again changes nothing. A suspended team is refused with `403 bansafe_org_suspended`. `409` means the campaign has already started, is finished or being stopped, or was never launched; launch a draft with `scheduledAt` instead.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16481,12 +20258,11 @@ } ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": true + "$ref": "#/components/schemas/ReschedulePlatformCampaignRequest" } } } @@ -16555,6 +20331,9 @@ } } }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, "401": { "$ref": "#/components/responses/Unauthorized" }, @@ -16570,14 +20349,14 @@ } } }, - "/platform/campaigns/{campaignId}/stop": { + "/platform/campaigns/{campaignId}/archive": { "post": { - "operationId": "stopPlatformCampaign", + "operationId": "archiveCampaign", "tags": [ "campaigns" ], - "summary": "Stop campaign", - "description": "Cancels a draft, running or paused campaign. Recipients not yet sent are not sent. The campaign moves to `cancelling` and then to `cancelled` once sends already in progress finish; a campaign with no active delivery run is `cancelled` immediately and `operationId` is null. `409` means the campaign is already finished or cancelled.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Archive campaign", + "description": "Archives a completed, failed or cancelled campaign. Other states return `409`. A final event pending delivery or an active delivery run also returns `409`; retry after both finish.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16598,17 +20377,6 @@ "schema": { "type": "string" } - }, - { - "name": "Idempotency-Key", - "in": "header", - "required": false, - "description": "Optional unique key, 1 to 255 bytes, that makes this request safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version` and request never runs it again: it returns `409 idempotency_completed` when the original succeeded, or the original server error. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", - "schema": { - "type": "string", - "minLength": 1, - "maxLength": 255 - } } ], "requestBody": { @@ -16647,37 +20415,7 @@ "properties": { "data": { "type": "object", - "additionalProperties": true, - "required": [ - "id", - "status", - "operationId" - ], - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "status": { - "type": "string", - "enum": [ - "draft", - "running", - "paused", - "cancelling", - "cancelled", - "completed", - "failed", - "archived" - ] - }, - "operationId": { - "type": "string", - "format": "uuid", - "nullable": true, - "description": "The operation that stops the campaign. Null when the campaign had no active delivery run and was cancelled immediately." - } - } + "additionalProperties": true } }, "required": [ @@ -16702,14 +20440,14 @@ } } }, - "/platform/campaigns/{campaignId}/reschedule": { + "/platform/campaigns/{campaignId}/duplicate": { "post": { - "operationId": "reschedulePlatformCampaign", + "operationId": "duplicateCampaign", "tags": [ "campaigns" ], - "summary": "Reschedule campaign", - "description": "Moves the start of a launched campaign that is still waiting for it. Set `scheduledAt` to a later or earlier time, or to `null` to start now. The response returns the campaign with its new `scheduledAt`; sending the current start time again changes nothing. A suspended team is refused with `403 bansafe_org_suspended`. `409` means the campaign has already started, is finished or being stopped, or was never launched; launch a draft with `scheduledAt` instead.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Duplicate campaign", + "description": "Public Management API. Requires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -16730,25 +20468,15 @@ "schema": { "type": "string" } - }, - { - "name": "Idempotency-Key", - "in": "header", - "required": false, - "description": "Optional unique key, 1 to 255 bytes, that makes this request safe to retry for 24 hours. A retry with the same key, credential, `Polymorfa-Version` and request never runs it again: it returns `409 idempotency_completed` when the original succeeded, or the original server error. Reusing the key for a different request returns `409 idempotency_conflict`; a retry while the original is still running returns `409 idempotency_in_progress`, and a retry after an unrecorded outcome returns `409 idempotency_outcome_unknown`.", - "schema": { - "type": "string", - "minLength": 1, - "maxLength": 255 - } } ], "requestBody": { - "required": true, + "required": false, "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ReschedulePlatformCampaignRequest" + "type": "object", + "additionalProperties": true } } } @@ -16773,245 +20501,31 @@ "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": false, - "properties": { - "data": { - "type": "object", - "additionalProperties": true, - "required": [ - "id", - "status", - "operationId" - ], - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "status": { - "type": "string", - "enum": [ - "draft", - "running", - "paused", - "cancelling", - "cancelled", - "completed", - "failed", - "archived" - ] - }, - "operationId": { - "type": "string", - "format": "uuid", - "description": "The operation that carries this lifecycle action." - } - } - } - }, - "required": [ - "data" - ] + "$ref": "#/components/schemas/DataEnvelope" } } } }, - "400": { - "$ref": "#/components/responses/BadRequest" - }, "401": { "$ref": "#/components/responses/Unauthorized" }, "403": { "$ref": "#/components/responses/Forbidden" }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" + "501": { + "$ref": "#/components/responses/NotImplemented" } } } }, - "/platform/campaigns/{campaignId}/archive": { + "/platform/campaigns/{campaignId}/requeue": { "post": { - "operationId": "archiveCampaign", + "operationId": "requeueFailedCampaign", "tags": [ "campaigns" ], - "summary": "Archive campaign", - "description": "Archives a completed, failed or cancelled campaign. Other states return `409`. A final event pending delivery or an active delivery run also returns `409`; retry after both finish.\n\nRequires `campaigns:manage`. Project tokens only access resources in their own project.", - "x-audience": "public", - "x-polymorfa-resource-boundary": "project", - "x-excluded-from-public": false, - "x-required-scope": "campaigns:manage", - "security": [ - { - "ApiKeyAuth": [] - }, - { - "ConsoleSession": [] - } - ], - "parameters": [ - { - "name": "campaignId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": true - } - } - } - }, - "responses": { - "200": { - "description": "Success", - "headers": { - "X-Request-Id": { - "schema": { - "type": "string" - }, - "description": "Stable request correlation identifier." - }, - "Polymorfa-Version": { - "schema": { - "type": "string" - }, - "description": "API version applied to this response." - } - }, - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": false, - "properties": { - "data": { - "type": "object", - "additionalProperties": true - } - }, - "required": [ - "data" - ] - } - } - } - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "403": { - "$ref": "#/components/responses/Forbidden" - }, - "404": { - "$ref": "#/components/responses/NotFound" - }, - "409": { - "$ref": "#/components/responses/Conflict" - } - } - } - }, - "/platform/campaigns/{campaignId}/duplicate": { - "post": { - "operationId": "duplicateCampaign", - "tags": [ - "campaigns" - ], - "summary": "Duplicate campaign", - "description": "Public Management API. Requires `campaigns:manage`. Project tokens only access resources in their own project.", - "x-audience": "public", - "x-polymorfa-resource-boundary": "project", - "x-excluded-from-public": false, - "x-required-scope": "campaigns:manage", - "security": [ - { - "ApiKeyAuth": [] - }, - { - "ConsoleSession": [] - } - ], - "parameters": [ - { - "name": "campaignId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "required": false, - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": true - } - } - } - }, - "responses": { - "200": { - "description": "Success", - "headers": { - "X-Request-Id": { - "schema": { - "type": "string" - }, - "description": "Stable request correlation identifier." - }, - "Polymorfa-Version": { - "schema": { - "type": "string" - }, - "description": "API version applied to this response." - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataEnvelope" - } - } - } - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "403": { - "$ref": "#/components/responses/Forbidden" - }, - "501": { - "$ref": "#/components/responses/NotImplemented" - } - } - } - }, - "/platform/campaigns/{campaignId}/requeue": { - "post": { - "operationId": "requeueFailedCampaign", - "tags": [ - "campaigns" - ], - "summary": "Requeue failed campaign", - "description": "Public Management API. Requires `campaigns:manage`. Project tokens only access resources in their own project.", + "summary": "Requeue failed campaign", + "description": "Public Management API. Requires `campaigns:manage`. Project tokens only access resources in their own project.", "x-audience": "public", "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, @@ -18990,18 +22504,18 @@ } } }, - "/platform/optouts": { - "get": { - "operationId": "listOptOuts", + "/platform/flows/{flowId}/upload": { + "post": { + "operationId": "uploadFlow", "tags": [ - "optouts" + "flows" ], - "summary": "List opt outs", - "description": "Public Management API. Requires a team API key with `campaigns:read`. Project tokens are not accepted.", + "summary": "Upload a Flow to a Number", + "description": "Sends the saved Flow draft to the WhatsApp Business Account of one Number. The first upload to a Number, or the first upload after the Number's Flow was deprecated, creates a WhatsApp Flow and needs `categories`; later uploads replace the JSON of that Flow while it is still a WhatsApp draft. The response lists the validation errors WhatsApp reported, and `uploadState` is `valid` only when there are none. The Number needs an active WhatsApp Business Platform connection and the Cloud onboarding beta; test Numbers use the simulation. Flows with a data endpoint are refused. A supplied `requestId` makes retries return the original operation instead of sending again.\n\nRequires `sessions:manage`. Project tokens only access resources in their own project.", "x-audience": "public", - "x-polymorfa-resource-boundary": "organization", + "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, - "x-required-scope": "campaigns:read", + "x-required-scope": "sessions:manage", "security": [ { "ApiKeyAuth": [] @@ -19010,68 +22524,22 @@ "ConsoleSession": [] } ], - "responses": { - "200": { - "description": "Success", - "headers": { - "X-Request-Id": { - "schema": { - "type": "string" - }, - "description": "Stable request correlation identifier." - }, - "Polymorfa-Version": { - "schema": { - "type": "string" - }, - "description": "API version applied to this response." - } - }, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DataEnvelope" - } - } - } - }, - "401": { - "$ref": "#/components/responses/Unauthorized" - }, - "403": { - "$ref": "#/components/responses/Forbidden" - }, - "501": { - "$ref": "#/components/responses/NotImplemented" - } - } - }, - "post": { - "operationId": "createOptOut", - "tags": [ - "optouts" - ], - "summary": "Create opt out", - "description": "Public Management API. Requires a team API key with `campaigns:manage`. Project tokens are not accepted.", - "x-audience": "public", - "x-polymorfa-resource-boundary": "organization", - "x-excluded-from-public": false, - "x-required-scope": "campaigns:manage", - "security": [ - { - "ApiKeyAuth": [] - }, + "parameters": [ { - "ConsoleSession": [] + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } } ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": true + "$ref": "#/components/schemas/FlowProviderRequest" } } } @@ -19096,35 +22564,56 @@ "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/DataEnvelope" + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/FlowProviderResult" + } + }, + "required": [ + "data" + ] } } } }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, "401": { "$ref": "#/components/responses/Unauthorized" }, + "402": { + "$ref": "#/components/responses/PaymentRequired" + }, "403": { "$ref": "#/components/responses/Forbidden" }, - "501": { - "$ref": "#/components/responses/NotImplemented" + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/PropagationPending" } } } }, - "/platform/optouts/batch": { + "/platform/flows/{flowId}/publish": { "post": { - "operationId": "createOptOuts", + "operationId": "publishFlow", "tags": [ - "optouts" + "flows" ], - "summary": "Create opt outs", - "description": "Public Management API. Requires a team API key with `campaigns:manage`. Project tokens are not accepted.", + "summary": "Publish a Flow on a Number", + "description": "Publishes the Number's WhatsApp Flow. The last upload must match the saved draft and have no validation errors. A published Flow cannot be changed or deleted; it can only be deprecated. The Flow counts as published only after WhatsApp confirms it: when the response is lost, the operation state is `uncertain` until a provider read settles it, and publishing is never sent twice.\n\nRequires `sessions:manage`. Project tokens only access resources in their own project.", "x-audience": "public", - "x-polymorfa-resource-boundary": "organization", + "x-polymorfa-resource-boundary": "project", "x-excluded-from-public": false, - "x-required-scope": "campaigns:manage", + "x-required-scope": "sessions:manage", "security": [ { "ApiKeyAuth": [] @@ -19133,13 +22622,610 @@ "ConsoleSession": [] } ], + "parameters": [ + { + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], "requestBody": { - "required": false, + "required": true, "content": { "application/json": { "schema": { - "type": "object", - "additionalProperties": true + "$ref": "#/components/schemas/FlowProviderRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/FlowProviderResult" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "402": { + "$ref": "#/components/responses/PaymentRequired" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/PropagationPending" + } + } + } + }, + "/platform/flows/{flowId}/deprecate": { + "post": { + "operationId": "deprecateFlow", + "tags": [ + "flows" + ], + "summary": "Deprecate a Flow on a Number", + "description": "Deprecates the Number's published WhatsApp Flow so it can no longer be sent. Deprecation cannot be undone; upload the draft again to create a new WhatsApp Flow. It remains available while the team's service is restricted.\n\nRequires `sessions:manage`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "sessions:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlowProviderRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/FlowProviderResult" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/PropagationPending" + } + } + } + }, + "/platform/flows/{flowId}/discard": { + "post": { + "operationId": "discardFlow", + "tags": [ + "flows" + ], + "summary": "Delete a Flow from a Number", + "description": "Deletes the Number's WhatsApp Flow while it is still a WhatsApp draft and removes the Number's link. The saved Polymorfa draft is kept. A Flow that was published cannot be deleted; deprecate it instead.\n\nRequires `sessions:manage`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "sessions:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlowProviderRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/FlowProviderResult" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/PropagationPending" + } + } + } + }, + "/platform/flows/{flowId}/sync": { + "post": { + "operationId": "syncFlow", + "tags": [ + "flows" + ], + "summary": "Sync a Flow's status from a Number", + "description": "Reads the Number's WhatsApp Flow status, validation errors and preview link, and settles an earlier operation whose outcome was unknown. It never repeats a change.\n\nRequires `sessions:manage`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "sessions:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/FlowProviderRequest" + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "$ref": "#/components/schemas/FlowProviderResult" + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, + "409": { + "$ref": "#/components/responses/Conflict" + }, + "503": { + "$ref": "#/components/responses/PropagationPending" + } + } + } + }, + "/platform/flows/{flowId}/receipts": { + "get": { + "operationId": "listFlowOperations", + "tags": [ + "flows" + ], + "summary": "List a Flow's provider operations", + "description": "Lists up to 50 recent upload, publish, deprecate and delete operations for a Flow draft across Numbers, newest first.\n\nRequires `sessions:read`. Project tokens only access resources in their own project.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "project", + "x-excluded-from-public": false, + "x-required-scope": "sessions:read", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "parameters": [ + { + "name": "flowId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "projectId", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": false, + "properties": { + "data": { + "type": "array", + "maxItems": 50, + "items": { + "$ref": "#/components/schemas/FlowProviderOperation" + } + } + }, + "required": [ + "data" + ] + } + } + } + }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "404": { + "$ref": "#/components/responses/NotFound" + } + } + } + }, + "/platform/optouts": { + "get": { + "operationId": "listOptOuts", + "tags": [ + "optouts" + ], + "summary": "List opt outs", + "description": "Public Management API. Requires a team API key with `campaigns:read`. Project tokens are not accepted.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "organization", + "x-excluded-from-public": false, + "x-required-scope": "campaigns:read", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataEnvelope" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "501": { + "$ref": "#/components/responses/NotImplemented" + } + } + }, + "post": { + "operationId": "createOptOut", + "tags": [ + "optouts" + ], + "summary": "Create opt out", + "description": "Public Management API. Requires a team API key with `campaigns:manage`. Project tokens are not accepted.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "organization", + "x-excluded-from-public": false, + "x-required-scope": "campaigns:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "responses": { + "200": { + "description": "Success", + "headers": { + "X-Request-Id": { + "schema": { + "type": "string" + }, + "description": "Stable request correlation identifier." + }, + "Polymorfa-Version": { + "schema": { + "type": "string" + }, + "description": "API version applied to this response." + } + }, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DataEnvelope" + } + } + } + }, + "401": { + "$ref": "#/components/responses/Unauthorized" + }, + "403": { + "$ref": "#/components/responses/Forbidden" + }, + "501": { + "$ref": "#/components/responses/NotImplemented" + } + } + } + }, + "/platform/optouts/batch": { + "post": { + "operationId": "createOptOuts", + "tags": [ + "optouts" + ], + "summary": "Create opt outs", + "description": "Public Management API. Requires a team API key with `campaigns:manage`. Project tokens are not accepted.", + "x-audience": "public", + "x-polymorfa-resource-boundary": "organization", + "x-excluded-from-public": false, + "x-required-scope": "campaigns:manage", + "security": [ + { + "ApiKeyAuth": [] + }, + { + "ConsoleSession": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": true } } } @@ -31512,6 +35598,11 @@ "type": "boolean", "default": false, "description": "Explicit measurement consent; the server also requires telemetry configuration." + }, + "projectId": { + "type": "string", + "format": "uuid", + "description": "Optional active project in the signed-in team. Required when checking a project-targeted release." } } } @@ -31574,6 +35665,7 @@ "available", "enrolled", "variant", + "experimentRevision", "experimentAssigned" ], "properties": { @@ -31596,6 +35688,12 @@ "type": "string", "nullable": true }, + "experimentRevision": { + "type": "integer", + "minimum": 1, + "nullable": true, + "description": "Published experiment policy revision for an assigned native experiment; null otherwise." + }, "experimentAssigned": { "type": "boolean", "description": "True only when an experiment assigned a registered variant with measurement enabled." @@ -31689,6 +35787,11 @@ "type": "string", "nullable": true, "maxLength": 100 + }, + "projectId": { + "type": "string", + "format": "uuid", + "description": "Optional active project in the signed-in team for a project-targeted release." } }, "required": [ @@ -31890,6 +35993,65 @@ } }, "schemas": { + "DashboardUnauthorizedError": { + "type": "object", "additionalProperties": false, "required": ["error"], + "properties": {"error": {"type": "string", "enum": ["invalid dashboard token"]}} + }, + "AccountCloudHealthResponse": { + "type": "object", "additionalProperties": false, "required": ["success", "data"], + "properties": { + "success": {"type": "boolean", "enum": [true]}, + "data": {"$ref": "#/components/schemas/AccountCloudHealthView"} + } + }, + "AccountCloudHealthView": { + "type": "object", "additionalProperties": false, + "required": ["session", "phone", "appId", "wabaId", "connection", "credentials", "account", "readiness", "diagnostic"], + "properties": { + "session": {"type": "string"}, + "phone": {"type": "string", "nullable": true}, + "appId": {"type": "string", "nullable": true}, + "wabaId": {"type": "string", "nullable": true}, + "connection": {"type": "object", "additionalProperties": false, "required": ["status", "connected", "sendingPaused"], "properties": { + "status": {"type": "string"}, "connected": {"type": "boolean", "description": "Whether the Official API connection is connected. A Hybrid sending pause does not change this value."}, + "sendingPaused": {"type": "boolean", "description": "Whether Hybrid sending is paused for this Number. Always false for Numbers without a Hybrid Link."} + }}, + "credentials": {"type": "object", "additionalProperties": false, + "required": ["status", "tokenStatus", "missingPermissions", "phoneRegistration", "webhookSubscription", "failureCode"], + "properties": { + "status": {"type": "string", "enum": ["pending", "healthy", "action_required", "unknown"]}, + "tokenStatus": {"type": "string", "enum": ["valid", "expired", "invalid", "unknown"]}, + "missingPermissions": {"type": "array", "items": {"type": "string"}}, + "phoneRegistration": {"type": "string", "enum": ["registered", "not_registered", "unknown"]}, + "webhookSubscription": {"type": "string", "enum": ["subscribed", "not_subscribed", "unknown"]}, + "failureCode": {"type": "string", "nullable": true} + } + }, + "account": {"type": "object", "additionalProperties": false, + "required": ["verifiedName", "qualityRating", "messagingLimitTier", "displayNameReview", "payment", "restrictions"], + "properties": { + "verifiedName": {"type": "string", "nullable": true}, + "qualityRating": {"type": "string", "enum": ["GREEN", "YELLOW", "RED", "NA"], "nullable": true}, + "messagingLimitTier": {"type": "string", "nullable": true}, + "displayNameReview": {"type": "string", "enum": ["unverified"]}, + "payment": {"type": "string", "enum": ["unverified"]}, + "restrictions": {"type": "string", "enum": ["unverified"]} + } + }, + "readiness": {"type": "object", "additionalProperties": false, + "required": ["connection", "webhook", "messaging", "nextAction"], + "properties": { + "connection": {"type": "string", "enum": ["connected", "not_connected"]}, + "webhook": {"type": "string", "enum": ["configured", "not_configured", "unknown"]}, + "messaging": {"type": "string", "enum": ["not_ready", "unverified"]}, + "nextAction": {"type": "string", "enum": ["reconnect_number", "reauthorize", "complete_registration", "check_webhook_subscription", "review_account_quality", "verify_messaging_and_webhooks", "retry_health_check", "resume_hybrid_sending", "contact_support"]} + } + }, + "diagnostic": {"type": "object", "additionalProperties": false, "required": ["id", "observedAt"], + "properties": {"id": {"type": "string", "format": "uuid", "nullable": true}, "observedAt": {"type": "string", "format": "date-time", "nullable": true}} + } + } + }, "Function": { "type": "object", "additionalProperties": false, @@ -36413,8 +40575,7 @@ "metaLinks": { "type": "array", "items": { - "type": "object", - "additionalProperties": true + "$ref": "#/components/schemas/FlowNumberLink" } }, "createdAt": { @@ -36519,6 +40680,330 @@ "expectedUpdatedAt" ] }, + "FlowCategory": { + "type": "string", + "enum": [ + "SIGN_UP", + "SIGN_IN", + "APPOINTMENT_BOOKING", + "LEAD_GENERATION", + "CONTACT_US", + "CUSTOMER_SUPPORT", + "SURVEY", + "OTHER" + ] + }, + "FlowProviderRequest": { + "type": "object", + "additionalProperties": false, + "properties": { + "projectId": { + "$ref": "#/components/schemas/ProjectId" + }, + "sessionId": { + "type": "string", + "minLength": 1, + "maxLength": 256, + "description": "Number (session) name or id in the Flow's project." + }, + "categories": { + "type": "array", + "minItems": 1, + "maxItems": 8, + "uniqueItems": true, + "items": { + "$ref": "#/components/schemas/FlowCategory" + }, + "description": "WhatsApp Flow categories. Required for an upload that creates the Number's Flow; ignored otherwise." + }, + "requestId": { + "type": "string", + "format": "uuid", + "description": "Caller-chosen id. Repeating a request with the same id returns the original operation without sending it again." + } + }, + "required": [ + "projectId", + "sessionId" + ] + }, + "FlowValidationIssue": { + "type": "object", + "additionalProperties": false, + "properties": { + "error": { + "type": "string" + }, + "errorType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "lineStart": { + "type": "integer" + }, + "lineEnd": { + "type": "integer" + }, + "columnStart": { + "type": "integer" + }, + "columnEnd": { + "type": "integer" + }, + "pointers": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "path": { + "type": "string" + }, + "lineStart": { + "type": "integer" + }, + "lineEnd": { + "type": "integer" + }, + "columnStart": { + "type": "integer" + }, + "columnEnd": { + "type": "integer" + } + } + } + } + } + }, + "FlowNumberLink": { + "type": "object", + "additionalProperties": false, + "description": "The Flow as WhatsApp last reported it for one Number.", + "properties": { + "session": { + "type": "string" + }, + "sessionId": { + "type": "string", + "format": "uuid", + "description": "Stable Number ID. A Number recreated under the same name does not reuse this link." + }, + "wabaId": { + "type": "string", + "description": "WhatsApp Business Account id." + }, + "metaFlowId": { + "type": "string", + "description": "WhatsApp Flow id; use it as `flow_id` when sending the Flow." + }, + "status": { + "type": "string", + "description": "WhatsApp Flow status: `DRAFT`, `PUBLISHED`, `DEPRECATED`, `BLOCKED` or `THROTTLED`." + }, + "categories": { + "type": "array", + "items": { + "type": "string" + } + }, + "validationErrors": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FlowValidationIssue" + } + }, + "uploadState": { + "type": "string", + "enum": [ + "stale", + "creating", + "uploading", + "valid", + "invalid", + "failed" + ], + "description": "`stale`: the draft changed after the last upload. `valid`/`invalid`: the last upload was accepted with no or some validation errors. `failed`: the last upload was refused." + }, + "previewUrl": { + "type": "string", + "format": "uri" + }, + "previewExpiresAt": { + "type": "integer", + "format": "int64" + }, + "lastSyncedAt": { + "type": "integer", + "format": "int64" + }, + "definitionDigest": { + "type": "string", + "description": "SHA-256 of the uploaded Flow JSON." + }, + "simulated": { + "type": "boolean", + "description": "True for a test Number." + } + }, + "required": [ + "session", + "wabaId", + "metaFlowId", + "status", + "categories", + "validationErrors", + "uploadState", + "lastSyncedAt" + ] + }, + "FlowProviderOperation": { + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "requestId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "flowId": { + "$ref": "#/components/schemas/FlowId" + }, + "sessionId": { + "type": "string", + "format": "uuid" + }, + "session": { + "type": "string" + }, + "flowName": { + "type": "string" + }, + "action": { + "type": "string", + "enum": [ + "create", + "upload", + "publish", + "deprecate", + "delete" + ] + }, + "state": { + "type": "string", + "enum": [ + "pending", + "succeeded", + "rejected", + "uncertain", + "superseded" + ], + "description": "`uncertain`: WhatsApp did not confirm the outcome. It is settled by a later provider read (see Sync), never by sending the change again. `superseded`: an uncertain upload replaced by a later confirmed upload." + }, + "resolution": { + "type": "string", + "enum": [ + "response", + "reconciled", + "superseded", + null + ], + "nullable": true + }, + "wabaId": { + "type": "string", + "nullable": true + }, + "metaFlowId": { + "type": "string", + "nullable": true + }, + "definitionDigest": { + "type": "string", + "nullable": true + }, + "providerStatus": { + "type": "string", + "nullable": true + }, + "errorCode": { + "type": "string", + "nullable": true, + "description": "Why the operation was refused or is unresolved, such as `provider_rejected`, `flow_not_found`, `not_applied` or `cloud_service_restricted`." + }, + "providerCode": { + "type": "integer", + "nullable": true, + "description": "WhatsApp error code, when WhatsApp refused the change." + }, + "providerSubcode": { + "type": "integer", + "nullable": true + }, + "createdAt": { + "type": "integer", + "format": "int64" + }, + "updatedAt": { + "type": "integer", + "format": "int64" + }, + "completedAt": { + "type": "integer", + "format": "int64", + "nullable": true + } + }, + "required": [ + "id", + "requestId", + "flowId", + "sessionId", + "session", + "flowName", + "action", + "state", + "resolution", + "wabaId", + "metaFlowId", + "definitionDigest", + "providerStatus", + "errorCode", + "providerCode", + "providerSubcode", + "createdAt", + "updatedAt", + "completedAt" + ] + }, + "FlowProviderResult": { + "type": "object", + "additionalProperties": false, + "properties": { + "operation": { + "type": "object", + "allOf": [ + { + "$ref": "#/components/schemas/FlowProviderOperation" + } + ], + "nullable": true + }, + "flow": { + "$ref": "#/components/schemas/FlowDraft" + } + }, + "required": [ + "operation", + "flow" + ] + }, "DeleteFlowResult": { "type": "object", "additionalProperties": false, @@ -37682,6 +42167,14 @@ "type": "number", "description": "Scheduled start time in Unix milliseconds." }, + "sendWindow": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/CampaignSendWindowRequest" + } + ] + }, "recipients": { "type": "array", "minItems": 0, @@ -37706,6 +42199,281 @@ "name" ] }, + "UpdatePlatformCampaignRequest": { + "type": "object", + "additionalProperties": true, + "description": "Fields to change. Omitted fields keep their stored value.", + "properties": { + "name": { + "type": "string", + "minLength": 1, + "maxLength": 200 + }, + "projectId": { + "type": "string", + "format": "uuid", + "description": "Required when using a team API key. Project tokens derive the project from the credential." + }, + "recipientListId": { + "type": "string", + "format": "uuid", + "nullable": true, + "description": "Audience to send to. Only while the campaign is an unlaunched draft." + }, + "senderConfig": { + "type": "object", + "additionalProperties": true + }, + "scheduledAt": { + "type": "integer", + "minimum": 0, + "maximum": 8640000000000000, + "nullable": true, + "description": "Scheduled start time in Unix milliseconds. Only while the campaign is an unlaunched draft." + }, + "sendWindow": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/CampaignSendWindowRequest" + } + ], + "description": "When the campaign may send. `null` removes the window. Only while the campaign is a draft or paused." + } + } + }, + "CampaignSendWindowRange": { + "type": "object", + "additionalProperties": false, + "properties": { + "start": { + "type": "string", + "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$", + "description": "Local start time, `HH:MM` in 24-hour time, inclusive.", + "example": "09:00" + }, + "end": { + "type": "string", + "pattern": "^(([01][0-9]|2[0-3]):[0-5][0-9]|24:00)$", + "description": "Local end time, `HH:MM` in 24-hour time or `24:00`, exclusive. Must be later than `start`.", + "example": "18:00" + } + }, + "required": [ + "start", + "end" + ] + }, + "CampaignSendWindowRequest": { + "type": "object", + "additionalProperties": false, + "description": "When the campaign may send. Recipients outside the window stay `queued` and are sent when it next opens.", + "properties": { + "timeZone": { + "type": "string", + "minLength": 1, + "maxLength": 64, + "description": "IANA time zone the window is written in, such as `America/Sao_Paulo`. When omitted, the team's time zone is stored, or `UTC` when the team has none.", + "example": "America/Sao_Paulo" + }, + "days": { + "type": "array", + "minItems": 1, + "maxItems": 7, + "uniqueItems": true, + "items": { + "type": "string", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ] + }, + "description": "Weekdays the campaign may send on, in the window's time zone." + }, + "hours": { + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "$ref": "#/components/schemas/CampaignSendWindowRange" + }, + "description": "Local time ranges the campaign may send in on those days. Ranges must not overlap. A range cannot cross midnight; use two ranges instead." + }, + "recipientTimeZone": { + "type": "boolean", + "default": false, + "description": "Evaluate the window in each recipient's own time zone. The zone comes from the recipient variable named by `timeZoneVariable` when it holds a valid IANA zone, otherwise from the phone number's country when that country uses one UTC offset, otherwise `timeZone`." + }, + "timeZoneVariable": { + "type": "string", + "pattern": "^[A-Za-z0-9_][A-Za-z0-9_.-]{0,63}$", + "default": "timeZone", + "description": "Recipient variable holding the recipient's IANA time zone, used when `recipientTimeZone` is true. Launch rejects more than 5,000 distinct nonempty values with `400 invalid_parameter`." + } + }, + "required": [ + "days", + "hours" + ] + }, + "CampaignSendWindow": { + "type": "object", + "additionalProperties": false, + "description": "When the campaign may send. Recipients outside the window stay `queued` and are sent when it next opens.", + "properties": { + "timeZone": { + "type": "string", + "description": "IANA time zone the window is written in." + }, + "days": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ] + } + }, + "hours": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CampaignSendWindowRange" + } + }, + "recipientTimeZone": { + "type": "boolean" + }, + "timeZoneVariable": { + "type": "string" + } + }, + "required": [ + "timeZone", + "days", + "hours", + "recipientTimeZone", + "timeZoneVariable" + ] + }, + "PlatformCampaign": { + "type": "object", + "additionalProperties": true, + "description": "A campaign returned by Platform list, get, create and update. `sendWindow` is null when sending is unrestricted by local hours.", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string" + }, + "status": { + "type": "string" + }, + "templateId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "recipientListId": { + "type": "string", + "format": "uuid", + "nullable": true + }, + "recipientCount": { + "type": "integer", + "minimum": 0 + }, + "sentCount": { + "type": "integer", + "minimum": 0 + }, + "deliveredCount": { + "type": "integer", + "minimum": 0 + }, + "readCount": { + "type": "integer", + "minimum": 0 + }, + "failedCount": { + "type": "integer", + "minimum": 0 + }, + "skippedCount": { + "type": "integer", + "minimum": 0 + }, + "scheduledAt": { + "type": "integer", + "nullable": true, + "description": "Scheduled start in Unix milliseconds." + }, + "launchedAt": { + "type": "integer", + "nullable": true, + "description": "Launch time in Unix milliseconds." + }, + "completedAt": { + "type": "integer", + "nullable": true, + "description": "Completion time in Unix milliseconds." + }, + "createdAt": { + "type": "integer", + "description": "Creation time in Unix milliseconds." + }, + "updatedAt": { + "type": "integer", + "description": "Last update in Unix milliseconds." + }, + "sendWindow": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/CampaignSendWindow" + } + ] + }, + "composerBlueprint": {}, + "messages": {}, + "audienceRef": {}, + "senderConfig": {}, + "complianceConfig": {}, + "variants": {}, + "variantStrategy": {} + }, + "required": [ + "id", + "name", + "status", + "templateId", + "recipientListId", + "recipientCount", + "sentCount", + "deliveredCount", + "readCount", + "failedCount", + "skippedCount", + "scheduledAt", + "launchedAt", + "completedAt", + "createdAt", + "updatedAt", + "sendWindow" + ] + }, "ReschedulePlatformCampaignRequest": { "type": "object", "additionalProperties": false, @@ -48433,6 +53201,29 @@ } } } + }, + "headers": { + "X-RateLimit-Limit": { + "description": "Team request quota per rolling minute, when the per-team request limiter applies.", + "schema": { + "type": "integer", + "minimum": 1 + } + }, + "X-RateLimit-Remaining": { + "description": "Requests left in the per-team quota; zero when this limiter rejects the request.", + "schema": { + "type": "integer", + "minimum": 0 + } + }, + "X-RateLimit-Reset": { + "description": "Unix timestamp in seconds when the oldest counted request leaves the rolling window, when the per-team request limiter applies. Follow Retry-After on a rejected request.", + "schema": { + "type": "integer", + "minimum": 0 + } + } } } } diff --git a/contracts/source.json b/contracts/source.json index 6581c964..9e1b99af 100644 --- a/contracts/source.json +++ b/contracts/source.json @@ -1,19 +1,19 @@ { "repository": "polymorfa/polymorfa", - "commit": "5f6a2b1470821c1a2b4077aa8de14214faede57a", + "commit": "29abb7b66a8e225af4df5cf354e9836ccb2ce04c", "branch": "dev", "published": true, - "note": "Merged Calls contract on API dev. SDK publication, CLI registry pinning, deployment and live acceptance remain separate gates.", + "note": "API dev merge of PR #362. Includes every merged Official API, Flow lifecycle, catalog and campaign send-window contract. Both snapshots are byte-identical to this exact API commit. SDK publication, CLI registry pinning, deployment and live acceptance remain separate gates.", "contracts": { "messaging": { "sourcePath": "apps/api/docs/openapi.json", "snapshotPath": "contracts/openapi.messaging.json", - "sha256": "fd68e43f45aaead4733c7401810c7b01c2110fdd37f35d7b2595571bd24a5466" + "sha256": "907a3fa58d5bb377e370748510a1bdeb9051d6d4e767f5fcf317a89d39979ba8" }, "platform": { "sourcePath": "apps/api/docs/openapi.management.json", "snapshotPath": "contracts/openapi.platform.json", - "sha256": "6ac6657501890b75a049f84d5ff4f0a843ccae0e0b40f9fde7eed0e6b4d5bc91" + "sha256": "f13f2190a9611044a6cedccdcc14127f113875b48109960503b464b7218a1e5d" } } } diff --git a/examples/full-platform/ui/pages/connections.tsx b/examples/full-platform/ui/pages/connections.tsx index bfd623d7..4cd575f4 100644 --- a/examples/full-platform/ui/pages/connections.tsx +++ b/examples/full-platform/ui/pages/connections.tsx @@ -202,7 +202,7 @@ export function ConnectionsPage() { "session.status": (event) => setData((current) => current?.map((connection) => - connection.id === event.session + connection.id === event.session && "status" in event.payload ? { ...connection, status: event.payload.status } : connection, ), diff --git a/examples/full-platform/ui/pages/templates.tsx b/examples/full-platform/ui/pages/templates.tsx index 4c455d25..ae9f5cb6 100644 --- a/examples/full-platform/ui/pages/templates.tsx +++ b/examples/full-platform/ui/pages/templates.tsx @@ -79,9 +79,12 @@ export function TemplatesPage() { // Meta's review result arrives as a `template.status` webhook. useLiveEvents({ "template.status": ({ payload }) => { - toast( - `Template ${payload.templateName} is now ${payload.status.toLowerCase()}`, - ); + const status = "kind" in payload ? payload.event : payload.status; + const quality = "kind" in payload ? payload.newQualityScore : undefined; + const name = payload.templateName ?? payload.templateId ?? "notification"; + if (status) toast(`Template ${name} is now ${status.toLowerCase()}`); + else if (quality) + toast(`Template ${name} quality is now ${quality.toLowerCase()}`); templates.reload(); }, }); diff --git a/examples/full-platform/ui/shell.tsx b/examples/full-platform/ui/shell.tsx index 10a0269d..55991a3f 100644 --- a/examples/full-platform/ui/shell.tsx +++ b/examples/full-platform/ui/shell.tsx @@ -108,7 +108,7 @@ function ConnectionHealth() { setBootstrap((current) => ({ ...current, connections: current.connections.map((connection) => - connection.id === event.session + connection.id === event.session && "status" in event.payload ? { ...connection, status: event.payload.status } : connection, ), diff --git a/packages/store/README.md b/packages/store/README.md index 19dc4dae..526c6e37 100644 --- a/packages/store/README.md +++ b/packages/store/README.md @@ -43,6 +43,10 @@ Each `ingest()` call: 5. Writes the whole batch in one transaction, then notifies subscribers in this tab and, through `BroadcastChannel`, in other tabs. +Meta account notices are stored in `sessions.cloudAccountNotification`; they +do not overwrite connection status. Cloud template status and quality updates +set the matching template fields and preserve language and WABA references. + Reducers never replace newer state with older state. Message status only moves forward (`pending`, `sent`, `delivered`, `read`, `played`); other fields keep the time of the event that set them and ignore older updates. A deleted diff --git a/packages/store/src/reducers.ts b/packages/store/src/reducers.ts index 407bb9be..7a00f08e 100644 --- a/packages/store/src/reducers.ts +++ b/packages/store/src/reducers.ts @@ -884,10 +884,20 @@ const templateStatus: StoreReducer = async (event, context) => { existing, pick({ templateName: str(payload.templateName), - status: str(payload.status), + status: str( + payload.kind === "message_template_status_update" + ? payload.event + : payload.status, + ), category: str(payload.category), reason: str(payload.reason), - qualityRating: str(payload.qualityRating), + qualityRating: str( + payload.kind === "message_template_quality_update" + ? payload.newQualityScore + : payload.qualityRating, + ), + language: str(payload.language), + wabaId: str(payload.wabaId), }), context.time, ), @@ -938,10 +948,20 @@ export const BUILT_IN_REDUCERS: Readonly> = { "call.participant_left": callParticipant, "call.telemetry": callTelemetry, "labels.update": labelsUpdate, - "session.status": sessionEvent((payload) => ({ - status: str(payload.status), - statusReason: str(payload.statusReason), - })), + "session.status": sessionEvent((payload) => + payload.source === "meta" + ? { + cloudAccountNotification: { + kind: str(payload.kind), + wabaId: str(payload.wabaId), + value: payload.value, + }, + } + : { + status: str(payload.status), + statusReason: str(payload.statusReason), + }, + ), "session.connected": sessionEvent((payload) => ({ status: "connected", phoneNumber: str(payload.phoneNumber), diff --git a/packages/store/src/types.ts b/packages/store/src/types.ts index 4692fd7c..1bf889a9 100644 --- a/packages/store/src/types.ts +++ b/packages/store/src/types.ts @@ -192,6 +192,12 @@ export interface StoredLabel extends StoredRow { } export interface StoredSession extends StoredRow { + /** Latest Meta account notice, independent of the runtime connection state. */ + readonly cloudAccountNotification?: { + readonly kind?: string; + readonly wabaId?: string; + readonly value: unknown; + }; readonly status?: string; readonly statusReason?: string; readonly phoneNumber?: string; @@ -209,6 +215,8 @@ export interface StoredSession extends StoredRow { } export interface StoredTemplate extends StoredRow { + readonly language?: string; + readonly wabaId?: string; readonly templateName?: string; readonly status?: string; readonly category?: string; diff --git a/packages/store/test/store.test.ts b/packages/store/test/store.test.ts index 8d7354f1..9427066f 100644 --- a/packages/store/test/store.test.ts +++ b/packages/store/test/store.test.ts @@ -9,6 +9,68 @@ import { import { BASE_TIME, chat, event, openStore, received } from "./helpers.js"; describe("createPolymorfaStore routing", () => { + it("keeps Meta account notices separate and applies provider template status and quality", async () => { + const store = await openStore(); + await store.ingest([ + event("session.status", { status: "connected" }, { at: 1000 }), + event( + "session.status", + { + source: "meta", + kind: "account_alerts", + wabaId: "waba_1", + value: { alert_type: "info" }, + }, + { at: 2000 }, + ), + event( + "template.status", + { + kind: "message_template_status_update", + templateId: "98765432109876543210", + templateName: "welcome", + event: "APPROVED", + language: "en_US", + wabaId: "waba_1", + }, + { at: 2000 }, + ), + event( + "template.status", + { + kind: "message_template_quality_update", + templateId: "98765432109876543210", + newQualityScore: "GREEN", + }, + { at: 3000 }, + ), + event( + "template.status", + { + kind: "message_template_quality_update", + templateId: "98765432109876543210", + newQualityScore: "RED", + }, + { at: 2500 }, + ), + ]); + expect(await store.sessions.get("support")).toMatchObject({ + status: "connected", + cloudAccountNotification: { + kind: "account_alerts", + wabaId: "waba_1", + value: { alert_type: "info" }, + }, + }); + expect(await store.templates.get("98765432109876543210")).toMatchObject({ + status: "APPROVED", + qualityRating: "GREEN", + language: "en_US", + wabaId: "waba_1", + }); + store.close(); + }); + it("files messages and updates the conversation summary", async () => { const store = await openStore(); expect(store.mode).toBe("indexeddb"); diff --git a/packages/typescript/README.md b/packages/typescript/README.md index 2703c1ba..4fa4366f 100644 --- a/packages/typescript/README.md +++ b/packages/typescript/README.md @@ -320,6 +320,136 @@ await messaging.templates.preview("support", created.data.data.id, { Keep this client on the server. Browser builders use an application-owned route, such as `createTemplateBuilderRoute` from `@polymorfa/nextjs`. +## Flow drafts and provider lifecycle + +Use `client.project(projectId).flows` for project Flow drafts. A client created +with a project token exposes the same resource for its configured project. +`list`, `retrieve`, `create`, `update`, and `delete` manage local drafts. Retrieval +returns `null` when the API has no matching draft; updates require the observed +`expectedUpdatedAt` value. Draft methods and provider methods remain distinct. + +Every Flow method returns the unwrapped record in `response.data`. Prereleases +up to `0.1.0-dev.20260927174827` returned `list` and `retrieve` inside a +`{ data }` envelope; replace `response.data.data` with `response.data` when +upgrading. + +```ts +const flows = client.project(projectId).flows; +const draft = await flows.create({ + name: "Booking", + definition: flowJson, +}); +const uploaded = await flows.upload(draft.data.id, { + sessionId: "support", + categories: ["APPOINTMENT_BOOKING"], + requestId: crypto.randomUUID(), +}); +console.log(uploaded.data.operation?.state); +``` + +`upload`, `publish`, `deprecate`, `discard`, and `sync` operate on a Number in the +same project; `receipts` reads its recorded operations. Reads require +`sessions:read`; mutations require `sessions:manage`. Provider actions require +the API's beta access and a compatible Number. Publishing uses the validated +upload. Discard removes a provider draft; delete removes the local draft. + +Writes make one transport attempt even with retry options or an Idempotency-Key. +The optional body `requestId` identifies one provider operation. A response can +contain an `uncertain` receipt with HTTP 200; inspect its state. Use `sync` to +reconcile provider state, preserving the original request identity. Do not repeat +an uncertain write with a new ID. No provider lifecycle method enrolls a project +or establishes deployed availability. + +## Official API Numbers + +These server methods require the matching API deployment and the team's beta +access. An SDK method does not enroll a team. Keep server credentials out of +browser code. + +`messaging.cloudTemplates` lists, retrieves, creates, edits and deletes Meta templates +for a Number. It is separate from `messaging.templates`, which manages project +drafts. Use an organization API key or project token; the SDK rejects browser +client tokens before sending any of these requests. The native template API +requires an enabled Official API connection. For a Hybrid Number it uses that +exact connection and its WABA; a retired or disabled +Official connection cannot supply authority. Retrieval accepts +an optional language; the API defaults to `en_US`. +Deleting a name deletes all its languages. Create, edit and delete make one attempt, +even if an idempotency key or a retry override is supplied. Create and delete +send your `idempotencyKey` to the API, so a manual retry with the same key +returns `PolymorfaConflictError` (`idempotency_completed`) instead of writing +again. Edit has no key; list or retrieve the template to reconcile an +uncertain result before submitting another write. + +```ts +const catalog = await messaging.cloudTemplates.list("support"); +const template = await messaging.cloudTemplates.retrieve( + "support", + "order_update", + { + language: "pt_BR", + }, +); +``` + +`messaging.cloudCatalogs.list(wabaId, { version: "v26.0", limit: 25, after })` +reads catalog IDs and names visible to the connected WABA credentials. It +requires `sessions:read` and Graph access. The response retains opaque cursors; +it does not expose upstream pagination URLs or grant merchant ownership. Use +an organization API key or project token, with the latter confined to its project. + +`messaging.flowEncryption.retrieve(phoneNumberId, { version: "v26.0" })` reads +the registered public key and Meta signature status with `sessions:read`. +`messaging.flowEncryption.register(phoneNumberId, +{ businessPublicKey: publicKeyPem }, { version: "v26.0" })` replaces the key +with `sessions:manage` on an eligible Official API Number. It makes one +upstream attempt. Retain the matching private key on your endpoint and read the +registered key after an uncertain outcome. Registration affects every dynamic +Flow on the phone number; it does not enable dynamic Flow publishing. + +`messaging.cloudTemplates.update(number, name, { components }, { language })` +submits an edit to one template language. A `202` response contains +`{ accepted: true, name, language }`; it does not establish approval to send. +Read the template again to inspect its status. + +`messaging.messages.setTyping(number, { conversation, state: "typing", id })` +requires an inbound message ID on Official Numbers. It marks that message read +and displays typing until a reply is sent or 25 seconds pass. Official Numbers +reject `recording` and `paused`; Linked Device Numbers retain those states and +do not require `id`. + +`messaging.quickLinks.retrieve(id)` preserves `onboarding.sync` request receipts +and history-delivery observations. A connected Number does not establish that +contacts or history were delivered. Accepted requests and `unknown` outcomes +remain distinct; do not repeat a one-time sync request based on an unknown state. + +Narrow `session.status` payloads by `source: "meta"` before reading account +notifications. They have `kind`, optional `wabaId`, and `value`, without a runtime +`status`. Cloud `template.status` payloads have `kind` and optional provider +fields such as `event`, `language`, `previousQualityScore`, and `newQualityScore`. +Runtime notifications retain their own typed payloads. Webhook envelope IDs +identify an occurrence; retain them when deduplicating a delivery retry. + +`messaging.chats.getServiceWindow(number, conversation)` reads `open`, `closed` +or `unknown` with observation timestamps. It requires `chats:read` and service +window beta enrollment, without requiring HMS. `unknown` does not establish +permission to send; Meta still decides. + +`messaging.sessions.getMetaPricing(number, { since, until })` returns counts +grouped by Meta's reported pricing classification. It requires `sessions:read` +and the same beta access. Dates are ISO 8601, the default period is 30 days and +the maximum is 93 days. Counts contain no invoice amounts or Polymorfa charges. +Official API `message.ack` events can include `pricing`, typed as +`MetaPricingReport`, preserving Meta's field names and optional values. + +`messaging.sessions.getCloudCredentialHealth(number)` returns redacted token, +permission, registration and subscription checks with `sessions:read`. +`messaging.sessions.reauthorizeCloudCredentials(number)` creates a QuickLink +for the same Number and phone with `quicklink:manage`. The Number must already +be stopped or disconnected and use a standalone Official API connection; +the method never stops it. Reauthorization makes one attempt and does not +automatically open or share the returned URL. + ## Contacts `MessagingClient.contacts` exposes the complete Linked Device contact surface. @@ -1752,6 +1882,12 @@ once by default, generates no key, and requires both `maxNetworkRetries` and successful first attempt as duplicates. List recipients before appending again after a lost response. +Create on both surfaces, and Platform `update`, accept an optional +`sendWindow` (`CampaignSendWindowRequest`): weekdays, up to four local +`HH:MM` ranges, an optional IANA `timeZone`, and optional per-recipient time +zones. Recipients outside the window stay queued until it next opens. `null` +removes the window. Campaign records return the stored `sendWindow` or null. + `listRecipients(projectSlug, campaignId, { status, cursor, limit })` returns `{ data, page }` inside the response's `data`. Read recipients from `response.data.data` and pass `response.data.page.nextCursor` into the next @@ -1834,6 +1970,17 @@ Use `webhooks.verify` with the exact raw request bytes before inspecting an inbound Messaging delivery. `isEvent` narrows known event names to their exported payload types: +For an inbound Official API `message.received` event, +`CloudMessagePayload.referral` contains Meta's optional `source_type`, +`source_id`, `source_url`, and `ctwa_clid` strings. These fields identify a +provider-reported referral source. They do not establish a conversion, order +payment, or revenue. + +`CloudAccountStatusPayload.kind` also distinguishes +`phone_number_name_update` from other Meta account notices. Its `value` retains +the provider's display phone, decision, requested name, and rejection reason; +the notice is not a runtime connection-state transition. + ```ts const event = await webhooks.verify({ body: rawBody, diff --git a/packages/typescript/src/client.ts b/packages/typescript/src/client.ts index a10d8acf..2422f447 100644 --- a/packages/typescript/src/client.ts +++ b/packages/typescript/src/client.ts @@ -1,3 +1,4 @@ +import { FlowsResource } from "./platform/flows.js"; import { FunctionsResource } from "./platform/functions.js"; import { SessionConfigurationResource } from "./platform/session-configuration.js"; import { @@ -27,7 +28,6 @@ import { PlatformCallsResource } from "./platform/calls.js"; import { CallRetentionResource } from "./platform/call-retention.js"; import { CampaignsResource } from "./platform/campaigns.js"; import { CustomersResource } from "./platform/customers.js"; -import { FlowsResource } from "./platform/flows.js"; import { EventsResource, OperationsResource, @@ -101,8 +101,8 @@ export interface OrganizationControlPlaneResources { } export interface ProjectControlPlaneResources { - readonly functions: FunctionsResource; readonly flows: FlowsResource; + readonly functions: FunctionsResource; } export type Client = ClientBase & diff --git a/packages/typescript/src/errors.ts b/packages/typescript/src/errors.ts index dfdb6858..e58465b2 100644 --- a/packages/typescript/src/errors.ts +++ b/packages/typescript/src/errors.ts @@ -9,6 +9,7 @@ export const POLYMORFA_ERROR_CODES = [ "invalid_parameter", "invalid_credential", "entitlement_required", + "cloud_template_authority_restricted", "gate_limit_reached", "method_not_allowed", "permission_denied", diff --git a/packages/typescript/src/index.ts b/packages/typescript/src/index.ts index b2bbd172..e16617ad 100644 --- a/packages/typescript/src/index.ts +++ b/packages/typescript/src/index.ts @@ -23,11 +23,6 @@ export { type Client as ClientInstance, } from "./client.js"; export type * from "./platform/developer-types.js"; -export { - FlowsResource, - type FlowDraft, - type FlowSummary, -} from "./platform/flows.js"; export { EventStream, eventStreamSource, @@ -65,6 +60,18 @@ export { type PolymorfaRateLimitReason, } from "./errors.js"; export { MessagingClient } from "./messaging/client.js"; +export { CloudCatalogsResource } from "./messaging/cloud-catalogs.js"; +export { FlowEncryptionResource } from "./messaging/flow-encryption.js"; +export type { + FlowEncryptionKey, + FlowEncryptionParams, + RegisterFlowEncryptionKeyRequest, +} from "./messaging/flow-encryption.js"; +export type { + CloudProductCatalog, + ListCloudCatalogsParams, + ListCloudCatalogsResponse, +} from "./messaging/cloud-catalogs.js"; export { BridgeClient, BridgeRoutesResource, @@ -75,6 +82,15 @@ export { type BridgeSignal, } from "./bridge.js"; export { ChatsResource } from "./messaging/chats.js"; +export type { + CustomerServiceWindow, + MetaPricingParams, + MetaPricingGroup, + MetaPricingSummary, + CloudCredentialFailureCode, + CloudCredentialHealth, + CloudReauthorization, +} from "./messaging/cloud-types.js"; export type { DeleteMessageOptions } from "./messaging/chats.js"; export type { HistoryChat, @@ -239,6 +255,9 @@ export { type QuickLink, type QuickLinkStatus, type QuickLinkStatusValue, + type CloudSyncStatus, + type CloudSyncRequest, + type CloudSyncDelivery, type QuickLinkPurpose, type QuickLinkConnectionGoal, type QuickLinkConnectionKind, @@ -249,6 +268,17 @@ export { } from "./messaging/quicklinks.js"; export { SessionsResource } from "./messaging/sessions.js"; export { TemplatesResource } from "./messaging/templates.js"; +export { + CloudTemplatesResource, + type CloudTemplate, + type CloudTemplateStatus, + type CreateCloudTemplateRequest, + type EditCloudTemplateRequest, + type EditCloudTemplateResponse, + type RetrieveCloudTemplateParams, + type CloudTemplateResponse, + type ListCloudTemplatesResponse, +} from "./messaging/cloud-templates.js"; export { UsersResource } from "./messaging/users.js"; export type { AddressMessageContent, @@ -276,6 +306,10 @@ export type { CampaignRecipientStatus, CampaignRecipientVariables, CampaignRequeueResponse, + CampaignSendWindow, + CampaignSendWindowRange, + CampaignSendWindowRequest, + CampaignWeekday, CampaignRequeueResult, CampaignStopOperation, CampaignStopResponse, @@ -1015,6 +1049,7 @@ export { type LinkedDeviceMessageType, type LinkedHistorySyncPayload, type MessageAckPayload, + type MetaPricingReport, type MessageDeletePayload, type MessageEchoPayload, type MessagePayload, @@ -1034,6 +1069,8 @@ export { type SessionRestrictionUpdatedPayload, type SessionPhoneOfflinePayload, type SessionStatusPayload, + type RuntimeSessionStatusPayload, + type CloudAccountStatusPayload, type UnknownWebhookEvent, type WebhookBody, type WebhookFixture, @@ -1086,6 +1123,8 @@ export { type MessageFailedPayload, type MessageFailedReason, type TemplateStatusPayload, + type RuntimeTemplateStatusPayload, + type CloudTemplateStatusPayload, type UsageRecordedPayload, type VoiceAssetEventPayload, type VoiceAssetFailedPayload, @@ -1119,3 +1158,19 @@ export { } from "./messaging/hybrid-link.js"; export * from "./platform/functions.js"; + +export { + FlowsResource, + type FlowCategory, + type FlowDraftStatus, + type FlowValidationPointer, + type FlowValidationIssue, + type FlowNumberLink, + type FlowSummary, + type FlowDraft, + type CreateFlowRequest, + type UpdateFlowRequest, + type FlowProviderRequest, + type FlowProviderOperation, + type FlowProviderResult, +} from "./platform/flows.js"; diff --git a/packages/typescript/src/messaging/chats.ts b/packages/typescript/src/messaging/chats.ts index a8c25545..00c64db1 100644 --- a/packages/typescript/src/messaging/chats.ts +++ b/packages/typescript/src/messaging/chats.ts @@ -1,4 +1,5 @@ import type { MessagingCredential } from "../credentials.js"; +import type { CustomerServiceWindow } from "./cloud-types.js"; import { PolymorfaConfigurationError } from "../errors.js"; import { HttpTransport } from "../transport/http.js"; import { withIdempotencyKey } from "../transport/idempotency.js"; @@ -27,6 +28,29 @@ export class ChatsResource { private readonly credentialType: MessagingCredential["type"], ) {} + /** Official API beta. Requires chats:read and team enrollment; no HMS requirement. */ + getServiceWindow( + session: string, + conversation: string, + options: RequestOptions = {}, + ): Promise< + ApiResponse<{ + readonly success: true; + readonly data: CustomerServiceWindow; + }> + > { + if (this.credentialType === "clientToken") { + throw new PolymorfaConfigurationError( + "Service windows require an organization API key or project token.", + ); + } + return this.transport.request({ + method: "GET", + path: `${chatPath(session, conversation)}/service-window`, + ...options, + }); + } + /** Lists one page of stored conversations. Requires `chats:read` and enrolled HMS history access. */ list( session: string, diff --git a/packages/typescript/src/messaging/client.ts b/packages/typescript/src/messaging/client.ts index b0a1773e..0ea465ef 100644 --- a/packages/typescript/src/messaging/client.ts +++ b/packages/typescript/src/messaging/client.ts @@ -28,6 +28,9 @@ import { QuickRepliesResource } from "./quick-replies.js"; import { QuickLinksResource } from "./quicklinks.js"; import { SessionsResource } from "./sessions.js"; import { TemplatesResource } from "./templates.js"; +import { CloudTemplatesResource } from "./cloud-templates.js"; +import { CloudCatalogsResource } from "./cloud-catalogs.js"; +import { FlowEncryptionResource } from "./flow-encryption.js"; import { UsersResource } from "./users.js"; import { VoipResource } from "./voip.js"; import { WebhooksResource } from "./webhooks.js"; @@ -57,6 +60,9 @@ export class MessagingClient { readonly testing: TestingResource; readonly quickLinks: QuickLinksResource; readonly templates: TemplatesResource; + readonly cloudTemplates: CloudTemplatesResource; + readonly cloudCatalogs: CloudCatalogsResource; + readonly flowEncryption: FlowEncryptionResource; readonly users: UsersResource; readonly voip: VoipResource; readonly webhooks: WebhooksResource; @@ -102,6 +108,15 @@ export class MessagingClient { this.testing = new TestingResource(transport, credential.type); this.quickLinks = new QuickLinksResource(transport, credential.type); this.templates = new TemplatesResource(transport); + this.cloudTemplates = new CloudTemplatesResource( + transport, + credential.type, + ); + this.cloudCatalogs = new CloudCatalogsResource(transport, credential.type); + this.flowEncryption = new FlowEncryptionResource( + transport, + credential.type, + ); this.users = new UsersResource(transport); this.voip = new VoipResource(transport, credential.type); this.webhooks = new WebhooksResource(transport); diff --git a/packages/typescript/src/messaging/cloud-catalogs.ts b/packages/typescript/src/messaging/cloud-catalogs.ts new file mode 100644 index 00000000..dd9e0c33 --- /dev/null +++ b/packages/typescript/src/messaging/cloud-catalogs.ts @@ -0,0 +1,54 @@ +import type { MessagingCredential } from "../credentials.js"; +import { PolymorfaConfigurationError } from "../errors.js"; +import { HttpTransport } from "../transport/http.js"; +import type { ApiResponse, RequestOptions } from "../transport/types.js"; + +export interface CloudProductCatalog { + readonly id: string; + readonly name?: string; +} +export interface ListCloudCatalogsParams { + /** Meta Graph version, for example v26.0. */ + readonly version: string; + /** Page size from 1 to 100. The API defaults to 25. */ + readonly limit?: number; + readonly after?: string; +} +export interface ListCloudCatalogsResponse { + readonly data: readonly CloudProductCatalog[]; + readonly paging?: { + readonly cursors: { readonly before?: string; readonly after?: string }; + }; +} + +/** Reads catalog links visible to the authenticated WABA. Requires sessions:read. */ +export class CloudCatalogsResource { + constructor( + private readonly transport: HttpTransport, + private readonly credentialType: MessagingCredential["type"], + ) {} + + list( + wabaId: string, + params: ListCloudCatalogsParams, + options: RequestOptions = {}, + ): Promise> { + if (this.credentialType === "clientToken") { + throw new PolymorfaConfigurationError( + "Official API catalogs require an organization API key or project token.", + "credential", + ); + } + if (!wabaId.trim() || !params.version.trim()) { + throw new PolymorfaConfigurationError( + "Provide a WABA ID and Graph version.", + ); + } + return this.transport.request({ + method: "GET", + path: `/graph/whatsapp/${encodeURIComponent(params.version)}/${encodeURIComponent(wabaId)}/product_catalogs`, + query: { limit: params.limit, after: params.after }, + ...options, + }); + } +} diff --git a/packages/typescript/src/messaging/cloud-templates.ts b/packages/typescript/src/messaging/cloud-templates.ts new file mode 100644 index 00000000..f636ebac --- /dev/null +++ b/packages/typescript/src/messaging/cloud-templates.ts @@ -0,0 +1,177 @@ +import type { MessagingCredential } from "../credentials.js"; +import { PolymorfaConfigurationError } from "../errors.js"; +import { HttpTransport } from "../transport/http.js"; +import type { ApiResponse, RequestOptions } from "../transport/types.js"; +import type { + SuccessEnvelope, + SuccessResponse, + TemplateCategory, +} from "./types.js"; + +export type CloudTemplateStatus = + | "PENDING" + | "APPROVED" + | "REJECTED" + | "PAUSED" + | "DISABLED" + | "DELETED" + | "ARCHIVED" + | "IN_APPEAL" + | "LIMIT_EXCEEDED" + | "PENDING_DELETION"; + +export interface CloudTemplate { + readonly id: string; + readonly tenantId: string; + readonly session: string; + readonly wabaId: string; + readonly name: string; + readonly language: string; + readonly category: TemplateCategory; + readonly status: CloudTemplateStatus; + readonly components: readonly unknown[]; + readonly metaTemplateId?: string; + readonly rejectionReason?: string; + readonly qualityScore?: string; + readonly createdAt: string; + readonly updatedAt: string; +} + +export interface CreateCloudTemplateRequest { + readonly name: string; + readonly language: string; + readonly category: TemplateCategory; + readonly components: readonly unknown[]; +} + +export interface EditCloudTemplateRequest { + readonly components: readonly unknown[]; +} + +export type EditCloudTemplateResponse = SuccessEnvelope<{ + readonly accepted: true; + readonly name: string; + readonly language: string; +}>; + +export interface RetrieveCloudTemplateParams { + /** Defaults to en_US at the API when omitted. */ + readonly language?: string; +} + +export type CloudTemplateResponse = SuccessEnvelope; +export type ListCloudTemplatesResponse = SuccessEnvelope< + readonly CloudTemplate[] +>; + +/** Meta templates for a Number created on an Official API connection, separate from project drafts. */ +export class CloudTemplatesResource { + constructor( + private readonly transport: HttpTransport, + private readonly credentialType: MessagingCredential["type"], + ) {} + + private requireServerCredential(): void { + if (this.credentialType === "clientToken") { + throw new PolymorfaConfigurationError( + "Official API templates require an organization API key or project token.", + "credential", + ); + } + } + + /** Refresh the complete Meta catalog before returning the saved templates. */ + list( + session: string, + options: RequestOptions = {}, + ): Promise> { + this.requireServerCredential(); + return this.transport.request({ + method: "GET", + path: templatesPath(session), + ...options, + }); + } + + retrieve( + session: string, + name: string, + params: RetrieveCloudTemplateParams = {}, + options: RequestOptions = {}, + ): Promise> { + this.requireServerCredential(); + return this.transport.request({ + method: "GET", + path: templatePath(session, name), + query: { language: params.language }, + ...options, + }); + } + + /** + * Sends one request; the SDK never retries this provider write. Pass + * `options.idempotencyKey` so a manual retry after an unknown outcome returns + * `409 idempotency_completed` instead of submitting again, and list templates + * before resubmitting. + */ + create( + session: string, + body: CreateCloudTemplateRequest, + options: RequestOptions = {}, + ): Promise> { + this.requireServerCredential(); + return this.transport.request({ + method: "POST", + path: templatesPath(session), + body, + ...options, + maxNetworkRetries: 0, + }); + } + + /** Acceptance is not approval. Read the template before retrying an uncertain edit. */ + update( + session: string, + name: string, + body: EditCloudTemplateRequest, + params: RetrieveCloudTemplateParams = {}, + options: RequestOptions = {}, + ): Promise> { + this.requireServerCredential(); + return this.transport.request({ + method: "PATCH", + path: templatePath(session, name), + query: { language: params.language }, + body, + ...options, + maxNetworkRetries: 0, + }); + } + + /** + * Deletes every language of this name with one request. The SDK never + * retries it; reuse `options.idempotencyKey` for a manual retry and list + * templates to reconcile an unknown outcome. + */ + delete( + session: string, + name: string, + options: RequestOptions = {}, + ): Promise> { + this.requireServerCredential(); + return this.transport.request({ + method: "DELETE", + path: templatePath(session, name), + ...options, + maxNetworkRetries: 0, + }); + } +} + +function templatesPath(session: string): string { + return `/messaging/${encodeURIComponent(session)}/templates`; +} + +function templatePath(session: string, name: string): string { + return `${templatesPath(session)}/${encodeURIComponent(name)}`; +} diff --git a/packages/typescript/src/messaging/cloud-types.ts b/packages/typescript/src/messaging/cloud-types.ts new file mode 100644 index 00000000..0fdee9c9 --- /dev/null +++ b/packages/typescript/src/messaging/cloud-types.ts @@ -0,0 +1,72 @@ +/** Observed service-window state; unknown is never proof that a send is permitted. */ +export interface CustomerServiceWindow { + readonly state: "open" | "closed" | "unknown"; + readonly reason: + | "not_tracked" + | "tracking_started" + | "notifications_interrupted" + | "identity_unlinked" + | null; + readonly openedAt: string | null; + readonly expiresAt: string | null; + readonly checkedAt: string; +} + +export interface MetaPricingParams { + /** Inclusive ISO 8601 time. Defaults to 30 days before until. */ + readonly since?: string; + /** Exclusive ISO 8601 time. Defaults to now; maximum period is 93 days. */ + readonly until?: string; +} + +/** Counts from Meta status notifications, without prices or invoice amounts. */ +export interface MetaPricingGroup { + readonly category: string; + readonly pricingModel: string; + readonly pricingType: string | null; + readonly billable: boolean | null; + readonly messages: number; +} + +export interface MetaPricingSummary { + readonly source: "meta"; + readonly since: string; + readonly until: string; + readonly messages: number; + readonly groups: readonly MetaPricingGroup[]; +} + +export type CloudCredentialFailureCode = + | "app_credentials_rejected" + | "token_expired" + | "token_invalid" + | "token_app_mismatch" + | "permission_missing" + | "phone_not_registered" + | "webhook_not_subscribed" + | "credentials_unreadable" + | "meta_unavailable" + | "meta_response_invalid"; + +export interface CloudCredentialHealth { + readonly status: "pending" | "healthy" | "action_required" | "unknown"; + readonly checkedAt: string | null; + readonly nextCheckAt: string | null; + readonly token: { + readonly status: "valid" | "expired" | "invalid" | "unknown"; + readonly expiresAt: string | null; + }; + readonly missingPermissions: readonly ( + "whatsapp_business_messaging" | "whatsapp_business_management" + )[]; + readonly phoneRegistration: "registered" | "not_registered" | "unknown"; + readonly webhookSubscription: "subscribed" | "not_subscribed" | "unknown"; + readonly failureCode: CloudCredentialFailureCode | null; +} + +export interface CloudReauthorization { + readonly quicklinkId: string; + /** Share only with the person who manages this Number's Meta assets. */ + readonly url: string; + readonly session: string; +} diff --git a/packages/typescript/src/messaging/flow-encryption.ts b/packages/typescript/src/messaging/flow-encryption.ts new file mode 100644 index 00000000..3fb1c7d5 --- /dev/null +++ b/packages/typescript/src/messaging/flow-encryption.ts @@ -0,0 +1,61 @@ +import type { MessagingCredential } from "../credentials.js"; +import { PolymorfaConfigurationError } from "../errors.js"; +import { HttpTransport } from "../transport/http.js"; +import type { ApiResponse, RequestOptions } from "../transport/types.js"; + +export interface FlowEncryptionKey { + readonly business_public_key: string; + readonly business_public_key_signature_status: string; +} +export interface FlowEncryptionParams { + readonly version: string; +} +export interface RegisterFlowEncryptionKeyRequest { + readonly businessPublicKey: string; +} + +/** Public-key registration affects every dynamic Flow on this Meta phone number. */ +export class FlowEncryptionResource { + constructor( + private readonly transport: HttpTransport, + private readonly credentialType: MessagingCredential["type"], + ) {} + retrieve( + phoneNumberId: string, + params: FlowEncryptionParams, + options: RequestOptions = {}, + ): Promise> { + return this.transport.request({ + method: "GET", + path: this.path(phoneNumberId, params), + ...options, + }); + } + /** Send once; read the registered key after an uncertain outcome before another write. */ + register( + phoneNumberId: string, + body: RegisterFlowEncryptionKeyRequest, + params: FlowEncryptionParams, + options: RequestOptions = {}, + ): Promise> { + return this.transport.request({ + method: "POST", + path: this.path(phoneNumberId, params), + body: { business_public_key: body.businessPublicKey }, + ...options, + maxNetworkRetries: 0, + }); + } + private path(phoneNumberId: string, params: FlowEncryptionParams): string { + if (this.credentialType === "clientToken") + throw new PolymorfaConfigurationError( + "Flow encryption keys require an organization API key or project token.", + "credential", + ); + if (!phoneNumberId.trim() || !params.version.trim()) + throw new PolymorfaConfigurationError( + "Provide a Meta phone number ID and Graph version.", + ); + return `/graph/whatsapp/${encodeURIComponent(params.version)}/${encodeURIComponent(phoneNumberId)}/whatsapp_business_encryption`; + } +} diff --git a/packages/typescript/src/messaging/messages.ts b/packages/typescript/src/messaging/messages.ts index 673bb0f6..305484d7 100644 --- a/packages/typescript/src/messaging/messages.ts +++ b/packages/typescript/src/messaging/messages.ts @@ -56,6 +56,7 @@ export class MessagesResource { return this.post(session, "seen", body, options); } + /** Official Numbers require an inbound id and state typing; marks it read for an indicator lasting at most 25 seconds. */ setTyping( session: string, body: TypingRequest, diff --git a/packages/typescript/src/messaging/quicklinks.ts b/packages/typescript/src/messaging/quicklinks.ts index 741139b0..fa52ea92 100644 --- a/packages/typescript/src/messaging/quicklinks.ts +++ b/packages/typescript/src/messaging/quicklinks.ts @@ -27,7 +27,7 @@ export interface QuickLinkConfiguration extends SessionConfigurationOverrides { }; } -export type QuickLinkPurpose = "initial" | "add_connection"; +export type QuickLinkPurpose = "initial" | "add_connection" | "reauthorization"; export type QuickLinkConnectionGoal = "single" | "hybrid"; export type QuickLinkConnectionKind = "linked_devices" | "official_api"; export type QuickLinkHybridPhase = @@ -61,6 +61,36 @@ export interface QuickLink { export type QuickLinkStatusValue = "pending" | "opened" | "linked" | "connected" | "failed" | "cancelled"; +export type CloudSyncRequest = + | "not_applicable" + | "not_requested" + | "pending" + | "requesting" + | "accepted" + | "declined" + | "unknown"; +export type CloudSyncDelivery = + | "not_applicable" + | "not_requested" + | "unconfirmed" + | "partial" + | "complete" + | "declined"; + +export interface CloudSyncStatus { + readonly contacts: { + /** An accepted request receipt does not prove all contacts were delivered. */ + readonly request: CloudSyncRequest; + readonly receiptRecorded: boolean; + }; + readonly history: { + readonly request: CloudSyncRequest; + readonly receiptRecorded: boolean; + /** Meta-reported delivery progress, independent of connection readiness. */ + readonly delivery: CloudSyncDelivery; + }; +} + export interface QuickLinkStatus { readonly purpose: QuickLinkPurpose; readonly connectionGoal: QuickLinkConnectionGoal; @@ -73,6 +103,7 @@ export interface QuickLinkStatus { readonly contactsSync: string; readonly historySync: string; readonly historyProgress: number; + readonly sync: CloudSyncStatus; readonly errorCode: string | null; } | null; readonly id: string; diff --git a/packages/typescript/src/messaging/sessions.ts b/packages/typescript/src/messaging/sessions.ts index 8cd9fab5..af76e607 100644 --- a/packages/typescript/src/messaging/sessions.ts +++ b/packages/typescript/src/messaging/sessions.ts @@ -1,4 +1,10 @@ import type { MessagingCredential } from "../credentials.js"; +import type { + CloudCredentialHealth, + CloudReauthorization, + MetaPricingParams, + MetaPricingSummary, +} from "./cloud-types.js"; import { PolymorfaConfigurationError } from "../errors.js"; import { HttpTransport } from "../transport/http.js"; import type { ApiResponse, RequestOptions } from "../transport/types.js"; @@ -9,6 +15,7 @@ import type { OperationAccepted, PairCodeRequest, RequestPairCodeResponse, + SuccessEnvelope, UpdateSessionRequest, UpdateSessionResponse, } from "./types.js"; @@ -27,6 +34,48 @@ export class SessionsResource { private readonly credentialType: MessagingCredential["type"], ) {} + /** Official API beta. Requires sessions:read; counts carry no price or charge. */ + getMetaPricing( + session: string, + params: MetaPricingParams = {}, + options: RequestOptions = {}, + ): Promise>> { + this.assertServerCredential(); + return this.transport.request({ + method: "GET", + path: `/messaging/${encodeURIComponent(session)}/meta-pricing`, + query: { ...params }, + ...options, + }); + } + + /** Latest redacted provider checks; a healthy token does not grant beta access. */ + getCloudCredentialHealth( + session: string, + options: RequestOptions = {}, + ): Promise>> { + this.assertServerCredential(); + return this.transport.request({ + method: "GET", + path: `/messaging/${encodeURIComponent(session)}/cloud-credentials`, + ...options, + }); + } + + /** Create one reauthorization link for a stopped standalone Official API Number. Never stops it. */ + reauthorizeCloudCredentials( + session: string, + options: RequestOptions = {}, + ): Promise>> { + this.assertServerCredential(); + return this.transport.request({ + method: "POST", + path: `/messaging/${encodeURIComponent(session)}/cloud-credentials/reauthorize`, + ...options, + maxNetworkRetries: 0, + }); + } + list( options: RequestOptions = {}, ): Promise>> { diff --git a/packages/typescript/src/messaging/types.ts b/packages/typescript/src/messaging/types.ts index a361cc7f..1789de86 100644 --- a/packages/typescript/src/messaging/types.ts +++ b/packages/typescript/src/messaging/types.ts @@ -103,6 +103,8 @@ export interface Campaign { readonly completedAt: number | null; readonly createdAt: number; readonly updatedAt: number; + /** When the campaign may send, or null when it has no send window. */ + readonly sendWindow: CampaignSendWindow | null; /** Additional live repository fields omitted from the pinned OpenAPI schema. */ readonly composerBlueprint?: unknown; readonly messages?: unknown; @@ -113,6 +115,42 @@ export interface Campaign { readonly variantStrategy?: unknown; } +export type CampaignWeekday = + | "monday" + | "tuesday" + | "wednesday" + | "thursday" + | "friday" + | "saturday" + | "sunday"; + +/** Local `HH:MM` range; `start` is inclusive and `end` (up to `24:00`) exclusive. */ +export interface CampaignSendWindowRange { + readonly start: string; + readonly end: string; +} + +/** Stored send window. Recipients outside it stay queued until it next opens. */ +export interface CampaignSendWindow { + readonly timeZone: string; + readonly days: readonly CampaignWeekday[]; + readonly hours: readonly CampaignSendWindowRange[]; + readonly recipientTimeZone: boolean; + readonly timeZoneVariable: string; +} + +/** Send window input. Up to four non-overlapping ranges that do not cross midnight. */ +export interface CampaignSendWindowRequest { + /** IANA zone. Defaults to the team's time zone, or UTC. */ + readonly timeZone?: string; + readonly days: readonly CampaignWeekday[]; + readonly hours: readonly CampaignSendWindowRange[]; + /** Evaluate the window in each recipient's own time zone. Defaults to false. */ + readonly recipientTimeZone?: boolean; + /** Recipient variable holding an IANA zone. Defaults to `timeZone`. */ + readonly timeZoneVariable?: string; +} + export interface CampaignAnalytics { readonly campaignId: string; readonly recipientCount: number; @@ -132,6 +170,8 @@ export interface CreateCampaignRequest { readonly senderConfig?: Readonly>; /** Epoch milliseconds. */ readonly scheduledAt?: number; + /** When the campaign may send; null or omitted sends at any time. */ + readonly sendWindow?: CampaignSendWindowRequest | null; /** * Up to 1,000 recipients to queue with the draft. Invalid entries reject the * whole request; use `campaigns.addRecipients` for partial acceptance. @@ -2286,6 +2326,8 @@ export interface SeenRequest { export interface TypingRequest { readonly conversation: ConversationReference; + /** Required on Official Numbers: an inbound message to mark read while showing typing. */ + readonly id?: string; readonly state: "typing" | "recording" | "paused"; } diff --git a/packages/typescript/src/platform/flows.ts b/packages/typescript/src/platform/flows.ts index 49cf8a12..8cba75fc 100644 --- a/packages/typescript/src/platform/flows.ts +++ b/packages/typescript/src/platform/flows.ts @@ -1,24 +1,116 @@ -import { PolymorfaValidationError } from "../errors.js"; +import { + PolymorfaConfigurationError, + PolymorfaValidationError, +} from "../errors.js"; import { HttpTransport } from "../transport/http.js"; -import type { ApiResponse, RequestOptions } from "../transport/types.js"; -import type { DataEnvelope } from "./types.js"; +import type { + ApiResponse, + RawRequest, + RequestOptions, +} from "../transport/types.js"; +import { type DataEnvelope, unwrapResponse } from "./response.js"; +export type FlowCategory = + | "SIGN_UP" + | "SIGN_IN" + | "APPOINTMENT_BOOKING" + | "LEAD_GENERATION" + | "CONTACT_US" + | "CUSTOMER_SUPPORT" + | "SURVEY" + | "OTHER"; +export type FlowDraftStatus = "draft" | "ready" | "archived"; +export interface FlowValidationPointer { + readonly path?: string; + readonly lineStart?: number; + readonly lineEnd?: number; + readonly columnStart?: number; + readonly columnEnd?: number; +} +export interface FlowValidationIssue extends Omit< + FlowValidationPointer, + "path" +> { + readonly error?: string; + readonly errorType?: string; + readonly message?: string; + readonly pointers?: readonly FlowValidationPointer[]; +} +export interface FlowNumberLink { + readonly session: string; + /** Number session UUID, when the API reports it. */ + readonly sessionId?: string; + readonly wabaId: string; + readonly metaFlowId: string; + readonly status: string; + readonly categories: readonly string[]; + readonly validationErrors: readonly FlowValidationIssue[]; + readonly uploadState: + "stale" | "creating" | "uploading" | "valid" | "invalid" | "failed"; + readonly previewUrl?: string; + readonly previewExpiresAt?: number; + readonly lastSyncedAt: number; + readonly definitionDigest?: string; + readonly simulated?: boolean; +} export interface FlowSummary { readonly id: string; readonly name: string; - readonly status: "draft" | "ready" | "archived"; + readonly status: FlowDraftStatus; readonly version: string; readonly screenCount: number; - readonly metaLinks: readonly Readonly>[]; + readonly metaLinks: readonly FlowNumberLink[]; readonly createdAt: number; readonly updatedAt: number; } - export interface FlowDraft extends FlowSummary { readonly definition: Readonly>; } +export interface CreateFlowRequest { + readonly draftId?: string; + readonly name: string; + readonly definition: Readonly>; +} +export interface UpdateFlowRequest { + readonly expectedUpdatedAt: number; + readonly name?: string; + readonly status?: FlowDraftStatus; + readonly definition?: Readonly>; +} +export interface FlowProviderRequest { + readonly sessionId: string; + readonly categories?: readonly FlowCategory[]; + /** Reuse for the exact same operation; an uncertain operation is reconciled by sync. */ + readonly requestId?: string; +} +export interface FlowProviderOperation { + readonly id: string; + readonly requestId: string | null; + readonly flowId: string; + readonly flowName: string; + readonly sessionId: string; + readonly session: string; + readonly action: "create" | "upload" | "publish" | "deprecate" | "delete"; + readonly state: + "pending" | "succeeded" | "rejected" | "uncertain" | "superseded"; + readonly resolution: "response" | "reconciled" | "superseded" | null; + readonly wabaId: string | null; + readonly metaFlowId: string | null; + readonly definitionDigest: string | null; + readonly providerStatus: string | null; + readonly errorCode: string | null; + readonly providerCode: number | null; + readonly providerSubcode: number | null; + readonly createdAt: number; + readonly updatedAt: number; + readonly completedAt: number | null; +} +export interface FlowProviderResult { + readonly operation: FlowProviderOperation | null; + readonly flow: FlowDraft; +} -/** Reads project-owned Flow drafts; this does not publish a Flow to Meta. */ +/** Project Flow drafts and their Number-bound provider lifecycle. */ export class FlowsResource { constructor( private readonly transport: HttpTransport, @@ -27,19 +119,19 @@ export class FlowsResource { list( options: RequestOptions = {}, - ): Promise>> { - return this.transport.request({ - method: "GET", - path: "/platform/flows", - query: { projectId: this.projectId }, - ...options, - }); + ): Promise> { + return this.request("GET", "", undefined, options); + } + create( + body: CreateFlowRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", "", body, options); } - retrieve( flowId: string, options: RequestOptions = {}, - ): Promise>> { + ): Promise> { if ( typeof flowId !== "string" || !/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test( @@ -48,11 +140,106 @@ export class FlowsResource { ) { throw new PolymorfaValidationError("flowId must be a valid UUID."); } - return this.transport.request({ - method: "GET", - path: `/platform/flows/${encodeURIComponent(flowId)}`, - query: { projectId: this.projectId }, - ...options, - }); + return this.request("GET", flowPath(flowId), undefined, options); + } + update( + flowId: string, + body: UpdateFlowRequest, + options: RequestOptions = {}, + ): Promise> { + if ( + typeof body?.expectedUpdatedAt !== "number" || + !Number.isFinite(body.expectedUpdatedAt) + ) { + throw new PolymorfaValidationError( + "expectedUpdatedAt must be a finite number.", + ); + } + return this.request("PATCH", flowPath(flowId), body, options); } + delete( + flowId: string, + options: RequestOptions = {}, + ): Promise> { + return this.request("DELETE", flowPath(flowId), undefined, options); + } + upload( + flowId: string, + body: FlowProviderRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", `${flowPath(flowId)}/upload`, body, options); + } + publish( + flowId: string, + body: FlowProviderRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", `${flowPath(flowId)}/publish`, body, options); + } + deprecate( + flowId: string, + body: FlowProviderRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", `${flowPath(flowId)}/deprecate`, body, options); + } + discard( + flowId: string, + body: FlowProviderRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", `${flowPath(flowId)}/discard`, body, options); + } + /** Reconcile with a provider read. This does not repeat an uncertain mutation. */ + sync( + flowId: string, + body: FlowProviderRequest, + options: RequestOptions = {}, + ): Promise> { + return this.request("POST", `${flowPath(flowId)}/sync`, body, options); + } + receipts( + flowId: string, + options: RequestOptions = {}, + ): Promise> { + return this.request( + "GET", + `${flowPath(flowId)}/receipts`, + undefined, + options, + ); + } + private request( + method: RawRequest["method"], + path: string, + input: object | undefined, + options: RequestOptions, + ): Promise> { + if ( + input && + (Object.hasOwn(input, "projectId") || Object.hasOwn(input, "flowId")) + ) + throw new PolymorfaConfigurationError( + "Flow input cannot override its project or path identity.", + "input", + ); + const value = { ...input, projectId: this.projectId }; + return this.transport + .request>({ + ...options, + method, + path: `/platform/flows${path}`, + ...(method === "GET" || method === "DELETE" + ? { query: value } + : { body: value }), + ...(method === "GET" ? {} : { maxNetworkRetries: 0 }), + }) + .then(unwrapResponse); + } +} +function flowPath(id: string): string { + if (typeof id !== "string" || !id.trim()) + throw new PolymorfaConfigurationError("Flow ID is required.", "flowId"); + return `/${encodeURIComponent(id)}`; } diff --git a/packages/typescript/src/platform/types.ts b/packages/typescript/src/platform/types.ts index e1b55ff0..815b232c 100644 --- a/packages/typescript/src/platform/types.ts +++ b/packages/typescript/src/platform/types.ts @@ -2,6 +2,7 @@ import type { CampaignRecipient, CampaignRecipientInput, CampaignRecipientStatus, + CampaignSendWindowRequest, InvalidRecipientRow, } from "../messaging/types.js"; @@ -183,6 +184,8 @@ export interface CreatePlatformCampaignRequest { readonly senderConfig?: Readonly>; /** Scheduled start time in Unix milliseconds. */ readonly scheduledAt?: number; + /** When the campaign may send; null or omitted sends at any time. */ + readonly sendWindow?: CampaignSendWindowRequest | null; /** At most 1,000 recipients. */ readonly recipients?: readonly CampaignRecipientInput[]; /** Ignored when inline recipients are supplied. */ @@ -222,6 +225,8 @@ export interface PlatformCampaignParams { */ export interface UpdatePlatformCampaignRequest { readonly recipientListId?: string | null; + /** Replaces the send window; null removes it. */ + readonly sendWindow?: CampaignSendWindowRequest | null; readonly [field: string]: unknown; } diff --git a/packages/typescript/src/webhooks/events.ts b/packages/typescript/src/webhooks/events.ts index 1dfadcef..7051d531 100644 --- a/packages/typescript/src/webhooks/events.ts +++ b/packages/typescript/src/webhooks/events.ts @@ -206,6 +206,13 @@ export interface CloudMessagePayload { readonly replyChoice?: ReplyChoice; readonly parentMessageId?: string; readonly interactive?: Readonly>; + /** Provider referral source only; it does not establish a conversion or payment. */ + readonly referral?: Readonly<{ + source_type?: string; + source_id?: string; + source_url?: string; + ctwa_clid?: string; + }>; readonly [key: string]: unknown; } @@ -222,6 +229,14 @@ export interface MessageSentPayload { readonly timestamp: number; } +/** Meta classification copied from a status notification; contains no price. */ +export interface MetaPricingReport { + readonly billable?: boolean; + readonly pricing_model?: string; + readonly category?: string; + readonly type?: string; +} + export interface MessageAckPayload { readonly messages: readonly { readonly id: string; @@ -234,6 +249,7 @@ export interface MessageAckPayload { readonly sender?: IdentityReference; readonly type: string; readonly timestamp: number; + readonly pricing?: MetaPricingReport; } export interface MessageDeletePayload { @@ -255,11 +271,28 @@ export interface PollVotePayload { readonly timestamp: number; } -export interface SessionStatusPayload { +export interface RuntimeSessionStatusPayload { readonly status: string; readonly statusReason?: string; + readonly banCode?: number; + readonly banReason?: string; + /** Unix seconds. */ + readonly banExpiresAt?: number; + readonly detail?: string; +} + +/** A Meta account notification, not a runtime connection-state transition. */ +export interface CloudAccountStatusPayload { + readonly source: "meta"; + readonly kind: + "account_alerts" | "account_update" | "phone_number_name_update"; + readonly wabaId?: string; + readonly value: Readonly>; } +export type SessionStatusPayload = + RuntimeSessionStatusPayload | CloudAccountStatusPayload; + export type SessionRestrictionType = "reachout_timelock"; export interface SessionRestrictionUpdatedPayload { @@ -814,7 +847,7 @@ export interface MessageFailedPayload { readonly timestamp: number; } -export interface TemplateStatusPayload { +export interface RuntimeTemplateStatusPayload { readonly templateName: string; readonly templateId: string; readonly status: string; @@ -823,6 +856,22 @@ export interface TemplateStatusPayload { readonly qualityRating: string; } +export interface CloudTemplateStatusPayload { + readonly kind: + "message_template_status_update" | "message_template_quality_update"; + readonly event?: string; + readonly templateId?: string; + readonly templateName?: string; + readonly language?: string; + readonly reason?: string; + readonly previousQualityScore?: string; + readonly newQualityScore?: string; + readonly wabaId?: string; +} + +export type TemplateStatusPayload = + RuntimeTemplateStatusPayload | CloudTemplateStatusPayload; + export interface CampaignLaunchedPayload { readonly campaignId: string; readonly name: string; diff --git a/packages/typescript/src/webhooks/index.ts b/packages/typescript/src/webhooks/index.ts index c6dac1de..c458d853 100644 --- a/packages/typescript/src/webhooks/index.ts +++ b/packages/typescript/src/webhooks/index.ts @@ -80,6 +80,7 @@ export { type LinkedDeviceMessageType, type LinkedHistorySyncPayload, type MessageAckPayload, + type MetaPricingReport, type MessageDeletePayload, type MessageEchoPayload, type MessageFailedPayload, @@ -101,7 +102,11 @@ export { type SessionRestrictionUpdatedPayload, type SessionPhoneOfflinePayload, type SessionStatusPayload, + type RuntimeSessionStatusPayload, + type CloudAccountStatusPayload, type TemplateStatusPayload, + type RuntimeTemplateStatusPayload, + type CloudTemplateStatusPayload, type UsageRecordedPayload, type UnknownWebhookEvent, type VoiceAssetEventPayload, diff --git a/packages/typescript/test/cloud-catalogs.test.ts b/packages/typescript/test/cloud-catalogs.test.ts new file mode 100644 index 00000000..18de3c9f --- /dev/null +++ b/packages/typescript/test/cloud-catalogs.test.ts @@ -0,0 +1,69 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { MessagingClient } from "../src/index.js"; +import { PROJECT_TOKEN } from "./support/credentials.js"; +import { startTestServer, type TestServer } from "./support/http-server.js"; +const servers: TestServer[] = []; +afterEach(async () => { + await Promise.all(servers.splice(0).map((server) => server.close())); +}); +describe("Official API catalog discovery", () => { + it("preserves opaque catalog IDs and cursors through the exact Graph route", async () => { + const payload = { + data: [{ id: "98765432109876543210", name: "Shop" }], + paging: { cursors: { after: "cursor+/=" } }, + }; + const server = await startTestServer(() => ({ + body: JSON.stringify(payload), + })); + servers.push(server); + const client = new MessagingClient({ + credential: { type: "projectToken", value: PROJECT_TOKEN }, + baseUrl: server.url, + }); + expect( + ( + await client.cloudCatalogs.list("12345678901234567890", { + version: "v26.0", + limit: 50, + after: "cursor+/=", + }) + ).data, + ).toEqual(payload); + expect(server.requests[0]!.path).toBe( + "/graph/whatsapp/v26.0/12345678901234567890/product_catalogs?limit=50&after=cursor%2B%2F%3D", + ); + expect(server.requests[0]!.headers.authorization).toBe( + `Bearer ${PROJECT_TOKEN}`, + ); + }); + it("preserves Meta permission errors without retrying forbidden reads", async () => { + const server = await startTestServer(() => ({ + status: 403, + body: JSON.stringify({ + error: { + message: "Permission required", + code: 200, + type: "OAuthException", + }, + }), + })); + servers.push(server); + const client = new MessagingClient({ + credential: { type: "projectToken", value: PROJECT_TOKEN }, + baseUrl: server.url, + maxNetworkRetries: 2, + }); + await expect( + client.cloudCatalogs.list("123", { version: "v26.0" }), + ).rejects.toMatchObject({ status: 403 }); + expect(server.requests).toHaveLength(1); + }); + it("rejects client credentials before dispatch", () => { + const client = new MessagingClient({ + credential: { type: "clientToken", value: `pmfa_ct_${"A".repeat(94)}` }, + }); + expect(() => + client.cloudCatalogs.list("123", { version: "v26.0" }), + ).toThrow("organization API key or project token"); + }); +}); diff --git a/packages/typescript/test/cloud-operations.test.ts b/packages/typescript/test/cloud-operations.test.ts new file mode 100644 index 00000000..57f19b6f --- /dev/null +++ b/packages/typescript/test/cloud-operations.test.ts @@ -0,0 +1,171 @@ +import { afterEach, describe, expect, expectTypeOf, it } from "vitest"; +import { + MessagingClient, + type MessageAckPayload, + type MetaPricingReport, +} from "../src/index.js"; +import { ORGANIZATION_API_KEY, PROJECT_TOKEN } from "./support/credentials.js"; +import { startTestServer, type TestServer } from "./support/http-server.js"; + +const servers: TestServer[] = []; +afterEach(async () => { + await Promise.all(servers.splice(0).map((server) => server.close())); +}); + +function client( + server: TestServer, + credential: "apiKey" | "projectToken" | "clientToken" = "apiKey", +) { + return new MessagingClient({ + credential: { + type: credential, + value: + credential === "apiKey" + ? ORGANIZATION_API_KEY + : credential === "projectToken" + ? PROJECT_TOKEN + : `pmfa_ct_${"A".repeat(94)}`, + }, + baseUrl: server.url, + maxNetworkRetries: 2, + }); +} + +describe("Official API operations", () => { + it.each(["apiKey", "projectToken"] as const)( + "preserves unknown observations and uses Messaging routes with %s", + async (credential) => { + const state = { + state: "unknown", + reason: "notifications_interrupted", + openedAt: null, + expiresAt: null, + checkedAt: "2026-09-26T00:00:00Z", + }; + const pricing = { + source: "meta", + since: "2026-09-01T00:00:00Z", + until: "2026-09-26T00:00:00Z", + messages: 1, + groups: [ + { + category: "utility", + pricingModel: "PMP", + pricingType: null, + billable: null, + messages: 1, + }, + ], + }; + const health = { + status: "unknown", + checkedAt: null, + nextCheckAt: null, + token: { status: "unknown", expiresAt: null }, + missingPermissions: [], + phoneRegistration: "unknown", + webhookSubscription: "unknown", + failureCode: "meta_unavailable", + }; + const link = { + quicklinkId: "ql_123", + url: "https://pair.example/secret-link", + session: "support/eu", + }; + const data = [state, pricing, health, link]; + let index = 0; + const server = await startTestServer(() => ({ + body: JSON.stringify({ success: true, data: data[index++] }), + })); + servers.push(server); + const sdk = client(server, credential); + expect( + (await sdk.chats.getServiceWindow("support/eu", "+5511999999999")).data + .data, + ).toEqual(state); + expect( + ( + await sdk.sessions.getMetaPricing("support/eu", { + since: pricing.since, + until: pricing.until, + }) + ).data.data, + ).toEqual(pricing); + expect( + (await sdk.sessions.getCloudCredentialHealth("support/eu")).data.data, + ).toEqual(health); + expect( + (await sdk.sessions.reauthorizeCloudCredentials("support/eu")).data + .data, + ).toEqual(link); + expect(server.requests.map((r) => `${r.method} ${r.path}`)).toEqual([ + "GET /messaging/support%2Feu/chats/%2B5511999999999/service-window", + "GET /messaging/support%2Feu/meta-pricing?since=2026-09-01T00%3A00%3A00Z&until=2026-09-26T00%3A00%3A00Z", + "GET /messaging/support%2Feu/cloud-credentials", + "POST /messaging/support%2Feu/cloud-credentials/reauthorize", + ]); + }, + ); + + it("rejects client tokens before disclosing any request", async () => { + const server = await startTestServer(() => ({ body: "{}" })); + servers.push(server); + const sdk = client(server, "clientToken"); + for (const request of [ + () => sdk.chats.getServiceWindow("support", "+5511999999999"), + () => sdk.sessions.getMetaPricing("support"), + () => sdk.sessions.getCloudCredentialHealth("support"), + () => sdk.sessions.reauthorizeCloudCredentials("support"), + ]) + expect(request).toThrow(); + expect(server.requests).toHaveLength(0); + }); + + it("does not replay link creation with an idempotency key or retry override", async () => { + const server = await startTestServer(() => ({ + status: 502, + body: JSON.stringify({ + error: { code: "upstream_failure", message: "Outcome unknown" }, + }), + })); + servers.push(server); + await expect( + client(server).sessions.reauthorizeCloudCredentials("support", { + idempotencyKey: "same-key", + maxNetworkRetries: 4, + }), + ).rejects.toMatchObject({ status: 502 }); + expect(server.requests).toHaveLength(1); + }); + + it.each([403, 409, 503])( + "preserves %s errors without synthesizing health or window state", + async (status) => { + const server = await startTestServer(() => ({ + status, + body: JSON.stringify({ + error: { code: "feature_unavailable", message: "Unavailable" }, + }), + })); + servers.push(server); + await expect( + client(server).chats.getServiceWindow("support", "+5511999999999", { + maxNetworkRetries: 0, + }), + ).rejects.toMatchObject({ status }); + }, + ); + + it("types provider pricing as optional classification rather than a charge", () => { + expectTypeOf().toEqualTypeOf< + MetaPricingReport | undefined + >(); + const report: MetaPricingReport = { + category: "utility", + pricing_model: "PMP", + type: "free_customer_service", + billable: false, + }; + expect(report.billable).toBe(false); + }); +}); diff --git a/packages/typescript/test/cloud-templates.test.ts b/packages/typescript/test/cloud-templates.test.ts new file mode 100644 index 00000000..951051a2 --- /dev/null +++ b/packages/typescript/test/cloud-templates.test.ts @@ -0,0 +1,178 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { MessagingClient } from "../src/index.js"; +import { ORGANIZATION_API_KEY } from "./support/credentials.js"; +import { startTestServer, type TestServer } from "./support/http-server.js"; + +const servers: TestServer[] = []; +afterEach(async () => { + await Promise.all(servers.splice(0).map((server) => server.close())); +}); + +function client(server: TestServer) { + return new MessagingClient({ + credential: { type: "apiKey", value: ORGANIZATION_API_KEY }, + baseUrl: server.url, + maxNetworkRetries: 2, + }); +} + +describe("Cloud templates", () => { + it("rejects client tokens before every template request", async () => { + const server = await startTestServer(() => ({ body: "{}" })); + servers.push(server); + const resource = new MessagingClient({ + credential: { type: "clientToken", value: "pmfa_ct_browser" }, + baseUrl: server.url, + }).cloudTemplates; + const body = { + name: "delivery", + language: "en_US", + category: "UTILITY" as const, + components: [{}], + }; + const requests = [ + () => resource.list("support"), + () => resource.retrieve("support", "delivery"), + () => resource.create("support", body), + () => resource.update("support", "delivery", { components: [{}] }), + () => resource.delete("support", "delivery"), + ]; + for (const request of requests) { + expect(request).toThrow(/organization API key or project token/); + } + expect(server.requests).toHaveLength(0); + }); + + it("preserves receipt fields and encodes Number, template name and language separately", async () => { + const template = { + id: "tpl_1", + tenantId: "org_1", + session: "support/eu", + wabaId: "12345678901234567890", + name: "delivery/name", + language: "pt_BR", + category: "UTILITY", + status: "IN_APPEAL", + components: [{ type: "BODY", text: "Your delivery is ready" }], + metaTemplateId: "98765432109876543210", + rejectionReason: "FORMAT", + qualityScore: "GREEN", + createdAt: "2026-09-26T00:00:00Z", + updatedAt: "2026-09-26T00:00:00Z", + }; + const server = await startTestServer(() => ({ + body: JSON.stringify({ success: true, data: template }), + })); + servers.push(server); + const resource = client(server).cloudTemplates; + expect( + ( + await resource.retrieve("support/eu", "delivery/name", { + language: "pt_BR", + }) + ).data.data, + ).toEqual(template); + await resource.retrieve("support/eu", "delivery/name"); + await resource.list("support/eu"); + const body = { + name: "delivery", + language: "pt_BR", + category: "UTILITY" as const, + components: template.components, + }; + await resource.create("support/eu", body); + await resource.delete("support/eu", "delivery/name"); + expect(server.requests.map((r) => `${r.method} ${r.path}`)).toEqual([ + "GET /messaging/support%2Feu/templates/delivery%2Fname?language=pt_BR", + "GET /messaging/support%2Feu/templates/delivery%2Fname", + "GET /messaging/support%2Feu/templates", + "POST /messaging/support%2Feu/templates", + "DELETE /messaging/support%2Feu/templates/delivery%2Fname", + ]); + expect(JSON.parse(server.requests[3]!.body)).toEqual(body); + expect(server.requests[0]!.headers.authorization).toBe( + `Bearer ${ORGANIZATION_API_KEY}`, + ); + }); + + it("edits one language and preserves acceptance without claiming approval", async () => { + const data = { accepted: true, name: "order/update", language: "pt_BR" }; + const server = await startTestServer(() => ({ + status: 202, + body: JSON.stringify({ success: true, data }), + })); + servers.push(server); + const body = { components: [{ type: "BODY", text: "Ready" }] }; + const response = await client(server).cloudTemplates.update( + "support/eu", + "order/update", + body, + { language: "pt_BR" }, + ); + expect(response.data.data).toEqual(data); + expect(response.metadata.status).toBe(202); + expect(server.requests[0]).toMatchObject({ + method: "PATCH", + path: "/messaging/support%2Feu/templates/order%2Fupdate?language=pt_BR", + }); + expect(JSON.parse(server.requests[0]!.body)).toEqual(body); + }); + + it.each(["create", "update", "delete"] as const)( + "does not replay an uncertain %s, even with a key and retry override", + async (method) => { + const server = await startTestServer(() => ({ + status: 502, + body: JSON.stringify({ + error: { + code: "upstream_failure", + message: "Meta outcome is unknown", + }, + }), + })); + servers.push(server); + const resource = client(server).cloudTemplates; + const options = { idempotencyKey: "customer-key", maxNetworkRetries: 3 }; + const request = + method === "create" + ? resource.create( + "support", + { + name: "delivery", + language: "en_US", + category: "UTILITY", + components: [{}], + }, + options, + ) + : method === "update" + ? resource.update( + "support", + "delivery", + { components: [{}] }, + { language: "en_US" }, + options, + ) + : resource.delete("support", "delivery", options); + await expect(request).rejects.toMatchObject({ status: 502 }); + expect(server.requests).toHaveLength(1); + // The caller's key reaches the API so a manual retry is fenced there. + expect(server.requests[0]?.headers["idempotency-key"]).toBe( + "customer-key", + ); + }, + ); + + it("returns a catalog failure instead of an empty successful list", async () => { + const server = await startTestServer(() => ({ + status: 502, + body: JSON.stringify({ + error: { code: "upstream_failure", message: "Catalog unavailable" }, + }), + })); + servers.push(server); + await expect( + client(server).cloudTemplates.list("support", { maxNetworkRetries: 0 }), + ).rejects.toMatchObject({ status: 502 }); + }); +}); diff --git a/packages/typescript/test/coverage-reconciliation.test.ts b/packages/typescript/test/coverage-reconciliation.test.ts index c047c53d..eced6c63 100644 --- a/packages/typescript/test/coverage-reconciliation.test.ts +++ b/packages/typescript/test/coverage-reconciliation.test.ts @@ -196,7 +196,7 @@ describe("reconciled coverage evidence", () => { }; expect(source.repository).toBe("polymorfa/polymorfa"); // Repinning the reviewed source requires updating this regression gate too. - expect(source.commit).toBe("5f6a2b1470821c1a2b4077aa8de14214faede57a"); + expect(source.commit).toBe("29abb7b66a8e225af4df5cf354e9836ccb2ce04c"); expect(ledger.sourceCommit).toBe(source.commit); expect(Object.keys(source.contracts).sort()).toEqual([ "messaging", diff --git a/packages/typescript/test/coverage.test.ts b/packages/typescript/test/coverage.test.ts index 45aed8c5..e92b113b 100644 --- a/packages/typescript/test/coverage.test.ts +++ b/packages/typescript/test/coverage.test.ts @@ -173,12 +173,12 @@ describe("coverage checker", () => { const result = runRepositoryChecker(); expect(result.status, result.stderr).toBe(0); expect(result.report).toMatchObject({ - sourceCommit: "5f6a2b1470821c1a2b4077aa8de14214faede57a", - total: 519, - covered: 387, + sourceCommit: "29abb7b66a8e225af4df5cf354e9836ccb2ce04c", + total: 536, + covered: 405, partial: 0, missing: 0, - excluded: 132, + excluded: 131, changed: 0, }); const resolutions = (result.report?.resolutions ?? []) as Array<{ diff --git a/packages/typescript/test/flows.test.ts b/packages/typescript/test/flows.test.ts index cc967592..ac6d27df 100644 --- a/packages/typescript/test/flows.test.ts +++ b/packages/typescript/test/flows.test.ts @@ -1,4 +1,4 @@ -import { describe, expect, expectTypeOf, it, vi } from "vitest"; +import { afterEach, describe, expect, expectTypeOf, it, vi } from "vitest"; import { Client, PolymorfaAuthorizationError, @@ -6,13 +6,164 @@ import { type FlowDraft, type FlowSummary, type FlowsResource, + type FlowProviderResult, + type CreateFlowRequest, + type FlowProviderRequest, } from "../src/index.js"; import { ORGANIZATION_API_KEY, PROJECT_TOKEN } from "./support/credentials.js"; +import { startTestServer, type TestServer } from "./support/http-server.js"; +const servers: TestServer[] = []; +afterEach(async () => { + await Promise.all(servers.splice(0).map((server) => server.close())); +}); +const projectId = "11111111-2222-4333-8444-555555555555"; +function client(server: TestServer) { + return new Client({ + credential: { type: "projectToken", value: PROJECT_TOKEN }, + projectId, + baseUrl: server.url, + maxNetworkRetries: 3, + }); +} + +describe("project Flow lifecycle", () => { + it("rejects malformed Flow path IDs and update revisions before transport", async () => { + const server = await startTestServer(() => ({ body: "{}" })); + servers.push(server); + const flows = client(server).flows; + expect(() => flows.delete(undefined as unknown as string)).toThrow( + "Flow ID is required", + ); + expect(() => + flows.upload(null as unknown as string, { sessionId: "support" }), + ).toThrow("Flow ID is required"); + for (const expectedUpdatedAt of [undefined, NaN, Infinity, -Infinity]) { + expect(() => + flows.update("flow", { + expectedUpdatedAt: expectedUpdatedAt as number, + }), + ).toThrow("expectedUpdatedAt must be a finite number"); + } + expect(server.requests).toHaveLength(0); + }); -const projectId = "10000000-0000-4000-8000-000000000001"; -const flowId = "20000000-0000-4000-8000-000000000002"; + it("binds project identity on all draft and lifecycle paths", async () => { + const server = await startTestServer(() => ({ + body: JSON.stringify({ data: null }), + })); + servers.push(server); + const flows = client(server).flows; + await flows.list(); + expect( + (await flows.retrieve("20000000-0000-4000-8000-000000000002")).data, + ).toBeNull(); + await flows.create({ name: "Booking", definition: { version: "7.1" } }); + await flows.update("flow/eu", { expectedUpdatedAt: 42, name: "Booking 2" }); + await flows.delete("flow/eu"); + for (const method of [ + "upload", + "publish", + "deprecate", + "discard", + "sync", + ] as const) { + await flows[method]("flow/eu", { + sessionId: "support", + categories: ["APPOINTMENT_BOOKING"], + requestId: "22222222-2222-4222-8222-222222222222", + }); + } + await flows.receipts("flow/eu"); + expect(server.requests.map((r) => `${r.method} ${r.path}`)).toEqual([ + `GET /platform/flows?projectId=${projectId}`, + `GET /platform/flows/20000000-0000-4000-8000-000000000002?projectId=${projectId}`, + "POST /platform/flows", + "PATCH /platform/flows/flow%2Feu", + `DELETE /platform/flows/flow%2Feu?projectId=${projectId}`, + ...["upload", "publish", "deprecate", "discard", "sync"].map( + (action) => `POST /platform/flows/flow%2Feu/${action}`, + ), + `GET /platform/flows/flow%2Feu/receipts?projectId=${projectId}`, + ]); + for (const request of server.requests.filter((r) => + ["POST", "PATCH"].includes(r.method), + )) + expect(JSON.parse(request.body)).toHaveProperty("projectId", projectId); + expect(JSON.parse(server.requests[5]!.body)).toMatchObject({ + requestId: "22222222-2222-4222-8222-222222222222", + }); + }); + it("exposes Flow authority only through a project and rejects input overrides", async () => { + const server = await startTestServer(() => ({ + body: JSON.stringify({ data: null }), + })); + servers.push(server); + const organization = new Client({ + credential: { type: "organizationApiKey", value: ORGANIZATION_API_KEY }, + baseUrl: server.url, + }); + expect(Object.hasOwn(organization, "flows")).toBe(false); + const flows = organization.project(projectId).flows; + expect(() => + flows.create({ + projectId: "another", + name: "Booking", + definition: {}, + } as CreateFlowRequest), + ).toThrow("override"); + expect(() => + flows.upload("flow", { + flowId: "another", + sessionId: "support", + } as FlowProviderRequest), + ).toThrow("override"); + expect(server.requests).toHaveLength(0); + }); + it.each(["upload", "publish", "deprecate", "discard", "sync"] as const)( + "does not repeat %s after an uncertain response", + async (action) => { + const server = await startTestServer(() => ({ + status: 503, + body: JSON.stringify({ + error: { code: "service_unavailable", message: "Unknown outcome" }, + }), + })); + servers.push(server); + await expect( + client(server).flows[action]( + "flow", + { sessionId: "support" }, + { idempotencyKey: "request", maxNetworkRetries: 4 }, + ), + ).rejects.toMatchObject({ status: 503 }); + expect(server.requests).toHaveLength(1); + }, + ); + it("preserves an uncertain receipt independently of a 200 response", async () => { + const data = { + operation: { + state: "uncertain", + flowName: "original_name", + errorCode: "provider_outcome_unknown", + }, + flow: { id: "flow" }, + }; + const server = await startTestServer(() => ({ + body: JSON.stringify({ data }), + })); + servers.push(server); + const response = await client(server).flows.upload("flow", { + sessionId: "support", + }); + expectTypeOf(response.data).toEqualTypeOf(); + expect(response.data).toEqual(data); + expectTypeOf(response.data.operation!.flowName).toEqualTypeOf(); + }); +}); + +const readFlowId = "20000000-0000-4000-8000-000000000002"; const summary: FlowSummary = { - id: flowId, + id: readFlowId, name: "Registration", status: "draft", version: "7.1", @@ -23,36 +174,33 @@ const summary: FlowSummary = { }; describe("project Flow reads", () => { - it("binds both reads to the selected project and preserves list and nullable get envelopes", async () => { + it("binds reads to the selected project and unwraps list and nullable get responses", async () => { const fetch = vi.fn(async (request) => { const url = new URL(String(request)); return Response.json({ data: url.pathname === "/platform/flows" ? [summary] - : url.pathname.endsWith(flowId) + : url.pathname.endsWith(readFlowId) ? { ...summary, definition: { version: "7.1", screens: [] } } : null, }); }); - const client = new Client({ + const sdk = new Client({ credential: { type: "organizationApiKey", value: ORGANIZATION_API_KEY }, fetch, }); - expect("flows" in client).toBe(false); - const flows = client.project(projectId).flows; + expect("flows" in sdk).toBe(false); + const flows = sdk.project(projectId).flows; expectTypeOf(flows).toEqualTypeOf(); const listed = await flows.list(); - const retrieved = await flows.retrieve(flowId); + const retrieved = await flows.retrieve(readFlowId); const absent = await flows.retrieve("30000000-0000-4000-8000-000000000003"); - expectTypeOf(listed.data.data).toEqualTypeOf(); - expectTypeOf(retrieved.data.data).toEqualTypeOf(); - expect(listed.data.data).toEqual([summary]); - expect(retrieved.data.data?.definition).toEqual({ - version: "7.1", - screens: [], - }); - expect(absent.data.data).toBeNull(); + expectTypeOf(listed.data).toEqualTypeOf(); + expectTypeOf(retrieved.data).toEqualTypeOf(); + expect(listed.data).toEqual([summary]); + expect(retrieved.data?.definition).toEqual({ version: "7.1", screens: [] }); + expect(absent.data).toBeNull(); expect( fetch.mock.calls.map(([url, init]) => [String(url), init?.method]), ).toEqual([ @@ -61,7 +209,7 @@ describe("project Flow reads", () => { "GET", ], [ - `https://api.polymorfa.com/platform/flows/${flowId}?projectId=${projectId}`, + `https://api.polymorfa.com/platform/flows/${readFlowId}?projectId=${projectId}`, "GET", ], [ @@ -78,18 +226,18 @@ describe("project Flow reads", () => { { status: 403 }, ), ); - const client = new Client({ + const sdk = new Client({ credential: { type: "projectToken", value: PROJECT_TOKEN }, projectId, fetch, maxNetworkRetries: 0, }); - expect(() => client.project("other-project")).toThrow(); - expect(() => client.flows.retrieve("../other")).toThrow( + expect(() => sdk.project("other-project")).toThrow(); + expect(() => sdk.flows.retrieve("../other")).toThrow( PolymorfaValidationError, ); expect(fetch).not.toHaveBeenCalled(); - await expect(client.flows.list()).rejects.toBeInstanceOf( + await expect(sdk.flows.list()).rejects.toBeInstanceOf( PolymorfaAuthorizationError, ); expect(fetch).toHaveBeenCalledTimes(1); diff --git a/packages/typescript/test/messages.test.ts b/packages/typescript/test/messages.test.ts index 0f1af4fe..1e5ea03f 100644 --- a/packages/typescript/test/messages.test.ts +++ b/packages/typescript/test/messages.test.ts @@ -242,6 +242,19 @@ describe("MessagingClient message routes", () => { expect(requests[0]?.headers["idempotency-key"]).toBe("send-text"); }); + it("forwards the Official typing inbound message ID without dropping it", async () => { + const { client, requests } = await messagesServer(); + const body = { + conversation: { id: "739182640518203" }, + id: "739182640518204", + state: "typing" as const, + }; + await client.messages.setTyping("support", body); + expect(requests).toHaveLength(1); + expect(JSON.parse(requests[0]!.body)).toEqual(body); + expect(requests[0]!.path).toBe("/messaging/support/messages/typing"); + }); + it("keeps actions on their exact message and chat routes", async () => { const { client, requests } = await messagesServer(); const options = { idempotencyKey: "message-action" } as const; diff --git a/packages/typescript/test/platform-campaign-create.test.ts b/packages/typescript/test/platform-campaign-create.test.ts index 2463ee39..eb727b75 100644 --- a/packages/typescript/test/platform-campaign-create.test.ts +++ b/packages/typescript/test/platform-campaign-create.test.ts @@ -23,6 +23,13 @@ const body = { nested: [null, { enabled: false }], }, scheduledAt: 1_800_000_000_000, + sendWindow: { + timeZone: "America/Sao_Paulo", + days: ["monday", "friday"], + hours: [{ start: "09:00", end: "18:00" }], + recipientTimeZone: true, + timeZoneVariable: "timeZone", + }, recipients: [{ phone: "+15551234567", variables: { plan: "pro" } }], recipientCount: 100, composerBlueprint: { steps: [null, { text: "Hello" }] }, diff --git a/packages/typescript/test/quicklinks.test.ts b/packages/typescript/test/quicklinks.test.ts index 4dca7d04..38390f58 100644 --- a/packages/typescript/test/quicklinks.test.ts +++ b/packages/typescript/test/quicklinks.test.ts @@ -20,6 +20,38 @@ afterEach(async () => { }); describe("MessagingClient.quickLinks", () => { + it("preserves a sync request receipt separately from unknown delivery", async () => { + const sync = { + contacts: { request: "accepted", receiptRecorded: true }, + history: { + request: "unknown", + receiptRecorded: false, + delivery: "unconfirmed", + }, + }; + const server = await startTestServer(() => ({ + body: JSON.stringify({ + success: true, + data: { + id: "ql_1", + status: "connected", + onboarding: { stage: "connected", sync }, + }, + }), + })); + servers.push(server); + const client = new MessagingClient({ + credential: { type: "apiKey", value: ORGANIZATION_API_KEY }, + baseUrl: server.url, + }); + const response = await client.quickLinks.retrieve("ql_1"); + expect(response.data.data.onboarding?.sync).toEqual(sync); + expectTypeOf( + response.data.data.onboarding!.sync.history.delivery, + ).toEqualTypeOf(); + expect(server.requests).toHaveLength(1); + }); + it("requires an existing session for supplementary setup at compile time", () => { const initial = {} satisfies CreateQuickLinkRequest; const supplement = { diff --git a/packages/typescript/test/webhook-contract.test.ts b/packages/typescript/test/webhook-contract.test.ts index c16bbd7f..61d2e064 100644 --- a/packages/typescript/test/webhook-contract.test.ts +++ b/packages/typescript/test/webhook-contract.test.ts @@ -11,6 +11,9 @@ import { type ProjectWebhookDeliveryAttempt, type OrganizationWebhookDeliveryAttempt, type SessionLoggedOutPayload, + type RuntimeTemplateStatusPayload, + type CloudTemplateStatusPayload, + type CloudAccountStatusPayload, type WebhookPayloadMap, } from "../src/index.js"; @@ -175,7 +178,11 @@ const campaign = { campaignId: "cmp_1" } as const; type P = WebhookPayloadMap; const PAYLOADS: { - readonly [K in Exclude]: Shape; + readonly [ + K in Exclude + ]: K extends "template.status" + ? Shape + : Shape; } = { "contact.opted_in": shape()( { @@ -527,7 +534,7 @@ const PAYLOADS: { "failureReason", ], ), - "template.status": shape()( + "template.status": shape()( { templateName: "order_update", templateId: "tpl_1", @@ -715,6 +722,11 @@ type LegacyEventType = Exclude< | "session.logged_out" >; +/** Union payloads whose PAYLOADS fixture covers one named alternative. */ +const UNION_FIXTURE_SCHEMAS: Readonly> = { + "template.status": "RuntimeTemplateStatusPayload", +}; + function specEvents(): Map { const events = new Map(); for (const schema of Object.values(messaging.components.schemas)) { @@ -741,10 +753,55 @@ describe("webhook catalog contract", () => { (type, fixture) => { const schemaName = specEvents().get(type); expect(schemaName, type).toBeDefined(); - expectShape(messaging, schemaName!, fixture); + const variant = UNION_FIXTURE_SCHEMAS[type]; + if (variant !== undefined) { + const union = resolveRef(messaging, { $ref: `#/${schemaName!}` }); + expect( + (union.anyOf ?? union.oneOf ?? []).map((part) => part.$ref), + type, + ).toContain(`#/components/schemas/${variant}`); + } + expectShape(messaging, variant ?? schemaName!, fixture); }, ); + it("types the Meta template notification variant of template.status", () => { + expectShape( + messaging, + "CloudTemplateStatusPayload", + shape()( + { + kind: "message_template_quality_update", + event: "YELLOW", + templateId: "1234567890", + templateName: "order_update", + language: "en_US", + reason: "NONE", + previousQualityScore: "GREEN", + newQualityScore: "YELLOW", + wabaId: "102290129340398", + }, + ["kind"], + ), + ); + }); + + it("types the Meta account notification variant of session.status", () => { + expectShape( + messaging, + "CloudAccountStatusPayload", + shape()( + { + source: "meta", + kind: "phone_number_name_update", + wabaId: "102290129340398", + value: { decision: "APPROVED" }, + }, + ["source", "kind", "value"], + ), + ); + }); + it.each(Object.entries(PAYLOADS))( "%s parses from a signed delivery", async (type, fixture) => {