document.signed, sent when a Professional Services Agreement (PSA) has all of its required signatures.
document.signed
A PSA, PSA Lite, or AOR PSA version is fully signed by every required party
document.signed
Rise sendsdocument.signed once, after the last required signature on a PSA version is completed. It is not sent for each individual signature, and it never announces a partially signed agreement.
Payload version
2.0, the first version of this event on v2 webhooks. See Event versions.Scope
Organization (company) endpoints only. Team-scoped endpoints and legacy v1 endpoints do not receive it.
Supported agreement types
Other document types do not send
document.signed.
When it fires
- All required signatures. The event fires only when every required signature on the version is complete. That holds whether the last signature was manual or automatic, or came from Rise finalizing the version.
- One event per version. Rise creates one
document.signedevent per document version. Re-finalizing a version that is already complete does not create another one. The same event can still be delivered more than once (see Delivery guarantees). - Renewals are new versions. When a renewed or regenerated agreement is fully signed, you get a new event with a new
version_nanoidand the same documentnanoid. - No backfill. Agreements completed before you subscribed, or before this event was available, are not sent retroactively. To handle them, reconcile once from your own records.
Field reference
string
required
The type of object this webhook represents (always
"event")number
required
The Unix timestamp when the event was created
string
required
Always
document.signedstring
required
The version of the event schema (
2.0)string
A request tracking identifier. Real completions usually have none (
null). Test deliveries always set it to a value starting with [TEST].string
required
A unique key for this delivered event, also sent in the
X-Rise-Event-Key header. Treat it as an opaque string. A redelivered completion can have a different key, so deduplicate on document.version_nanoid instead.object
required
The fully signed agreement version
The payload identifies the agreement but does not contain it: no document contents, signature hashes, or download URLs. Use the identifiers to look up the agreement in your own records.
Subscribing
Subscribe an organization endpoint (a v2 webhook registered for your company with noteam_nanoid) to document.signed. You can add other organization-wide events to the same endpoint.
In the Rise app
1
Open organization webhooks
Go to B2B API → Webhooks and select Organization webhooks.
2
Add an endpoint
Click Add endpoint, then enter the endpoint URL and a secret of at least 16 characters.
3
Select the event
Under PSA completion, select PSA fully signed (document.signed). Add any other organization-wide events you need.
4
Save
Keep Active on and save. The endpoint appears under Your webhook endpoints with its subscribed events.
With the API
Register a new organization endpoint withPOST /v2/webhooks/register:
PUT /v2/webhooks/{webhook_nanoid}. events replaces the subscribed list, so send the complete list you want, including the events already subscribed:
Use your environment’s base URL. See Environments.
Verifying and handling deliveries
document.signed is signed exactly like every other v2 event. Each delivery has these headers:
Always verify against the raw request body. See Webhook security for the full procedure.
Delivery guarantees
- At-least-once. The same completion can arrive more than once, for example after a retry or a redelivery. Deduplicate on
document.version_nanoidand make your side effects idempotent. - Retries. A delivery that fails or gets a non-2xx response is retried automatically. See Delivery and retries. You can also retry a failed delivery from the endpoint’s Delivery history or with
POST /v2/webhooks/retry/{delivery_nanoid}. - Respond quickly. Return a 2xx right away and do slow work (fetching the agreement, updating records) in the background.
- Inactive endpoints miss events. Completions that happen while an endpoint is deactivated are not queued, and there is no automatic backfill.
Testing
You can send a testdocument.signed to an active organization endpoint that is subscribed to it:
- In the Rise app: on the endpoint card, pick PSA fully signed (document.signed) from the dropdown and click Test. Sending a test does not change the endpoint’s subscribed events. The delivery then shows in Delivery history.
- With the API: call
POST /v2/webhooks/test/{webhook_nanoid}with{ "event_type": "document.signed" }. The response includes the generatedtest_payload.
Telling test events from real completions
A test delivery has a real signature and the real envelope, but its data is synthetic:
To test end to end with a real completion, sign a PSA in a non-production environment and confirm the delivery arrives with real identifiers.
Troubleshooting missing deliveries
A PSA was signed but no event arrived
A PSA was signed but no event arrived
- Make sure every required party has signed. A partially signed PSA does not send the event.
- Check that the agreement is a
psa,psa_lite, oraor_psa. - Check that the endpoint is an organization endpoint (no
team_nanoid), is a v2 endpoint, is active, and listsdocument.signed. - Check that the agreement belongs to the company that registered the endpoint.
- Agreements completed before the subscription existed are not backfilled.
The delivery shows as failed
The delivery shows as failed
Open the endpoint’s Delivery history to see the response code and the event. Fix the endpoint, then click Retry or call the retry endpoint. See Troubleshooting webhooks for common HTTP and signature errors.
The delivery arrived but validation fails
The delivery arrived but validation fails
If signature checks pass but your SDK returns
UNKNOWN_EVENT_TYPE, your SDK version does not support document.signed. Verify the signature manually as shown above, or upgrade to an SDK release that includes DocumentSignedV2.I received the same completion twice
I received the same completion twice
This is expected with at-least-once delivery. Deduplicate on
document.version_nanoid.Still missing
Still missing
Contact Rise support with the endpoint’s
webhook_nanoid, the document nanoid (if you have it), and roughly when the last signature happened.