π§ͺ Beta Feature β Email [email protected] to request access.
Quick Start
Email [email protected] to enable API access
Go to Settings β Developer β API Keys
Click Create API Key, name it, set permissions and save the key (shown once)
Make requests with `Authorization: Bearer YOUR_API_KEY`
Managing API Keys
Create a Key
1. Go to Settings β Integrations β API Keys β Create API Key
2. Name it descriptively (e.g., "Production Dashboard")
3. Select a Default User β API requests will be executed as this user
4. Choose Permissions β select which resources the key can access:
Permissions | Grants access to |
read:projects | /v1/projects, /v1/projects/{projectId}, /v1/projects/{projectId}/requirements |
read:content | /v1/content, /v1/content/{id}/usage |
read:teams | /v1/teams |
At least one permission is required. By default all permissions are selected.
β
5. Copy the key immediately β it is shown once as `autorfp_api_...`
β
Revoke a Key
Click Revoke next to the key. This cannot be undone.
Base URLs
Before making requests, ensure you match the base URL to your organization's region:
Region | API Base URL |
π AP | |
πΊπΈ US | |
πͺπΊ EU |
API Endpoints
Method | Endpoint | Description |
GET | /v1/projects | List projects (paginated, filterable) |
GET | /v1/projects/{projectId} | Get a single project summary |
GET | /v1/projects/{projectId}/requirements | List project requirements (paginated) |
GET | /v1/content | List content library entries (paginated, filterable) |
GET | /v1/content/{id}/usage | List content usage across projects (paginated) |
GET | /v1/teams | List teams (paginated) |
Pagination
All list endpoints share the same pagination pattern.
Query Parameters
Parameter | Type | Default | Description |
page[number] | integer |
| Page number (1-indexed) |
page[size] | integer |
| Items per page (1β100) |
Response Shape
Every paginated response follows the JSON:API format (application/vnd.api+json):
{
"data": [ ... ],
"meta": {
"page": {
"number": 1,
"size": 25,
"totalItems": 42,
"totalPages": 2
}
},
"links": {
"self": "https://api.autorfp.ai/v1/...",
"first": "https://api.autorfp.ai/v1/...?page[number]=1&page[size]=25",
"last": "https://api.autorfp.ai/v1/...?page[number]=2&page[size]=25",
"prev": null,
"next": "https://api.autorfp.ai/v1/...?page[number]=2&page[size]=25"
}
}
Use `links.next` to iterate through pages. When `links.next` is `null`, you have reached the last page.
β
GET /v1/projects
Returns a paginated list of projects accessible via the API key.
Query Parameters
Parameter | Type | Description |
page[number] | integer | Page number (default 1) |
page[size] | integer | Items per page, 1β100 (default 25) |
filter[createdAfter] | ISO 8601 datetime | Projects created after this date |
filter[createdBefore] | ISO 8601 datetime | Projects created before this date |
filter[dueAfter] | ISO 8601 datetime | Projects due after this date |
filter[dueBefore] | ISO 8601 datetime | Projects due before this date |
filter[status] | string | Comma-separated list of statuses. Allowed values: intake, inProgress, completed, shortlisted, overdue, lost, won, stopped |
Example Request
curl "https://api.autorfp.ai/v1/projects?filter[status]=inProgress,completed&page[size]=10"\
-H "Authorization: Bearer YOUR_API_KEY"
Example Response (200)
{
"data": [
{
"type": "projects",
"id": "1P8dFaQqUHERoliwbDv7",
"attributes": {
"name": "RFP Software",
"status": "inProgress",
"prospectName": "Software Solutions",
"projectType": "rfp",
"createdAt": "2026-01-21T14:10:23.016+10:00",
"dueDate": "2026-01-31T23:59:59.999+10:00",
"externalIds": {
"salesforceId": "0061x000005YkEAAA0",
"opportunityId": null,
},
}
}
],
"meta": {
"page": {
"number": 1,
"size": 10,
"totalItems": 1,
"totalPages": 1
}
},
"links": {
"self": "https://api.autorfp.ai/v1/projects?filter[status]=inProgress,completed&page[number]=1&page[size]=10",
"first": "https://api.autorfp.ai/v1/projects?filter[status]=inProgress,completed&page[number]=1&page[size]=10",,
"last": "https://api.autorfp.ai/v1/projects?filter[status]=inProgress,completed&page[number]=1&page[size]=10",,
"prev": null,
"next": null
}
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
GET /v1/projects/{projectId}
Returns detailed information about a single project including requirement summary counts.
β
Path Parameters
Parameter | Type | Description |
projectId | string | Required. The project ID |
Example Request
curl "https://api.autorfp.ai/v1/projects/1P8dFaQqUHERoliwbDv7" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response (200)
{
"data": {
"type": "projects",
"id": "1P8dFaQqUHERoliwbDv7",
"attributes": {
"name": "RFP Software",
"issuer": "Software Solutions",
"status": "inProgress",
"createdAt": "2026-01-21T14:10:23.016+10:00",
"dueDate": "2026-01-31T23:59:59.999+10:00",
"summary": {
"requirementsCount": 65,
"approvedCount": 0,
"submittedCount": 0
}
}
}
}
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
404 | Project not found |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
GET /v1/projects/{projectId}/requirements
Returns a paginated list of requirements within a project.
Path Parameters
Parameter | Type | Description |
projectId | string | Required. The project ID |
Query Parameters
Parameter | Type | Description |
page[number] | integer | Page number (default 1) |
page[size] | integer | Items per page, 1β100 (default 25) |
Example Request
curl "https://api.autorfp.ai/v1/projects/1P8dFaQqUHERoliwbDv7/requirements?page[size]=1" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response (200)
{
"data": [
"type": "requirements",
"id": "req_abc123",
"attributes": {
"status": "approved",
"editorTeamIds": ["team_1", "team_2"],
"reviewerTeamIds": ["team_3"],
"editPercentage": 0.15
}
],
"meta": {
"page": {
"number": 1,
"size": 1,
"totalItems": 10,
"totalPages": 10,
},
},
"links": {
"self": "https://api.autorfp.ai/v1/projects/1P8dFaQqUHERoliwbDv7/requirements?page[number]=1&page[size]=1",
"last": "https://api.autorfp.ai/v1/projects/1P8dFaQqUHERoliwbDv7/requirements?page[number]=10&page[size]=1",
"prev": null,
"next": "https://api.autorfp.ai/v1/projects/1P8dFaQqUHERoliwbDv7/requirements?page[number]=2&page[size]=50"
}
}
Response Fields
Field | Type | Description |
status | string | drafted, assigned, submittedForReview or approved |
editorTeamIds | string[] | Team IDs derived from assigned editors |
reviewerTeamIds | string[] | Team IDs derived from assigned reviewers |
editPercentage | number | null | Edit percentage as a 0β1 value, null if no metrics available |
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
404 | Project not found |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
GET /v1/content
Returns a paginated list of content library entries accessible via the API key.
Query Parameters
Parameter | Type | Description |
page[number] | integer | Page number (default 1) |
page[size] | integer | Items per page, 1β100 (default 25) |
filter[tag] | string | Tag label to filter by |
filter[updatedAfter] | ISO 8601 datetime | Content updated after this date |
filter[updatedBefore] | ISO 8601 datetime | Content updated before this date |
Example Request
curl "https://api.autorfp.ai/v1/content?filter[tag]=Security&page[size]=10" \
-H "Authorization: Bearer YOUR_API_KEY"
Example Response (200)
{
"data": [
{
"type": "content",
"id": "content_789",
"attributes": {
"title": "How does your platform handle data encryption at rest?",
"tags": ["Security", "Compliance"],
"teamOwnerIds": ["team_1"],
"createdAt": "2025-06-15T09:30:00.000Z",
"updatedAt": "2026-02-10T14:22:00.000Z",
"reviewedAt": "2026-01-05T11:00:00.000Z",
"projectUsageCount": 12
}
}
],
"meta": {
"page": { "number": 1, "size": 10, "totalItems": 1, "totalPages": 1 }
},
"links": {
"self": "https://api.autorfp.ai/v1/content?filter[tag]=Security&page[number]=1&page[size]=10",
"first": "https://api.autorfp.ai/v1/content?filter[tag]=Security&page[number]=1&page[size]=10",
"last": "https://api.autorfp.ai/v1/content?filter[tag]=Security&page[number]=1&page[size]=10",
"prev": null,
"next": null
Response Fields
Field | Type | Description |
title | string | null | Title of the content item |
tags | string[] | Content item tag labels |
teamOwnerIds | string[] | IDs of teams that own this content |
createdAt | string | ISO 8601 datetime when created |
updatedAt | string | null | ISO 8601 datetime when updated |
reviewedAt | string | null | ISO 8601 datetime when reviewed |
projectUsageCount | number | Number of distinct projects this content has been used in |
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
GET /v1/content/{id}/usage
Returns a paginated list of usage records showing where a content library entry has been used across projects.
Path Parameters
Parameter | Type | Definition |
id | string | Required. The content entry ID |
β
Query Parameters
Parameter | Type | Description |
page[number] | integer | Page number (default 1) |
page[size] | integer | Items per page, 1β100 (default 25) |
β
Example Request
curl "https://api.autorfp.ai/v1/content/content_789/usage
-H "Authorization: Bearer YOUR_API_KEY"
Example Response (200)
{
"data": [
{
"type": "content-usage",
"id": "resp_abc123",
"attributes": {
"projectId": "1P8dFaQqUHERoliwbDv7",
"requirementId": "resp_abc123",
"usageType": "verbatim"
}
},
{
"type": "content-usage",
"id": "resp_def456",
"attributes": {
"projectId": "2Q9eFbRrVIFSpmjxcEw8",
"requirementId": "resp_def456",
"usageType": "ai_generation"
}
}
],
"meta": {
"page": { "number": 1, "size": 25, "totalItems": 2, "totalPages": 1 }
},
"links": {
"self": "https://api.autorfp.ai/v1/content/cnt_xyz789/usage?page[number]=1&page[size]=25",
"first": "https://api.autorfp.ai/v1/content/cnt_xyz789/usage?page[number]=1&page[size]=25",
"last": "https://api.autorfp.ai/v1/content/cnt_xyz789/usage?page[number]=1&page[size]=25",
"prev": null,
"next": null
}
} β
Response Fields
Field | Type | Description |
projectId | string | ID of the project where the content was used |
requirementId | string | ID of the requirement (response ID) |
usageType | string | verbatim or ai_generation |
β
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
404 | Content not found |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
β
GET /v1/teams
Returns a paginated list of teams accessible via the API key.
Query Parameters
Parameter | Type | Description |
page[number] | integer | Page number (default 1) |
page[size] | integer | Items per page, 1β100 (default 25) |
β
Example Request
curl "https://api.autorfp.ai/v1/teams" \
-H "Authorization: Bearer YOUR_API_KEY"
β
Example Response (200)
{
"data": [
{
"type": "teams",
"id": "team_1",
"attributes": {
"name": "Engineering",
}
},
{
"type": "teams",
"id": "team_2",
"attributes": {
"name": "Legal & Compliance",
}
}
],
"meta": {
"page": { "number": 1, "size": 25, "totalItems": 2, "totalPages": 1 }
},
"links": {
"self": "https://api.autorfp.ai/v1/teams?page[number]=1&page[size]=25",
"first": "https://api.autorfp.ai/v1/teams?page[number]=1&page[size]=25",
"last": "https://api.autorfp.ai/v1/teams?page[number]=1&page[size]=25",
"prev" null,
"next": null
}
}β
Errors
Status | Description |
400 | Invalid query parameters |
401 | Unauthorized β invalid or revoked API key |
403 | Insufficient permissions |
429 | Rate limit exceeded (100 req/min) |
500 | Internal server error β retry |
β
Security
Store keys in environment variables or a secrets manager
Never commit keys to version control
Use separate keys per application
Rotate keys quarterly
β
Rate Limits
100 requests per minute per API key
Returns `429 Too Many Requests` if exceeded
β
Troubleshooting
401 Unauthorized
Verify the full API key was copied (including the `autorfp_api_` prefix)
Check the key has not been revoked at Settings β Integrations β API Keys
403 Forbidden
Your API key does not have the required permission for the endpoint you are calling
Check which permissions were assigned when the key was created at Settings β Integrations β API Keys
To access additional endpoints, create a new key with the needed permissions
404 Not Found
Verify the resource ID from the URL
Confirm you have access to the resourceβ
429 Rate Limit
Reduce request frequency
Cache responses where possible
Use multiple API keys to distribute load
Lost API Key
Cannot retrieve lost keys β revoke the old key and create a new one.
β
β
Need help? Contact [email protected]