CommonPaper API Docs
API Documentation

Create, view, and manage agreements including sending, voiding, and reassigning


List Agreements

GET
https://api.commonpaper.com
/v1/agreements

This endpoint allows users to view a list of agreements that have been created within Common Paper. Users can filter and sort agreements based on various criteria, such as created_at, status, and agreement_type.

By default, the list response omits type-specific nested attributes (such as csa, csa_order_form, dpa, baa, and other agreement-type sub-models). Pass full=true to include those nested attributes in the list response, or use GET /v1/agreements/{id} to retrieve a single full agreement.

List Agreements › query Parameters

page[number]
​integer

Page number to retrieve. Defaults to 1.

Default: 1
page[size]
​integer

Number of records per page. Defaults to 15.

Default: 15
filter[status_eq]
​string

Filter by exact status (e.g. draft, sent, signed, voided_by_sender, expired, declined).

filter[agreement_type_eq]
​string

Filter by exact agreement type. Values are case-sensitive (e.g. "CSA", not "csa"); list-agreement-types returns the valid values.

filter[recipient_email_eq]
​string

Filter by the recipient's exact email address.

filter[recipient_email_cont]
​string

Filter agreements where the recipient email contains the given value.

filter[created_at_gteq]
​string · date-time

Filter agreements created on or after this date (ISO 8601).

filter[created_at_lteq]
​string · date-time

Filter agreements created on or before this date (ISO 8601).

full
​boolean

When true, list responses include type-specific nested attributes (such as csa, csa_order_form, dpa, and other agreement-type sub-models). Defaults to false. For CSA fees, check standard_version first - see the server instructions for which fee fields apply.

Default: false

List Agreements › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

List Agreements › Responses

OK


Create Agreement

POST
https://api.commonpaper.com
/v1/agreements

This endpoint allows the user to create an agreement in Common Paper. The user must supply ONE of either an id or email for both signer and owner.

The owner is the sender of the agreement. The signer is the individual who is signing the agreement from the owners organization. The recipient email is the counterparty.

Set draft to true to save the agreement without sending it. Draft agreements can be sent later using POST /v1/agreements/{id}/send.

template_id may be the UUID of a Common Paper standard template, an uploaded PDF template (type uploaded_template from GET /v1/templates), or a custom template (from GET /v1/custom_templates).

To create an amendment, omit template_id and set agreement_type to Amendment. Set agreement.parent_agreement_id to the agreement being amended, set agreement.negotiations_allowed (required, since there is no template to default it from), and put the amendment terms in agreement.amendment_attributes.

When creating from a template, you can override template defaults by passing agreement-type-specific attribute objects inside the agreement body (e.g. csa_attributes, dpa_attributes). See Overriding Template Defaults for the override key for each agreement type, and Template Parameters for their fields.

When creating from a custom template, pass field values in agreement.custom_field_values, keyed by the field keys in the template's YAML definition. Template defaults fill any fields you omit, and a required field with no default and no submitted value returns a 400 naming the field. Values are validated against each field's input type (select and radio against their options, multiselect as an array of selections each validated against the options, number and currency as numeric, date as YYYY-MM-DD, email as a valid address); an invalid value returns a 400 naming the field. See Custom Templates.

Create Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Create Agreement › Request Body

oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = object · requires: agreement, owner_email, signer_email
type = object · requires: agreement, owner_email, signer_id
type = object · requires: agreement, owner_id, signer_email
type = object · requires: agreement, owner_id, signer_id
Properties for Owner and signer by email:
owner_email
​string · required

Email address of the agreement owner (sender).

signer_email
​string · email · required

Email address of the signer from the owner's organization.

​agreement-create-agreement · required
template_id
​string · uuid

UUID of a template from GET /v1/templates. Accepts both Common Paper standard templates and uploaded PDF templates (type uploaded_template). Required unless agreement_type is Amendment.

agreement_type
​string · enum

Set to Amendment to create an amendment without a template. Omit template_id, set agreement.negotiations_allowed, and set agreement.parent_agreement_id to the agreement being amended, or set agreement.underlying_agreement_type to description with agreement.underlying_agreement_val for an agreement outside Common Paper. Put the amendment terms in agreement.amendment_attributes.

