Skip to main content
Document events tell you when an agreement reaches a final state, so you no longer need to poll for it. Today this covers one event: 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 sends document.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.signed event 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_nanoid and the same document nanoid.
  • 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.signed
string
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.
All identifiers above are synthetic examples.

Subscribing

Subscribe an organization endpoint (a v2 webhook registered for your company with no team_nanoid) to document.signed. You can add other organization-wide events to the same endpoint.
Do not pass team_nanoid. Rise sends document.signed only to company-level endpoints, so a team-scoped endpoint that lists this event receives nothing.

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 with POST /v2/webhooks/register:
To add the event to an existing organization endpoint, use 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.
SDK support. The WebhookValidator in @riseworks/sdk rejects event types it does not know, and returns UNKNOWN_EVENT_TYPE even when the signature is valid. Use WebhookValidator for document.signed only with an SDK release whose changelog lists DocumentSignedV2. Until you have one, verify the signature yourself as shown below.

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_nanoid and 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 test document.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 generated test_payload.

Telling test events from real completions

A test delivery has a real signature and the real envelope, but its data is synthetic:
Check for these markers before you act on a test delivery, and never activate a contractor or release work because of one. Every test uses the same version_nanoid, so your deduplication can drop repeat tests. That is expected.
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

  • 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, or aor_psa.
  • Check that the endpoint is an organization endpoint (no team_nanoid), is a v2 endpoint, is active, and lists document.signed.
  • Check that the agreement belongs to the company that registered the endpoint.
  • Agreements completed before the subscription existed are not backfilled.
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.
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.
This is expected with at-least-once delivery. Deduplicate on document.version_nanoid.
Contact Rise support with the endpoint’s webhook_nanoid, the document nanoid (if you have it), and roughly when the last signature happened.