curl --request POST \
--url https://api.autype.com/api/v1/dev/render/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"document": {
"type": "pdf",
"size": "A4"
},
"variables": {
"companyName": "Acme Inc"
},
"sections": [
{
"id": "section-1",
"type": "flow",
"content": [
{
"type": "h1",
"text": "Hello {{companyName}}"
},
{
"type": "text",
"text": "This is a paragraph."
}
]
}
]
},
"pdfProfile": "standard",
"webhook": {
"webhookUrl": "https://example.com/webhook",
"webhookAuth": {
"headerName": "X-API-Key",
"headerValue": "my-secret-key",
"basicAuthUsername": "user",
"basicAuthPassword": "pass"
}
}
}
'import requests
url = "https://api.autype.com/api/v1/dev/render/validate"
payload = {
"config": {
"document": {
"type": "pdf",
"size": "A4"
},
"variables": { "companyName": "Acme Inc" },
"sections": [
{
"id": "section-1",
"type": "flow",
"content": [
{
"type": "h1",
"text": "Hello {{companyName}}"
},
{
"type": "text",
"text": "This is a paragraph."
}
]
}
]
},
"pdfProfile": "standard",
"webhook": {
"webhookUrl": "https://example.com/webhook",
"webhookAuth": {
"headerName": "X-API-Key",
"headerValue": "my-secret-key",
"basicAuthUsername": "user",
"basicAuthPassword": "pass"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
document: {type: 'pdf', size: 'A4'},
variables: {companyName: 'Acme Inc'},
sections: [
{
id: 'section-1',
type: 'flow',
content: [
{type: 'h1', text: 'Hello {{companyName}}'},
{type: 'text', text: 'This is a paragraph.'}
]
}
]
},
pdfProfile: 'standard',
webhook: {
webhookUrl: 'https://example.com/webhook',
webhookAuth: {
headerName: 'X-API-Key',
headerValue: 'my-secret-key',
basicAuthUsername: 'user',
basicAuthPassword: 'pass'
}
}
})
};
fetch('https://api.autype.com/api/v1/dev/render/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.autype.com/api/v1/dev/render/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'config' => [
'document' => [
'type' => 'pdf',
'size' => 'A4'
],
'variables' => [
'companyName' => 'Acme Inc'
],
'sections' => [
[
'id' => 'section-1',
'type' => 'flow',
'content' => [
[
'type' => 'h1',
'text' => 'Hello {{companyName}}'
],
[
'type' => 'text',
'text' => 'This is a paragraph.'
]
]
]
]
],
'pdfProfile' => 'standard',
'webhook' => [
'webhookUrl' => 'https://example.com/webhook',
'webhookAuth' => [
'headerName' => 'X-API-Key',
'headerValue' => 'my-secret-key',
'basicAuthUsername' => 'user',
'basicAuthPassword' => 'pass'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.autype.com/api/v1/dev/render/validate"
payload := strings.NewReader("{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.autype.com/api/v1/dev/render/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.autype.com/api/v1/dev/render/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"errors": [
{
"path": "sections.0.content.0.type",
"message": "Invalid element type",
"code": "BROKEN_REFERENCE"
}
],
"warnings": [
{
"path": "sections.0.content.0.type",
"message": "Invalid element type",
"code": "BROKEN_REFERENCE"
}
]
}Validate a document JSON
Validate a document JSON against the Autype document schema without rendering it. No credits are charged. Returns validation errors and warnings. Use strict=true to also check anchors, references, citations, abbreviations, and footnotes.
curl --request POST \
--url https://api.autype.com/api/v1/dev/render/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"config": {
"document": {
"type": "pdf",
"size": "A4"
},
"variables": {
"companyName": "Acme Inc"
},
"sections": [
{
"id": "section-1",
"type": "flow",
"content": [
{
"type": "h1",
"text": "Hello {{companyName}}"
},
{
"type": "text",
"text": "This is a paragraph."
}
]
}
]
},
"pdfProfile": "standard",
"webhook": {
"webhookUrl": "https://example.com/webhook",
"webhookAuth": {
"headerName": "X-API-Key",
"headerValue": "my-secret-key",
"basicAuthUsername": "user",
"basicAuthPassword": "pass"
}
}
}
'import requests
url = "https://api.autype.com/api/v1/dev/render/validate"
payload = {
"config": {
"document": {
"type": "pdf",
"size": "A4"
},
"variables": { "companyName": "Acme Inc" },
"sections": [
{
"id": "section-1",
"type": "flow",
"content": [
{
"type": "h1",
"text": "Hello {{companyName}}"
},
{
"type": "text",
"text": "This is a paragraph."
}
]
}
]
},
"pdfProfile": "standard",
"webhook": {
"webhookUrl": "https://example.com/webhook",
"webhookAuth": {
"headerName": "X-API-Key",
"headerValue": "my-secret-key",
"basicAuthUsername": "user",
"basicAuthPassword": "pass"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
config: {
document: {type: 'pdf', size: 'A4'},
variables: {companyName: 'Acme Inc'},
sections: [
{
id: 'section-1',
type: 'flow',
content: [
{type: 'h1', text: 'Hello {{companyName}}'},
{type: 'text', text: 'This is a paragraph.'}
]
}
]
},
pdfProfile: 'standard',
webhook: {
webhookUrl: 'https://example.com/webhook',
webhookAuth: {
headerName: 'X-API-Key',
headerValue: 'my-secret-key',
basicAuthUsername: 'user',
basicAuthPassword: 'pass'
}
}
})
};
fetch('https://api.autype.com/api/v1/dev/render/validate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.autype.com/api/v1/dev/render/validate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'config' => [
'document' => [
'type' => 'pdf',
'size' => 'A4'
],
'variables' => [
'companyName' => 'Acme Inc'
],
'sections' => [
[
'id' => 'section-1',
'type' => 'flow',
'content' => [
[
'type' => 'h1',
'text' => 'Hello {{companyName}}'
],
[
'type' => 'text',
'text' => 'This is a paragraph.'
]
]
]
]
],
'pdfProfile' => 'standard',
'webhook' => [
'webhookUrl' => 'https://example.com/webhook',
'webhookAuth' => [
'headerName' => 'X-API-Key',
'headerValue' => 'my-secret-key',
'basicAuthUsername' => 'user',
'basicAuthPassword' => 'pass'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.autype.com/api/v1/dev/render/validate"
payload := strings.NewReader("{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.autype.com/api/v1/dev/render/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.autype.com/api/v1/dev/render/validate")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"config\": {\n \"document\": {\n \"type\": \"pdf\",\n \"size\": \"A4\"\n },\n \"variables\": {\n \"companyName\": \"Acme Inc\"\n },\n \"sections\": [\n {\n \"id\": \"section-1\",\n \"type\": \"flow\",\n \"content\": [\n {\n \"type\": \"h1\",\n \"text\": \"Hello {{companyName}}\"\n },\n {\n \"type\": \"text\",\n \"text\": \"This is a paragraph.\"\n }\n ]\n }\n ]\n },\n \"pdfProfile\": \"standard\",\n \"webhook\": {\n \"webhookUrl\": \"https://example.com/webhook\",\n \"webhookAuth\": {\n \"headerName\": \"X-API-Key\",\n \"headerValue\": \"my-secret-key\",\n \"basicAuthUsername\": \"user\",\n \"basicAuthPassword\": \"pass\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"valid": true,
"errors": [
{
"path": "sections.0.content.0.type",
"message": "Invalid element type",
"code": "BROKEN_REFERENCE"
}
],
"warnings": [
{
"path": "sections.0.content.0.type",
"message": "Invalid element type",
"code": "BROKEN_REFERENCE"
}
]
}Authorizations
Short-lived, Developer-API-audience token obtained by the trusted MCP service through token exchange (mcp_at_...). Raw MCP resource tokens are rejected.
Query Parameters
Enable strict validation mode (validates anchors, references, citations, abbreviations, and footnotes)
Body
Complete document JSON following the Autype document schema. Must include document (with type) and sections. May also include variables, defaults, abbreviations, citations, footnotes, and style — all at the same level inside this object. The output format is determined by the document.type field (pdf, docx, or odt). Variable placeholders can use either {{varName}} or ${varName} syntax — both are accepted on input. See the Document JSON Syntax docs for the full schema reference.
Show child attributes
Show child attributes
{
"document": { "type": "pdf", "size": "A4" },
"variables": { "companyName": "Acme Inc" },
"sections": [
{
"id": "section-1",
"type": "flow",
"content": [
{
"type": "h1",
"text": "Hello {{companyName}}"
},
{
"type": "text",
"text": "This is a paragraph."
}
]
}
]
}
PDF output profile. Only valid for PDF output. PDF/A and PDF/UA profiles flatten interactive form fields to preserve the selected profile.
standard, pdfa-1b, pdfa-2b, pdfa-3b, pdfua-1 Optional webhook configuration. Receives a POST when the job completes or fails.
Show child attributes
Show child attributes
