All examples assume platform-api is running at http://localhost:4111.
Bootstrap token issuance for local and demo flows.
Request:
{
"subject": "local-admin",
"roles": ["demo-admin"],
"scopes": ["admin:read", "topics:read", "topics:write", "messages:read", "messages:write"],
"ttlSeconds": 3600
}Response:
{
"accessToken": "jwt",
"tokenType": "Bearer",
"expiresIn": 3600,
"subject": "local-admin",
"roles": ["demo-admin"],
"scopes": ["admin:read", "topics:read", "topics:write", "messages:read", "messages:write"]
}Request:
{
"token": "jwt"
}Requires topics:read.
Requires topics:write.
Request:
{
"name": "orders",
"memo": "Ordered domain events",
"partitions": 4,
"retentionHours": 72,
"acl": {
"publishers": ["checkout"],
"subscribers": ["orders-projection"]
}
}Requires topics:read.
Requires messages:write.
Request:
{
"publisherId": "checkout",
"idempotencyKey": "order-123-created",
"partitionKey": "merchant-42",
"orderingKey": "order-123",
"payload": {
"orderId": "123",
"status": "CREATED"
}
}Response:
{
"accepted": true,
"deliverySemantics": "AT_LEAST_ONCE_WITH_IDEMPOTENCY",
"message": {
"messageId": "uuid",
"topicId": "orders",
"publisherId": "checkout",
"payload": {
"orderId": "123",
"status": "CREATED"
},
"metadata": {},
"partitionKey": "merchant-42",
"orderingKey": "order-123",
"integrityHash": "sha256",
"topicMemo": "Ordered domain events",
"transactionId": "0.0.5005-42",
"sequenceNumber": 42,
"topicSequenceNumber": 11,
"consensusTimestamp": "2026-07-09T12:00:00.000Z",
"status": "FINAL"
}
}Requires messages:read.
Query parameters:
afterSequenceafterConsensusTimestamplimitconsumerGroup
When consumerGroup is supplied, the returned batch advances that consumer group's checkpoint to the last returned message.
Requires messages:read.
SSE stream with at-least-once delivery.
Query parameters:
afterSequence
Requires messages:read.
Request:
{
"topicId": "orders",
"consumerGroup": "orders-projection"
}Requires messages:read.
Requires admin:read.
Returns:
- topic list
- total message count
- latest canonical sequence
- mirror status
- repository, provider, and rate-limiter health
All business errors use:
{
"code": "VALIDATION_ERROR",
"message": "name is required",
"requestId": "req-123"
}- Human-readable UI:
/docs - JSON document:
/openapi.json