Enum values:
Amendment
draft
​boolean

When true, the agreement is saved as a draft and not sent to the recipient. Use POST /v1/agreements/{id}/send to send a draft agreement later.

cc_users
​string[]
oneOf
Exactly one variant must match.

Decision Table

VariantMatching Criteria
type = object · requires: template_id
requires: agreement_type
Properties for Variant 1:
template_id
​string · uuid · required

UUID of a template from GET /v1/templates. Accepts both Common Paper standard templates and uploaded PDF templates (type uploaded_template). Required unless agreement_type is Amendment.

agreement_type
​string · enum

Set to Amendment to create an amendment without a template. Omit template_id, set agreement.negotiations_allowed, and set agreement.parent_agreement_id to the agreement being amended, or set agreement.underlying_agreement_type to description with agreement.underlying_agreement_val for an agreement outside Common Paper. Put the amendment terms in agreement.amendment_attributes.

Enum values:
Amendment
owner_email
​string

Email address of the agreement owner (sender).

signer_email
​string · email

Email address of the signer from the owner's organization.

draft
​boolean

When true, the agreement is saved as a draft and not sent to the recipient. Use POST /v1/agreements/{id}/send to send a draft agreement later.

cc_users
​string[]

Create Agreement › Responses

OK


Send Draft Agreement

POST
https://api.commonpaper.com
/v1/agreements/{id}/send

Sends a draft agreement to the recipient, transitioning its status from draft to sent_waiting_for_initial_review. The agreement must currently be in draft status.

Send Draft Agreement › path Parameters

id
​string · uuid · required

The UUID of the draft agreement to send.

Send Draft Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Send Draft Agreement › Responses

Agreement sent successfully. Returns the updated agreement.

No data returned

Get Agreement

GET
https://api.commonpaper.com
/v1/agreements/{id}

This endpoint allows users to retrieve a specific agreement from Common Paper by providing its uuid. Returns the details of the agreement, such as the parties involved, the terms of the agreement, and the status.

Get Agreement › path Parameters

id
​string · uuid · required

The UUID of the resource.

Get Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Get Agreement › Responses

OK


Update Draft Agreement

PATCH
https://api.commonpaper.com
/v1/agreements/{id}

Updates a draft agreement. Only agreements in draft status can be edited; anything else returns a 422. The editable fields mirror what the draft form in Common Paper can change, and only the fields you send are changed - omitted fields keep their current values. Send the draft with POST /v1/agreements/{id}/send when it is ready.

Every agreement type takes the same cover page fields and differs only in the term object it owns, so pick the request body variant matching the draft's agreement_type from GET /v1/agreements/{id}.

Nested term attributes must include the term's id. A term object such as csa_attributes or design_partner_attributes replaces the record the agreement already owns when it arrives without a matching id, which would silently drop every field you did not send. Read the id from GET /v1/agreements/{id} and pass it back; a missing or mismatched id returns a 422 naming the id it expected and leaves the draft untouched.

Example: edit the cover page of an NDA draft

TerminalCode
curl -X PATCH "https://api.commonpaper.com/v1/agreements/AGREEMENT_UUID" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agreement": { "recipient_name": "Art Vandelay", "recipient_organization": "Vandelay Industries", "purpose": "Evaluating a potential partnership.", "term": 2 } }'

Example: change who signs for your organization

TerminalCode
curl -X PATCH "https://api.commonpaper.com/v1/agreements/AGREEMENT_UUID" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agreement": { "default_signer_email": "legal@example.com" } }'

Example: update the order form on a CSA draft

TerminalCode
curl -X PATCH "https://api.commonpaper.com/v1/agreements/AGREEMENT_UUID" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agreement": { "csa_order_form_attributes": { "id": "CSA_ORDER_FORM_UUID", "subscription_period": 2, "subscription_period_unit": "year(s)", "cloud_service_description": "An analytics and reporting platform." } } }'

Example: update the terms on a Design draft

