Skip to main content

Template Creation

This service allows you to create custom templates that can later be used to fill out documents for signature.

POST/templateprivate keyprk_

Authentication​

Include your private key in the Authorization header.

Authorization: prk_xxx...

Creation Parameters​

NameTypeDescription
nameString requiredName of the automation.
descriptionString optionalText describing the template, up to 500 characters.
configArray requiredArray of questions for the user. See JSON Configuration.
signatureProfileArray requiredDefinition of signers and approvers. See Signature Profiles.
signArray requiredNames of required questions.
preBuildBoolean optionalIf true, includes automatic pre-fill.
The description limit is 500 characters

description is informational: it does not change the template's behavior, and it helps your team recognize what each template is for. If you do not send it, the template has no description. If the text goes over 500 characters, the API responds 400 and does not create the template.

GET /template returns the field, both in the list and in the detail by id.

Creation Examples​

curl -X POST https://api.auco.ai/v1.5/ext/template \
-H "Content-Type: application/json" \
-H "Authorization: prk_private_key_company" \
-d '{
"name": "Test document variable modification",
"description": "Service agreement with a single signer, for the sales team",
"config": [
{
"name": "client_name",
"type": "name",
"description": "Enter the client name"
},
{
"description": "Select the document type for the client",
"name": "client_document_type",
"type": "clausula",
"value": "id_card",
"options": [
{
"name": "National ID Card",
"value": "id_card"
},
{
"name": "Foreign ID Card",
"value": "foreign_id"
}
]
},
{
"description": "Enter the national ID card number for the client",
"name": "client_id_card",
"type": "number",
"prereq": [
{
"k": "client_document_type",
"v": "id_card"
}
]
},
{
"description": "Enter the foreign ID number for the client",
"name": "client_foreign_id",
"type": "number",
"prereq": [
{
"k": "client_document_type",
"v": "foreign_id"
}
]
},
{
"name": "client_email",
"type": "email",
"description": "Enter the client email"
},
{
"name": "client_phone",
"type": "phone",
"description": "Enter the client phone"
}
],
"sign": [
"client_name",
"client_id_card",
"client_foreign_id",
"client_email",
"client_phone"
],
"signatureProfile": [
{
"email": "client_email",
"phone": "client_phone",
"identification": "client_id_card|client_foreign_id",
"name": "client_name",
"type": "client"
}
]
}'

Response Example​

{
"id": "template_id",
"urls": {
"mask": "https://signed_url_mask",
"complete": "https://signed_url_complete"
}
}

Uploading HTML Complete and HTML Mask:​

In the creation service response, you will find two signed URLs, one for each HTML. They have a lifespan of 120 seconds: after that, they are no longer valid. Have the HTML Complete and HTML Mask files ready before creating the template and upload each one, as is, in a PUT request to its URL.

Upload with Content-Type: binary/octet-stream

The URLs are signed for that content type: if you send another one —for example text/html—, the upload is rejected. Send the file untransformed: in curl use --data-binary, not -d, which strips line breaks.

# Upload HTML Mask
curl -X PUT https://signed_url_mask \
-H "Content-Type: binary/octet-stream" \
--data-binary @mask.html

# Upload HTML Complete
curl -X PUT https://signed_url_complete \
-H "Content-Type: binary/octet-stream" \
--data-binary @complete.html
The URLs expire in 120 seconds

If they expire before you upload the files, call PUT /template with the template's id to get new URLs. Do not call POST /template again: you would create another template.


⚠️ Error Responses​

Errors come with the body { "message": "..." }.

CodeDescription
400Invalid body: PAYLOAD_NOT_VALID (the body is not JSON), PROFILE_FIELD_NOT_FOUND: <field> (a signer's email or phone is neither a config question nor a preFill field), PROFILE_FIELD_TYPE_INVALID: <field> must be type <type> (it points to a question of another type), or the validator's message
401Invalid or missing authentication

The validator's message names the failing field, for example "name" is required, "config[0].maxLength" is not allowed, or "signatureProfile[0].name" must be a string. See the rules for each field in JSON Configuration.