{"files":{"SKILL.md":"---\nname: svix-api\ndescription: \"Svix API skill. Use when working with Svix for api, ingest. Covers 138 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Svix API\nAPI version: 1.960.0\n\n## Auth\nBearer bearer\n\n## Base URL\nhttps://api.eu.svix.com\n\n## Setup\n1. Set Authorization header with your Bearer token\n2. GET /api/v1/app -- verify access\n3. POST /api/v1/auth/app-portal-access/{app_id} -- create first app-portal-access\n\n## Endpoints\n\n138 endpoints across 2 groups. See references/api-spec.lap for full details.\n\n### api\n| Method | Path | Description |\n|--------|------|-------------|\n| POST | /api/v1/auth/app-portal-access/{app_id} | Get Consumer App Portal Access |\n| POST | /api/v1/auth/logout | Logout |\n| POST | /api/v1/auth/app/{app_id}/expire-all | Expire All |\n| POST | /api/v1/auth/stream-portal-access/{stream_id} | Get Stream Portal Access |\n| POST | /api/v1/auth/stream-logout | Stream Logout |\n| POST | /api/v1/auth/stream/{stream_id}/expire-all | Stream Expire All |\n| POST | /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token/rotate | Rotate Poller Token |\n| GET | /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token | Get Poller Token |\n| GET | /api/v1/app | List Applications |\n| POST | /api/v1/app | Create Application |\n| GET | /api/v1/app/{app_id} | Get Application |\n| PUT | /api/v1/app/{app_id} | Upsert Application |\n| DELETE | /api/v1/app/{app_id} | Delete Application |\n| PATCH | /api/v1/app/{app_id} | Patch Application |\n| GET | /api/v1/app/{app_id}/endpoint | List Endpoints |\n| POST | /api/v1/app/{app_id}/endpoint | Create Endpoint |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id} | Get Endpoint |\n| PUT | /api/v1/app/{app_id}/endpoint/{endpoint_id} | Upsert Endpoint |\n| DELETE | /api/v1/app/{app_id}/endpoint/{endpoint_id} | Delete Endpoint |\n| PATCH | /api/v1/app/{app_id}/endpoint/{endpoint_id} | Patch Endpoint |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret | Get Endpoint Secret |\n| POST | /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret/rotate | Rotate Endpoint Secret Handler |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers | Get Endpoint Headers |\n| PUT | /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers | Set Endpoint Headers |\n| PATCH | /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers | Patch Endpoint Headers |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id}/transformation | Get Endpoint Transformation |\n| PATCH | /api/v1/app/{app_id}/endpoint/{endpoint_id}/transformation | Patch Endpoint Transformation |\n| POST | /api/v1/app/{app_id}/endpoint/{endpoint_id}/replay-missing | Replay Missing Webhooks |\n| POST | /api/v1/app/{app_id}/endpoint/{endpoint_id}/bulk-replay | Bulk Replay Messages |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id}/stats | Endpoint Stats |\n| POST | /api/v1/app/{app_id}/endpoint/{endpoint_id}/recover | Recover Failed Webhooks |\n| POST | /api/v1/app/{app_id}/endpoint/{endpoint_id}/send-example | Send Event Type Example Message |\n| GET | /api/v1/event-type | List Event Types |\n| POST | /api/v1/event-type | Create Event Type |\n| POST | /api/v1/event-type/import/openapi | Event Type Import From Openapi |\n| GET | /api/v1/event-type/{event_type_name} | Get Event Type |\n| PUT | /api/v1/event-type/{event_type_name} | Upsert Event Type |\n| DELETE | /api/v1/event-type/{event_type_name} | Delete Event Type |\n| PATCH | /api/v1/event-type/{event_type_name} | Patch Event Type |\n| POST | /api/v1/environment/export | Export Environment Configuration |\n| POST | /api/v1/environment/import | Import Environment Configuration |\n| GET | /api/v1/app/{app_id}/msg | List Messages |\n| POST | /api/v1/app/{app_id}/msg | Create Message |\n| POST | /api/v1/app/{app_id}/msg/precheck/active | Create Message Precheck |\n| GET | /api/v1/app/{app_id}/msg/{msg_id} | Get Message |\n| DELETE | /api/v1/app/{app_id}/msg/{msg_id}/content | Expunge one message payload |\n| POST | /api/v1/app/{app_id}/msg/bulk-expunge | Expunge a set of message payloads |\n| POST | /api/v1/app/{app_id}/msg/expunge-all-contents | Expunge all message contents for an application |\n| GET | /api/v1/app/{app_id}/attempt/endpoint/{endpoint_id} | List Attempts By Endpoint |\n| GET | /api/v1/app/{app_id}/attempt/msg/{msg_id} | List Attempts By Msg |\n| GET | /api/v1/app/{app_id}/endpoint/{endpoint_id}/msg | List Attempted Messages |\n| GET | /api/v1/app/{app_id}/msg/{msg_id}/endpoint | List Attempted Destinations |\n| GET | /api/v1/app/{app_id}/msg/{msg_id}/attempt/{attempt_id} | Get Attempt |\n| DELETE | /api/v1/app/{app_id}/msg/{msg_id}/attempt/{attempt_id}/content | Delete attempt response body |\n| POST | /api/v1/app/{app_id}/msg/{msg_id}/endpoint/{endpoint_id}/resend | Resend Webhook |\n| PUT | /api/v1/stats/usage/event-types | Aggregate Event Types |\n| POST | /api/v1/stats/usage/app | Aggregate App Stats |\n| GET | /api/v1/app/{app_id}/integration | List Integrations |\n| POST | /api/v1/app/{app_id}/integration | Create Integration |\n| GET | /api/v1/app/{app_id}/integration/{integ_id} | Get Integration |\n| PUT | /api/v1/app/{app_id}/integration/{integ_id} | Update Integration |\n| DELETE | /api/v1/app/{app_id}/integration/{integ_id} | Delete Integration |\n| POST | /api/v1/app/{app_id}/integration/{integ_id}/key/rotate | Rotate Integration Key |\n| GET | /api/v1/background-task | List Background Tasks |\n| GET | /api/v1/background-task/{task_id} | Get Background Task |\n| POST | /api/v1/app/{app_id}/autoconfig | Create Subscription |\n| POST | /api/v1/app/{app_id}/autoconfig/{autoconfig_id}/rotate | Rotate Token |\n| GET | /api/v1/app/{app_id}/destination | List Destinations |\n| POST | /api/v1/app/{app_id}/destination | Create Destination |\n| GET | /api/v1/app/{app_id}/destination/{destination_id} | Get Destination |\n| PUT | /api/v1/app/{app_id}/destination/{destination_id} | Upsert Destination |\n| DELETE | /api/v1/app/{app_id}/destination/{destination_id} | Delete Destination |\n| PATCH | /api/v1/app/{app_id}/destination/{destination_id} | Patch Destination |\n| GET | /api/v1/app/{app_id}/destination/{destination_id}/transformation | Get Destination Transformation |\n| PATCH | /api/v1/app/{app_id}/destination/{destination_id}/transformation | Patch Destination Transformation |\n| GET | /api/v1/stream/event-type | List Stream Event Types |\n| POST | /api/v1/stream/event-type | Create Stream Event Type |\n| GET | /api/v1/stream/event-type/{name} | Get Stream Event Type |\n| PUT | /api/v1/stream/event-type/{name} | Upsert Stream Event Type |\n| DELETE | /api/v1/stream/event-type/{name} | Delete Stream Event Type |\n| PATCH | /api/v1/stream/event-type/{name} | Patch Stream Event Type |\n| GET | /api/v1/stream/{stream_id}/sink/{sink_id}/events | Poller Sink Stream Events |\n| POST | /api/v1/stream/{stream_id}/events | Create Events |\n| GET | /api/v1/stream/{stream_id}/sink | List Sinks |\n| POST | /api/v1/stream/{stream_id}/sink | Create Sink |\n| GET | /api/v1/stream/{stream_id}/sink/{sink_id} | Get Sink |\n| PUT | /api/v1/stream/{stream_id}/sink/{sink_id} | Upsert Sink |\n| DELETE | /api/v1/stream/{stream_id}/sink/{sink_id} | Delete Sink |\n| PATCH | /api/v1/stream/{stream_id}/sink/{sink_id} | Patch Sink |\n| GET | /api/v1/stream/{stream_id}/sink/{sink_id}/transformation | Get Sink Transformation |\n| PATCH | /api/v1/stream/{stream_id}/sink/{sink_id}/transformation | Patch Sink Transformation |\n| GET | /api/v1/stream/{stream_id}/sink/{sink_id}/secret | Get Sink Secret |\n| POST | /api/v1/stream/{stream_id}/sink/{sink_id}/secret/rotate | Rotate Sink Secret |\n| GET | /api/v1/stream/{stream_id}/sink/{sink_id}/headers | Get Sink Headers |\n| PATCH | /api/v1/stream/{stream_id}/sink/{sink_id}/headers | Patch Sink Headers |\n| GET | /api/v1/stream | List Streams |\n| POST | /api/v1/stream | Create Stream |\n| GET | /api/v1/stream/{stream_id} | Get Stream |\n| PUT | /api/v1/stream/{stream_id} | Upsert Stream |\n| DELETE | /api/v1/stream/{stream_id} | Delete Stream |\n| PATCH | /api/v1/stream/{stream_id} | Patch Stream |\n| GET | /api/v1/app/{app_id}/poller/{sink_id} | Poller Poll |\n| POST | /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id}/seek | Poller Consumer Seek |\n| GET | /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id} | Poller Consumer Poll |\n| GET | /api/v1/operational-webhook/endpoint | List Operational Webhook Endpoints |\n| POST | /api/v1/operational-webhook/endpoint | Create Operational Webhook Endpoint |\n| GET | /api/v1/operational-webhook/endpoint/{endpoint_id} | Get Operational Webhook Endpoint |\n| PUT | /api/v1/operational-webhook/endpoint/{endpoint_id} | Upsert Operational Webhook Endpoint |\n| DELETE | /api/v1/operational-webhook/endpoint/{endpoint_id} | Delete Operational Webhook Endpoint |\n| GET | /api/v1/operational-webhook/endpoint/{endpoint_id}/secret | Get Operational Webhook Endpoint Secret |\n| POST | /api/v1/operational-webhook/endpoint/{endpoint_id}/secret/rotate | Rotate Operational Webhook Endpoint Secret |\n| GET | /api/v1/operational-webhook/endpoint/{endpoint_id}/headers | Get Operational Webhook Endpoint Headers |\n| PUT | /api/v1/operational-webhook/endpoint/{endpoint_id}/headers | Set Operational Webhook Endpoint Headers |\n| GET | /api/v1/connector | List Connectors |\n| POST | /api/v1/connector | Create Connector |\n| GET | /api/v1/connector/{connector_id} | Get Connector |\n| PUT | /api/v1/connector/{connector_id} | Upsert Connector |\n| DELETE | /api/v1/connector/{connector_id} | Delete Connector |\n| PATCH | /api/v1/connector/{connector_id} | Patch Connector |\n| GET | /api/v1/health | Health |\n\n### ingest\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /ingest/api/v1/source | List Ingest Sources |\n| POST | /ingest/api/v1/source | Create Ingest Source |\n| GET | /ingest/api/v1/source/{source_id} | Get Ingest Source |\n| PUT | /ingest/api/v1/source/{source_id} | Upsert Source |\n| DELETE | /ingest/api/v1/source/{source_id} | Delete Ingest Source |\n| POST | /ingest/api/v1/source/{source_id}/token/rotate | Rotate Ingest Token |\n| POST | /ingest/api/v1/source/{source_id}/dashboard | Ingest Source Consumer Portal Access |\n| GET | /ingest/api/v1/source/{source_id}/endpoint | List Ingest Endpoints |\n| POST | /ingest/api/v1/source/{source_id}/endpoint | Create Ingest Endpoint |\n| GET | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id} | Get Ingest Endpoint |\n| PUT | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id} | Upsert Ingest Endpoint |\n| DELETE | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id} | Delete Ingest Endpoint |\n| GET | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret | Get Ingest Endpoint Secret |\n| POST | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret/rotate | Rotate Ingest Endpoint Secret |\n| GET | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/headers | Get Ingest Endpoint Headers |\n| PUT | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/headers | Set Ingest Endpoint Headers |\n| GET | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/transformation | Get Ingest Endpoint Transformation |\n| PATCH | /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/transformation | Patch Ingest Endpoint Transformation |\n\n## Common Questions\n\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"Create a logout?\" -> POST /api/v1/auth/logout\n- \"Create a expire-all?\" -> POST /api/v1/auth/app/{app_id}/expire-all\n- \"Create a stream-logout?\" -> POST /api/v1/auth/stream-logout\n- \"Create a expire-all?\" -> POST /api/v1/auth/stream/{stream_id}/expire-all\n- \"Create a rotate?\" -> POST /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token/rotate\n- \"List all token?\" -> GET /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token\n- \"List all app?\" -> GET /api/v1/app\n- \"Create a app?\" -> POST /api/v1/app\n- \"Get app details?\" -> GET /api/v1/app/{app_id}\n- \"Update a app?\" -> PUT /api/v1/app/{app_id}\n- \"Delete a app?\" -> DELETE /api/v1/app/{app_id}\n- \"Partially update a app?\" -> PATCH /api/v1/app/{app_id}\n- \"List all endpoint?\" -> GET /api/v1/app/{app_id}/endpoint\n- \"Create a endpoint?\" -> POST /api/v1/app/{app_id}/endpoint\n- \"Get endpoint details?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}\n- \"Update a endpoint?\" -> PUT /api/v1/app/{app_id}/endpoint/{endpoint_id}\n- \"Delete a endpoint?\" -> DELETE /api/v1/app/{app_id}/endpoint/{endpoint_id}\n- \"Partially update a endpoint?\" -> PATCH /api/v1/app/{app_id}/endpoint/{endpoint_id}\n- \"List all secret?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret\n- \"Create a rotate?\" -> POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret/rotate\n- \"List all headers?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers\n- \"List all transformation?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/transformation\n- \"Create a replay-missing?\" -> POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/replay-missing\n- \"Create a bulk-replay?\" -> POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/bulk-replay\n- \"List all stats?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/stats\n- \"Create a recover?\" -> POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/recover\n- \"Create a send-example?\" -> POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/send-example\n- \"List all event-type?\" -> GET /api/v1/event-type\n- \"Create a event-type?\" -> POST /api/v1/event-type\n- \"Create a openapi?\" -> POST /api/v1/event-type/import/openapi\n- \"Get event-type details?\" -> GET /api/v1/event-type/{event_type_name}\n- \"Update a event-type?\" -> PUT /api/v1/event-type/{event_type_name}\n- \"Delete a event-type?\" -> DELETE /api/v1/event-type/{event_type_name}\n- \"Partially update a event-type?\" -> PATCH /api/v1/event-type/{event_type_name}\n- \"Create a export?\" -> POST /api/v1/environment/export\n- \"Create a import?\" -> POST /api/v1/environment/import\n- \"List all msg?\" -> GET /api/v1/app/{app_id}/msg\n- \"Create a msg?\" -> POST /api/v1/app/{app_id}/msg\n- \"Create a active?\" -> POST /api/v1/app/{app_id}/msg/precheck/active\n- \"Get msg details?\" -> GET /api/v1/app/{app_id}/msg/{msg_id}\n- \"Create a bulk-expunge?\" -> POST /api/v1/app/{app_id}/msg/bulk-expunge\n- \"Create a expunge-all-content?\" -> POST /api/v1/app/{app_id}/msg/expunge-all-contents\n- \"Get endpoint details?\" -> GET /api/v1/app/{app_id}/attempt/endpoint/{endpoint_id}\n- \"Get msg details?\" -> GET /api/v1/app/{app_id}/attempt/msg/{msg_id}\n- \"List all msg?\" -> GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/msg\n- \"List all endpoint?\" -> GET /api/v1/app/{app_id}/msg/{msg_id}/endpoint\n- \"Get attempt details?\" -> GET /api/v1/app/{app_id}/msg/{msg_id}/attempt/{attempt_id}\n- \"Create a resend?\" -> POST /api/v1/app/{app_id}/msg/{msg_id}/endpoint/{endpoint_id}/resend\n- \"Create a app?\" -> POST /api/v1/stats/usage/app\n- \"List all integration?\" -> GET /api/v1/app/{app_id}/integration\n- \"Create a integration?\" -> POST /api/v1/app/{app_id}/integration\n- \"Get integration details?\" -> GET /api/v1/app/{app_id}/integration/{integ_id}\n- \"Update a integration?\" -> PUT /api/v1/app/{app_id}/integration/{integ_id}\n- \"Delete a integration?\" -> DELETE /api/v1/app/{app_id}/integration/{integ_id}\n- \"Create a rotate?\" -> POST /api/v1/app/{app_id}/integration/{integ_id}/key/rotate\n- \"List all background-task?\" -> GET /api/v1/background-task\n- \"Get background-task details?\" -> GET /api/v1/background-task/{task_id}\n- \"Create a autoconfig?\" -> POST /api/v1/app/{app_id}/autoconfig\n- \"Create a rotate?\" -> POST /api/v1/app/{app_id}/autoconfig/{autoconfig_id}/rotate\n- \"List all destination?\" -> GET /api/v1/app/{app_id}/destination\n- \"Create a destination?\" -> POST /api/v1/app/{app_id}/destination\n- \"Get destination details?\" -> GET /api/v1/app/{app_id}/destination/{destination_id}\n- \"Update a destination?\" -> PUT /api/v1/app/{app_id}/destination/{destination_id}\n- \"Delete a destination?\" -> DELETE /api/v1/app/{app_id}/destination/{destination_id}\n- \"Partially update a destination?\" -> PATCH /api/v1/app/{app_id}/destination/{destination_id}\n- \"List all transformation?\" -> GET /api/v1/app/{app_id}/destination/{destination_id}/transformation\n- \"List all event-type?\" -> GET /api/v1/stream/event-type\n- \"Create a event-type?\" -> POST /api/v1/stream/event-type\n- \"Get event-type details?\" -> GET /api/v1/stream/event-type/{name}\n- \"Update a event-type?\" -> PUT /api/v1/stream/event-type/{name}\n- \"Delete a event-type?\" -> DELETE /api/v1/stream/event-type/{name}\n- \"Partially update a event-type?\" -> PATCH /api/v1/stream/event-type/{name}\n- \"List all events?\" -> GET /api/v1/stream/{stream_id}/sink/{sink_id}/events\n- \"Create a event?\" -> POST /api/v1/stream/{stream_id}/events\n- \"List all sink?\" -> GET /api/v1/stream/{stream_id}/sink\n- \"Create a sink?\" -> POST /api/v1/stream/{stream_id}/sink\n- \"Get sink details?\" -> GET /api/v1/stream/{stream_id}/sink/{sink_id}\n- \"Update a sink?\" -> PUT /api/v1/stream/{stream_id}/sink/{sink_id}\n- \"Delete a sink?\" -> DELETE /api/v1/stream/{stream_id}/sink/{sink_id}\n- \"Partially update a sink?\" -> PATCH /api/v1/stream/{stream_id}/sink/{sink_id}\n- \"List all transformation?\" -> GET /api/v1/stream/{stream_id}/sink/{sink_id}/transformation\n- \"List all secret?\" -> GET /api/v1/stream/{stream_id}/sink/{sink_id}/secret\n- \"Create a rotate?\" -> POST /api/v1/stream/{stream_id}/sink/{sink_id}/secret/rotate\n- \"List all headers?\" -> GET /api/v1/stream/{stream_id}/sink/{sink_id}/headers\n- \"List all stream?\" -> GET /api/v1/stream\n- \"Create a stream?\" -> POST /api/v1/stream\n- \"Get stream details?\" -> GET /api/v1/stream/{stream_id}\n- \"Update a stream?\" -> PUT /api/v1/stream/{stream_id}\n- \"Delete a stream?\" -> DELETE /api/v1/stream/{stream_id}\n- \"Partially update a stream?\" -> PATCH /api/v1/stream/{stream_id}\n- \"Get poller details?\" -> GET /api/v1/app/{app_id}/poller/{sink_id}\n- \"Create a seek?\" -> POST /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id}/seek\n- \"Get consumer details?\" -> GET /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id}\n- \"List all endpoint?\" -> GET /api/v1/operational-webhook/endpoint\n- \"Create a endpoint?\" -> POST /api/v1/operational-webhook/endpoint\n- \"Get endpoint details?\" -> GET /api/v1/operational-webhook/endpoint/{endpoint_id}\n- \"Update a endpoint?\" -> PUT /api/v1/operational-webhook/endpoint/{endpoint_id}\n- \"Delete a endpoint?\" -> DELETE /api/v1/operational-webhook/endpoint/{endpoint_id}\n- \"List all secret?\" -> GET /api/v1/operational-webhook/endpoint/{endpoint_id}/secret\n- \"Create a rotate?\" -> POST /api/v1/operational-webhook/endpoint/{endpoint_id}/secret/rotate\n- \"List all headers?\" -> GET /api/v1/operational-webhook/endpoint/{endpoint_id}/headers\n- \"List all connector?\" -> GET /api/v1/connector\n- \"Create a connector?\" -> POST /api/v1/connector\n- \"Get connector details?\" -> GET /api/v1/connector/{connector_id}\n- \"Update a connector?\" -> PUT /api/v1/connector/{connector_id}\n- \"Delete a connector?\" -> DELETE /api/v1/connector/{connector_id}\n- \"Partially update a connector?\" -> PATCH /api/v1/connector/{connector_id}\n- \"List all health?\" -> GET /api/v1/health\n- \"List all source?\" -> GET /ingest/api/v1/source\n- \"Create a source?\" -> POST /ingest/api/v1/source\n- \"Get source details?\" -> GET /ingest/api/v1/source/{source_id}\n- \"Update a source?\" -> PUT /ingest/api/v1/source/{source_id}\n- \"Delete a source?\" -> DELETE /ingest/api/v1/source/{source_id}\n- \"Create a rotate?\" -> POST /ingest/api/v1/source/{source_id}/token/rotate\n- \"Create a dashboard?\" -> POST /ingest/api/v1/source/{source_id}/dashboard\n- \"List all endpoint?\" -> GET /ingest/api/v1/source/{source_id}/endpoint\n- \"Create a endpoint?\" -> POST /ingest/api/v1/source/{source_id}/endpoint\n- \"Get endpoint details?\" -> GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n- \"Update a endpoint?\" -> PUT /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n- \"Delete a endpoint?\" -> DELETE /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n- \"List all secret?\" -> GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret\n- \"Create a rotate?\" -> POST /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret/rotate\n- \"List all headers?\" -> GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/headers\n- \"List all transformation?\" -> GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/transformation\n- \"How to authenticate?\" -> See Auth section\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- List endpoints may support pagination; check for limit, offset, or cursor params\n- Create/update endpoints typically return the created/updated object\n\n## CLI\n\n```bash\n# Update this spec to the latest version\nnpx @lap-platform/lapsh get svix-api -o references/api-spec.lap\n\n# Search for related APIs\nnpx @lap-platform/lapsh search svix-api\n```\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Svix API\n@base https://api.eu.svix.com\n@version 1.960.0\n@auth Bearer bearer\n@endpoints 138\n@hint download_for_search\n@toc api(120), ingest(18)\n\n@group api\n@endpoint POST /api/v1/auth/app-portal-access/{app_id}\n@desc Get Consumer App Portal Access\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, application: map{metadata: map, name!: str, throttleRate: int(uint16), uid: str}, capabilities: [str] # Custom capabilities attached to the token, You can combine as many capabilities as necessary.  The `ViewBase` capability is always required  - `ViewBase`: Basic read only permissions, does not allow the user to see the endpoint secret.  - `ViewEndpointSecret`: Allows user to view the endpoint secret.  - `ManageEndpointSecret`: Allows user to rotate and view the endpoint secret.  - `ManageTransformations`: Allows user to modify the endpoint transformations.  - `CreateAttempts`: Allows user to replay missing messages and send example messages.  - `ManageEndpoint`: Allows user to read/modify any field or configuration of an endpoint (including secrets)  By default, the token will get all capabilities if the capabilities are not explicitly specified., expiry: int(uint64)=604800 # How long the token will be valid for, in seconds.  Valid values are between 1 hour and 7 days. The default is 7 days., featureFlags: [str] # The set of feature flags the created token will have access to., readOnly: bool # Whether the app portal should be in read-only mode., sessionId: str # An optional session ID to attach to the token.  When expiring tokens with \"Expire All\", you can include the session ID to only expire tokens that were created with that session ID.}\n@returns(200) {token: str, url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/logout\n@desc Logout\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/app/{app_id}/expire-all\n@desc Expire All\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, expiry: int(int64) # How many seconds until the old key is expired., sessionIds: [str] # An optional list of session ids.  If any session ids are specified, only Application tokens created with that session id will be expired.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/stream-portal-access/{stream_id}\n@desc Get Stream Portal Access\n@required {stream_id: str # The Stream's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, expiry: int(uint64)=604800 # How long the token will be valid for, in seconds.  Valid values are between 1 hour and 7 days. The default is 7 days., featureFlags: [str] # The set of feature flags the created token will have access to., sessionId: str # An optional session ID to attach to the token.  When expiring tokens with \"Expire All\", you can include the session ID to only expire tokens that were created with that session ID.}\n@returns(200) {token: str, url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/stream-logout\n@desc Stream Logout\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/stream/{stream_id}/expire-all\n@desc Stream Expire All\n@required {stream_id: str # The Stream's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, expiry: int(int64) # How many seconds until the old key is expired., sessionIds: [str] # An optional list of session ids.  If any session ids are specified, only Stream tokens created with that session id will be expired.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token/rotate\n@desc Rotate Poller Token\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, expiry: int(int64) # How long the token will be valid for, in seconds. Can be up to 31,536,000 seconds (1 year)., oldTokenExpiry: int(int64)=300 # Updates the previous token's expiration, in seconds.  If set to 0, the old token will immediately be revoked. Must be between 0 and 86,400 seconds (1 day).  Defaults to 300 seconds (5 minutes).}\n@returns(201) {createdAt: str(date-time), expiresAt: str(date-time)?, id: str, name: str?, scopes: [str]?, token: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/auth/stream/{stream_id}/sink/{sink_id}/poller/token\n@desc Get Poller Token\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(200) {createdAt: str(date-time), expiresAt: str(date-time)?, id: str, name: str?, scopes: [str]?, token: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app\n@desc List Applications\n@optional {exclude_apps_with_no_endpoints: bool=false # Exclude applications that have no endpoints. Default is false., exclude_apps_with_disabled_endpoints: bool=false # Exclude applications that have only disabled endpoints. Default is false., exclude_apps_with_svix_play_endpoints: bool=false # Exclude applications that only have Svix Play endpoints. Default is false., limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app\n@desc Create Application\n@required {name: str # Application name for human consumption.}\n@optional {get_if_exists: bool=false # Get an existing application, or create a new one if doesn't exist. It's two separate functions in the libs., idempotency-key: str # The request's idempotency key, metadata: map=[object Object], throttleRate: int(uint16) # Maximum messages per second to send to this application.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the application.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@returns(201) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}\n@desc Get Application\n@required {app_id: str # The Application's ID or UID.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/app/{app_id}\n@desc Upsert Application\n@required {app_id: str # The Application's ID or UID., name: str # Application name for human consumption.}\n@optional {metadata: map=[object Object], throttleRate: int(uint16) # Maximum messages per second to send to this application.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the application.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@returns(201) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}\n@desc Delete Application\n@required {app_id: str # The Application's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}\n@desc Patch Application\n@required {app_id: str # The Application's ID or UID.}\n@optional {metadata: map, name: str, throttleRate: int(uint16) # Maximum messages per second to send to this application.  Outgoing messages will be throttled to this rate., uid: str # The Application's UID.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint\n@desc List Endpoints\n@required {app_id: str # The Application's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint\n@desc Create Endpoint\n@required {app_id: str # The Application's ID or UID., url: str(uri)}\n@optional {idempotency-key: str # The request's idempotency key, channels: [str] # List of message channels this endpoint listens to (omit for all)., description: str=, disabled: bool=false, eventTypes: [str], headers: map, metadata: map=[object Object], secret: str # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret., throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(201) {channels: [str]?, createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}\n@desc Get Endpoint\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {channels: [str]?, createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/app/{app_id}/endpoint/{endpoint_id}\n@desc Upsert Endpoint\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., url: str(uri)}\n@optional {channels: [str] # List of message channels this endpoint listens to (omit for all)., description: str=, disabled: bool=false, eventTypes: [str], metadata: map=[object Object], throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(200) {channels: [str]?, createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@returns(201) {channels: [str]?, createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}/endpoint/{endpoint_id}\n@desc Delete Endpoint\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}/endpoint/{endpoint_id}\n@desc Patch Endpoint\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {channels: [str], description: str, disabled: bool, eventTypes: [str], metadata: map, throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # The Endpoint's UID., url: str(uri)}\n@returns(200) {channels: [str]?, createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret\n@desc Get Endpoint Secret\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {key: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/secret/rotate\n@desc Rotate Endpoint Secret Handler\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, gracePeriodSeconds: int(uint32)=86400 # How long the old secret will be valid for, in seconds.  Valid values are between 0 (immediate expiry) and 7 days. The default is 24 hours., key: str=null # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers\n@desc Get Endpoint Headers\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {headers: map, sensitive: [str]} # The value of the headers is returned in the `headers` field.  Sensitive headers that have been redacted are returned in the sensitive field.\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers\n@desc Set Endpoint Headers\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., headers: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}/endpoint/{endpoint_id}/headers\n@desc Patch Endpoint Headers\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., headers: map}\n@optional {deleteHeaders: [str]= # A list of headers be be removed}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/transformation\n@desc Get Endpoint Transformation\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {code: str?, enabled: bool, updatedAt: str(date-time)?, variables: map?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}/endpoint/{endpoint_id}/transformation\n@desc Patch Endpoint Transformation\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {code: str, enabled: bool, variables: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/replay-missing\n@desc Replay Missing Webhooks\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., since: str(date-time)}\n@optional {idempotency-key: str # The request's idempotency key, until: str(date-time)}\n@returns(202) {id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/bulk-replay\n@desc Bulk Replay Messages\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., since: str(date-time)}\n@optional {idempotency-key: str # The request's idempotency key, channel: str, eventTypes: [str], status: int(0/1/2/3/4) # The sending status of the message:  - Success = 0 - Pending = 1 - Fail = 2 - Sending = 3 - Canceled = 4, statusCodeClass: int(0/100/200/300/400/500) # The different classes of HTTP status codes:  - CodeNone = 0 - Code1xx = 100 - Code2xx = 200 - Code3xx = 300 - Code4xx = 400 - Code5xx = 500, tag: str, until: str(date-time)}\n@returns(202) {id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/stats\n@desc Endpoint Stats\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {since: str(date-time) # Filter the range to data starting from this date., until: str(date-time) # Filter the range to data ending by this date.}\n@returns(200) {canceled: int(int64), fail: int(int64), pending: int(int64), sending: int(int64), success: int(int64)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/recover\n@desc Recover Failed Webhooks\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., since: str(date-time)}\n@optional {idempotency-key: str # The request's idempotency key, until: str(date-time)}\n@returns(202) {id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/endpoint/{endpoint_id}/send-example\n@desc Send Event Type Example Message\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID., eventType: str # The event type's name}\n@optional {idempotency-key: str # The request's idempotency key, exampleIndex: int(uint)=0 # If the event type schema contains an array of examples, chooses which one to send.  Defaults to the first example. Ignored if the schema doesn't contain an array of examples.}\n@returns(202) {channels: [str]?, deliverAt: str(date-time)?, eventId: str?, eventType: str, id: str, payload: map, tags: [str]?, timestamp: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/event-type\n@desc List Event Types\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items, include_archived: bool=false # When `true` archived (deleted but not expunged) items are included in the response., with_content: bool=false # When `true` the full item (including the schema) is included in the response.}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/event-type\n@desc Create Event Type\n@required {description: str, name: str # The event type's name}\n@optional {idempotency-key: str # The request's idempotency key, archived: bool=false, deprecated: bool=false, featureFlags: [str]=null, groupName: str # The event type group's name, schemas: map # The schema for the event type for a specific version as a JSON schema.}\n@returns(201) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str, featureFlag: str?, featureFlags: [str]?, groupName: str?, name: str, schemas: map?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/event-type/import/openapi\n@desc Event Type Import From Openapi\n@optional {idempotency-key: str # The request's idempotency key, dryRun: bool=false # If `true`, return the event types that would be modified without actually modifying them., replaceAll: bool=false # If `true`, all existing event types that are not in the spec will be archived., spec: map # A pre-parsed JSON spec., specRaw: str # A string, parsed by the server as YAML or JSON.}\n@returns(200) {data: map{modified: [str], to_modify: [map]?}}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/event-type/{event_type_name}\n@desc Get Event Type\n@required {event_type_name: str # The event type's name}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str, featureFlag: str?, featureFlags: [str]?, groupName: str?, name: str, schemas: map?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/event-type/{event_type_name}\n@desc Upsert Event Type\n@required {event_type_name: str # The event type's name, description: str}\n@optional {archived: bool=false, deprecated: bool=false, featureFlags: [str], groupName: str=null # The event type group's name, schemas: map # The schema for the event type for a specific version as a JSON schema.}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str, featureFlag: str?, featureFlags: [str]?, groupName: str?, name: str, schemas: map?, updatedAt: str(date-time)}\n@returns(201) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str, featureFlag: str?, featureFlags: [str]?, groupName: str?, name: str, schemas: map?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/event-type/{event_type_name}\n@desc Delete Event Type\n@required {event_type_name: str # The event type's name}\n@optional {expunge: bool=false # By default event types are archived when \"deleted\". Passing this to `true` deletes them entirely.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/event-type/{event_type_name}\n@desc Patch Event Type\n@required {event_type_name: str # The event type's name}\n@optional {archived: bool, deprecated: bool, description: str, featureFlags: [str], groupName: str # The event type group's name, schemas: map}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str, featureFlag: str?, featureFlags: [str]?, groupName: str?, name: str, schemas: map?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/environment/export\n@desc Export Environment Configuration\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(200) {connectors: [map], createdAt: str(date-time), eventTypes: [map], settings: map?, version: int(int)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/environment/import\n@desc Import Environment Configuration\n@optional {idempotency-key: str # The request's idempotency key, connectors: [map{allowedEventTypes: [str], description: str, featureFlags: [str], instructions: str, kind: str, logo: str(uri), name!: str, productType: str, transformation!: str, uid: str}], eventTypes: [map{archived: bool, deprecated: bool, description!: str, featureFlags: [str], groupName: str, name!: str, schemas: map}], settings: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/msg\n@desc List Messages\n@required {app_id: str # The Application's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, channel: str # Filter response based on the channel., before: str(date-time) # Only include items created before a certain date., after: str(date-time) # Only include items created after a certain date., with_content: bool=true # When `true` message payloads are included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter., tag: str # Filter messages matching the provided tag., event_types: [str] # Filter response based on the event type}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/msg\n@desc Create Message\n@required {app_id: str # The Application's ID or UID., eventType: str # The event type's name, payload: map # JSON payload to send as the request body of the webhook.  We also support sending non-JSON payloads. Please contact us for more information.}\n@optional {with_content: bool=true # When `true`, message payloads are included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter., idempotency-key: str # The request's idempotency key, application: map{metadata: map, name!: str, throttleRate: int(uint16), uid: str}, channels: [str] # List of free-form identifiers that endpoints can filter by, deliverAt: str(date-time) # The date and time at which the message will be delivered.  Note that this time is best-effort-only. Must be at least one minute and no more than 24 hours in the future., eventId: str # Optional unique identifier for the message, payloadRetentionHours: int(int64)=null # Optional number of hours to retain the message payload. Note that this is mutually exclusive with `payloadRetentionPeriod`., payloadRetentionPeriod: int(int64)=90 # Optional number of days to retain the message payload. Defaults to 90. Note that this is mutually exclusive with `payloadRetentionHours`., tags: [str] # List of free-form tags that can be filtered by when listing messages, transformationsParams: map # Extra parameters to pass to Transformations (for future use)}\n@returns(202) {channels: [str]?, deliverAt: str(date-time)?, eventId: str?, eventType: str, id: str, payload: map, tags: [str]?, timestamp: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 413: Payload too large, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/msg/precheck/active\n@desc Create Message Precheck\n@required {app_id: str # The Application's ID or UID., eventType: str # The event type's name}\n@optional {idempotency-key: str # The request's idempotency key, channels: [str]}\n@returns(200) {active: bool}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/msg/{msg_id}\n@desc Get Message\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID.}\n@optional {with_content: bool=true # When `true` message payloads are included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter.}\n@returns(200) {channels: [str]?, deliverAt: str(date-time)?, eventId: str?, eventType: str, id: str, payload: map, tags: [str]?, timestamp: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}/msg/{msg_id}/content\n@desc Expunge one message payload\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/msg/bulk-expunge\n@desc Expunge a set of message payloads\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, ids: [str]= # Message ID or UID to delete}\n@returns(200) {results: map}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/msg/expunge-all-contents\n@desc Expunge all message contents for an application\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(202) {id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/attempt/endpoint/{endpoint_id}\n@desc List Attempts By Endpoint\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, status: int # Filter response based on the status of the attempt: Success (0), Pending (1), Failed (2), Sending (3), or Canceled (4), status_code_class: int # Filter response based on the HTTP status code, channel: str # Filter response based on the channel, tag: str # Filter response based on the tag, before: str(date-time) # Only include items created before a certain date, after: str(date-time) # Only include items created after a certain date, with_content: bool=true # When `true` attempt content is included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter., with_msg: bool=false # When `true`, the message information is included in the response  Note that message payloads are never included in the response, regardless of this flag., expanded_statuses: bool=false # When `true`, return the Canceled (4) status in attempts.  If `false`, canceled attempts are returned as Success (0) for backwards compatibility., event_types: [str] # Filter response based on the event type}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/attempt/msg/{msg_id}\n@desc List Attempts By Msg\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, status: int # Filter response based on the status of the attempt: Success (0), Pending (1), Failed (2), Sending (3), or Canceled (4), status_code_class: int # Filter response based on the HTTP status code, channel: str # Filter response based on the channel, tag: str # Filter response based on the tag, endpoint_id: str # Filter the attempts based on the attempted endpoint, before: str(date-time) # Only include items created before a certain date, after: str(date-time) # Only include items created after a certain date, with_content: bool=true # When `true` attempt content is included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter., expanded_statuses: bool=false # When `true`, return the Canceled (4) status in attempts.  If `false`, canceled attempts are returned as Success (0) for backwards compatibility., event_types: [str] # Filter response based on the event type}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/endpoint/{endpoint_id}/msg\n@desc List Attempted Messages\n@required {app_id: str # The Application's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, channel: str # Filter response based on the channel, tag: str # Filter response based on the message tags, status: int # Filter response based on the status of the attempt: Success (0), Pending (1), Failed (2), Sending (3), or Canceled (4), before: str(date-time) # Only include items created before a certain date, after: str(date-time) # Only include items created after a certain date, with_content: bool=true # When `true` message payloads are included in the response.  Defaults to `false` in v2+ of the Svix SDKs, `true` in v1 or when manually making a request without specifying this parameter., expanded_statuses: bool=false # When `true`, return the Canceled (4) status in attempts.  If `false`, canceled attempts are returned as Success (0) for backwards compatibility., event_types: [str] # Filter response based on the event type}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/msg/{msg_id}/endpoint\n@desc List Attempted Destinations\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/msg/{msg_id}/attempt/{attempt_id}\n@desc Get Attempt\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID., attempt_id: str # The MessageAttempt's ID.}\n@optional {expanded_statuses: bool=false # When `true`, return the Canceled (4) status in attempts.  If `false`, canceled attempts are returned as Success (0) for backwards compatibility.}\n@returns(200) {endpointId: str, id: str, msg: map{channels: [str]?, deliverAt: str(date-time)?, eventId: str?, eventType: str, id: str, payload: map, tags: [str]?, timestamp: str(date-time)}, msgId: str, response: str, responseDurationMs: int(int64), responseStatusCode: int(int16), status: int, statusText: str, timestamp: str(date-time), triggerType: int, url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}/msg/{msg_id}/attempt/{attempt_id}/content\n@desc Delete attempt response body\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID., attempt_id: str # The MessageAttempt's ID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/msg/{msg_id}/endpoint/{endpoint_id}/resend\n@desc Resend Webhook\n@required {app_id: str # The Application's ID or UID., msg_id: str # The Message's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(202)\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/stats/usage/event-types\n@desc Aggregate Event Types\n@returns(202) {id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stats/usage/app\n@desc Aggregate App Stats\n@required {since: str(date-time), until: str(date-time)}\n@optional {idempotency-key: str # The request's idempotency key, appIds: [str] # Specific app IDs or UIDs to aggregate stats for.  Note that if none of the given IDs or UIDs are resolved, a 422 response will be given.}\n@returns(202) {id: str, status: str, task: str, unresolvedAppIds: [str], updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/integration\n@desc List Integrations\n@required {app_id: str # The Application's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/integration\n@desc Create Integration\n@required {app_id: str # The Application's ID or UID., name: str}\n@optional {idempotency-key: str # The request's idempotency key, featureFlags: [str] # The set of feature flags the integration will have access to.}\n@returns(201) {createdAt: str(date-time), featureFlags: [str], id: str, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/integration/{integ_id}\n@desc Get Integration\n@required {app_id: str # The Application's ID or UID., integ_id: str # The Integration's ID.}\n@returns(200) {createdAt: str(date-time), featureFlags: [str], id: str, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/app/{app_id}/integration/{integ_id}\n@desc Update Integration\n@required {app_id: str # The Application's ID or UID., integ_id: str # The Integration's ID., name: str}\n@optional {featureFlags: [str] # The set of feature flags the integration will have access to.}\n@returns(200) {createdAt: str(date-time), featureFlags: [str], id: str, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}/integration/{integ_id}\n@desc Delete Integration\n@required {app_id: str # The Application's ID or UID., integ_id: str # The Integration's ID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/integration/{integ_id}/key/rotate\n@desc Rotate Integration Key\n@required {app_id: str # The Application's ID or UID., integ_id: str # The Integration's ID.}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(200) {key: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/background-task\n@desc List Background Tasks\n@optional {status: str # Filter the response based on the status., task: str # Filter the response based on the type., limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/background-task/{task_id}\n@desc Get Background Task\n@required {task_id: str # The QueueBackgroundTask's ID.}\n@returns(200) {data: map, id: str, status: str, task: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/autoconfig\n@desc Create Subscription\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(201) {createdAt: str(date-time), id: str, token: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/autoconfig/{autoconfig_id}/rotate\n@desc Rotate Token\n@required {app_id: str # The Application's ID or UID., autoconfig_id: str # The AutoConfigSubscription's ID.}\n@optional {idempotency-key: str # The request's idempotency key, signingSecret: map{gracePeriodSeconds: int(uint32), key: str}}\n@returns(200) {createdAt: str(date-time), id: str, token: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/destination\n@desc List Destinations\n@required {app_id: str # The Application's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/destination\n@desc Create Destination\n@required {app_id: str # The Application's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, batchSize: int(uint16)=100 # How many events will be batched in a request to the destination., channels: [str]= # A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events., eventTypes: [str]= # A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events., maxWaitSecs: int(uint16)=0 # How long to wait before a batch of events is sent, if the `batchSize` is not reached.  For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first.  Note that an empty batch is never sent to the destination., metadata: map=[object Object], status: str(enabled/disabled), uid: str # An optional unique identifier for the destination.}\n@returns(201) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/destination/{destination_id}\n@desc Get Destination\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/app/{app_id}/destination/{destination_id}\n@desc Upsert Destination\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@optional {batchSize: int(uint16)=100 # How many events will be batched in a request to the destination., channels: [str]= # A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events., eventTypes: [str]= # A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events., maxWaitSecs: int(uint16)=0 # How long to wait before a batch of events is sent, if the `batchSize` is not reached.  For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first.  Note that an empty batch is never sent to the destination., metadata: map=[object Object], status: str(enabled/disabled), uid: str # An optional unique identifier for the destination.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@returns(201) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/app/{app_id}/destination/{destination_id}\n@desc Delete Destination\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}/destination/{destination_id}\n@desc Patch Destination\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@optional {batchSize: int(uint16)=null, channels: [str], eventTypes: [str], maxWaitSecs: int(uint16)=null, metadata: map, status: str(enabled/disabled), uid: str # The Destination's UID.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/destination/{destination_id}/transformation\n@desc Get Destination Transformation\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@returns(200) {code: str?, enabled: bool}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/app/{app_id}/destination/{destination_id}/transformation\n@desc Patch Destination Transformation\n@required {app_id: str # The Application's ID or UID., destination_id: str # The Destination's ID or UID.}\n@optional {code: str}\n@returns(200)\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/event-type\n@desc List Stream Event Types\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items, include_archived: bool=false # Include archived (deleted but not expunged) items in the response.}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stream/event-type\n@desc Create Stream Event Type\n@required {name: str # The event type's name}\n@optional {idempotency-key: str # The request's idempotency key, archived: bool=false, deprecated: bool=false, description: str, featureFlags: [str]=null}\n@returns(201) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str?, featureFlags: [str]?, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/event-type/{name}\n@desc Get Stream Event Type\n@required {name: str # The event type's name}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str?, featureFlags: [str]?, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/stream/event-type/{name}\n@desc Upsert Stream Event Type\n@required {name: str # The event type's name, name: str # The event type's name}\n@optional {archived: bool=false, deprecated: bool=false, description: str, featureFlags: [str]=null}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str?, featureFlags: [str]?, name: str, updatedAt: str(date-time)}\n@returns(201) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str?, featureFlags: [str]?, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/stream/event-type/{name}\n@desc Delete Stream Event Type\n@required {name: str # The event type's name}\n@optional {expunge: bool=false # By default, event types are archived when \"deleted\". With this flag, they are deleted entirely.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/stream/event-type/{name}\n@desc Patch Stream Event Type\n@required {name: str # The event type's name}\n@optional {archived: bool, deprecated: bool, description: str, featureFlags: [str]}\n@returns(200) {archived: bool, createdAt: str(date-time), deprecated: bool, description: str?, featureFlags: [str]?, name: str, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink/{sink_id}/events\n@desc Poller Sink Stream Events\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, after: str(date-time)}\n@returns(200) {data: [map], done: bool, iterator: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stream/{stream_id}/events\n@desc Create Events\n@required {stream_id: str # The Stream's ID or UID., events: [map{eventType!: str, payload!: str}]}\n@optional {idempotency-key: str # The request's idempotency key, stream: map{metadata: map, name!: str, uid: str}}\n@returns(202)\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink\n@desc List Sinks\n@required {stream_id: str # The Stream's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stream/{stream_id}/sink\n@desc Create Sink\n@required {stream_id: str # The Stream's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, batchSize: int(uint16)=100 # How many events will be batched in a request to the Sink., channels: [str]=, eventTypes: [str]= # A list of event types that filter which events are dispatched to the Sink. An empty list (or null) will not filter out any events., maxWaitSecs: int(uint16)=0 # How long to wait before a batch of events is sent, if the `batchSize` is not reached.  For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, we will send a request after 10 seconds or 100 events, whichever comes first.  Note that we will never send an empty batch of events to the Sink., metadata: map=[object Object], status: str(enabled/disabled), uid: str # An optional unique identifier for the sink.}\n@returns(201) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink/{sink_id}\n@desc Get Sink\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/stream/{stream_id}/sink/{sink_id}\n@desc Upsert Sink\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {batchSize: int(uint16)=100 # How many events will be batched in a request to the Sink., channels: [str]=, eventTypes: [str]= # A list of event types that filter which events are dispatched to the Sink. An empty list (or null) will not filter out any events., maxWaitSecs: int(uint16)=0 # How long to wait before a batch of events is sent, if the `batchSize` is not reached.  For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, we will send a request after 10 seconds or 100 events, whichever comes first.  Note that we will never send an empty batch of events to the Sink., metadata: map=[object Object], status: str(enabled/disabled), uid: str # An optional unique identifier for the sink.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@returns(201) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/stream/{stream_id}/sink/{sink_id}\n@desc Delete Sink\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/stream/{stream_id}/sink/{sink_id}\n@desc Patch Sink\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {batchSize: int(uint16)=null, channels: [str], eventTypes: [str], maxWaitSecs: int(uint16)=null, metadata: map, status: str(enabled/disabled), uid: str # The StreamSink's UID.}\n@returns(200) {batchSize: int(int32), channels: [str], createdAt: str(date-time), currentIterator: str, eventTypes: [str], failureReason: str?, id: str, maxWaitSecs: int(int32), metadata: map, nextRetryAt: str(date-time)?, status: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink/{sink_id}/transformation\n@desc Get Sink Transformation\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(200) {code: str?, enabled: bool}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/stream/{stream_id}/sink/{sink_id}/transformation\n@desc Patch Sink Transformation\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {code: str}\n@returns(200)\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink/{sink_id}/secret\n@desc Get Sink Secret\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(200) {key: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stream/{stream_id}/sink/{sink_id}/secret/rotate\n@desc Rotate Sink Secret\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, gracePeriodSeconds: int(uint32)=86400 # How long the old secret will be valid for, in seconds.  Valid values are between 0 (immediate expiry) and 7 days. The default is 24 hours., key: str=null # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret.}\n@returns(200)\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}/sink/{sink_id}/headers\n@desc Get Sink Headers\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID.}\n@returns(200) {headers: map, sensitive: [str]} # The value of the headers is returned in the `headers` field.  Sensitive headers that have been redacted are returned in the sensitive field.\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/stream/{stream_id}/sink/{sink_id}/headers\n@desc Patch Sink Headers\n@required {stream_id: str # The Stream's ID or UID., sink_id: str # The StreamSink's ID or UID., headers: map}\n@returns(200) {headers: map, sensitive: [str]} # The value of the headers is returned in the `headers` field.  Sensitive headers that have been redacted are returned in the sensitive field.\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream\n@desc List Streams\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/stream\n@desc Create Stream\n@required {name: str # The stream's name.}\n@optional {idempotency-key: str # The request's idempotency key, metadata: map=[object Object], uid: str # An optional unique identifier for the stream.}\n@returns(201) {createdAt: str(date-time), id: str, metadata: map, name: str?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/stream/{stream_id}\n@desc Get Stream\n@required {stream_id: str # The Stream's ID or UID.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/stream/{stream_id}\n@desc Upsert Stream\n@required {stream_id: str # The Stream's ID or UID., name: str # The stream's name.}\n@optional {metadata: map=[object Object], uid: str # An optional unique identifier for the stream.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str?, uid: str?, updatedAt: str(date-time)}\n@returns(201) {createdAt: str(date-time), id: str, metadata: map, name: str?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/stream/{stream_id}\n@desc Delete Stream\n@required {stream_id: str # The Stream's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/stream/{stream_id}\n@desc Patch Stream\n@required {stream_id: str # The Stream's ID or UID.}\n@optional {description: str # The Stream's description., metadata: map, uid: str # An optional unique identifier for the stream.}\n@returns(200) {createdAt: str(date-time), id: str, metadata: map, name: str?, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/poller/{sink_id}\n@desc Poller Poll\n@required {app_id: str # The Application's ID or UID., sink_id: str # The Endpoint's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, event_type: str # Filters messages sent with this event type (optional)., channel: str # Filters messages sent with this channel (optional)., after: str(date-time)}\n@returns(200) {data: [map], done: bool, iterator: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id}/seek\n@desc Poller Consumer Seek\n@required {app_id: str # The Application's ID or UID., sink_id: str # The Endpoint's ID or UID., consumer_id: str, after: str(date-time)}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(200) {iterator: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/app/{app_id}/poller/{sink_id}/consumer/{consumer_id}\n@desc Poller Consumer Poll\n@required {app_id: str # The Application's ID or UID., sink_id: str # The Endpoint's ID or UID., consumer_id: str}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation}\n@returns(200) {data: [map], done: bool, iterator: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/operational-webhook/endpoint\n@desc List Operational Webhook Endpoints\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/operational-webhook/endpoint\n@desc Create Operational Webhook Endpoint\n@required {url: str(uri)}\n@optional {idempotency-key: str # The request's idempotency key, description: str=, disabled: bool=false, eventTypes: [str], headers: map=null, metadata: map=[object Object], secret: str # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret., throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(201) {createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/operational-webhook/endpoint/{endpoint_id}\n@desc Get Operational Webhook Endpoint\n@required {endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/operational-webhook/endpoint/{endpoint_id}\n@desc Upsert Operational Webhook Endpoint\n@required {endpoint_id: str # The Endpoint's ID or UID., url: str(uri)}\n@optional {description: str=, disabled: bool=false, eventTypes: [str], metadata: map=[object Object], throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(200) {createdAt: str(date-time), description: str, disabled: bool, eventTypes: [str]?, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/operational-webhook/endpoint/{endpoint_id}\n@desc Delete Operational Webhook Endpoint\n@required {endpoint_id: str # The Endpoint's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/operational-webhook/endpoint/{endpoint_id}/secret\n@desc Get Operational Webhook Endpoint Secret\n@required {endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {key: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/operational-webhook/endpoint/{endpoint_id}/secret/rotate\n@desc Rotate Operational Webhook Endpoint Secret\n@required {endpoint_id: str # The Endpoint's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, gracePeriodSeconds: int(uint32)=86400 # How long the old secret will be valid for, in seconds.  Valid values are between 0 (immediate expiry) and 7 days. The default is 24 hours., key: str=null # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/operational-webhook/endpoint/{endpoint_id}/headers\n@desc Get Operational Webhook Endpoint Headers\n@required {endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {headers: map, sensitive: [str]}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/operational-webhook/endpoint/{endpoint_id}/headers\n@desc Set Operational Webhook Endpoint Headers\n@required {endpoint_id: str # The Endpoint's ID or UID., headers: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/connector\n@desc List Connectors\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items, product_type: str}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /api/v1/connector\n@desc Create Connector\n@required {name: str, transformation: str}\n@optional {idempotency-key: str # The request's idempotency key, allowedEventTypes: [str], description: str=, featureFlags: [str]=null, instructions: str=, kind: str(Custom/AgenticCommerceProtocol/CloseCRM/CustomerIO/Discord/Hubspot/Inngest/Loops/Otel/Resend/Salesforce/Segment/Sendgrid/Slack/Teams/TriggerDev/Windmill/Zapier), logo: str(uri), productType: str(Dispatch/Stream), uid: str # The Connector's UID.}\n@returns(201) {allowedEventTypes: [str]?, createdAt: str(date-time), description: str, featureFlags: [str]?, id: str, instructions: str, kind: str, logo: str(uri)?, name: str, orgId: str, productType: str, transformation: str, transformationUpdatedAt: str(date-time), uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/connector/{connector_id}\n@desc Get Connector\n@required {connector_id: str # The Connector's ID or UID.}\n@returns(200) {allowedEventTypes: [str]?, createdAt: str(date-time), description: str, featureFlags: [str]?, id: str, instructions: str, kind: str, logo: str(uri)?, name: str, orgId: str, productType: str, transformation: str, transformationUpdatedAt: str(date-time), uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /api/v1/connector/{connector_id}\n@desc Upsert Connector\n@required {connector_id: str # The Connector's ID or UID., transformation: str}\n@optional {allowedEventTypes: [str], description: str=, featureFlags: [str]=null, instructions: str=, kind: str(Custom/AgenticCommerceProtocol/CloseCRM/CustomerIO/Discord/Hubspot/Inngest/Loops/Otel/Resend/Salesforce/Segment/Sendgrid/Slack/Teams/TriggerDev/Windmill/Zapier), logo: str(uri), name: str=}\n@returns(200) {allowedEventTypes: [str]?, createdAt: str(date-time), description: str, featureFlags: [str]?, id: str, instructions: str, kind: str, logo: str(uri)?, name: str, orgId: str, productType: str, transformation: str, transformationUpdatedAt: str(date-time), uid: str?, updatedAt: str(date-time)}\n@returns(201) {allowedEventTypes: [str]?, createdAt: str(date-time), description: str, featureFlags: [str]?, id: str, instructions: str, kind: str, logo: str(uri)?, name: str, orgId: str, productType: str, transformation: str, transformationUpdatedAt: str(date-time), uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /api/v1/connector/{connector_id}\n@desc Delete Connector\n@required {connector_id: str # The Connector's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /api/v1/connector/{connector_id}\n@desc Patch Connector\n@required {connector_id: str # The Connector's ID or UID.}\n@optional {allowedEventTypes: [str], description: str, featureFlags: [str], instructions: str, kind: str(Custom/AgenticCommerceProtocol/CloseCRM/CustomerIO/Discord/Hubspot/Inngest/Loops/Otel/Resend/Salesforce/Segment/Sendgrid/Slack/Teams/TriggerDev/Windmill/Zapier), logo: str(uri), name: str, transformation: str}\n@returns(200) {allowedEventTypes: [str]?, createdAt: str(date-time), description: str, featureFlags: [str]?, id: str, instructions: str, kind: str, logo: str(uri)?, name: str, orgId: str, productType: str, transformation: str, transformationUpdatedAt: str(date-time), uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /api/v1/health\n@desc Health\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endgroup\n\n@group ingest\n@endpoint GET /ingest/api/v1/source\n@desc List Ingest Sources\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /ingest/api/v1/source\n@desc Create Ingest Source\n@required {name: str}\n@optional {idempotency-key: str # The request's idempotency key, metadata: map=[object Object], uid: str # The Source's UID.}\n@returns(201) {createdAt: str(date-time), id: str, ingestUrl: str(uri)?, metadata: map, name: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}\n@desc Get Ingest Source\n@required {source_id: str # The Source's ID or UID.}\n@returns(200) {createdAt: str(date-time), id: str, ingestUrl: str(uri)?, metadata: map, name: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /ingest/api/v1/source/{source_id}\n@desc Upsert Source\n@required {source_id: str # The Source's ID or UID., name: str}\n@optional {metadata: map=[object Object], uid: str # The Source's UID.}\n@returns(200) {createdAt: str(date-time), id: str, ingestUrl: str(uri)?, metadata: map, name: str, uid: str?, updatedAt: str(date-time)}\n@returns(201) {createdAt: str(date-time), id: str, ingestUrl: str(uri)?, metadata: map, name: str, uid: str?, updatedAt: str(date-time)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /ingest/api/v1/source/{source_id}\n@desc Delete Ingest Source\n@required {source_id: str # The Source's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /ingest/api/v1/source/{source_id}/token/rotate\n@desc Rotate Ingest Token\n@required {source_id: str # The Source's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key}\n@returns(200) {ingestUrl: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /ingest/api/v1/source/{source_id}/dashboard\n@desc Ingest Source Consumer Portal Access\n@required {source_id: str # The Source's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, expiry: int(uint64) # How long the token will be valid for, in seconds.  Valid values are between 1 hour and 7 days. The default is 7 days., readOnly: bool # Whether the app portal should be in read-only mode.}\n@returns(200) {token: str, url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}/endpoint\n@desc List Ingest Endpoints\n@required {source_id: str # The Source's ID or UID.}\n@optional {limit: int(uint64) # Limit the number of returned items, iterator: str # The iterator returned from a prior invocation, order: str # The sorting order of the returned items}\n@returns(200) {data: [map], done: bool, iterator: str?, prevIterator: str?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /ingest/api/v1/source/{source_id}/endpoint\n@desc Create Ingest Endpoint\n@required {source_id: str # The Source's ID or UID., url: str(uri)}\n@optional {idempotency-key: str # The request's idempotency key, description: str=, disabled: bool=false, headers: map=null, metadata: map=[object Object], secret: str # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret., throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(201) {createdAt: str(date-time), description: str, disabled: bool, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n@desc Get Ingest Endpoint\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {createdAt: str(date-time), description: str, disabled: bool, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n@desc Upsert Ingest Endpoint\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID., url: str(uri)}\n@optional {description: str=, disabled: bool=false, metadata: map=[object Object], throttleRate: int(uint16) # Maximum messages per second to send to this endpoint.  Outgoing messages will be throttled to this rate., uid: str # Optional unique identifier for the endpoint.}\n@returns(200) {createdAt: str(date-time), description: str, disabled: bool, id: str, metadata: map, throttleRate: int(uint16)?, uid: str?, updatedAt: str(date-time), url: str(uri)}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint DELETE /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}\n@desc Delete Ingest Endpoint\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret\n@desc Get Ingest Endpoint Secret\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {key: str}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint POST /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/secret/rotate\n@desc Rotate Ingest Endpoint Secret\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {idempotency-key: str # The request's idempotency key, gracePeriodSeconds: int(uint32)=86400 # How long the old secret will be valid for, in seconds.  Valid values are between 0 (immediate expiry) and 7 days. The default is 24 hours., key: str=null # The endpoint's verification secret.  Format: `base64` encoded random bytes optionally prefixed with `whsec_`. It is recommended to not set this and let the server generate the secret.}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/headers\n@desc Get Ingest Endpoint Headers\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {headers: map, sensitive: [str]}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PUT /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/headers\n@desc Set Ingest Endpoint Headers\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID., headers: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint GET /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/transformation\n@desc Get Ingest Endpoint Transformation\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@returns(200) {code: str?, enabled: bool, variables: map?}\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endpoint PATCH /ingest/api/v1/source/{source_id}/endpoint/{endpoint_id}/transformation\n@desc Patch Ingest Endpoint Transformation\n@required {source_id: str # The Source's ID or UID., endpoint_id: str # The Endpoint's ID or UID.}\n@optional {code: str, enabled: bool, variables: map}\n@returns(204) no content\n@errors {400: Bad request, 401: Unauthorized, 403: Forbidden, 404: Not Found, 409: Conflict, 422: Validation Error, 429: Too Many Requests}\n\n@endgroup\n\n@end\n"}}