# The pact object

A pact is a document sent to people for signature: a frozen copy of the PDF, its recipients in signing order, their fields, and an audit trail.

Every pact call answers with this object. Lists leave out `fields` and `events`; `warning` only appears when an invitation email failed. See [Pact lifecycle](/concepts/pacts) for how `status` and `current_signer` move.

## Attributes

- `uid` (string): The pact's id: 8 letters and digits.
- `title` (string): Shown to signers and in emails (150 characters at most).
- `status` (string): See [Pact lifecycle](/concepts/pacts). One of: `draft`, `sent`, `sealed`, `declined`, `voided`, `lapsed`.
- `message` (string | null): Your note in the invitation email.
- `page_count` (integer): Pages in the document.
- `created_by` (string): Where it was created: the dashboard, the API or the MCP server. One of: `web`, `api`, `mcp`.
- `current_signer` (integer | null): The `order` of the signer whose turn it is while the pact is `sent`; otherwise `null`.
- `date_created` (string (date-time)): When the draft was created.
- `date_sent` (string (date-time) | null): When it was sent.
- `date_lapses` (string (date-time) | null): When it lapses if it is not sealed first.
- `date_sealed` (string (date-time) | null): When the last signer signed.
- `date_updated` (string (date-time)): When anything about it last changed.
- `documents_charged` (integer | null): Documents it used when it was sent. `null` on a draft.
- `documents_cost` (integer | null): What sending this draft will use: one document per 3 signers, rounded up. Only set on a draft.
- `sent_sha256` (string): SHA-256 (lowercase hex) of the PDF as sent. The sigil records it too.
- `signed_sha256` (string | null): SHA-256 of the signed PDF, once sealed.
- `recipients` (array of objects): Signers in order, then CCs.
  - `order` (integer): Position, starting at 1. Signers come first, numbered in the order you gave them; CCs follow.
  - `role` (string): Signers sign in order; a CC gets the finished copy. One of: `signer`, `cc`.
  - `name` (string): The recipient's name.
  - `email` (string): The recipient's address, lowercased.
  - `status` (string): Where this recipient is. One of: `pending`, `viewed`, `signed`, `declined`.
  - `date_viewed` (string (date-time) | null): When they first opened their signing link.
  - `date_signed` (string (date-time) | null): When they signed.
  - `typed_name` (string | null): The full name they typed when signing.
  - `decline_reason` (string | null): Their reason, if they declined.
  - `signing_url` (string): The private link for the signer whose turn it is. Anyone with it can sign as that person, so only give it to them. Only with `include_links=1`, and only on the waiting signer.
- `links` (object): Where to get the files.
  - `document` (string (URL)): The document as sent ([download](/api-reference/pacts/download-document)).
  - `signed` (string (URL) | null): The signed PDF, once sealed ([download](/api-reference/pacts/download-signed)).
  - `sigil` (string (URL) | null): The sigil (certificate of completion), once sealed ([download](/api-reference/pacts/download-sigil)).
  - `dashboard` (string (URL)): The pact's page on the dashboard (needs a login).
