Skip to main content
Use the pull API to sync submissions into your own platform: an admin panel, a CRM, a reporting job. Requests are authenticated with a read-only API key and run server to server.

Create an API key

  1. Open Dashboard → Settings → API Keys and click Create Key.
  2. Name the key and select the forms it can read. A key can only read the forms you select.
  3. Copy the key. It starts with osf_live_ and is shown once. OSForms stores only a hash of it.
To pick a form, pass its endpoint slug as formId. That’s the last part of your submission endpoint: for https://osforms.com/api/v1/f/UNKMzY8jm18x the slug is UNKMzY8jm18x. The form’s internal ID (from the dashboard URL /dashboard/forms/{id}) works too.
Keep the key on your server, for example in OSFORMS_API_KEY in your environment. Never ship it to the browser. The pull API doesn’t send CORS headers, so browser requests from other origins are blocked anyway.
API keys are read-only. They can’t create, edit, or delete anything, and the dashboard endpoints don’t accept them. To revoke a key, click Revoke in Settings. It stops working immediately.

List submissions

  • id is stable. Use it as the foreign key when you attach your own data (status, notes, assignments) to a submission.
  • fields holds exactly what the form submitted. Uploaded files are not stored, so a file field holds a placeholder string like [File: cv.pdf, 48213 bytes].
  • IP address, user agent, and origin are never returned.
Pass nextCursor back as cursor to get the next page. When hasMore is false, nextCursor is null and you’ve reached the end. Cursors stay valid while new submissions arrive, so paging never skips or repeats rows.

Return only some fields

If your platform shouldn’t hold contact details, ask only for the fields it displays:
The other fields never leave OSForms.

Get one submission

Accepts the same fields parameter. Returns { "data": { ...submission } }, or 404 if the submission doesn’t exist or belongs to a form the key can’t read.

Sync new submissions

To keep your copy up to date, remember the newest submittedAt you’ve stored and ask for everything from that point, oldest first:
since is inclusive, so the last submission from the previous run comes back again. Upsert by id and the duplicate is harmless.

Rate limits

Each API key can make 60 requests per minute. Every response includes: Over the limit, you get 429 with a Retry-After header in seconds. Pulling submissions doesn’t count toward your monthly submission limit.

Errors