Skip to navigation

memo.reopened

Fires once per reopen: an analyst reopened a finalized credit memo to edit it. The final PDF it points at is kept and unchanged, but the memo is under revision until the next memo.finalized, so mark your copy stale. The payload carries ids, not the memo.

Headers

SpreadSpace-SignaturestringRequired

Signature over the exact request body: t=<seconds since the Unix epoch>,v1=<lowercase hex HMAC-SHA256 of "{t}.{body}" keyed with your endpoint's signing secret>. Verify it before trusting the body, and reject a t more than five minutes from your own clock. During a secret rotation both the new and the previous secret verify for 24 hours; each delivery is signed with exactly one.

SpreadSpace-Event-IdstringRequiredformat: "^evt_[0-9a-f]{24}$"

The event id, identical to the body’s id. Stable across retries and replays, and shared by every endpoint one event fans out to. Delivery is at-least-once, so dedupe on it.

Payload

The payload of this webhook request is an object.
idstringRequiredformat: "^evt_[0-9a-f]{24}$"

Event id: evt_ plus 24 lowercase hex characters. Also sent as the SpreadSpace-Event-Id header. Stable across retries and replays, so dedupe on it.

typeenumRequired
Always this event type on this body.
Allowed values:
created_atdatetimeRequired

Server-side wall-clock time the event was created, RFC 3339. Deliveries are not ordered; reconcile on this.

tenant_idstringRequired
The workspace the event belongs to. Reject a delivery whose tenant does not match the endpoint you registered.
livemodebooleanRequired

true for live activity, false for test mode (an ss_test_ key or the sandbox simulator). Branch on it to route test deliveries to a staging handler.

dataobjectRequired

The data object on a memo.reopened delivery, sent once per reopen: an analyst reopened a finalized credit memo to edit it. The lock is cleared and the final PDF the finalize made is KEPT, but the memo is under revision until the next memo.finalized, so a receiver holding a copy should mark it stale.

A pointer, not a payload: ids, the time and the spread snapshots the memo was approved on, never the memo’s prose or its figures. The PDF that was in force is still pulled through GET /api/loans/{loan_id}/memos/{memo_id}/pdf.

api_versionstringOptionalformat: "^[0-9]{4}-[0-9]{2}-[0-9]{2}$"

The API version the delivery was rendered under, a date stamp: the same value /v1/openapi.json reports as info.version. The envelope and data have that version’s shape, and a breaking change ships under a new stamp. A delivery recorded before this field existed carries none, and has the 2026-10-07 shape.

Response

2XX
Return any 2xx within 5 seconds. A 4xx other than 429 stops retries for that delivery. 429, 5xx, network errors and timeouts are retried, up to 12 attempts in all.