---
name: fillfaster
description: |
  FillFaster is a PDF form automation platform. This skill helps any AI agent
  or LLM integrate with FillFaster's REST API: create submission links,
  collect signatures, receive webhooks, and generate filled PDFs.
  Always fetch the OpenAPI JSON for exact request/response shapes.
---

<!--
  FillFaster - public agent / LLM skill (plain markdown).
  Stable URL (production): https://help.fillfaster.com/fillfaster-api-skill.md
  You may fetch this file over HTTPS and cache it; always prefer the OpenAPI
  JSON below for exact request/response shapes (this file is workflow-level only).
-->

# FillFaster API - skill for agents and LLMs

## Purpose

This document helps **any autonomous agent or LLM** integrate with **FillFaster’s public HTTP API** without guessing endpoints. It describes **workflows and priorities** only. **All concrete paths, parameters, bodies, status codes, and schemas** must be taken from the **OpenAPI document** linked below.

## Freshness

Re-fetch this file and `fillfaster-openapi.json` at the start of each new
integration session. Do not rely on cached copies from AI training data or
previous sessions — API paths, field names, and event types may have changed.
The canonical live URL for this file is:
`https://help.fillfaster.com/fillfaster-api-skill.md`

## What FillFaster is

**FillFaster** is a **PDF form automation** product: template forms, **submission links** for recipients, signatures and data collection, **filled PDF** output, and automation via integrations (e.g. Make.com, monday.com) plus a **REST API** for your own software.

## Machine-readable contract (required)

- **OpenAPI 3 (canonical):** `https://help.fillfaster.com/fillfaster-openapi.json`
- **Rules:** Do **not** invent paths, query names, JSON fields, or enums. Resolve **operationId**, **tags**, **components.schemas**, and **servers** from that document (or from a checked-out copy of the same file).
- **Authentication:** Use the **security schemes** defined in the OpenAPI file (API token / Bearer as documented there). End-user documentation for creating tokens: `https://help.fillfaster.com/developers/create-api-token/` (human-oriented).

## Never do

- Do **not** invent API paths, query parameters, JSON field names, or enum
  values. Every name must be resolved from the OpenAPI document.
- Do **not** construct the base API URL from memory — always read the `servers`
  field in the OpenAPI JSON.
- Do **not** store the API token in client-side code, public repositories, or
  logs. Treat it as a password.
- Do **not** poll submission status in a tight loop — use webhooks. If webhooks
  are unavailable, apply exponential backoff and stop at terminal states.

## Human-friendly exploration (optional)

- **AI agents overview (help center):** `https://help.fillfaster.com/developers/ai-agents`
- **Interactive API reference (Scalar):** `https://help.fillfaster.com/developers/api`
- **Help center API guides:** `https://help.fillfaster.com/developers/`
- **Webhooks guide:** `https://help.fillfaster.com/developers/webhooks/`

## Integration preference: webhooks over polling

**Prefer webhooks** for submission lifecycle and completion: subscribe per **form** (see OpenAPI and the webhooks guide), expose a **reachable HTTPS endpoint**, validate and process push payloads, then **fetch the submission PDF** (or next step) when the webhook indicates the right state.

Use **polling** (e.g. repeated **get submission status** - exact name in OpenAPI) **only when webhooks are not viable** (no stable public URL, short-lived prototypes, or strict firewall rules). If you poll, use **sensible backoff** and stop at terminal states documented in the spec.

## Primary workflows (conceptual - verify in OpenAPI)

1. **Discover → configure → subscribe → submit → react → download**
   Identify the form → load field identifiers for prefill → **subscribe webhooks** for that form → **create submission** (recipient flow) → on **webhook delivery**, validate payload → **get submission PDF** (or other follow-up calls) when the event implies completion. Use polling only as a fallback (see above).

2. **Server-side PDF**
   With a known form id and **prefill** payload, call the **generate PDF** operation defined in OpenAPI; handle **binary PDF** responses vs documented errors, quotas, and permissions. (Typically synchronous; webhooks are less central here unless your flow chains into submissions.)

3. **Webhook operations**
   Confirm **subscribe** / **unsubscribe** paths, headers, and body fields in OpenAPI; align your handler with documented event types and retries/idempotency expectations from the help article.

## Example integration sequences (still verify in OpenAPI)

- **Single signer with link (webhook-first):** resolve **form** → **get form fields** → **subscribe webhook** → **create submission** → hand off submission URL → on **webhook** for completion (or equivalent event), **get submission PDF** - **avoid** tight polling loops unless webhooks are unavailable.
- **Bulk invites:** same field preparation and **webhook subscription** on the form → **bulk create submissions** or repeated **create submission** → correlate **submission id** from create responses with incoming **webhook** payloads → fetch PDFs when webhooks fire; poll status sparingly if a webhook is missed.
- **Headless document only:** align `prefill_data` with **get form fields** / schemas → **generate PDF** → stream or store the returned PDF bytes.

## Related

- **Interactive reference (Scalar):** `https://help.fillfaster.com/developers/api`
- **Developer guides on this site:** `https://help.fillfaster.com/developers/`

When in doubt, **re-fetch** `https://help.fillfaster.com/fillfaster-openapi.json` and base your integration on the current version field and paths in that file.
