CM.com · Schema

CreateDossier

CompanyCPaaSMessagingSMSVoicePaymentsVerificationTicketing

Properties

Name Type Description
id object
name string human readable name for this dossier
state object
locale object Locale of the language to be used in the dossier
completed boolean If the dossier is marked as complete
prepare booleannull Place fields using the web interface
prepareReturnUrl stringnull Optionally redirect the user to your website after the fields are placed. The url must begin with https://
prepareUrl string The URL to the web interface to place fields. The URL is only valid for 60 minutes. Only available when the dossier has been created with `prepare`: `true`
timezone stringnull The identifier of a time zone in the IANA database. This will change the time zone of dates used in communication to the recipient and dossier owner. By default Etc/UTC is used when no value is set.
expiresIn integer The expiry in seconds since the dossier was created
reminderIn integernull The time in seconds after the invite was sent to an invitee, after which an automatic reminder will be sent. Reminders only work if the invite emails were sent by Sign. To cancel all reminders for an
expiresAt string The date the dossier expires
createdAt string The date the dossier was created
archive boolean This determines if the dossier needs to be archived.
files array
attachments array
owners array
invitees array
template stringnull Create a dossier from a template. This means that files and field positions are automatically copied from the template. You can find the template ID in the dashboard.
templateLabelValues object Key-value pairs for template labels. The key must match the exact value of the predefined label in the template. It will then be overwritten by the value in the request.
View JSON Schema on GitHub

JSON Schema