TerminalCode
curl -X PATCH "https://api.commonpaper.com/v1/agreements/AGREEMENT_UUID" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "agreement": { "design_partner_attributes": { "id": "DESIGN_PARTNER_UUID", "product_description": "An analytics and reporting platform.", "term_amount": 6, "term_unit": "month(s)" } } }'

See Overriding Template Defaults for the term field reference.

Update Draft Agreement › path Parameters

id
​string · uuid · required

The UUID of the draft agreement to update.

Update Draft Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Update Draft Agreement › Request Body

anyOf
At least one variant must match. Multiple variants may match simultaneously.

Decision Table

VariantMatching Criteria
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
type = object · requires: agreement
Properties for Update NDA draft:
Body for a draft whose `agreement_type` is `NDA`. NDA terms live directly on the agreement (`purpose`, `term`, `confidentiality_period`), so an NDA draft has no term object of its own.
​object · required

The draft fields to change.

Update Draft Agreement › Responses

OK. Returns the updated draft agreement.


Delete Draft Agreement

DELETE
https://api.commonpaper.com
/v1/agreements/{id}

Deletes a draft agreement. Only agreements in draft status can be deleted; to stop an agreement that has already been sent, use PATCH /v1/agreements/{id}/void instead. The caller must be an admin of the organization or the owner of the draft.

A draft cannot be deleted while a DPA or BAA uses it as its underlying agreement. Void or delete that agreement first.

Delete Draft Agreement › path Parameters

id
​string · uuid · required

The UUID of the draft agreement to delete.

Delete Draft Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Delete Draft Agreement › Responses

No Content. The draft agreement was deleted.

No data returned

Void Agreement

PATCH
https://api.commonpaper.com
/v1/agreements/{id}/void

This endpoint allows users to void a specific agreement within Common Paper. Voiding an agreement means that it is no longer valid and cannot be executed.

Void Agreement › path Parameters

id
​string · uuid · required

The UUID of the resource.

Void Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Void Agreement › Responses

Agreement voided successfully. Returns the updated agreement.

No data returned

Resend Agreement Email

PATCH
https://api.commonpaper.com
/v1/agreements/{id}/resend_email

This endpoint resends the last notification email sent to the recipient party in a specific agreement within Common Paper, usually to move the process along a little faster.

Resend Agreement Email › path Parameters

id
​string · uuid · required

The UUID of the resource.

Resend Agreement Email › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Resend Agreement Email › Responses

Email resent successfully. Returns the agreement.

No data returned

Reassign Agreement

PATCH
https://api.commonpaper.com
/v1/agreements/{id}/reassign

This endpoint allows users to reassign a specific agreement within Common Paper to a different recipient. This may be necessary if the original assignee is no longer available or if a different user is better suited to handle the agreement.

Reassign Agreement › path Parameters

id
​string · uuid · required

The UUID of the resource.

Reassign Agreement › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Reassign Agreement › Request Body

​object · required

The agreement object

Reassign Agreement › Responses

Agreement reassigned successfully. Returns the updated agreement, including the new recipient.

No data returned

Download Agreement PDF

GET
https://api.commonpaper.com
/v1/agreements/{id}/download_pdf

Downloads a PDF copy of an agreement. Returns the file as application/pdf binary content with a Content-Disposition header containing the filename. Provide the agreement UUID.

Download Agreement PDF › path Parameters

id
​string · uuid · required

The UUID of the agreement to download as a PDF.

Download Agreement PDF › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Download Agreement PDF › Responses

A PDF file for API clients. MCP clients receive JSON with a curl_command instead of file bytes.

string · binary

GET
https://api.commonpaper.com
/v1/agreements/{id}/shareable_link

Generates a shareable review link for an agreement. Returns a JSON object with a link URL that can be shared with recipients. Provide the agreement UUID.

Generate Shareable Link › path Parameters

id
​string · uuid · required

The UUID of the agreement to generate a shareable link for.

Generate Shareable Link › Headers

Authorization
​string · required

The Authorization header is used to authenticate with the API using your API key. Value is of the format Bearer YOUR_KEY_HERE.

Generate Shareable Link › Responses

OK

link
​string