---
title: "Run a recipe → a batch job (ZIP + webhook). ?dry=1 lists mapped_column, unmapped_column, unfed_parameter and row_count without filling. Deterministic: the same rows on the same day (or the same as_of) make byte-identical PDFs."
method: POST
path: "/api/v1/recipes/{id}/run"
tags: ["Automation"]
---

# Run a recipe → a batch job (ZIP + webhook). ?dry=1 lists mapped_column, unmapped_column, unfed_parameter and row_count without filling. Deterministic: the same rows on the same day (or the same as_of) make byte-identical PDFs.

`POST /api/v1/recipes/{id}/run`

## Request

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

## Path parameters

- `id` string, required

## Query parameters

- `dry` '1'

## Request body

- object
  - `row` object[]: Rows for this run instead of the source
  - `csv` string: CSV text for this run instead of the source
  - `as_of` string

## Response `200`

Dry run: { is_dry_run, mapped_column, joined_column, unmapped_column, constant_parameter, unfed_parameter, row_count, mapping_source }

## Other responses

- `202`: { job, poll, issued_at, mapped_column, unmapped_column, … }
- `400`: No rows, bad rows, or the source answered badly
- `402`: Plan does not allow this form yet
- `404`: No such recipe

---

[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)
