Reference
WaaS producer API
The producer-side endpoints for distributing your event streams to integration partners: declarative stream apply, integration invites, group-key activations, packages, and access control (block / un-block).
/waas/* endpoints require a bearer token (Microsoft Entra) and producer-tenant ownership — they are not reachable with an ingress API key. Request and response bodies are camelCase JSON. Public ids are prefixed: ten_ (tenant), cat_ (catalog stream), pkg_ (package), int_ (integration), act_ (activation).Streams
PUT /waas/streams is the declarative deploy/CLI target — safe to call repeatedly. One call promotes the tenant to a producer, makes the queue Public, configures context-header extraction, and upserts the catalog entry.
PUT /waas/streams
{
"producerTenantPublicId": "ten_yourTenant",
"name": "orders",
"description": "Order lifecycle events",
"eventTypes": ["order.created", "order.shipped"],
"payloadSchema": "{ ... }", // opaque, stored verbatim
"isPublic": true
}
200 OK
{ "publicId": "cat_...", "key": "orders", "status": "Published" }| Endpoint | What it does |
|---|---|
| PUT /waas/streams | Declarative, idempotent stream apply. Converges a stream (a Public queue named after it + context-header extraction + a catalog entry) from desired state. Re-apply is a no-op. isPublic:true → Published, else Deprecated. |
| POST /waas/enable-producer | Mark a tenant as a producer (ProducerSystem). |
| GET /waas/producer/{tenant}/catalog | List the producer's published streams (catalog entries). |
| GET /waas/producer/{tenant}/metrics/series?history=1h|24h|7d | Aggregate distributed-traffic series for the producer. |
Integrations & activations
An activation (producer, groupKey, integration) is the routing gate: events only reach an integration when an active activation exists for the event's group key — even if the integration is subscribed.
| Endpoint | What it does |
|---|---|
| POST /waas/integrations | Invite an integration (recipient). Body: { producerTenantPublicId, email } → { publicId:"int_…", invitedEmail, status:"Pending" }. |
| POST /waas/activations | Activate a group key for an integration — the routing gate. Body: { producerTenantPublicId, groupKey, integrationPublicId } → { publicId:"act_…", groupKey, status }. Idempotent. |
| DELETE /waas/activations | Revoke a group key. Same body → 204. Idempotent (never 404). |
| GET /waas/producer/{tenant}/integrations | List the producer's integrations. |
Packages
Access is default-open: a linked partner can see and subscribe to every published stream, whether or not it's in a package. Packages are a grouping and an opt-out lever — they let you block a whole category for one integration in a single call.
| Endpoint | What it does |
|---|---|
| POST /waas/producer/{tenant}/packages | Create a package. Body: { name, description? } → { publicId:"pkg_…", key, name, status:"Active" } (key is a slug). |
| PUT /waas/producer/{tenant}/packages/{pkg} | Rename / re-describe a package. Body: { name, description? }. |
| POST /waas/producer/{tenant}/packages/{pkg}/streams | Add a stream to a package. Body: { catalogEntryPublicId } → 204. |
| DELETE /waas/producer/{tenant}/packages/{pkg}/streams/{catalogEntryPublicId} | Remove a stream from a package → 204. Idempotent. |
| POST /waas/producer/{tenant}/packages/{pkg}/archive | Archive a package → 204. |
Access control (block / un-block)
Since everything published is available by default, you limit a specific integration by blocking a stream or a whole package. A block has teeth: it stops (re)subscription and pauses any live subscription so routing halts. Un-blocking resumes it. A package block wins over the stream's other package memberships.
| Endpoint | What it does |
|---|---|
| POST /waas/producer/{tenant}/integrations/{integration}/blocks/streams/{catalogEntryPublicId} | Opt an integration out of one stream (block) → 204. Pauses any subscription to it. Idempotent. |
| DELETE /waas/producer/{tenant}/integrations/{integration}/blocks/streams/{catalogEntryPublicId} | Un-block a stream → 204. Resumes a paused subscription (unless still covered by a package block). |
| POST /waas/producer/{tenant}/integrations/{integration}/blocks/packages/{pkg} | Opt an integration out of a whole package (block) → 204. Pauses subscriptions to its streams. Idempotent. |
| DELETE /waas/producer/{tenant}/integrations/{integration}/blocks/packages/{pkg} | Un-block a package → 204. Resumes subscriptions no longer covered by any block. |
Sandbox publish
The sandbox route mirrors production ingress but lets you simulate delivery failures with query params — useful for testing retries and circuit behavior without a real receiver.
| Route / param | Meaning |
|---|---|
| POST /events/sandbox/{tenant}/{queue} | Sandbox ingress. Identical to the production route, but the sandbox query params below are honored here (and rejected with 400 on the production route). |
| ?sb_fail_code=503 | Force the simulated delivery to fail with this status code. |
| ?sb_fail_count=2 | Fail the first N delivery attempts, then succeed. |
| ?runId=... | Attach the event to a sandbox run. |
Related
- Headers & status codes — the ingress header and error-envelope reference.
- Quickstart — send your first event.