cm-com-create-dossier-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/cm-com/main/json-schema/cm-com-create-dossier-schema.json",
  "title": "CreateDossier",
  "x-generated": "2026-10-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/cm-com-sign-v1-openapi.yml#/components/schemas/CreateDossier",
  "allOf": [
    {
      "$ref": "#/$defs/DossierBase"
    },
    {
      "type": "object",
      "properties": {
        "archive": {
          "type": "boolean",
          "default": false,
          "description": "This determines if the dossier needs to be archived."
        },
        "files": {
          "type": "array",
          "minItems": 1,
          "items": {
            "$ref": "#/$defs/CreateFile"
          }
        },
        "attachments": {
          "type": "array",
          "minItems": 0,
          "items": {
            "$ref": "#/$defs/CreateFile"
          }
        },
        "owners": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CreateDossierOwner"
          }
        },
        "invitees": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/CreateInvitee"
          }
        },
        "template": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid",
          "description": "Create a dossier from a template. This means that files and field positions are automatically copied from the template. You can find the template ID in the dashboard.",
          "default": null
        },
        "templateLabelValues": {
          "type": "object",
          "description": "Key-value pairs for template labels. The key must match the exact value of the predefined label in the template. It will then be overwritten by the value in the request.",
          "additionalProperties": {
            "type": "string",
            "description": "The value corresponding to the key."
          }
        }
      },
      "required": [
        "name",
        "files"
      ]
    }
  ],
  "$defs": {
    "CreateDossierOwner": {
      "$ref": "#/$defs/DossierOwnerBase"
    },
    "CreateFile": {
      "allOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "$ref": "#/$defs/FileReference"
            }
          },
          "required": [
            "id"
          ]
        },
        {
          "$ref": "#/$defs/FileBase"
        }
      ]
    },
    "CreateInvitee": {
      "$ref": "#/$defs/InviteeBase"
    },
    "DossierBase": {
      "title": "Dossier",
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/DossierId"
        },
        "name": {
          "type": "string",
          "description": "human readable name for this dossier",
          "maxLength": 255
        },
        "state": {
          "$ref": "#/$defs/DossierState",
          "readOnly": true
        },
        "locale": {
          "$ref": "#/$defs/Locale",
          "description": "Locale of the language to be used in the dossier"
        },
        "completed": {
          "type": "boolean",
          "description": "If the dossier is marked as complete",
          "readOnly": true
        },
        "prepare": {
          "type": [
            "boolean",
            "null"
          ],
          "description": "Place fields using the web interface"
        },
        "prepareReturnUrl": {
          "type": [
            "string",
            "null"
          ],
          "description": "Optionally redirect the user to your website after the fields are placed. The url must begin with https://"
        },
        "prepareUrl": {
          "type": "string",
          "description": "The URL to the web interface to place fields. The URL is only valid for 60 minutes. Only available when the dossier has been created with `prepare`: `true`\n",
          "readOnly": true
        },
        "timezone": {
          "type": [
            "string",
            "null"
          ],
          "description": "The identifier of a time zone in the IANA database. This will change the time zone of dates used in communication to the recipient and dossier owner. By default Etc/UTC is used when no value is set."
        },
        "expiresIn": {
          "type": "integer",
          "format": "int32",
          "minimum": 60,
          "maximum": 7776000,
          "default": 2592000,
          "description": "The expiry in seconds since the dossier was created"
        },
        "reminderIn": {
          "type": [
            "integer",
            "null"
          ],
          "minimum": 86400,
          "maximum": 7776000,
          "description": "The time in seconds after the invite was sent to an invitee, after which an automatic reminder will be sent. Reminders only work if the invite emails were sent by Sign. To cancel all reminders for an existing dossier set value to `null`"
        },
        "expiresAt": {
          "type": "string",
          "format": "date-time",
          "description": "The date the dossier expires",
          "readOnly": true
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "The date the dossier was created",
          "readOnly": true
        }
      },
      "required": [
        "name"
      ]
    },
    "DossierId": {
      "$ref": "#/$defs/DossierReference",
      "readOnly": true
    },
    "DossierOwnerBase": {
      "title": "Owner",
      "type": "object",
      "description": "A person who is the creator and owner of the dossier. This person will receive emails of certain events and will receive a copy of the signed dossier.",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the person who created the dossier",
          "maxLength": 255
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "A valid email address",
          "maxLength": 255
        },
        "cc": {
          "type": "boolean",
          "description": "When set to `true` the owner will be added to the cc field in email communication.",
          "default": false
        },
        "notifications": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string",
            "enum": [
              "signed",
              "reviewed",
              "declined",
              "completed",
              "expired",
              "invite.expired",
              "invite.undelivered",
              "reassigned"
            ],
            "description": "Determines which notifications should be sent to the dossier owner. By default all notifications are sent."
          }
        }
      },
      "required": [
        "name",
        "email"
      ]
    },
    "DossierReference": {
      "type": "string",
      "format": "uuid",
      "description": "Id of the dossier"
    },
    "DossierState": {
      "type": "string",
      "enum": [
        "draft",
        "pending",
        "completed",
        "declined",
        "expired",
        "deleted"
      ],
      "description": "Every dossier is initialized with the draft state. When the dossier is pending, it will have sent out any invitations for signing. From this point, the dossier is mostly no longer editable. Once everyone has signed, the state becomes completed and the signed dossier will be ready for retrieval. If any invitee declines, the state of the dossier will become declined. After the dossier expiry time has passed, a dossier will always enter the expired state. In the expired state a dossier can no longer be completed or declined. Once the state is deleted the signed contracts are no longer downloadable and all contracts and sensitive information are removed from the system."
    },
    "Field": {
      "allOf": [
        {
          "type": "object",
          "properties": {
            "id": {
              "$ref": "#/$defs/FieldId"
            }
          },
          "required": [
            "id"
          ]
        },
        {
          "$ref": "#/$defs/FieldBase"
        }
      ]
    },
    "FieldBase": {
      "title": "Field",
      "type": "object",
      "properties": {
        "type": {
          "$ref": "#/$defs/FieldType"
        },
        "required": {
          "type": "boolean",
          "default": true,
          "description": "Indicates if the field is required and must be filled in by the user. When required is `true` and type is `checkbox` the field must be checked. For the `checkbox` type, the default value is `false`."
        },
        "file": {
          "$ref": "#/$defs/FileReference"
        },
        "tag": {
          "type": "string",
          "maxLength": 64,
          "description": "The tag acts as a placeholder; the range and locations of the field are automatically determined based on the location(s) of the tag in the document. Add the tag to every page the field should include in case of initials. The tag should be hidden, for example by making it white."
        },
        "tagRequired": {
          "type": "boolean",
          "default": true,
          "description": "Indicates if the tag must be present in the document. When this is set to `false` and the tag is not found in the document it will skip this field."
        },
        "locations": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/FieldLocation"
          }
        },
        "invitee": {
          "$ref": "#/$defs/InviteeReference",
          "readOnly": true
        }
      },
      "required": [
        "type",
        "file"
      ]
    },
    "FieldId": {
      "$ref": "#/$defs/FieldReference",
      "readOnly": true
    },
    "FieldLocation": {
      "type": "object",
      "properties": {
        "range": {
          "type": "string",
          "pattern": "^\\d+(-\\d+)?$",
          "maxLength": 64,
          "description": "The page number within the PDF that this field occupies (e.g. `1`), or range for a initials field (e.g. `1-3`)."
        },
        "x": {
          "type": "number",
          "format": "float",
          "description": "X position of the field in points."
        },
        "y": {
          "type": "number",
          "format": "float",
          "description": "Y position of the field in points."
        },
        "width": {
          "type": "number",
          "format": "float",
          "description": "Width of the field in points."
        },
        "height": {
          "type": "number",
          "format": "float",
          "description": "Height of the field in points."
        }
      }
    },
    "FieldReference": {
      "type": "string",
      "format": "uuid",
      "description": "Unique Id of a field"
    },
    "FieldType": {
      "type": "string",
      "description": "The type of field for the invitee.",
      "enum": [
        "signature",
        "signatureDate",
        "initials",
        "text",
        "textarea",
        "label",
        "checkbox",
        "radio",
        "stamp"
      ]
    },
    "FileBase": {
      "title": "File",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Original name of the file without extension",
          "maxLength": 255
        },
        "hash": {
          "type": "string",
          "description": "A sha256 hash of the document",
          "maxLength": 64,
          "readOnly": true
        },
        "uploadDateTime": {
          "type": "string",
          "format": "date-time",
          "description": "The time at which the file was uploaded",
          "readOnly": true
        },
        "size": {
          "type": "integer",
          "description": "The size of the file in bytes"
        },
        "contentType": {
          "type": "string",
          "description": "The content type identifying the type of file",
          "readOnly": true
        }
      },
      "required": [
        "name",
        "hash",
        "uploadDateTime",
        "contentType"
      ]
    },
    "FileReference": {
      "type": "string",
      "format": "uuid",
      "description": "A unique reference number for this file."
    },
    "IdentificationMethod": {
      "type": "string",
      "enum": [
        "idin",
        "iban",
        "otp_sms",
        "otp_email",
        "otp_whatsapp",
        "otp_voice",
        "qualified"
      ],
      "description": "Additional user identification is required. When you select `qualified` it cannot be used with other identification methods. Please note that this is only available when configured for your account."
    },
    "InviteeBase": {
      "title": "Invitee",
      "description": "An invitee is someone who has been invited to review and/or sign the dossier.",
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "Name of the person invited to read and/or sign the document",
          "maxLength": 255
        },
        "email": {
          "type": "string",
          "format": "email",
          "description": "A valid email address",
          "maxLength": 255
        },
        "locale": {
          "$ref": "#/$defs/Locale",
          "description": "Locale of the language to be used in invitations.",
          "nullable": true
        },
        "position": {
          "type": "integer",
          "description": "Set the order of signing. For example if there are two invitees set position `1` for the first invitee and position `2` for the second invitee. It is possible to set multiple invitees on the same position. Make sure there is no gap between the positions."
        },
        "authenticationMethods": {
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "otp_sms",
              "otp_email",
              "otp_whatsapp",
              "otp_voice"
            ],
            "description": "Additional user authentication is required before the user can view the dossier. Please note that this is only available when configured for your account."
          }
        },
        "identificationMethod": {
          "$ref": "#/$defs/IdentificationMethod",
          "deprecated": true
        },
        "identificationMethods": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/IdentificationMethod"
          }
        },
        "notifications": {
          "type": [
            "array",
            "null"
          ],
          "items": {
            "type": "string",
            "enum": [
              "invite",
              "signed",
              "reviewed",
              "declined",
              "completed"
            ],
            "description": "Determines which notifications should be sent over the configured channel. By default all notifications are sent."
          }
        },
        "payments": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Payment"
          },
          "description": "Additional payment is required. Please note that this is only available when configured for your account."
        },
        "phoneNumber": {
          "type": "string",
          "description": "The phone number of the invitee in E.164 format. Required when identificationMethod is otp."
        },
        "reference": {
          "type": "string",
          "description": "A reference to an external identifier of your invitee.",
          "maxLength": 255
        },
        "readOnly": {
          "type": "boolean",
          "description": "Indicates that this invitee needs to review the dossier, instead of signing it",
          "default": false
        },
        "state": {
          "type": "string",
          "enum": [
            "approved",
            "declined"
          ],
          "description": "The invitee has approved or declined the dossier"
        },
        "stateComment": {
          "type": [
            "string",
            "null"
          ],
          "description": "When the invitee declined the dossier this field may contain the reason for declining.",
          "default": null,
          "readOnly": true
        },
        "stateChanged": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time",
          "description": "The date the invitee state has changed",
          "default": null,
          "readOnly": true
        },
        "redirectUrl": {
          "type": [
            "string",
            "null"
          ],
          "format": "url",
          "description": "URL to redirect the invitee to after signing, approving or declining the dossier. If not set, the default confirmation page will be shown.",
          "default": null
        },
        "fields": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Field"
          }
        }
      },
      "required": [
        "name"
      ]
    },
    "InviteeReference": {
      "description": "Optional. Indicates that only a particular invitee is allowed/required to use a field.",
      "type": "string",
      "format": "uuid"
    },
    "Locale": {
      "type": "string",
      "enum": [
        "de-DE",
        "en-US",
        "es-ES",
        "fr-FR",
        "hu-HU",
        "it-IT",
        "ja-JP",
        "nl-NL",
        "pl-PL",
        "pt-PT",
        "ro-RO",
        "sk-SK"
      ],
      "default": "en-US"
    },
    "Payment": {
      "title": "Payment",
      "type": "object",
      "properties": {
        "amount": {
          "type": "integer",
          "description": "The payment amount in cents",
          "minimum": 1
        },
        "currency": {
          "type": "string",
          "enum": [
            "EUR"
          ],
          "description": "The payment currency"
        }
      },
      "required": [
        "amount",
        "currency"
      ]
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/cm-com-create-dossier"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.