API access

Integrate Strutter with your systems using the public REST API. Available on select plans.

The Strutter API lets you access your RFP data programmatically. Use it to integrate Strutter with your existing procurement workflows, reporting tools, or internal systems.

API access is available on select plans. See plans and pricing for details.

Getting started

Generate an API key

Only admin users can create and manage API keys. If you don't see the API Keys section in Settings, ask your organization's admin.

  1. Go to Settings in the sidebar
  2. Click API Keys
  3. Enter a name for your key (e.g., "Production" or "Analytics")
  4. Click Create Key
  5. Copy the key immediately. It will not be shown again.

Security

  • API keys are securely hashed before storage. Strutter never stores your raw key.
  • Each key tracks its last-used date for auditing.
  • Revoke compromised keys immediately from the API Keys settings page.
  • Deleted keys cannot be recovered. Create a new one if needed.

Authentication

All API requests require a Bearer token in the Authorization header:

bash
curl -H "Authorization: Bearer YOUR_API_KEY_HERE" \
  https://rfp.strutterai.com/api/v1/rfps

Invalid or missing keys return a 401 response. If your organization is not on a plan that includes API access, requests return a 403 response.

Endpoints

List RFPs

GET /api/v1/rfps

Returns a list of your organization's RFPs.

Query parameters:

ParameterTypeDefaultDescription
limitinteger25Results per page (1 to 100)
offsetinteger0Number of results to skip

Response fields:

FieldTypeDescription
idstringRFP identifier
titlestringRFP title
descriptionstringRFP description
statusstringDRAFT, OPEN, CLOSED, or AWARDED
typestringRFP type
deadlinestringDue date (ISO 8601)
questionCountintegerNumber of questions
vendorCountintegerNumber of invited vendors
awardedVendorobject or nullWinning vendor info (if awarded)
createdAtstringCreation timestamp (ISO 8601)
updatedAtstringLast update timestamp (ISO 8601)

Get RFP details

GET /api/v1/rfps/{rfpId}

Returns full details for a single RFP, including all questions.

Response fields:

FieldTypeDescription
idstringRFP identifier
titlestringRFP title
descriptionstringRFP description
statusstringDRAFT, OPEN, CLOSED, or AWARDED
typestringRFP type
deadlinestringDue date (ISO 8601)
vendorCountintegerNumber of invited vendors
questionsarrayList of questions with id, section, text, type, weight, order, and required flag
reviewAttemptsinteger or nullNumber of AI quality-gate review attempts during generation
reviewScoreHistoryarray or nullScore history from AI quality-gate reviews
createdAtstringCreation timestamp (ISO 8601)
updatedAtstringLast update timestamp (ISO 8601)

Get vendor responses

GET /api/v1/rfps/{rfpId}/responses

Returns all vendor responses for a specific RFP.

Response fields:

FieldTypeDescription
rfpIdstringRFP identifier
rfpTitlestringRFP title
vendorsarrayList of vendors with their responses

Each vendor object includes:

FieldTypeDescription
inviteIdstringVendor invite identifier
vendorNamestringVendor company name
vendorEmailstringVendor contact email
statusstringInvite status
responsesarrayList of responses with questionId, content, aiScore, and humanScore

List vendors

GET /api/v1/vendors

Returns your organization's vendor directory.

Response fields (per vendor):

FieldTypeDescription
idstringVendor identifier
namestringCompany name
websitestringCompany website
notesstringInternal notes
contactsarrayContacts with id, name, email, phone, and title
rfpCountintegerNumber of RFPs the vendor has been invited to
createdAtstringCreation timestamp (ISO 8601)

Response format

All API responses follow a consistent format:

Success:

json
{
  "data": { ... }
}

Error:

json
{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable description"
  }
}

Common error codes

CodeHTTP StatusDescription
MISSING_KEY401No Authorization header or malformed Bearer token
INVALID_KEY401API key not found
REVOKED_KEY401API key has been revoked
TIER_NOT_ALLOWED403Your plan does not include API access
NOT_FOUND404Requested resource not found
INTERNAL_ERROR500Unexpected server error

Rate limits

API requests are rate-limited to 60 requests per minute per API key. If you exceed this limit, requests return a 429 Too Many Requests response.

Best practices for staying within limits:

  • Cache responses on your side when possible
  • Use pagination parameters to fetch only the data you need
  • Avoid polling in tight loops; use reasonable intervals (e.g., every 30 seconds)

Managing API keys

API key management is restricted to admin users. From the API Keys settings page, admins can:

  • Create new keys with descriptive names
  • View key prefixes and last-used dates
  • Revoke keys to immediately disable them (the key stays in your list for reference)
  • Delete keys to permanently remove them

You can have multiple active API keys. Use separate keys for different environments (production, staging) or integrations.

Next steps

API access | Strutter AI