Skip to main content
A Verified Closing Room is one shareable page per transaction that bundles the deal’s orders — documents, signers, notarization, shipping — with live status and verifiable evidence links. You create the room with your partner key, attach the orders whose public codes you hold, and hand every party the same link. Statuses are read live from the order records on every view, never replayed from events.
The room link is a bearer credential. One link grants deal-wide visibility: every attached document’s status, masked signer progress, evidence badges, tracking, and drill-down into each order page. Share it with the parties to the deal and no one else; never post or embed it anywhere public. If a link leaks, rotate it — the old link stops working immediately.
All partner routes below require your key (Authorization: Bearer sss_pk_...) and share the partner-write limit of 60 requests per minute per key. The public room view is rate limited at 30 requests per minute per IP. See authentication.

Create a room

POST /api/rooms Room creation enforces your tier’s active-room quota (trial and PartnerLink: 5 open rooms; ProOffice: 25; ClosingDesk: unlimited).
string
required
Display name for the room, 1–200 characters. Shown to every party who opens the link — a property address or matter name works well.
string
Your internal file number, at most 200 characters. Displayed on the room page.
string
The room’s bearer code — 40 lowercase hex characters, minted from a CSPRNG. This is the credential in the room link.
string
Root-relative path to the shareable page, /rooms/{roomCode}. Prefix it with https://signsealship.com before sharing.
string
The room name, as stored.
string
Your reference, or null.
string
"open" on creation.
string
ISO 8601 creation time.
200 OK
Errors: 400 with {"error": "A room name (1–200 chars) is required."} for a missing or oversized name, or a quota message such as "Active-room quota reached (5 open rooms on the None tier). Close a room or upgrade your plan to create more."

List your rooms

GET /api/rooms Returns your own rooms only, newest first.
array
One summary per room.

Attach an order

POST /api/rooms/{roomCode}/orders Attach authorization is possession of the order’s public code: a partner who holds the code may bind that order to their room. Attaching is idempotent — re-attaching an already attached order succeeds with alreadyAttached: true. A room holds at most 50 orders.
string
required
Your room’s code.
string
required
The order’s public code, 24–64 characters.
string
A display label for the document card (for example “Seller deed package”).
boolean
true on success.
boolean
true when the order was already in the room (the call is a no-op).
Errors: 400 {"error": "A valid orderCode is required."} (bad length), 400 {"error": "A room holds at most 50 orders."}, 404 {"error": "Room not found."} or {"error": "Order not found."} — unknown codes read as a generic not-found.

Detach an order

DELETE /api/rooms/{roomCode}/orders/{orderCode}
string
required
Your room’s code.
string
required
The attached order’s public code.
curl
Returns {"ok": true}, or 404 with {"error": "Room not found."}, {"error": "Order not found."}, or {"error": "That order is not in this room."}. POST /api/rooms/{roomCode}/rotate Reissues the room’s bearer code. Every previously shared room link dies instantly — this is the mitigation for a leaked or over-shared link. The public view is served with Cache-Control: no-store, so a rotated code dies at every cache layer too.
string
required
The room’s current code. It stops working the moment this call returns.
string
The new bearer code. Update every place you shared the old link.
string
Root-relative path with the new code, /rooms/{roomCode}.
Returns 404 {"error": "Room not found."} for a code that is not one of your rooms.
Per-party scoped links (separate credentials per participant) are on the roadmap; today one room has one link.

Read the room (public)

GET /api/rooms/{roomCode} Public read by possession of the room code — no API key, no account. This is the same live JSON the room page at /rooms/{roomCode} renders, for your own systems. Codes outside the 24–64 character gate and unknown codes both return an empty 404. Responses are Cache-Control: no-store. Statuses are database truth read at request time. Evidence badges never claim more than the record holds.
string
required
The room’s bearer code, 24–64 characters.

Response shape

string
The room’s bearer code.
string
Room name.
string
The partner’s file reference, or null.
string
Room status, "open" by default.
string
The name of the partner firm that owns the room.
object
The partner’s public branding, or null when none is set. Rendered as attribution (“Presented by …”) beside the permanent SignSealShip mark — never replacing it.
object
The progress strip, counted from the order cards below.
array
One card per attached order, in attach order.
array
Merged timeline across all attached orders — up to 100 items, newest first, derived from an explicit allowlist of audit actions: order.created, order.transition, order.claimed, order.cancelled, signing_link.issued, room.order_attached. No recipient identifiers or actor details are ever included.
object
The room’s latest Closing Passport, or null until one is sealed. This is only a pointer — verification always goes through the public verify surface, which recomputes the chain.
string
ISO 8601 room creation time.
string
ISO 8601 time of the last room change.
200 OK (abridged)