Complete a signature
Install the CMS into the prepared candidate and publish the sealed bytes as the document's next base version.
`cms` is the detached CMS over the prepared digest, base64. `expectedVersion` must be what prepare returned. Idempotent by signing id: the same CMS again answers `already-completed`. Every layer of the document then sits over the new version; refetch the manifest after a completion.
Authentication#
Any one of these credentials is accepted.
The deployment's static root credential (CLOUDPDF_API_AUTH_TOKENS), valid on every surface.
Doc-scoped JWT, valid only on the /v1/docs/{docId} subtree it names, gated by the capability scopes it carries (each operation's x-required-capability).
Parameters#
docIdpathstringrequiredlayerNamepathstringrequiredsigningIdpathstringrequiredX-Document-PasswordheaderstringBase64-encoded password for an encrypted document. Valid only with the API token (403 anywhere else). An encrypted document answers 422 DocPasswordRequired when the header is absent. Viewer doc JWTs use the SDK password-session flow instead.
Request body#
application/jsonDocSignaturesCompleteRequestrequiredcmsstringrequiredexpectedVersionobjectrequiredbaseSha256stringrequirededitsVersionintegerrequiredA complete body with every required field. Strings stand in for your own values.
{
"cms": "cms",
"expectedVersion": {
"baseSha256": "baseSha256",
"editsVersion": 1
}
}SDK examples#
The selected SDK is remembered across the API reference. Values are examples; replace them with identifiers and input from your application.
import { CloudPDFClient } from "@cloudpdf/sdk";
const client = new CloudPDFClient({
baseUrl: "https://yourhost.com/path/to/api",
token: "<token>",
});
await client.doc.signatures.complete({
docId: "docId",
layerName: "layerName",
signingId: "signingId",
cms: "cms",
expectedVersion: {
baseSha256: "baseSha256",
editsVersion: 1
}
});Responses#
application/jsonDocSignaturesComplete200Responsestatus"completed" | "already-completed"signatureobjectindexintegerfieldFormFieldRefkind"objectNumber"objectNumberintegerfieldNamestringwidgetFormWidgetsignedbooleankind"signature" | "timestamp"filterstringsubFilterstringbyteRange[integer, integer, integer, integer]contentsSizeintegercoverage"whole-revision" | "partial" | "malformed"revisionIndexintegersignerobjectnamestringreasonstringlocationstringcontactInfostringsignedAtstring<date-time>docMdp1 | 2 | 3catalogCertificationbooleanfieldMdpobjectaction"all" | "include" | "exclude"fieldsstring[]permission1 | 2 | 3optionallockobjectseedValueobjectrequiredFlagsintegerpresentFlagsintegerversionintegermdp0 | 1 | 2 | 3filterstringsubFiltersstring[]digestMethodsstring[]reasonsstring[]unsupportedRequiredbooleanversionobjectsha256stringbyteLengthintegerpreviousobjectbaseSha256stringeditsVersionintegerprotectionobjectenforced"none" | "lta" | "fill" | "annotate"judged"none" | "lta" | "fill" | "annotate"certificationobjectsignatureIndexintegerpermission1 | 2 | 3fieldLocksobject[]signatureIndexintegersource"fieldmdp" | "lock"specobjectaction"all" | "include" | "exclude"fieldsstring[]permission1 | 2 | 3optionalpolicyVersionintegermetaMutationMetaaffectedPagesPageRef[]kind"objectNumber"objectNumberintegercacheDeltaCacheDeltaopIdstringundoablebooleanapplication/jsonDocSignaturesComplete400Responseapplication/jsonDocSignaturesComplete404Responseapplication/jsonDocSignaturesComplete409Responseapplication/jsonEngineErrorPayloadname"EngineError"code"Unknown" | "InvalidArg" | "DocNotOpen" | "DocOpenFailed" | "DocPasswordRequired" | "DocPasswordIncorrect" | "SharePasswordRequired" | "Aborted" | "Network" | "Unauthenticated" | "Forbidden" | "NotFound" | "WireFormat" | "RuntimeUnavailable" | "LayerVersionConflict" | "NotImplemented" | "MalformedPdf" | "SigningPending" | "SigningExpired" | "SigningVersionMismatch" | "SignatureRefused" | "ProtectedDocument" | "StaleBase" | "PayloadTooLarge" | "ObjectNumberUnavailable" | "LayerFull" | "ChangeConflict" | "UndoUnavailable" | "IdempotencyKeyReused"messagestringdetailsobjectoptional