Mark a document as signed
Mark a document as signed when a physical or out-of-band signature has been obtained. You can mark the entire document as complete, or mark an individual recipient as complete if others are still signing. You can upload a signed PDF at the same time.
Prerequisites
- Your document ID (base64-encoded) — if you have a REST UUID prefix it with
docand base64-encode the result (e.g.doc+<your-document-uuid>→ base64). See Understand Web IDs and API IDs for details.
Option A: Mark as signed without a PDF upload
Call markAsComplete with isUploaded: false. The declarationText field is required — use it to record the reason the document is being marked complete (e.g. "Verbal confirmation received", "Wet signature obtained"). It can be left as an empty string, but a meaningful value is useful for audit purposes.
mutation MarkAsComplete {
markAsComplete(input: {
documentId: "<document-id>"
declarationText: "Verbal confirmation received"
isUploaded: false
})
}
Option B: Mark as signed with a PDF upload
Step 1: Get a pre-signed upload URL
Call the upload query with uploadType: MARKASCOMPLETE to get a short-lived S3 URL.
query GetUploadUrl {
upload(
id: "<document-id>"
uploadType: MARKASCOMPLETE
extension: "pdf"
) {
url
}
}
Response:
{
"data": {
"upload": {
"url": "https://lon-files-clearing.s3-accelerate.amazonaws.com/upload/..."
}
}
}
Step 2: PUT the file to S3
Upload the signed PDF directly to the returned URL using an HTTP PUT request with Content-Type: application/pdf. The URL is short-lived — use it immediately. See Upload files for more detail on the PUT step.
curl -X PUT \
-H "Content-Type: application/pdf" \
--data-binary @signed-copy.pdf \
"<url from previous step>"
Step 3: Mark the document as complete
Call markAsComplete with isUploaded: true. The declarationText field behaves the same as Option A.
mutation MarkAsComplete {
markAsComplete(input: {
documentId: "<document-id>"
declarationText: "Signed copy received by post"
isUploaded: true
})
}
Mark a single recipient as signed
Use markRecipientAsComplete when one party has signed out-of-band but others have not.
If you want to upload a signed PDF for the recipient, first get a pre-signed URL using uploadType: MARKRECIPIENTASCOMPLETE:
query GetUploadUrl {
upload(
id: "<recipient-id>"
uploadType: MARKRECIPIENTASCOMPLETE
extension: "pdf"
) {
url
}
}
Then PUT the file to the returned URL — see Upload files.
Key fields:
suppressNextRecipientNotification— set totrueto prevent the next recipient in the signing order from being notified immediately.auditlogText— optional. Leave it empty if not needed, but a meaningful value is useful for audit purposes.
Then call markRecipientAsComplete:
mutation MarkRecipientAsComplete {
markRecipientAsComplete(input: {
recipientId: "<recipient-id>"
documentOptions: NONE
suppressNextRecipientNotification: false
auditlogText: "Signed copy received by post"
}) {
id
uploadId
}
}
Archive the document (optional)
Once marked as complete, you can archive the document to remove it from the active documents view.
mutation ArchiveDocument {
archiveDocument(input: {
documentId: "<document-id>"
restore: false
})
}
Set restore: true to unarchive.