Skip to main content

CC recipients, PACTVDT access, and template parties

The Public SDK supports the same CC (carbon copy) notice-only recipients, PACTVDT vault access for CC users on send, and template party preservation that Admin send flows use. This guide explains how to integrate those behaviors from your M2M backend.

For the interactive lifecycle diagram, see Integration Flow. For VDT concepts, see Pactvera VDT.

Quick reference​

TopicAPINotes
Add CC on manual createCreate PactveraSet isCcRecipient: true on a party in parties[].
Read parties (incl. CC)Get Pactvera PartiesResponse includes isCcRecipient per party.
Clone template with partiesCreate from TemplateNo parties in body; server clones template parties and swaps the template own org for yours.
Send + CC invitations + PACTVDTSend PactveraSend runs CC designation; include backendEncryptedPrivateKey so owner-side PACTVDT decryption works.

CC recipients (notice-only parties)​

A CC recipient is a party who is not assigned as a document signer or form approver. On send, ChainIT:

  • Creates a CC notice task (PACTVERA_CC_NOTICE) for eligible individuals
  • Writes a CC_DESIGNATED audit event (role CC_NOTICE_ONLY)
  • Sets visibility so the CC user can see the request in their received list
  • Excludes the CC party from counterparty signing slots

Manual create example​

When you create a Pactvera, add one or more parties with isCcRecipient: true:

{
"title": "Employment verification",
"folderId": "82d07f87-ac07-453e-a60b-6e0ce82c301a",
"createdBy": "<sender-user-id>",
"userId": "<sender-user-id>",
"parties": [
{
"entityType": "ORGANIZATION",
"entityId": "<your-m2m-org-id>",
"name": "Your org",
"email": "ops@example.com",
"isOwnParty": true,
"isCcRecipient": false
},
{
"entityType": "INDIVIDUAL",
"entityId": "<counterparty-user-id>",
"name": "Signer",
"email": "signer@example.com",
"isOwnParty": false,
"isCcRecipient": false
},
{
"entityType": "INDIVIDUAL",
"entityId": "<cc-user-id>",
"name": "CC recipient",
"email": "cc@example.com",
"isOwnParty": false,
"isCcRecipient": true
}
]
}

After create, call Get Pactvera Parties to confirm isCcRecipient before attach and send.

Admin vs Public SDK on create

Admin can edit parties through the console. The Public SDK expresses CC at create (or via use-template preservation below). You cannot pass a parties array on use-template.

Send: CC invitations and PACTVDT access​

Send Pactvera triggers the shared CC invitation pipeline for SDK sends. For PACTVDT (Validated Data Token) encryption, the send body must include backendEncryptedPrivateKey: the sender's private key material encrypted for backend use, matching Admin send requirements.

On send, PACTVDT initialization includes encryption targets for CC users so CC recipients receive vault ledger access (USER_RSA on the PACTVDT ledger) in line with Admin behavior. See Pactvera VDT for the 4W model and webhook Pactvera VDT Created after send.

Typical send payload fields (see OpenAPI for the full schema):

{
"pactveraId": "<draft-pactvera-id>",
"userId": "<sender-user-id>",
"deviceId": "<integration-device-id>",
"backendEncryptedPrivateKey": "<encrypted-key-from-your-integration>"
}

Verify CC handling after send via parties API, audit/TouchAudit, and your registered webhooks.

Use-template: preserving template parties​

Create from Template clones forms and documents from a workflow template. For the Public SDK, the service also preserves non-own parties stored on the template in the database—including isCcRecipient on CC rows.

Behavior:

  1. Parties come from the template pactvera record (pactvera_parties for the template id), not from your HTTP body.
  2. The template author's own party is replaced by your M2M organization's own party (from the access token context).
  3. Non-own counterparties keep the same entityId values as on the template; CC flags remain in the database.
  4. Internal template signers may receive new party row ids while signer references are remapped server-side.

Example request (no parties field):

{
"pactveraId": "<template-pactvera-id>",
"folderId": "82d07f87-ac07-453e-a60b-6e0ce82c301a",
"title": "Cloned from HR template",
"createdBy": "<sender-user-id>",
"userId": "<sender-user-id>"
}

Use Get Pactvera Parties on the new draft id to list all parties and CC flags before attach and send.

Response shape

The use-template response may not always echo isCcRecipient on every party object. Treat Get Pactvera Parties as the source of truth for CC flags on drafts.

  1. List folders → pick folderId
  2. Create (manual with isCcRecipient, or use-template for cloned parties)
  3. Get parties → validate signers vs CC
  4. Attach forms/documents
  5. Send with backendEncryptedPrivateKey when PACTVDT applies
  6. Webhooks / Get details → track status and VDT creation