Skip to main content

AutoRFP.ai API

Written by Jayde Boardman
Updated this week

πŸ§ͺ Beta Feature β€” Email [email protected] to request access.

Quick Start

  1. Email [email protected] to enable API access

  2. Go to Settings β†’ Developer β†’ API Keys

  3. Click Create API Key, name it, set permissions and save the key (shown once)

  4. 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

1

Page number (1-indexed)

page[size]

integer

25

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]

Did this answer your question?