Get a feasibility request

GET
/feasibility/requests/{requestId}

Retrieve one of your feasibility requests by id. Use this to poll for the CPI after submitting.

Status decides whether there is a price to read:

  • RECEIVED: not priced yet, costPerParticipant is null.
  • RESPONDED: priced. costPerParticipant is the confirmed all-in CPI per participant.
  • WON: already used by a study that launched.
  • LOST or NOT_PURSUED: closed without a usable price. Both are terminal, so stop polling. No reason is returned on this endpoint.

Once RESPONDED, create the opportunity with POST /opportunities passing feasibility_request_id to price it from that confirmed CPI, then launch it.

Authorization<token>

API key as Bearer token: Authorization: Bearer

In: header

Path Parameters

requestId*string

ID of the feasibility request, as returned by POST /feasibility/requests.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://terac.com/api/external/v2/feasibility/requests/string"
{
  "id": "tz4a98xxat96iws9zmbrgj3a",
  "status": "RESPONDED",
  "source": "API",
  "taskDescription": "A 30-minute written interview on a page we host: eight open questions about how the participant's team chose and rolled out its spend management software.",
  "panelDescription": "Finance managers, senior managers and directors in the US or Canada who took part in choosing their company's current spend management software.",
  "submissionCount": 12,
  "timelineHours": 120,
  "payRateFrequency": "ONE_TIME",
  "loiMinutes": 30,
  "costPerParticipant": "62.50",
  "respondedAt": "2026-09-28T15:03:40.117Z",
  "createdAt": "2026-09-28T15:02:11.482Z",
  "dashboard_url": "https://terac.com/acme-research/feasibility"
}
{
  "code": "BAD_REQUEST",
  "message": "Invalid input data",
  "issues": []
}

{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "API key required. Include Authorization: Bearer <key> header."
  }
}

{
  "error": {
    "code": "FORBIDDEN",
    "message": "This account is not permitted to use the API."
  }
}

{
  "code": "NOT_FOUND",
  "message": "Not found",
  "issues": []
}
{
  "error": {
    "code": "RATE_LIMITED",
    "message": "Rate limit exceeded. Retry after 61 seconds."
  }
}
{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Internal server error",
  "issues": []
}