openapi: 3.0.3 info: title: Sequin Management Backfills Sink Consumers API description: The Sequin Management API configures and operates a Sequin Postgres change data capture (CDC) deployment programmatically. Sequin is open source and self-hostable, and also runs as Sequin Cloud. Most resources can be defined declaratively in a sequin.yaml file; this API exposes the same resources - Postgres database connections (sources), sink consumers (destinations), HTTP endpoints, and backfills - over REST. The Sequin Stream sink also exposes an HTTP pull consumption surface (receive / ack / nack). All requests require a Bearer token found in the Sequin console under "Manage account". Not all Sequin resources are available in the Management API. version: '1.0' contact: name: Sequin url: https://sequinstream.com license: name: MIT url: https://github.com/sequinstream/sequin/blob/main/LICENSE servers: - url: https://api.sequinstream.com/api description: Sequin Cloud - url: http://localhost:7376/api description: Local development (self-hosted) security: - bearerAuth: [] tags: - name: Sink Consumers description: Destinations that stream Postgres changes to external systems. paths: /sinks: get: operationId: listSinkConsumers tags: - Sink Consumers summary: List sink consumers description: Lists all sink consumers. A sink consumer is a destination for Postgres changes (Kafka, SQS, SNS, Kinesis, Redis, NATS, RabbitMQ, Elasticsearch, Typesense, GCP Pub/Sub, Azure Event Hubs, webhooks, Sequin Stream, and more), including its source, filters, transforms, and health. responses: '200': description: A list of sink consumers. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/SinkConsumer' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createSinkConsumer tags: - Sink Consumers summary: Create a sink consumer description: Creates a new sink consumer that streams Postgres changes to a destination. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SinkConsumerInput' responses: '200': description: The created sink consumer. content: application/json: schema: $ref: '#/components/schemas/SinkConsumer' '401': $ref: '#/components/responses/Unauthorized' '422': $ref: '#/components/responses/ValidationError' /sinks/{id_or_name}: parameters: - $ref: '#/components/parameters/IdOrName' get: operationId: getSinkConsumer tags: - Sink Consumers summary: Get a sink consumer description: Retrieves a sink consumer by its ID or name. responses: '200': description: The requested sink consumer. content: application/json: schema: $ref: '#/components/schemas/SinkConsumer' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateSinkConsumer tags: - Sink Consumers summary: Update a sink consumer description: Updates an existing sink consumer. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/SinkConsumerInput' responses: '200': description: The updated sink consumer. content: application/json: schema: $ref: '#/components/schemas/SinkConsumer' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/ValidationError' delete: operationId: deleteSinkConsumer tags: - Sink Consumers summary: Delete a sink consumer description: Deletes a sink consumer. responses: '200': description: Deletion confirmation. content: application/json: schema: $ref: '#/components/schemas/DeleteResponse' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: schemas: SinkConsumerInput: type: object required: - name - database - destination properties: name: type: string status: type: string enum: - active - disabled - paused database: type: string description: Name or ID of the source Postgres database. table: type: string description: Source table in schema.table form. filters: type: array items: type: object additionalProperties: true transform: type: string description: Name of a transform to apply to messages. destination: type: object description: The destination configuration. The `type` field selects the sink kind - e.g. kafka, sqs, sns, kinesis, redis_stream, redis_string, nats, rabbitmq, elasticsearch, typesense, meilisearch, gcp_pubsub, azure_event_hub, webhook, sequin_stream, s2. properties: type: type: string enum: - kafka - sqs - sns - kinesis - redis_stream - redis_string - nats - rabbitmq - elasticsearch - typesense - meilisearch - gcp_pubsub - azure_event_hub - webhook - sequin_stream - s2 additionalProperties: true DeleteResponse: type: object properties: id: type: string deleted: type: boolean Error: type: object properties: error: type: object properties: code: type: string message: type: string details: type: object additionalProperties: true SinkConsumer: allOf: - $ref: '#/components/schemas/SinkConsumerInput' - type: object properties: id: type: string format: uuid health: type: object additionalProperties: true responses: NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Missing or invalid Bearer token. content: application/json: schema: $ref: '#/components/schemas/Error' ValidationError: description: The request payload failed validation. content: application/json: schema: $ref: '#/components/schemas/Error' parameters: IdOrName: name: id_or_name in: path required: true description: The ID (UUID) or unique name of the resource. schema: type: string securitySchemes: bearerAuth: type: http scheme: bearer description: 'Bearer token found in the Sequin console under "Manage account". Passed as `Authorization: Bearer YOUR_API_TOKEN`.'