---
title: "Fill many rows → ZIP (async job; up to 1000 rows). Each row that becomes a new PDF costs 1 plan credit (test keys: 0; a refused row: 0; a row repeating a PDF already made this month: 0, with `replay_of` in the manifest). A retry with the same Idempotency-Key header returns the first job. Send the rows as `row` (or the older `rows`)."
method: POST
path: "/api/v1/engine/batch/{id}"
tags: ["Automation"]
---

# Fill many rows → ZIP (async job; up to 1000 rows). Each row that becomes a new PDF costs 1 plan credit (test keys: 0; a refused row: 0; a row repeating a PDF already made this month: 0, with \`replay_of\` in the manifest). A retry with the same Idempotency-Key header returns the first job. Send the rows as \`row\` (or the older \`rows\`).

`POST /api/v1/engine/batch/{id}`

## Request

- Base URL: `https://philforms.com`
- URL: `https://philforms.com/api/v1/engine/batch/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `row` object[]
  - `rows` object[]: Older name for `row`
  - `webhook_url` string
  - `file_name_field` string: Parameter whose value names each PDF

## Response `200`

Idempotent replay: { job, poll }

## Other responses

- `202`: { job, poll }
- `400`: Bad rows or webhook_url
- `404`: Unknown form
- `422`: Idempotency-Key reused with a different body

---

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