CloudPDF
DocsPricing
Start building

Analyze version history

GET/v1/docs/{docId}/versions/analysis/{sha}v3.0.0-next.15

What changed between two revisions of one base version (immutable).

Exactly one of `since.signature` / `since.revision`; `until=<revision>` defaults to the last. The same answer for every layer and every caller.

Authentication#

Any one of these credentials is accepted.

API token

The deployment's static root credential (CLOUDPDF_API_AUTH_TOKENS), valid on every surface.

Document token

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).

Document capabilitydoc.forms.read

Parameters#

docIdpathstringrequired
shapathstringrequired
since.signaturequeryinteger
since.revisionqueryinteger
levelquery"none" | "lta" | "fill" | "annotate"
untilqueryinteger
policyqueryinteger
X-Document-Passwordheaderstring

Base64-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.

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.versions.analysis({
  docId: "docId",
  sha: "sha"
});

Responses#

200OK
application/jsonDocVersionsAnalysis200Response
mode"authoritative" | "exploratory"
policyVersioninteger
basisobject
versionobject
sha256string
byteLengthinteger
editsVersioninteger
source"persisted" | "working-copy"
sinceobject
revisionIndexinteger
signatureIndexinteger
untilobject
revisionIndexinteger
restrictionsobject[]
signatureIndexinteger
revisionIndexinteger
source"docmdp" | "fieldmdp" | "lock"
ownboolean
permission1 | 2 | 3optional
fieldsunknownoptional
currentobject
verdict"unchanged" | "permitted" | "forbidden" | "indeterminate"
completeboolean
primaryobjectoptional
rulestring
verdict"permitted" | "forbidden" | "incomplete"
objectNumberinteger
edgestringoptional
detailstringoptional
findingsobject[]
rulestring
verdict"permitted" | "forbidden" | "incomplete"
objectNumberinteger
edgestringoptional
detailstringoptional
method"net-state" | "net-state+replay"
laterobject
revisionCountinteger
undoneObjectNumbersinteger[]
verdict"unchanged" | "permitted" | "forbidden" | "indeterminate"
stepsunknown[]
400Bad request
application/jsonDocVersionsAnalysis400Response
404Not found
application/jsonDocVersionsAnalysis404Response
defaultError
application/jsonEngineErrorPayload
name"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"
messagestring
detailsobjectoptional