API Keys
Create and manage API keys for programmatic access. Requires owner or admin role.
Security Restrictions
For security, the following actions are not available via API keys and require dashboard session authentication:
| Restricted Action | Reason |
|---|---|
| SMTP / Email settings | Credentials exposure risk |
| Billing / Plan changes | Financial actions require dashboard |
| Organization settings | Org-level changes too risky via API |
| Team invites & management | Prevents unauthorized access escalation |
| File uploads | Prevents abuse as free file hosting |
| Admin endpoints | Platform admin is session-only |
/v1/api-keysList all API keys for your organization.
curl "https://proforms.io/api/v1/api-keys" \
-H "Authorization: Bearer pf_your_api_key"{
"success": true,
"data": {
"keys": [
{
"id": "key_abc123",
"name": "Production Key",
"keyPrefix": "pf_a1b2c3d",
"permissions": [
"forms.view",
"submissions.view"
],
"rateLimitPerMin": 60,
"lastUsedAt": "2026-02-20T10:00:00.000Z",
"expiresAt": null,
"isRevoked": false,
"createdBy": {
"name": "John Doe",
"email": "john@example.com"
},
"createdAt": "2026-01-15T09:00:00.000Z"
}
]
}
}/v1/api-keysCreate a new API key. The secret key is only returned once â store it securely.
secretKey) is only returned on creation and cannot be retrieved later.Request Body
name*stringKey name (max 255 chars)
permissionsstring[]Permissions array. Omit for full API access (excludes restricted actions above). Cannot include settings.email, settings.billing, settings.org, team.invite, or team.manage.
expiresInDaysnumberAuto-expire after N days. Omit for no expiry.
curl -X POST "https://proforms.io/api/v1/api-keys" \
-H "Authorization: Bearer session_token" \
-H "Content-Type: application/json" \
-d '{
"name": "CI/CD Pipeline",
"permissions": ["forms.view", "submissions.view", "submissions.export"],
"expiresInDays": 90
}'{
"success": true,
"data": {
"key": {
"id": "key_new123",
"name": "CI/CD Pipeline",
"secretKey": "pf_a1b2c3d4e5f6...full_key_here",
"keyPrefix": "pf_a1b2c3d",
"permissions": [
"forms.view",
"submissions.view",
"submissions.export"
],
"rateLimitPerMin": 300,
"expiresAt": "2026-05-23T09:00:00.000Z",
"createdAt": "2026-02-22T09:00:00.000Z"
}
}
}/v1/api-keys/:idGet details of a specific API key. Does not return the secret.
curl "https://proforms.io/api/v1/api-keys/key_abc123" \
-H "Authorization: Bearer pf_your_api_key"/v1/api-keys/:idUpdate an API key's name, permissions, or rate limit.
namestringNew key name
permissionsstring[]Updated permissions. Restricted permissions (email, billing, team management) are not allowed.
curl -X PUT "https://proforms.io/api/v1/api-keys/key_abc123" \
-H "Authorization: Bearer pf_your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Renamed Key",
"permissions": ["forms.view"]
}'/v1/api-keys/:idRevoke an API key. Revoked keys immediately stop working. Call again with ?permanent=true on an already-revoked key to permanently delete it.
curl -X DELETE "https://proforms.io/api/v1/api-keys/key_abc123" \
-H "Authorization: Bearer pf_your_api_key"{
"success": true,
"data": {
"message": "API key revoked"
}
}