Developer resources
API Documentation
Everything you need to integrate PutForm into your own apps — create forms, collect responses, and manage submissions with a simple REST API.
iOverview
The PutForm API lets you manage forms programmatically. All endpoints use JSON over HTTP, require an API key, and return structured responses that are easy to consume from any language.
Quick links
🔐Authentication
Every Forms API request must include your API key in the X-API-KEY request header.
The public Submit Response endpoint is the exception and does not require a key.
X-API-KEY: gf_live_xxxxxxxxxxxxxxxxx
📦Data Models
The main response model returned by every Forms API endpoint. Each field's Java type is shown alongside the field name.
FormResponse Root object
{
"id": "UUID",
"ownerId": "Long",
"title": "String",
"description": "String",
"status": "FormStatus (ENUM)",
"plan": "FormPlan (ENUM)",
"responseLimit": "Long",
"fillingAmount": "BigDecimal",
"totalCollectionAmount": "BigDecimal",
"questions": [
{
"id": "UUID",
"formId": "UUID",
"question": "String",
"type": "QuestionType (ENUM)",
"required": "Boolean",
"questionOrder": "Integer",
"configuration": {}
}
],
"expiresAt": "ISO-8601 LocalDateTime",
"createdAt": "ISO-8601 LocalDateTime",
"updatedAt": "ISO-8601 LocalDateTime"
}
Form fields
id
UUID
Unique identifier for the form. Used in all URL paths and query parameters.
ownerId
Long
ID of the user who owns the form.
title
String
Form title. Required. Maximum 200 characters.
description
String
Optional form description. Maximum 1000 characters.
status
FormStatus
Current lifecycle state.
plan
FormPlan
Pricing plan for the form.
responseLimit
Long
Maximum number of responses accepted. null means unlimited.
fillingAmount
BigDecimal
Amount charged per response. 0.00 for free forms.
totalCollectionAmount
BigDecimal
Running total of all paid responses. Computed by the backend.
expiresAt
LocalDateTime
ISO-8601 timestamp when the form stops accepting responses. null for no expiry.
createdAt
LocalDateTime
ISO-8601 timestamp when the form was created.
updatedAt
LocalDateTime
ISO-8601 timestamp of the last modification.
Question Nested object
id
UUID
Unique identifier for the question.
formId
UUID
ID of the parent form this question belongs to.
question
String
Question text shown to respondents. Required. Maximum 500 characters.
type
QuestionType
Input type of the question.
required
Boolean
true if respondents must answer this question to submit.
questionOrder
Integer
Display position of the question, starting from 1.
configuration
Map<String,Object>
Type-specific settings. For choice-based questions this contains an options array, e.g.
{ "options": ["Yes", "No"] }. Empty object for free-text questions.
2026-12-31T23:59:59) in the server's local timezone. All IDs are UUIDs in canonical xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx format.
01Create Form
Creates a new form owned by the API key owner.
02Get My Forms
Returns all forms associated with the API key owner.
03Get Form
Returns a specific form by its ID.
04Update Form
Updates an existing form. You can modify the form's details and its full question list in one request.
05Publish Form
Publishes a form so respondents can start submitting responses.
06Close Form
Closes a form. Respondents can no longer submit responses.
07Archive Form
Archives a form. Archived forms can no longer be edited or accept responses.
08Delete Form
Permanently deletes a form and all of its responses.
09Submit Response
Submits a respondent's answer to a published form. This is the only public endpoint in the API — it does not require an API key, since it is called from the form's public URL by respondents.
X-API-KEY. The server rejects submissions to forms that are not in
PUBLISHED status, that have expired, or that have reached their
responseLimit — each returns a 4xx error.
⚠Error Responses
The API returns standard HTTP status codes along with a JSON error body.
Put