Appearance
The v1 promise
Every path on this site sits under /v1. That segment is a promise: a client written against what these pages document keeps working, without changes, for as long as v1 is served.
What stays
- Every operation. Its method and path, its parameters, its request and response shapes, the
Spooler-*headers it takes and returns, and the meaning of each status and kind in errors. - The delivery contract. At least once, leases, their six settles and renew, what a
201and a204mean, retention, no ordering guarantee, and what a primary change drops – delivery and replication. - Value formats. Durations as integers with the unit in the name, timestamps as RFC 3339 UTC, message ids, queue uids, leases, handles and cursors opaque and never longer than the maxima in limits, which are fixed: size storage for them.
- Fixed bounds. A bound in limits may go up under v1; it never goes down.
What may be added
Additions are not breaking, and a client must tolerate them:
- New operations, and new optional parameters and headers. A request that omits them behaves as before.
- New fields in JSON responses. Decode the fields you use and ignore the rest.
- A body on a response that had none. Ignore a body you do not read.
- New
Spooler-*response headers. - New error kinds under an existing status. Match on the status first and on the kinds you handle; read an unknown kind the way its status alone reads.
- New statuses on an operation. Read an unknown status by its class: a
4xxis a verdict unless its kind says otherwise, a5xxfollows retrying a change. - New values in a string enum: a message or queue state, a
limitname inspool_full. Treat an unknown value as "other"; a message in a state you do not know is not yours to act on.
What is not covered
- Plan limits. They are per plan and change with the plan, not with the API; the values in force are on limits.
- Behaviour these pages do not state. If confirming a claim would take reading the server, it is not promised.
- The console's own API. The console talks to
account.spooler.sh, which these pages do not document; it serves the console and changes with it, without notice. The promise covers what the API reference documents and nothing else. - The evaluation image's differences from the hosted API, listed on running locally. Everything else about the image follows v1.
How a breaking change ships
A change that would break a v1 client ships under a new segment, /v2, served beside v1. Removing an operation, a field, a header, or a kind, changing a type or a meaning, and lowering a bound are all breaking. v1 keeps being served for at least six months after v2 is announced here, with its end date published at the announcement.
A deprecation under v1 is a note on the operation's page, not a change in behaviour: a deprecated operation keeps working until v1 ends.