---
title: "POST /customers/{customerId}/document-templates/{templateId}/versions/{versionId}/finalize"
method: POST
path: "/customers/{customerId}/document-templates/{templateId}/versions/{versionId}/finalize"
tags: ["Document Platform"]
---

# POST /customers/{customerId}/document-templates/{templateId}/versions/{versionId}/finalize

`POST /customers/{customerId}/document-templates/{templateId}/versions/{versionId}/finalize`

## Request

- Base URL: `http://localhost:9000`
- URL: `http://localhost:9000/customers/{customerId}/document-templates/{templateId}/versions/{versionId}/finalize`
- Auth: API key in header `x-api-key`

Pin and validate the uploaded file, then detect its fields; the version then waits for policy confirmation. Idempotent; a check or detection that failed or timed out returns 503 and can be retried.

## Path parameters

- `customerId` string, uuid, required
- `templateId` string, uuid, required
- `versionId` string, uuid, required

## Response `200`

Default Response

- object
  - `templateId` string, uuid, required
  - `versionId` string, uuid, required
  - `state` 'pending' | 'validated' | 'rejected' | 'live', required
  - `format` 'pptx' | 'docx' | 'xlsx', required
  - `filename` string, required
  - `sizeBytes` integer
  - `rejectionReason` 'unsupported_format' | 'macro_enabled' | 'encrypted' | 'malformed' | 'external_relationship' | 'unsafe_xml' | 'too_large' | 'parse_limit' | 'unsupported_content' | 'no_fields' | 'too_many_fields' | 'repeat_marker'
  - `manifest` object
    - `templateId` string, uuid, required
    - `versionId` string, uuid, required
    - `format` 'pptx' | 'docx' | 'xlsx', required
    - `policyRevision` integer, required
    - `fields` object[], required
      - `fieldId` string, required
      - `placeholder` object, required
        - `syntax` 'bracket' | 'brace', required
        - `text` string, required
        - `name` string, required
      - `location` union, required
        - object
          - `format` 'pptx', required
          - `slide` integer, required
          - `shapeId` integer, required
          - `tableCell` object
            - `row` integer, required
            - `column` integer, required
          - `paragraph` integer, required
          - `occurrence` integer, required
          - `box` object
            - `left` integer, required
            - `top` integer, required
            - `right` integer, required
            - `bottom` integer, required
        - object
          - `format` 'docx', required
          - `part` string, required
          - `paragraph` integer, required
          - `tableCell` object
            - `table` integer, required
            - `row` integer, required
            - `column` integer, required
          - `occurrence` integer, required
        - object
          - `format` 'xlsx', required
          - `sheet` string, required
          - `cell` string, required
          - `occurrence` integer, required
      - `label` string, required
      - `surroundingText` object, required
        - `before` string, required
        - `after` string, required
      - `valueType` 'text' | 'number' | 'date' | 'image', required
      - `sourcePolicy` 'documents' | 'user_only' | 'leave_blank', required
      - `repeatGroupId` string
    - `repeatGroups` object[]
      - `groupId` string, required
      - `name` string, required
      - `scope` union, required
        - object
          - `format` 'pptx', required
          - `slide` integer, required
        - object
          - `format` 'docx', required
          - `part` string, required
          - `unit` 'paragraphs' | 'table_rows', required
          - `firstParagraph` integer, required
          - `lastParagraph` integer, required
        - object
          - `format` 'xlsx', required
          - `sheet` string, required
          - `firstRow` integer, required
          - `lastRow` integer, required
  - `unsupported` object[]
    - `reason` 'chart' | 'diagram' | 'embedded_object' | 'layout' | 'field_code' | 'unsupported_shape' | 'text_box' | 'merged_cell' | 'tracked_change' | 'content_control' | 'note' | 'comment' | 'table_header' | 'table_total' | 'pivot_table' | 'header_footer' | 'shape' | 'image_placement', required
    - `part` string, required
    - `slide` integer
    - `sheet` string
    - `cell` string
    - `placeholder` string
  - `policiesConfirmedAt` string, date-time
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: Bad Request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `500`: Internal Server Error

## Changes

- **2026-10-22** `2ff7624a8117`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/findable/apis/findable-api/changes/customers/:customerId/document-templates/:templateId/versions/:versionId/finalize/post.md)

---

[API](https://skmtc.dev/findable/apis/findable-api.md) · [All operations](https://skmtc.dev/findable/apis/findable-api/llms.txt) · [OpenAPI document](https://skmtc.dev/findable/apis/findable-api/revisions/e6c9ecac41bb?raw)