- `fields` (array of objects): The pact's own copy of the fields, with values as signers fill them in. Single-pact responses only.
  - `id` (integer | null): The field's id on a pact. `null` on a template.
  - `recipient` (integer): The signer the field belongs to: the number in its glyph (`\s2\` → `2`), or the signer it was given to in the website's field editor.
  - `type` (string): What the signer provides. One of: `signature`, `initials`, `name`, `date`, `text`, `checkbox`.
  - `page` (integer): The page it is on, starting at 1.
  - `x` (number): Distance from the page's left edge, in PDF points (1/72 inch).
  - `y` (number): Distance from the top of the page to the box's bottom edge, in points: the glyph's text baseline. Signatures stand on that line.
  - `width` (number): The box's width in points: set by the field type for a glyph, as drawn for a field placed by hand on the website.
  - `height` (number): The box's height in points: set by the field type for a glyph, as drawn for a field placed by hand on the website.
  - `label` (string | null): The label from the glyph, such as `Company` in `\t1:Company\`, or the one typed in the field editor.
  - `required` (boolean): `false` when the glyph ends in `!` (`\t1:Phone!\`, `\c1!\`), or when the field was made optional in the field editor.
  - `value` (string | null): What was filled in, once that signer has signed: text as typed, `"1"` or `"0"` for a checkbox, the typed name for `name`, and the signing date (`MM/dd/yyyy`, UTC) for `date`. Signatures and initials are images on the PDF, so they stay `null`.
- `events` (array of objects): The audit trail, oldest first. Single-pact responses only.
  - `event` (string): What happened. One of: `created`, `fields`, `sent`, `emailed`, `email_failed`, `viewed`, `consented`, `signed`, `declined`, `sealed`, `copy_emailed`, `copy_email_failed`, `voided`, `reissued`.
  - `at` (string (date-time)): When it happened.
  - `by` (string | null): Who did it: your email address, or the signer's. `null` for what the system does on its own, such as sealing.
  - `to` (string | null): Who an email went to, for `emailed`, `email_failed`, `reissued`, `copy_emailed` and `copy_email_failed`.
  - `note` (string | null): Detail, such as `signer 2`, the consent version, or the reason given for voiding or declining.
- `warning` (string): Set when an invitation email could not be delivered. The action still happened: resend the link, or check the address. Only on create (with `send`), send and resend responses, and only when an email failed.

## Example

```json
{
  "uid": "K4TQ7MZE",
  "title": "Consulting agreement with Acme",
  "status": "sealed",
  "message": "Please sign by Friday.",
  "page_count": 3,
  "created_by": "api",
  "current_signer": null,
  "date_created": "2026-10-20T14:05:00Z",
  "date_sent": "2026-10-20T14:05:01Z",
  "date_lapses": "2026-11-03T14:05:01Z",
  "date_sealed": "2026-10-21T09:12:44Z",
  "date_updated": "2026-10-21T09:12:44Z",
  "documents_charged": 1,
  "documents_cost": null,
  "sent_sha256": "9f2c4e81b07d5a3c6e1f0b9a8d7c6e5f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d",
  "signed_sha256": "3b7e1d9c5a8f2e4b6d0c1a9f8e7d6c5b4a3f2e1d0c9b8a7f6e5d4c3b2a1f0e9d",
  "recipients": [
    {
      "order": 1,
      "role": "signer",
      "name": "Avery Lane",
      "email": "avery@example.com",
      "status": "signed",
      "date_viewed": "2026-10-20T15:28:02Z",
      "date_signed": "2026-10-20T15:31:40Z",
      "typed_name": "Avery Lane",
      "decline_reason": null
    },
    {
      "order": 2,
      "role": "signer",
      "name": "Sam Ortiz",
      "email": "sam@example.com",
      "status": "signed",
      "date_viewed": "2026-10-21T09:10:15Z",
      "date_signed": "2026-10-21T09:12:44Z",
      "typed_name": "Sam Ortiz",
      "decline_reason": null
    },
    {
      "order": 3,
      "role": "cc",
      "name": "Records",
      "email": "records@example.com",
      "status": "pending",
      "date_viewed": null,
      "date_signed": null,
      "typed_name": null,
      "decline_reason": null
    }
  ],
  "links": {
    "document": "https://api.signwithsigil.com/v1/pacts/K4TQ7MZE/document.pdf",
    "signed": "https://api.signwithsigil.com/v1/pacts/K4TQ7MZE/signed.pdf",
    "sigil": "https://api.signwithsigil.com/v1/pacts/K4TQ7MZE/sigil.pdf",
    "dashboard": "https://www.signwithsigil.com/pacts/K4TQ7MZE"
  },
  "fields": [
    {
      "id": 4101,
      "recipient": 1,
      "type": "text",
      "page": 1,
      "x": 140.25,
      "y": 188.4,
      "width": 160,
      "height": 14,
      "label": "Company name",
      "required": true,
      "value": "Acme Corp"
    },
    {
      "id": 4102,
      "recipient": 1,
      "type": "signature",
      "page": 3,
      "x": 72,
      "y": 612.5,
      "width": 185,
      "height": 30,
      "label": null,
      "required": true,
      "value": null
    },
    {
      "id": 4103,
      "recipient": 1,
      "type": "name",
      "page": 3,
      "x": 72,
      "y": 650.1,
      "width": 200,
      "height": 12,
      "label": null,
      "required": true,
      "value": "Avery Lane"
    },
    {
      "id": 4104,
      "recipient": 1,
      "type": "date",
      "page": 3,
      "x": 320,
      "y": 650.1,
      "width": 100,
      "height": 12,
      "label": null,
      "required": true,
      "value": "10/20/2026"
    },
    {
      "id": 4105,
      "recipient": 2,
      "type": "signature",
      "page": 3,
      "x": 72,
      "y": 712.5,
      "width": 185,
      "height": 30,
      "label": null,
      "required": true,
      "value": null
    },
    {
      "id": 4106,
      "recipient": 2,
      "type": "date",
      "page": 3,
      "x": 320,
      "y": 750.1,
      "width": 100,
      "height": 12,
      "label": null,
      "required": true,
      "value": "10/21/2026"
    },
    {
      "id": 4107,
      "recipient": 2,
      "type": "checkbox",
      "page": 3,
      "x": 72,
      "y": 778.6,
      "width": 12,
      "height": 12,
      "label": "Send me a copy by post",
      "required": false,
      "value": "0"
    }
  ],
  "events": [
    {
      "event": "created",
      "at": "2026-10-20T14:05:00Z",
      "by": "you@example.com",
      "to": null,
      "note": "via api, 2 signers"
    },
    {
      "event": "sent",
      "at": "2026-10-20T14:05:01Z",
      "by": "you@example.com",
      "to": null,
      "note": "2 signers, lapses 2026-11-03"
    },
    {
      "event": "emailed",
      "at": "2026-10-20T14:05:02Z",
      "by": "you@example.com",
      "to": "avery@example.com",
      "note": "signer 1"
    },
    {
      "event": "viewed",
      "at": "2026-10-20T15:28:02Z",
      "by": "avery@example.com",
      "to": null,
      "note": null
    },
    {
      "event": "consented",
      "at": "2026-10-20T15:31:38Z",
      "by": "avery@example.com",
      "to": null,
      "note": "consent version 2026-10-20"
    },
    {
      "event": "signed",
      "at": "2026-10-20T15:31:40Z",
      "by": "avery@example.com",
      "to": null,
      "note": "signer 1 as \"Avery Lane\""
    },
    {
      "event": "emailed",
      "at": "2026-10-20T15:31:41Z",
      "by": "avery@example.com",
      "to": "sam@example.com",
      "note": "signer 2"
    },
    {
      "event": "viewed",
      "at": "2026-10-21T09:10:15Z",
      "by": "sam@example.com",
      "to": null,
      "note": null
    },
    {
      "event": "consented",
      "at": "2026-10-21T09:12:41Z",
      "by": "sam@example.com",
      "to": null,
      "note": "consent version 2026-10-20"
    },
    {
      "event": "signed",
      "at": "2026-10-21T09:12:44Z",
      "by": "sam@example.com",
      "to": null,
      "note": "signer 2 as \"Sam Ortiz\""
    },
    {
      "event": "sealed",
      "at": "2026-10-21T09:12:45Z",
      "by": null,
      "to": null,
      "note": "2 signatures stamped"
    },
    {
      "event": "copy_emailed",
      "at": "2026-10-21T09:12:46Z",
      "by": null,
      "to": "avery@example.com",
      "note": null
    },
    {
      "event": "copy_emailed",
      "at": "2026-10-21T09:12:46Z",
      "by": null,
      "to": "sam@example.com",
      "note": null
    },
    {
      "event": "copy_emailed",
      "at": "2026-10-21T09:12:46Z",
      "by": null,
      "to": "records@example.com",
      "note": null
    },
    {
      "event": "copy_emailed",
      "at": "2026-10-21T09:12:46Z",
      "by": null,
      "to": "you@example.com",
      "note": null
    }
  ]
}
```
