Skip to main content

Create Template

Create a new artifact type template. Templates start in draft status and must be approved before use.

Endpoint

POST /templates

Request

Headers

HeaderRequiredDescription
X-API-KeyYesYour API key
X-API-SecretYesYour API secret
Content-TypeYesMust be application/json

Body Parameters

ParameterTypeRequiredDescription
namestringYesTemplate name (max 100 characters)
descriptionstringNoTemplate description (max 500 characters)
locksarrayYesArray of lock definitions

Lock Definition Object

ParameterTypeRequiredDescription
namestringYesLock name (snake_case, alphanumeric)
data_typestringYesData type: string, number, date, boolean
descriptionstringNoHuman-readable description
validationobjectNoValidation rules
weightintegerYesWeight score (1-100)
requiredbooleanYesWhether lock is required

Validation Object (Optional)

ParameterTypeDescription
patternstringRegex pattern for strings
min_lengthintegerMinimum string length
max_lengthintegerMaximum string length
minnumberMinimum value for numbers
maxnumberMaximum value for numbers

Example Request

curl -X POST https://api.docyard.io/v1/templates \
  -H "X-API-Key: dk_live_dist_aaaaaaaa" \
  -H "X-API-Secret: dk_secret_dist_bbbbbbbb" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Insurance Declaration Page",
    "description": "Standard insurance policy declaration document",
    "locks": [
      {
        "name": "policy_number",
        "data_type": "string",
        "description": "Unique insurance policy identifier",
        "validation": {
          "pattern": "^POL-[0-9]{8}$",
          "min_length": 12,
          "max_length": 12
        },
        "weight": 20,
        "required": true
      },
      {
        "name": "effective_date",
        "data_type": "date",
        "description": "Date the policy coverage begins",
        "weight": 10,
        "required": true
      },
      {
        "name": "mortgagee_name",
        "data_type": "string",
        "description": "Name of the mortgagee/lender",
        "weight": 5,
        "required": false
      },
      {
        "name": "property_address",
        "data_type": "string",
        "description": "Insured property address",
        "weight": 5,
        "required": false
      }
    ]
  }'

Response

Success (201 Created)

{
  "template_id": "tmpl-ins-dec-001",
  "name": "Insurance Declaration Page",
  "description": "Standard insurance policy declaration document",
  "status": "draft",
  "locks": [
    {
      "name": "policy_number",
      "data_type": "string",
      "description": "Unique insurance policy identifier",
      "validation": {
        "pattern": "^POL-[0-9]{8}$",
        "min_length": 12,
        "max_length": 12
      },
      "weight": 20,
      "required": true
    },
    {
      "name": "effective_date",
      "data_type": "date",
      "description": "Date the policy coverage begins",
      "weight": 10,
      "required": true
    },
    {
      "name": "mortgagee_name",
      "data_type": "string",
      "description": "Name of the mortgagee/lender",
      "weight": 5,
      "required": false
    },
    {
      "name": "property_address",
      "data_type": "string",
      "description": "Insured property address",
      "weight": 5,
      "required": false
    }
  ],
  "created_at": "2026-03-15T10:00:00Z",
  "message": "Template created as draft. Submit for review when ready."
}

Error Responses

Validation Error (422)

{
  "error": "validation_error",
  "message": "Template validation failed",
  "details": [
    {
      "field": "locks[0].name",
      "issue": "required"
    },
    {
      "field": "locks[0].weight",
      "issue": "must be between 1 and 100"
    }
  ],
  "request_id": "req-abc123xyz"
}

Too Many Templates (429)

{
  "error": "rate_limit_exceeded",
  "message": "Too many templates created. Please wait before creating more.",
  "retry_after": 60,
  "request_id": "req-abc123xyz"
}

Code Examples

Node.js

const template = await client.templates.create({
  name: 'Insurance Declaration Page',
  description: 'Standard insurance policy declaration document',
  locks: [
    {
      name: 'policy_number',
      data_type: 'string',
      validation: { pattern: '^POL-[0-9]{8}$' },
      weight: 20,
      required: true
    },
    {
      name: 'effective_date',
      data_type: 'date',
      weight: 10,
      required: true
    }
  ]
});

Python

template = client.templates.create(
    name='Insurance Declaration Page',
    description='Standard insurance policy declaration document',
    locks=[
        {
            'name': 'policy_number',
            'data_type': 'string',
            'validation': {'pattern': '^POL-[0-9]{8}$'},
            'weight': 20,
            'required': True
        },
        {
            'name': 'effective_date',
            'data_type': 'date',
            'weight': 10,
            'required': True
        }
    ]
)

Next Steps