# Create Template from File Upload This asynchronous endpoint allows users to create a new template by uploading a file. The uploaded file is processed in the background to generate the template. The maximum allowable file size for upload is 100 MB. Field tags and form fields are not supported yet. Once the file is uploaded, the processing will happen asynchronously, and users need to check [the status of the template](https://developers.pandadoc.com/reference/template-status) creation. # OpenAPI definition ```json { "openapi": "3.0.3", "info": { "title": "PandaDoc Public API", "description": "PandaDoc API spans a broad range of functionality to help you build incredible documents automation experiences inside your product.\n\nPandaDoc API is organized around REST. Our API has predictable resource-oriented URLs and uses standard HTTP response codes, authentication, and verbs.\n\n## Getting started\n\nYou can start testing PandaDoc API with a sandbox key on our [Enterprise](https://www.pandadoc.com/pricing/) plan, either active or in trial.\n\nGenerate your [sandbox key](https://developers.pandadoc.com/reference/sandbox-key) on the Developer Dashboard with predefined [rate limits](https://developers.pandadoc.com/reference/limits). Or contact our solutions expert if you work with high-transaction volumes.\n\n## Guides\n\nIf you’re just getting started with PandaDoc, you may want to jump straight into one of our [getting started guides](https://developers.pandadoc.com/docs/getting-started) for the feature you’re most interested in, whether that’s:\n\n- [Create from template](https://developers.pandadoc.com/docs/create-send-document),\n- [Upload and send a local PDF](https://developers.pandadoc.com/docs/upload-and-send-a-local-pdf),\n- or [Listening for changes in document status](https://developers.pandadoc.com/docs/listen-document-status-changes).\n\nWe also recommend you to discover our dynamic content generation on a fly: [Create from a template with content placeholder](https://developers.pandadoc.com/docs/create-with-content-placeholders-from-template).\n", "termsOfService": "https://www.pandadoc.com/master-services-agreement/", "contact": { "name": "PandaDoc API Support", "url": "https://developers.pandadoc.com/", "email": "api-track@pandadoc.com" }, "license": { "name": "MIT", "url": "https://github.com/PandaDoc/pandadoc-openapi-specification/blob/main/LICENSE" }, "version": "7.18.2" }, "servers": [ { "url": "https://api.pandadoc.com", "description": "Public API" } ], "security": [ { "apiKey": [] }, { "oauth2": [] } ], "tags": [ { "name": "Templates", "description": "Operations for managing templates, including listing, creating, and deleting templates." } ], "paths": { "/public/v1/templates?upload": { "post": { "tags": [ "Templates" ], "summary": "Create Template from File Upload", "operationId": "createTemplateWithUpload", "description": "This asynchronous endpoint allows users to create a new template by uploading a file.\n\nThe uploaded file is processed in the background to generate the template.\nThe maximum allowable file size for upload is 100 MB.\nField tags and form fields are not supported yet.\n\nOnce the file is uploaded, the processing will happen asynchronously, and users need to check [the status of the template](https://developers.pandadoc.com/reference/template-status) creation.\n", "parameters": [ { "name": "fields", "description": "A comma-separated list of additional fields to include in the response.", "in": "query", "schema": { "type": "array", "items": { "type": "string", "enum": [ "content_date_modified" ] } }, "style": "form", "explode": false, "example": [ "content_date_modified" ] } ], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateTemplateWithUploadRequest" } } } }, "responses": { "201": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TemplateCreateResponse" }, "examples": { "Create Template": { "value": { "id": "va9aNuj3uX2w9M7uytn967", "name": "Sample Template", "date_created": "2024-07-08T14:41:42.625906Z", "date_modified": "2024-07-08T14:41:42.700084Z", "version": "2" } } } } } }, "400": { "$ref": "#/components/responses/400ValidationError" }, "401": { "$ref": "#/components/responses/401" }, "429": { "$ref": "#/components/responses/429" } } } } }, "components": { "securitySchemes": { "apiKey": { "type": "apiKey", "name": "Authorization", "in": "header", "description": "The `Authorization` header must contain the API key. The value should be prefixed with `API-Key` followed by a space and the actual API key.\n", "x-default": "API-Key 3039ba033eb1410caa0a2227158d63c9d6502cd8" }, "oauth2": { "type": "oauth2", "flows": { "authorizationCode": { "authorizationUrl": "https://app.pandadoc.com/oauth2/authorize", "tokenUrl": "https://api.pandadoc.com/oauth2/access_token", "refreshUrl": "https://api.pandadoc.com/oauth2/access_token", "scopes": { "read+write": "Use `read+write` to create, send, delete, and download documents, and `read` to view templates and document details." } } }, "description": "Send the authenticating user to the PandaDoc OAuth2 request URL. We recommend a button or a link titled\n\"Connect to PandaDoc\" if you are connecting users from a custom application. Users will see the \"Authorize Application\" screen.\nWhen the user clicks \"Authorize\", PandaDoc redirects the user back to your site with an authorization code inside the URL.\n\nhttps://app.pandadoc.com/oauth2/authorize?client_id={client_id}&redirect_uri={redirect_uri}&scope=read+write&response_type=code\n\n`client_id` and `redirect_uri` values should match your application settings.\n" } }, "schemas": { "TemplateCreateResponse": { "type": "object", "properties": { "id": { "type": "string", "example": "iMymdDd9XFD3HyxP5VD67Q" }, "name": { "type": "string", "example": "Blank" }, "date_created": { "type": "string", "format": "date-time", "example": "2021-06-17T15:51:13.226974Z" }, "date_modified": { "type": "string", "format": "date-time", "example": "2021-06-17T15:51:13.326974Z" }, "version": { "type": "string", "example": "2" }, "content_date_modified": { "type": "string", "format": "date-time", "example": "2021-06-17T15:51:13.426974Z" } } }, "Tokens": { "type": "array", "description": "Create or initialize multiple CUSTOM variables with their values using tokens/values list. Template's predefined variables are read-only. Any attempts to do so will be ignored.", "items": { "type": "object", "properties": { "name": { "type": "string", "example": "Favorite.Pet" }, "value": { "type": "string", "example": "Panda" } }, "required": [ "name", "value" ] }, "example": [ { "name": "Favorite.Pet", "value": "Panda" } ] }, "CreateTemplateRequest": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the template.", "example": "Template name example" }, "folder_uuid": { "type": "string", "description": "The ID of the folder where the created template should be stored.", "example": "EE8yUNg5HztqVAuH85He8V" }, "owner": { "type": "object", "description": "You can set an owner of a template as an `email` or `membership_id`.", "properties": { "membership_id": { "type": "string", "example": "QMDSzwabfFzTgjW6KijHyu" }, "email": { "type": "string", "format": "email", "example": "john.doe@example.com" } } }, "metadata": { "type": "object", "nullable": true, "description": "You can pass arbitrary data in the key-value format to associate custom information with a template. This information is returned in any API requests for the template details by id.", "example": { "my_favorite_pet": "Panda" } }, "tokens": { "$ref": "#/components/schemas/Tokens" } } }, "CreateTemplateWithUploadRequest": { "type": "object", "properties": { "file": { "type": "string", "format": "binary", "description": "Binary PDF/DocX/RTF File." }, "data": { "allOf": [ { "$ref": "#/components/schemas/CreateTemplateRequest" }, { "description": "JSON as a multipart/form-data string." } ] } } } }, "responses": { "401": { "description": "Authentication error", "content": { "application/json": { "schema": { "properties": { "type": { "type": "string", "example": "authentication_error" }, "detail": { "type": "string", "example": "Authentication credentials were not provided." } } } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "properties": { "type": { "type": "string", "example": "throttled" }, "detail": { "type": "string", "example": "Request was throttled." } } } } } }, "400ValidationError": { "description": "Bad Request", "content": { "application/json": { "schema": { "properties": { "type": { "type": "string", "example": "validation_error" }, "detail": { "type": "object", "example": { "count": [ "A valid integer is required." ], "order_by": [ "value is not a valid choice." ] } } } } } } } } } } ```