client.Deployment.LicenseStatusAsync() -> WithRawResponseTask<DeploymentLicenseStatusResponse>
-
-
-
await client.Deployment.LicenseStatusAsync();
-
-
client.Doc.HeadAsync(HeadDocRequest { ... }) -> WithRawResponseTask<DocHead200Response>
-
-
-
await client.Doc.HeadAsync(new HeadDocRequest { DocId = "docId" });
-
-
-
request:
HeadDocRequest
-
-
client.Doc.ChangesAsync(DocChangesRequest { ... }) -> WithRawResponseTask<DocChanges200Response>
-
-
-
Each change stands on its own and names itself by
opId: a refused change rolls back alone, and the answer lists every change in order, applied with its result or refused with its error. Asked again under itsopId, a change gets the same answer, refusals included; a different change under an answeredopIdis refused (IdempotencyKeyReused).{ opId, undoOf }undoes an earlier change of the caller, here or in an earlier request; an undo leaves alone what was changed since, and the undo of an undo redoes. A redaction, a flatten, a form repair or a completed signature ends undo for the changes before it (UndoUnavailable). Each op is checked against its own capability: annotation ops needdoc.annotate.modify, form valuesdoc.forms.fill, form structuredoc.forms.modify, metadatadoc.metadata.modify, outlinedoc.outline.modify, pagesdoc.pages.assemble, embedded filesdoc.attachments.modify. Bytes (a stamp's drawing, an attached file, a signature's artwork, a PDF whose pages come in) travel as multipart: a JSONbodypart, each op naming its files by role asresources: { <role>: '<key>' }, and each file as the partresource:<key>. At most 64 changes per request and 512 ops per change.
-
-
-
await client.Doc.ChangesAsync( new DocChangesRequest { DocId = "docId", LayerName = "layerName", Changes = new List<DocChangesRequestChangesItem>() { new DocChangesRequestChangesItem { OpId = "opId" }, }, } );
-
-
-
request:
DocChangesRequest
-
-
client.Doc.DownloadAsync(DownloadDocRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Doc.DownloadAsync(new DownloadDocRequest { DocId = "docId", LayerName = "layerName" });
-
-
-
request:
DownloadDocRequest
-
-
client.Doc.DownloadLinkAsync(DocDownloadLinkRequest { ... }) -> WithRawResponseTask<DocDownloadLink200Response>
-
-
-
The link opens the layer as it is when created: once the layer changes, it answers 404, so create it right before handing it over. It downloads that one file and nothing else, and a password-protected document is checked when the link is created. Deployments that verify tokens with their own keys (JWKS) mint links on their backend: a doc token with
layer_name, adownload: { docVersion, mode: "incremental" }claim and a shortexp, passed aslinkon the versioned download URL.
-
-
-
await client.Doc.DownloadLinkAsync( new DocDownloadLinkRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
DocDownloadLinkRequest
-
-
client.Doc.ManifestAsync(ManifestDocRequest { ... }) -> WithRawResponseTask<DocManifest200Response>
-
-
-
await client.Doc.ManifestAsync(new ManifestDocRequest { DocId = "docId", LayerName = "layerName" });
-
-
-
request:
ManifestDocRequest
-
-
client.Doc.RenderAsync(RenderDocRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
Render parameters (viewport, format) pass as flat dotted query keys, e.g.
?viewport.kind=width&viewport.width=800; the full grammar is documented with the viewer.
-
-
-
await client.Doc.RenderAsync( new RenderDocRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", } );
-
-
-
request:
RenderDocRequest
-
-
client.Doc.TextAsync(TextDocRequest { ... }) -> WithRawResponseTask<DocText200Response>
-
-
-
await client.Doc.TextAsync( new TextDocRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", } );
-
-
-
request:
TextDocRequest
-
-
client.Shares.ExchangeAsync(SharesExchangeRequest { ... }) -> WithRawResponseTask<SharesExchange200Response>
-
-
-
Unauthenticated, but requires a browser Origin header, checked against the grant allowlist. Unknown, revoked, and disabled tokens are indistinguishable (404). Passphrase-protected grants return 422 SharePasswordRequired until
passwordis supplied. A link that asks its visitors who they are on open returns 422 VisitorIdentityRequired until the required answers are given;error.detailscarriesfields(what the link asks),missing,invalid,purposeandprivacyUrl. A link that asks before the first change issues the session at once withvisitor.identityRequest, and writes answer 403 VisitorIdentityRequired with the same details until the visitor exchanges again with their answers. Answers that can not be taken answer 422 on any link. Mounted only when the deployment can sign (HS256 mode).
-
-
-
await client.Shares.ExchangeAsync(new SharesExchangeRequest { ShareToken = "shareToken" });
-
-
-
request:
SharesExchangeRequest
-
-
client.Shares.ListAsync(ListSharesRequest { ... }) -> WithRawResponseTask<SharesList200Response>
-
-
-
await client.Shares.ListAsync(new ListSharesRequest { TenantId = "tenantId" });
-
-
-
request:
ListSharesRequest
-
-
client.Shares.CreateAsync(SharesCreateRequest { ... }) -> WithRawResponseTask<SharesCreate200Response>
-
-
-
The returned share id is the public share token. Mounted only when the deployment can sign (HS256 mode) β exchange mints session JWTs, so grants exist only where minting does.
-
-
-
await client.Shares.CreateAsync( new SharesCreateRequest { TenantId = "tenantId", DocId = "docId", Scope = new List<string>() { "scope" }, } );
-
-
-
request:
SharesCreateRequest
-
-
client.Shares.GetAsync(GetSharesRequest { ... }) -> WithRawResponseTask<SharesGet200Response>
-
-
-
await client.Shares.GetAsync(new GetSharesRequest { TenantId = "tenantId", ShareId = "shareId" });
-
-
-
request:
GetSharesRequest
-
-
client.Shares.DeleteAsync(DeleteSharesRequest { ... }) -> WithRawResponseTask
-
-
-
await client.Shares.DeleteAsync( new DeleteSharesRequest { TenantId = "tenantId", ShareId = "shareId" } );
-
-
-
request:
DeleteSharesRequest
-
-
client.Shares.UpdateAsync(SharesUpdateRequest { ... }) -> WithRawResponseTask<SharesUpdate200Response>
-
-
-
await client.Shares.UpdateAsync( new SharesUpdateRequest { TenantId = "tenantId", ShareId = "shareId" } );
-
-
-
request:
SharesUpdateRequest
-
-
client.Shares.ArchiveAsync(ArchiveSharesRequest { ... }) -> WithRawResponseTask<SharesArchive200Response>
-
-
-
Archiving is final: an archived link never exchanges again, and to share again you create a new link. Pausing (
disabled) is the reversible stop. An archived link no longer counts as using its shared layer, so that layer can be deleted.
-
-
-
await client.Shares.ArchiveAsync( new ArchiveSharesRequest { TenantId = "tenantId", ShareId = "shareId" } );
-
-
-
request:
ArchiveSharesRequest
-
-
client.Tenants.ListAsync(ListTenantsRequest { ... }) -> WithRawResponseTask<TenantsList200Response>
-
-
-
await client.Tenants.ListAsync(new ListTenantsRequest());
-
-
-
request:
ListTenantsRequest
-
-
client.Tenants.CreateAsync(TenantsCreateRequest { ... }) -> WithRawResponseTask<TenantsCreate200Response>
-
-
-
await client.Tenants.CreateAsync(new TenantsCreateRequest { Id = "id" });
-
-
-
request:
TenantsCreateRequest
-
-
client.Tenants.GetAsync(GetTenantsRequest { ... }) -> WithRawResponseTask<TenantsGet200Response>
-
-
-
await client.Tenants.GetAsync(new GetTenantsRequest { TenantId = "tenantId" });
-
-
-
request:
GetTenantsRequest
-
-
client.Tenants.DeleteAsync(DeleteTenantsRequest { ... }) -> WithRawResponseTask
-
-
-
Destroys the tenant and everything in its namespace β documents, layers, stored bytes, audit history. Irreversible.
-
-
-
await client.Tenants.DeleteAsync(new DeleteTenantsRequest { TenantId = "tenantId" });
-
-
-
request:
DeleteTenantsRequest
-
-
client.Tenants.ResumeAsync(ResumeTenantsRequest { ... }) -> WithRawResponseTask
-
-
-
await client.Tenants.ResumeAsync(new ResumeTenantsRequest { TenantId = "tenantId" });
-
-
-
request:
ResumeTenantsRequest
-
-
client.Tenants.SuspendAsync(TenantsSuspendRequest { ... }) -> WithRawResponseTask
-
-
-
Instantly reversible with resume. The API token is exempt, so a suspended tenant can still be inspected, exported, resumed, or deleted.
-
-
-
await client.Tenants.SuspendAsync(new TenantsSuspendRequest { TenantId = "tenantId" });
-
-
-
request:
TenantsSuspendRequest
-
-
client.Tenants.UsageAsync(UsageTenantsRequest { ... }) -> WithRawResponseTask<TenantsUsage200Response>
-
-
-
Facts only β no limits or billing state. Views count share exchanges plus authorized /v1/access grants, deduplicated across the two.
-
-
-
await client.Tenants.UsageAsync(new UsageTenantsRequest { TenantId = "tenantId" });
-
-
-
request:
UsageTenantsRequest
-
-
client.Documents.ListAsync(ListDocumentsRequest { ... }) -> WithRawResponseTask<DocumentsList200Response>
-
-
-
await client.Documents.ListAsync(new ListDocumentsRequest { TenantId = "tenantId" });
-
-
-
request:
ListDocumentsRequest
-
-
client.Documents.GetAsync(GetDocumentsRequest { ... }) -> WithRawResponseTask<DocumentsGet200Response>
-
-
-
await client.Documents.GetAsync(new GetDocumentsRequest { TenantId = "tenantId", Id = "id" });
-
-
-
request:
GetDocumentsRequest
-
-
client.Documents.DeleteAsync(DeleteDocumentsRequest { ... }) -> WithRawResponseTask
-
-
-
await client.Documents.DeleteAsync(new DeleteDocumentsRequest { TenantId = "tenantId", Id = "id" });
-
-
-
request:
DeleteDocumentsRequest
-
-
client.Documents.CommitAsync(DocumentsCommitRequest { ... }) -> WithRawResponseTask<DocumentsCommit200Response>
-
-
-
await client.Documents.CommitAsync( new DocumentsCommitRequest { TenantId = "tenantId", Id = "id", Sha256 = "sha256", } );
-
-
-
request:
DocumentsCommitRequest
-
-
client.Documents.DownloadAsync(DownloadDocumentsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Documents.DownloadAsync( new DownloadDocumentsRequest { TenantId = "tenantId", Id = "id" } );
-
-
-
request:
DownloadDocumentsRequest
-
-
client.Documents.ThumbnailAsync(ThumbnailDocumentsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Documents.ThumbnailAsync( new ThumbnailDocumentsRequest { TenantId = "tenantId", Id = "id" } );
-
-
-
request:
ThumbnailDocumentsRequest
-
-
client.Documents.UploadProxyAsync(UploadProxyDocumentsRequest { ... }) -> WithRawResponseTask<DocumentsUploadProxy200Response>
-
-
-
This bounded origin-mediated fallback must only be used after documents.init returns upload.kind=proxy. Auto mode prefers a presigned object-store PUT whenever available.
-
-
-
await client.Documents.UploadProxyAsync( new UploadProxyDocumentsRequest { TenantId = "tenantId", Id = "id" } );
-
-
-
request:
UploadProxyDocumentsRequest
-
-
client.Documents.ImportFromAsync(DocumentsImportFromRequest { ... }) -> WithRawResponseTask<DocumentsImportFrom200Response>
-
-
-
Default mode is synchronous and bounded: the response returns only after the transfer verified and committed (or failed). mode=async (connection sources only) answers 202 immediately and an in-process worker performs the transfer with leased, fenced retries; poll the document until ready/failed. The deployment import policy gates scheme, network range, and size; sources must declare a length. CloudPDF copies and owns the bytes β the source is never referenced in place. A 502 marks a retryable upstream failure: retry with the same idempotencyKey to resume the same document. URL sources are capabilities and never echoed back. Connection sources name operator-registered storage (bucket/prefix scope, allowed credential classes, and tenant bindings are deployment configuration);
revisionis provider-interpreted (S3 VersionId, GCS generation, Azure version id).
-
-
-
await client.Documents.ImportFromAsync( new DocumentsImportFromRequest { TenantId = "tenantId", Source = new DocumentsImportFromRequestSource( new DocumentsImportFromRequestSource.Url( new DocumentsImportFromRequestSourceUrl { Url = "url" } ) ), } );
-
-
-
request:
DocumentsImportFromRequest
-
-
client.Documents.InitAsync(DocumentsInitRequest { ... }) -> WithRawResponseTask<DocumentsInit200Response>
-
-
-
await client.Documents.InitAsync( new DocumentsInitRequest { TenantId = "tenantId", ContentLength = 1.1, ContentSha256 = "contentSha256", } );
-
-
-
request:
DocumentsInitRequest
-
-
client.Tokens.IssueAsync(IssueTokensRequest { ... }) -> WithRawResponseTask<TokensIssue200Response>
-
-
-
kind "tenant" requires the API token β authority mints only downward. Mounted only when the deployment can sign (HS256 mode); asymmetric deployments mint with their own private key.
-
-
-
await client.Tokens.IssueAsync( new IssueTokensRequest { TenantId = "tenantId", Body = new TokensIssueRequest( new CloudPDF.TokensIssueRequest.Doc( new TokensIssueRequestDoc { Sub = "sub", DocId = "docId", Scope = new List<string>() { "scope" }, ExpiresIn = 1, } ) ), } );
-
-
-
request:
IssueTokensRequest
-
-
client.Tokens.RevokeAsync(TokensRevokeRequest { ... }) -> WithRawResponseTask
-
-
-
Mounted only when the deployment enables token revocation.
-
-
-
await client.Tokens.RevokeAsync(new TokensRevokeRequest { TenantId = "tenantId", Jti = "jti" });
-
-
-
request:
TokensRevokeRequest
-
-
client.Doc.Annotations.ListAllAsync(ListAllAnnotationsRequest { ... }) -> WithRawResponseTask<AnnotationList>
-
-
-
Returns one entry per page plus the audit-log cursor for reconciling subsequent document events. Page order is unspecified; join by
page(aPageRef) when display order matters.
-
-
-
await client.Doc.Annotations.ListAllAsync( new ListAllAnnotationsRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
ListAllAnnotationsRequest
-
-
client.Doc.Annotations.ListAsync(ListAnnotationsRequest { ... }) -> WithRawResponseTask<AnnotationList>
-
-
-
await client.Doc.Annotations.ListAsync( new ListAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", } );
-
-
-
request:
ListAnnotationsRequest
-
-
client.Doc.Annotations.CreateAsync(CreateAnnotationsRequest { ... }) -> WithRawResponseTask<DocAnnotationsCreate200Response>
-
-
-
Doc JWTs may instead carry collab scopes (annotations:create:self, β¦) that refine per-annotation authorship rules; the API token is exempt from both.
-
-
-
await client.Doc.Annotations.CreateAsync( new CreateAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
CreateAnnotationsRequest
-
-
client.Doc.Annotations.DeleteAsync(DeleteAnnotationsRequest { ... }) -> WithRawResponseTask<DocAnnotationsDelete200Response>
-
-
-
await client.Doc.Annotations.DeleteAsync( new DeleteAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", } );
-
-
-
request:
DeleteAnnotationsRequest
-
-
client.Doc.Annotations.UpdateAsync(UpdateAnnotationsRequest { ... }) -> WithRawResponseTask<DocAnnotationsUpdate200Response>
-
-
-
await client.Doc.Annotations.UpdateAsync( new UpdateAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
UpdateAnnotationsRequest
-
-
client.Doc.Annotations.ReadAppearanceAsync(ReadAppearanceAnnotationsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Doc.Annotations.ReadAppearanceAsync( new ReadAppearanceAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", } );
-
-
-
request:
ReadAppearanceAnnotationsRequest
-
-
client.Doc.Annotations.ReadFileAsync(ReadFileAnnotationsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
A file that decodes past the server's limit is refused (PayloadTooLarge).
-
-
-
await client.Doc.Annotations.ReadFileAsync( new ReadFileAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", } );
-
-
-
request:
ReadFileAnnotationsRequest
-
-
client.Doc.Annotations.ExportAppearanceAsync(ExportAppearanceAnnotationsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Doc.Annotations.ExportAppearanceAsync( new ExportAppearanceAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", Body = new Dictionary<string, object?>() { { "string", new Dictionary<object, object?>() { { "key", "value" } } }, }, } );
-
-
-
request:
ExportAppearanceAnnotationsRequest
-
-
client.Doc.Annotations.FlattenAsync(FlattenAnnotationsRequest { ... }) -> WithRawResponseTask<DocAnnotationsFlatten200Response>
-
-
-
await client.Doc.Annotations.FlattenAsync( new FlattenAnnotationsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
FlattenAnnotationsRequest
-
-
client.Doc.Annotations.ReorderAsync(DocAnnotationsReorderRequest { ... }) -> WithRawResponseTask<DocAnnotationsReorder200Response>
-
-
-
await client.Doc.Annotations.ReorderAsync( new DocAnnotationsReorderRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", Refs = new List<AnnotationRef>() { new AnnotationRef( new AnnotationRef.ObjectNumber( new AnnotationRefObjectNumber { Page = new PageRef { Kind = PageRefKind.ObjectNumber, ObjectNumber = 1 }, ObjectNumber = 1, } ) ), }, Position = AnnotationPositionZero.Start, } );
-
-
-
request:
DocAnnotationsReorderRequest
-
-
client.Doc.Attachments.DownloadAsync(DownloadAttachmentsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
A file that decodes past the server's limit is refused (PayloadTooLarge).
-
-
-
await client.Doc.Attachments.DownloadAsync( new DownloadAttachmentsRequest { DocId = "docId", LayerName = "layerName", FileKey = "fileKey", } );
-
-
-
request:
DownloadAttachmentsRequest
-
-
client.Doc.Attachments.ListAsync(ListAttachmentsRequest { ... }) -> WithRawResponseTask<AttachmentList>
-
-
-
A file-attachment annotation's file is listed with the annotation; read its bytes with
doc.annotations.readFile.
-
-
-
await client.Doc.Attachments.ListAsync( new ListAttachmentsRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
ListAttachmentsRequest
-
-
client.Doc.Forms.ListAsync(ListFormsRequest { ... }) -> WithRawResponseTask<DocFormsList200Response>
-
-
-
await client.Doc.Forms.ListAsync(new ListFormsRequest { DocId = "docId", LayerName = "layerName" });
-
-
-
request:
ListFormsRequest
-
-
client.Doc.Forms.ReorderCalculationsAsync(DocFormsReorderCalculationsRequest { ... }) -> WithRawResponseTask<DocFormsReorderCalculations200Response>
-
-
-
await client.Doc.Forms.ReorderCalculationsAsync( new DocFormsReorderCalculationsRequest { DocId = "docId", LayerName = "layerName", Fields = new List<FormFieldRef>() { new FormFieldRef( new FormFieldRef.ObjectNumber(new FormFieldRefObjectNumber { ObjectNumber = 1 }) ), }, Position = FieldPositionZero.Start, } );
-
-
-
request:
DocFormsReorderCalculationsRequest
-
-
client.Doc.Forms.SetValueAsync(SetValueFormsRequest { ... }) -> WithRawResponseTask<DocFormsSetValue200Response>
-
-
-
await client.Doc.Forms.SetValueAsync( new SetValueFormsRequest { DocId = "docId", LayerName = "layerName", FieldKey = "fieldKey", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
SetValueFormsRequest
-
-
client.Doc.Forms.ResetAsync(DocFormsResetRequest { ... }) -> WithRawResponseTask<DocFormsReset200Response>
-
-
-
await client.Doc.Forms.ResetAsync( new DocFormsResetRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
DocFormsResetRequest
-
-
client.Doc.Forms.DeleteWidgetAsync(DeleteWidgetFormsRequest { ... }) -> WithRawResponseTask<DocFormsDeleteWidget200Response>
-
-
-
await client.Doc.Forms.DeleteWidgetAsync( new DeleteWidgetFormsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", } );
-
-
-
request:
DeleteWidgetFormsRequest
-
-
client.Doc.Forms.UpdateWidgetAsync(DocFormsUpdateWidgetRequest { ... }) -> WithRawResponseTask<DocFormsUpdateWidget200Response>
-
-
-
await client.Doc.Forms.UpdateWidgetAsync( new DocFormsUpdateWidgetRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", AnnotKey = "annotKey", Patch = new WidgetPatch(), } );
-
-
-
request:
DocFormsUpdateWidgetRequest
-
-
client.Doc.Forms.ReorderWidgetsAsync(DocFormsReorderWidgetsRequest { ... }) -> WithRawResponseTask<DocFormsReorderWidgets200Response>
-
-
-
await client.Doc.Forms.ReorderWidgetsAsync( new DocFormsReorderWidgetsRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", Widgets = new List<AnnotationRef>() { new AnnotationRef( new AnnotationRef.ObjectNumber( new AnnotationRefObjectNumber { Page = new PageRef { Kind = PageRefKind.ObjectNumber, ObjectNumber = 1 }, ObjectNumber = 1, } ) ), }, Position = AnnotationPositionZero.Start, } );
-
-
-
request:
DocFormsReorderWidgetsRequest
-
-
client.Doc.Metadata.GetAsync(GetMetadataRequest { ... }) -> WithRawResponseTask<DocumentMetadata>
-
-
-
await client.Doc.Metadata.GetAsync( new GetMetadataRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
GetMetadataRequest
-
-
client.Doc.Outline.GetAsync(GetOutlineRequest { ... }) -> WithRawResponseTask<DocumentOutline>
-
-
-
await client.Doc.Outline.GetAsync( new GetOutlineRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
GetOutlineRequest
-
-
client.Doc.Pages.SetScaleAsync(DocPagesSetScaleRequest { ... }) -> WithRawResponseTask<DocPagesSetScale200Response>
-
-
-
await client.Doc.Pages.SetScaleAsync( new DocPagesSetScaleRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", } );
-
-
-
request:
DocPagesSetScaleRequest
-
-
client.Doc.Pages.ViewportsAsync(ViewportsPagesRequest { ... }) -> WithRawResponseTask<DocPagesViewports200Response>
-
-
-
await client.Doc.Pages.ViewportsAsync( new ViewportsPagesRequest { DocId = "docId", LayerName = "layerName", PageKey = "pageKey", } );
-
-
-
request:
ViewportsPagesRequest
-
-
client.Doc.Pages.ExtractAsync(ExtractPagesRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
A read, not a mutation: the source document is untouched and no event is published. Body is
{"pages": PageRef[], "flatten"?: {"usage"?: "display" | "print"}, "includeAnnotations"?: boolean, "includeFormFields"?: boolean}; the response body is the new PDF. Withflattenthe copy is the pages as they draw forusage("print": a print copy): the annotations and form fields painted in, nothing interactive left, layers in their state for the usage. A flattened copy takesdoc.downloadordoc.download.flattened, and paints only what the caller may read;includeAnnotationsandincludeFormFieldschoose what it paints, and are refused withoutflatten.
-
-
-
await client.Doc.Pages.ExtractAsync( new ExtractPagesRequest { DocId = "docId", LayerName = "layerName", Body = new Dictionary<string, object?>() { { "string", new Dictionary<object, object?>() { { "key", "value" } } }, }, } );
-
-
-
request:
ExtractPagesRequest
-
-
client.Doc.Pages.FlattenAsync(FlattenPagesRequest { ... }) -> WithRawResponseTask<DocPagesFlatten200Response>
-
-
-
await client.Doc.Pages.FlattenAsync( new FlattenPagesRequest { DocId = "docId", LayerName = "layerName", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
FlattenPagesRequest
-
-
client.Doc.Pages.SetNameAsync(SetNamePagesRequest { ... }) -> WithRawResponseTask<DocPagesSetName200Response>
-
-
-
await client.Doc.Pages.SetNameAsync( new SetNamePagesRequest { DocId = "docId", LayerName = "layerName", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
SetNamePagesRequest
-
-
client.Doc.Pages.RemoveNameAsync(RemoveNamePagesRequest { ... }) -> WithRawResponseTask<DocPagesRemoveName200Response>
-
-
-
await client.Doc.Pages.RemoveNameAsync( new RemoveNamePagesRequest { DocId = "docId", LayerName = "layerName", Body = new Dictionary<string, object?>() { { "key", "value" } }, } );
-
-
-
request:
RemoveNamePagesRequest
-
-
client.Doc.Redactions.ApplyAsync(DocRedactionsApplyRequest { ... }) -> WithRawResponseTask<DocRedactionsApply200Response>
-
-
-
await client.Doc.Redactions.ApplyAsync( new DocRedactionsApplyRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
DocRedactionsApplyRequest
-
-
client.Doc.Signatures.ListAsync(ListSignaturesRequest { ... }) -> WithRawResponseTask<DocSignaturesList200Response>
-
-
-
Describes the bytes the layer is over: the base version's signatures plus the layer's own edits as the last revision. Signed bytes (contents, digests, revision prefixes) are served per base version under /versions.
-
-
-
await client.Doc.Signatures.ListAsync( new ListSignaturesRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
ListSignaturesRequest
-
-
client.Doc.Signatures.CancelAsync(CancelSignaturesRequest { ... }) -> WithRawResponseTask<DocSignaturesCancel200Response>
-
-
-
await client.Doc.Signatures.CancelAsync( new CancelSignaturesRequest { DocId = "docId", LayerName = "layerName", SigningId = "signingId", } );
-
-
-
request:
CancelSignaturesRequest
-
-
client.Doc.Signatures.CompleteAsync(DocSignaturesCompleteRequest { ... }) -> WithRawResponseTask<DocSignaturesComplete200Response>
-
-
-
cmsis the detached CMS over the prepared digest, base64.expectedVersionmust be what prepare returned. Idempotent by signing id: the same CMS again answersalready-completed. Every layer of the document then sits over the new version; refetch the manifest after a completion.
-
-
-
await client.Doc.Signatures.CompleteAsync( new DocSignaturesCompleteRequest { DocId = "docId", LayerName = "layerName", SigningId = "signingId", Cms = "cms", ExpectedVersion = new DocSignaturesCompleteRequestExpectedVersion { BaseSha256 = "baseSha256", EditsVersion = 1, }, } );
-
-
-
request:
DocSignaturesCompleteRequest
-
-
client.Doc.Signatures.AnalysisAsync(AnalysisSignaturesRequest { ... }) -> WithRawResponseTask<DocSignaturesAnalysis200Response>
-
-
-
Exactly one of
since.signature=<index>orsince.revision=<index>; the layer's pending edits are the end.level=fill|annotate|lta|noneevaluates exploratorily and never becomes a verdict. For history between two base revisions use the version analysis.
-
-
-
await client.Doc.Signatures.AnalysisAsync( new AnalysisSignaturesRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
AnalysisSignaturesRequest
-
-
client.Doc.Signatures.PrepareAsync(PrepareSignaturesRequest { ... }) -> WithRawResponseTask<DocSignaturesPrepare200Response>
-
-
-
Multipart: a JSON
bodypart (field, subFilter, digest, contentsSize, signer, certify, lock), naming the appearance PDF it may carry asresources: { appearance: '<key>' }, and that PDF as the partresource:<key>. A certification (certify.permission) additionally requiresdoc.sign.certify. The layer is read-only until the signing completes, is cancelled, or expires (15 minutes). A layer behind the document head cannot sign (StaleBase).
-
-
-
await client.Doc.Signatures.PrepareAsync( new PrepareSignaturesRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
PrepareSignaturesRequest
-
-
client.Doc.Versions.ListAsync(ListVersionsRequest { ... }) -> WithRawResponseTask<DocVersionsList200Response>
-
-
-
Every completed signature publishes a new version. Never cached: the list grows.
-
-
-
await client.Doc.Versions.ListAsync(new ListVersionsRequest { DocId = "docId" });
-
-
-
request:
ListVersionsRequest
-
-
client.Doc.Versions.AnalysisAsync(AnalysisVersionsRequest { ... }) -> WithRawResponseTask<DocVersionsAnalysis200Response>
-
-
-
Exactly one of
since.signature/since.revision;until=<revision>defaults to the last. The same answer for every layer and every caller.
-
-
-
await client.Doc.Versions.AnalysisAsync( new AnalysisVersionsRequest { DocId = "docId", Sha = "sha" } );
-
-
-
request:
AnalysisVersionsRequest
-
-
client.Doc.Versions.DownloadAsync(DownloadVersionsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Doc.Versions.DownloadAsync( new DownloadVersionsRequest { DocId = "docId", Sha = "sha" } );
-
-
-
request:
DownloadVersionsRequest
-
-
client.Doc.Versions.RevisionAsync(RevisionVersionsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
await client.Doc.Versions.RevisionAsync( new RevisionVersionsRequest { DocId = "docId", Sha = "sha", Index = 1, } );
-
-
-
request:
RevisionVersionsRequest
-
-
client.Doc.Versions.SignaturesAsync(SignaturesVersionsRequest { ... }) -> WithRawResponseTask<DocVersionsSignatures200Response>
-
-
-
await client.Doc.Versions.SignaturesAsync( new SignaturesVersionsRequest { DocId = "docId", Sha = "sha" } );
-
-
-
request:
SignaturesVersionsRequest
-
-
client.Doc.Versions.SignatureContentsAsync(SignatureContentsVersionsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
fieldKeyis the field's fully qualified name, token-text encoded (the same encoding attachment keys use).
-
-
-
await client.Doc.Versions.SignatureContentsAsync( new SignatureContentsVersionsRequest { DocId = "docId", Sha = "sha", FieldKey = "fieldKey", } );
-
-
-
request:
SignatureContentsVersionsRequest
-
-
client.Doc.Versions.SignatureDigestAsync(SignatureDigestVersionsRequest { ... }) -> WithRawResponseTask<Stream>
-
-
-
What a CMS verifier compares its message digest to.
-
-
-
await client.Doc.Versions.SignatureDigestAsync( new SignatureDigestVersionsRequest { DocId = "docId", Sha = "sha", FieldKey = "fieldKey", Algorithm = SignatureDigestVersionsRequestAlgorithm.Sha1, } );
-
-
-
request:
SignatureDigestVersionsRequest
-
-
client.Doc.Metadata.Custom.GetAsync(GetCustomRequest { ... }) -> WithRawResponseTask<Dictionary<string, string>>
-
-
-
await client.Doc.Metadata.Custom.GetAsync( new GetCustomRequest { DocId = "docId", LayerName = "layerName" } );
-
-
-
request:
GetCustomRequest
-
-
client.Documents.Layers.ListAsync(ListLayersRequest { ... }) -> WithRawResponseTask<DocumentsLayersList200Response>
-
-
-
await client.Documents.Layers.ListAsync(new ListLayersRequest { TenantId = "tenantId", Id = "id" });
-
-
-
request:
ListLayersRequest
-
-
client.Documents.Layers.DeleteAsync(DeleteLayersRequest { ... }) -> WithRawResponseTask
-
-
-
await client.Documents.Layers.DeleteAsync( new DeleteLayersRequest { TenantId = "tenantId", Id = "id", LayerName = "layerName", } );
-
-
-
request:
DeleteLayersRequest
-
-
client.Shares.Visitors.ListAsync(ListVisitorsRequest { ... }) -> WithRawResponseTask<SharesVisitorsList200Response>
-
-
-
An archived link's visitors are listed too.
-
-
-
await client.Shares.Visitors.ListAsync( new ListVisitorsRequest { TenantId = "tenantId", ShareId = "shareId" } );
-
-
-
request:
ListVisitorsRequest
-
-
client.Shares.Visitors.DeleteAsync(DeleteVisitorsRequest { ... }) -> WithRawResponseTask
-
-
-
Their handle brings them back as a new visitor, who is asked again. Deleting a visitor already deleted changes nothing.
-
-
-
await client.Shares.Visitors.DeleteAsync( new DeleteVisitorsRequest { TenantId = "tenantId", ShareId = "shareId", VisitorId = "visitorId", } );
-
-
-
request:
DeleteVisitorsRequest
-
-