Skip to main content

AutoRFP.ai API

Written by Jayde Boardman
Updated over 2 weeks ago

Quick Start

  1. Go to Settings → Developer → API Keys within AutoRFP.ai

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

  3. Make requests with `Authorization: Bearer YOUR_API_KEY`

Managing API Keys

Create a Key

1. Go to Settings → Developer → 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

projects

/v1/projects, /v1/projects/{projectId}, /v1/projects/{projectId}/requirements

content

/v1/content, /v1/content/{id}/usage

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:

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 → Developer → 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 → Developer → 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?