---
title: "Create subscription"
method: POST
path: "/subscriptions"
tags: ["subscription"]
---

# Create subscription

`POST /subscriptions`

Creates a new subscription that connects an event source (e.g., a Kafka topic) to a Restate service handler.
For more information, see the [subscription documentation](https://docs.restate.dev/operate/invocation#managing-kafka-subscriptions).

## Request body

- CreateSubscriptionRequest
  - `options` object, nullable — # Options Additional options to apply to the subscription.
  - `sink` string, uri, required — # Sink Sink uri. Accepted forms: * `service://<service_name>/<service_name>`, e.g. `service://Counter/count`
  - `source` string, uri, required — # Source Source uri. Accepted forms: * `kafka://<cluster_name>/<topic_name>`, e.g. `kafka://my-cluster/my-topic`

## Response `201`

Subscription created successfully

- SubscriptionResponse — Subscription details.
  - `id` string, required
  - `options` object, required
  - `sink` string, required
  - `source` string, required

## Other responses

- `400` — Bad request
- `404` — Not found
- `405` — Method not allowed
- `409` — Conflict
- `500` — Internal server error

## Changes

- **2026-01-30** `059a44500a5c` — 4 breaking, 4 info
  - the request property `options` became not nullable
  - added 'propertyNames' constraint to the request property `options`
  - the `sink` request property type/format changed from `string`/`` to `string`/`uri`
  - the `source` request property type/format changed from `string`/`` to `string`/`uri`
  - …4 more

[Change history](https://skmtc.dev/restatedev/apis/admin-api/changes/subscriptions/post.md)

---

[API](https://skmtc.dev/restatedev/apis/admin-api.md) · [All operations](https://skmtc.dev/restatedev/apis/admin-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/restatedev/admin-api/revisions/5361f4818c71/schema)
