How to Get Started with the FormRobin API

The FormRobin REST API lets you manage forms and read submissions from your own code. Create a token under Settings → API and call https://formrobin.com/api/v1.

What Is the FormRobin API?

The FormRobin API is a JSON REST API. With it you can:

  • Create, list, update and delete forms
  • Read a form's sessions: submitted answers plus source and device details
  • Check which account a token belongs to

Plan requirement: the API is available on both plans, Free Plan and Individual Plan.

What is the API base URL?

https://formrobin.com/api/v1/

The login endpoint is https://formrobin.com/api/jwt/login.

How does authentication work?

Every request needs a Bearer token. The simplest way to get one:

  1. Open the account menu in the top right, click Settings, then API.
  2. In Personal Access Tokens, click Create New Token, enter a Token Name and click Create Token.
  3. Copy the token from the yellow banner (it is shown only once) and send it in the Authorization header.

FormRobin API Settings showing Personal Access Tokens section

Tokens last one year. The API Authentication Guide covers the login endpoint, OAuth clients and token management.

Quick Start Example

Step 1: Get Your Access Token

Create a Personal Access Token as above, or log in with your email and password:

POST https://formrobin.com/api/jwt/login
Content-Type: application/json

{ "email": "your-email@example.com", "password": "your-password" }
{
  "access": "your-token-here",
  "token_type": "bearer",
  "expires_in": 31536000
}

Step 2: Make an API Request

GET https://formrobin.com/api/v1/forms
Authorization: Bearer your-token-here
{
  "data": [
    {
      "id": 123,
      "name": "Contact Form",
      "folder_id": 42,
      "email_notifications_enabled": true,
      "url": "https://formrobin.com/f/j50q4kw",
      "redirect_url": null,
      "webhook_url": null,
      "created_at": "2026-01-15T10:30:00.000000Z",
      "updated_at": "2026-01-15T10:30:00.000000Z"
    }
  ],
  "links": { ... },
  "meta": { ... }
}

Which endpoints are available?

User Endpoints

  • GET /api/v1/me - the account the token belongs to

Form Endpoints

Request What it does
GET /api/v1/forms List your forms (100 per page, newest first)
POST /api/v1/forms Create a form
GET /api/v1/forms/{id} Get one form
PUT /api/v1/forms/{id} Update a form
DELETE /api/v1/forms/{id} Delete a form
GET /api/v1/forms/{id}/sessions A form's sessions (add ?completed=true for submissions only)

Details and examples: Creating Forms via API.

Getting Current User Information

GET https://formrobin.com/api/v1/me
Authorization: Bearer your-token-here
{
  "data": {
    "id": 1,
    "name": "Jane Doe",
    "email": "jane@example.com",
    "created_at": "2026-01-01T00:00:00.000000Z",
    "updated_at": "2026-01-15T10:30:00.000000Z"
  }
}

Use it to check that a token works and which account it belongs to.

Getting Form Submissions

A session is created when someone opens a form and completed when they submit it. To get submissions only, add ?completed=true:

GET https://formrobin.com/api/v1/forms/123/sessions?completed=true
Authorization: Bearer your-token-here
{
  "data": [
    {
      "id": 456,
      "form_id": 123,
      "form_field_responses": [
        { "id": 789, "form_session_id": 456, "form_field_id": 10,
          "form_field_label": "Email", "value": "user@example.com" }
      ],
      "completed_at": "2026-01-15T12:34:56.000000Z",
      "utm_source": "google", "utm_medium": "cpc", "utm_campaign": null,
      "utm_term": null, "utm_content": null,
      "referrer_url": "https://example.com/blog",
      "landing_page_url": "https://formrobin.com/f/j50q4kw?utm_source=google&utm_medium=cpc",
      "device_type": "desktop", "browser_name": "Chrome", "browser_version": "120.0",
      "operating_system": "Windows", "ip_address": "203.0.113.7",
      "created_at": "2026-01-15T12:30:02.000000Z", "updated_at": "2026-01-15T12:34:56.000000Z"
    }
  ],
  "links": { ... },
  "meta": { ... }
}

Form Session Field Descriptions

  • id: session ID (integer)
  • form_id: the form's ID
  • form_field_responses: one object per answered question — form_field_id, form_field_label (the question label as entered in the editor, which can include formatting tags) and value (a string, or an array for questions with several selected options)
  • completed_at: when the form was submitted (null for a visit without a submission)
  • utm_source, utm_medium, utm_campaign, utm_term, utm_content: UTM parameters from the URL the form was opened with
  • referrer_url: the page the visitor came from, when their browser sent it
  • landing_page_url: the full URL the form was loaded from
  • device_type, browser_name, browser_version, operating_system: the visitor's device and browser
  • ip_address: the visitor's IP address
  • created_at: when the form was opened; updated_at: last change

Common Request Headers

  • Authorization: Bearer your-token - required on every endpoint except the login endpoint
  • Content-Type: application/json - for POST and PUT bodies
  • Accept: application/json - optional; the API answers in JSON

Response Format

Successful Response

Single objects and lists are wrapped in "data". Lists also include "links" (first, last, prev, next) and "meta" (current_page, per_page, total and more).

Error Response

{
  "message": "The name field is required.",
  "errors": {
    "name": ["The name field is required."]
  }
}

HTTP Status Codes

  • 200 OK - request successful
  • 201 Created - form created
  • 204 No Content - form deleted
  • 401 Unauthorized - missing, expired or deleted token ({"message": "Unauthenticated."})
  • 403 Forbidden - you do not have access to that form
  • 404 Not Found - no form with that ID
  • 422 Unprocessable Entity - validation errors (see errors)
  • 429 Too Many Requests - rate limit reached

How does pagination work?

List endpoints return 100 items per page. Add ?page=2 (or follow links.next) for the next page; meta.total gives the number of items.

Is there a rate limit?

The API allows 60 requests per minute per user (per IP address for requests without a valid token). Over the limit you receive HTTP 429; wait for the next minute and retry with exponential backoff.

API Troubleshooting

401 Unauthorized

  • Send the header as Authorization: Bearer your-token.
  • Tokens expire after one year and stop working when deleted. Create a new one under Settings → API (see API Authentication Guide).

422 validation error

  • Read the errors object: it names each field that failed and why.

Sessions have no answers

  • Without ?completed=true the list includes visits where nobody submitted the form. Add ?completed=true to get submissions only (see Creating Forms via API).

Still stuck? Contact support at support@formrobin.com with the endpoint, the status code and the response body (never your token).

FAQ

Is the API available on the Free Plan?

Yes. The API is available on both plans, Free Plan and Individual Plan.

How long do tokens last?

One year. After that, create a new Personal Access Token or log in again.

Can I call the API from a browser?

Keep API calls on your server. A token in browser code is visible to anyone who opens the page, and it gives full access to your forms.

What is the difference between the API and webhooks?

With the API you pull data by making requests. Webhooks push each new submission to your URL as it happens; they need the Individual Plan (see Setting Up Webhooks).