Obtain an OAuth access token with the agreement_write scope via the OAuth 2.0 authorization flow; the base URI for API calls is returned in the token response and varies per account shard
Upload your document with POST /transientDocuments as a multipart/form-data request containing File-Name, Mime-Type, and the binary file; note the transientDocumentId returned (valid 7 days)
Build the POST /agreements request body with fileInfos (containing transientDocumentId), name, participantSetsInfo (each with memberInfos, order, and role such as SIGNER or APPROVER), signatureType (ESIGN or WRITTEN), and state (IN_PROCESS to send immediately, DRAFT to stage first)
POST to /api/rest/v6/agreements; capture the agreementId from the response for subsequent status polling
Poll GET /agreements/{agreementId} or subscribe a webhook to track the agreement through WAITING_FOR_MY_SIGNATURE, OUT_FOR_SIGNATURE, SIGNED, and other terminal states
Download the signed document with GET /agreements/{agreementId}/combinedDocument after the agreement reaches SIGNED state
Known gotchas
The API base URL is account-specific and returned in the token response as api_access_point; hardcoding a shard URL (e.g., api.na1.adobesign.com) will fail for accounts on other shards
Transient documents expire after 7 days; re-upload if your workflow has a long staging period between upload and agreement creation
Agreement state IN_PROCESS sends immediately and cannot be recalled to DRAFT; always test with DRAFT state before going to production
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp