Skip to content

Available now

Verdicts and refusals ​

Every message goes through one gateway, in this order:

firewall and rate limits → size → identity → JSON → SOM envelope, version and payload → grants
     → idempotency → snapshot sequence → story ownership → commit → publish to consumers

Nothing reaches a consumer unless it passes every step. A message stops at the first step that refuses it; within the SOM step, the bus reports every violation it finds, not just the first.

The response names the rule ​

json
{
  "accepted": false,
  "violations": [
    { "source": "sequence", "rule": "sequence_number.not_increasing",
      "message": "sequence_number 7 -> 6: must strictly increase…", "path": "/payload/sequence_number" }
  ]
}
  • rule is a stable id. Branch on it, never on message, which is for people and may change. Every rule id has a page in the rule catalogue.
  • path, when present, is a JSON Pointer into your message.
  • source says who is saying no:
sourceWho says noWhat it means for you
schemaThe SOM 1.0 JSON Schema, or a body that isn't JSON at all (message.not_json)Your message isn't valid SOM. Fix the producer
conformanceThe SOM conformance rules the schema can't expressNot valid SOM 1.0, for example a pre-1.0 wire version
sequenceSOM conformance on snapshot order, checked against the story's previous snapshotYour story state is inconsistent. Send a fresh, complete snapshot
policyThis bus's operational rules: identity, grants, size, idempotency, story ownershipNot a SOM verdict. Check your credentials, grants, retry logic or which system writes the story

Keeping policy apart means "the standard says no" is never confused with "this bus says no".

Accepted, with notes ​

An accepted message may carry tolerated[]: things the bus let through but wants you to know about. A gap in sequence_number, a changed correlation_id, a payload with no schema, fields from a newer 1.x, or a snapshot from a system that doesn't own the story (in a workspace that warns, the default). They use the same shape and rule ids as violations.

Status codes ​

StatusMeaningWhat to do
202Accepted. tolerated[], if present, lists notesNothing
200Duplicate of a message already accepted (same message_id, same content)Nothing. Treat as success
400Not JSON, not valid SOM 1.0, or content refused by policyFix the message
401producer.unauthenticated: token missing, malformed, expired, issued before a rotation, or from the wrong environmentGet a new token
403producer.not_registered: valid credentials, but no active connection. principal.not_verified: an AWS role that hasn't proved it's yours yet. tenant.mismatch: another workspace's route. producer.system_id_not_allowed or producer.message_type_not_allowed: outside your grants. request.blocked: refused by the firewallCheck the connection in the portal; for the firewall, ask RND
409A sequence rule, message_id.reused or commit.contentionSend a fresh, complete snapshot with a new message_id
409story.not_owner, in a workspace that refuses it: your system doesn't own the storyPublish from the story's owner, or ask a workspace admin for a hand-off
413message.too_largeSend references, not media
429rate.limited: over a rate limit (see Limits). quota.exceeded: your connection's daily allowance is used upBack off and retry, honouring Retry-After when present
409message.superseded: a retried snapshot that was recorded but never published, whose story has moved on. Not deliveredNothing: the newer snapshot supersedes it
503bus.publish_failed or registry.unavailable: not published. message.in_flight: an earlier attempt is less than 30 seconds old and not confirmed publishedRetry with the same message_id

Try it without publishing ​

The portal's Playground runs the gateway's own checks against your workspace's story state and stops before anything is stored or sent. It checks the message, not your app's grants. To check with your app's grants too, use your workspace's validate route (see Token service and workspace API). More: The Playground.

SOM is an open standard maintained by the SOM working group. This service is not endorsed by it.