Sign the Contract or Mandate
Find this scenario in our Bruno collection
Save time in your implementation by observing the sequence of calls and retrieving requests directly from Bruno.
Display the Contract to the User
If the sold product is associated with a contract model (product.contractModel is set), a contract is automatically generated with the sale and must be signed.
To visually display the contract to the client, simply perform a GET /:clientToken/sales/:saleId/contract, which will return the raw PDF content to display.
curl --location 'https://.../demoapi/sales/12345/contract' \
--header 'authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJOdDmWEJwl2Zqc' \
--header 'x-user-club-id: /onfit/clubs/2325' \
--header 'x-user-network-node-id: /onfit/network_nodes/2229' \
--header 'x-gravitee-api-key: xxx-yyy-zzz'Note
You receive the raw PDF content, so you need to create an endpoint that serves this content with the correct HTTP headers.
Initiate the Signature Process via SMS
The electronic signature process involves sending an SMS to the contact. This SMS contains a code they must use to validate the signature in the next step.
This process is the same for contracts and mandates:
- If you have only a contract, provide the
saleId(/:clientToken/sales/:id) astargetId - If you have only a mandate, provide the
mandateId(/:clientToken/mandate/:id) astargetId - If you have both a contract and a mandate to sign, you can sign both in a single call by providing both IDs in a
targetIdsarray
POST /{clientToken}/signature_requests
| parameter | description | example |
|---|---|---|
contactId | Contact ID in IRI format | /{clientToken}/contacts/1 |
targetId | ID of the mandate to sign in IRI format | /{clientToken}/mandates/373969 |
targetIds | Array of IDs (in IRI format) of items to sign | /{clientToken}/mandates/373969 |
Example
POST /{clientToken}/signature_requests
Body
{
"contactId": "/{clientToken}/contacts/1",
// "targetId": "/{clientToken}/mandates/373969"
"targetIds": [
"/{clientToken}/mandates/373969",
"/{clientToken}/sales/936973"
]
}Response 201 Created
{
"@context":"\/clientToken\/contexts\/SignatureRequest",
"@id":"\/clientToken\/signature_requests\/3451", // <-- signature process ID
"@type":"SignatureRequest",
// ...
}Complete the Signature Process
Once the SMS is received, the application orchestrating the signature must collect the code from the targeted contact and complete the signature process by validating this code.
POST
/{clientToken}/signature_requests/{signatureRequestId}/transitions
| parameter | description | example |
|---|---|---|
signatureRequestId | ID of the previously created signature process | 3451 |
transition | Type of transition. Possible values are validate or cancel | validate |
code | Validation code received via SMS | 1234 |
Example
POST /{clientToken}/signature_requests/3451/transitions
Body
{
"transition": "validate",
"code": "94852"
}Response 201 Created