# List feasibility requests (https://terac.com/docs/developers/reference/listFeasibilityRequests)

`GET https://terac.com/api/external/v2/feasibility/requests`

List your organization's feasibility requests, newest first. Optionally filter by status
(RECEIVED / RESPONDED / WON / LOST / NOT_PURSUED) and page through results with limit and offset. Each
request includes its costPerParticipant (the CPI), which is null until the request has been priced
(status RESPONDED).

## Authorization

Requires a Bearer token via the `Authorization` header.

```
Authorization: Bearer <token>
```

## Query Parameters

- `status` (string: one of: `RECEIVED`, `RESPONDED`, `WON`, `LOST`, `NOT_PURSUED`): Return only requests in this status. `GET /feasibility/requests/{requestId}` says what each one means.
- `limit` (integer): Most requests to return, from 1 to 100. Defaults to 50.
- `offset` (integer): How many requests to skip before this page, newest first. Defaults to 0.

## Responses

### 200: One page of feasibility requests, newest first.

- `count` (integer) **(required)**: How many requests this page holds, not a total. Page with offset until a page comes back shorter than the limit.
- `requests` (array) **(required)**
  - `id` (string) **(required)**
  - `status` (string) **(required)**: one of: `RECEIVED`, `RESPONDED`, `WON`, `LOST`, `NOT_PURSUED`
  - `source` (string) **(required)**
  - `taskDescription` (string) **(required)**
  - `panelDescription` (string) **(required)**
  - `submissionCount` (integer, nullable) **(required)**
  - `timelineHours` (integer, nullable) **(required)**
  - `payRateFrequency` (string, nullable) **(required)**: one of: `ONE_TIME`, `HOURLY`, `PER_TASK`, `null`: What costPerParticipant is denominated in once priced: ONE_TIME (per complete), HOURLY, or PER_TASK. Null until the brief states it.
  - `loiMinutes` (integer, nullable) **(required)**: Minutes one participant spends on the task. Distinct from timelineHours, which is Terac's turnaround.
  - `costPerParticipant` (string, nullable) **(required)**
  - `respondedAt` (string, nullable) **(required)**
  - `createdAt` (string) **(required)**
- `dashboard_url` (string, nullable) **(required)**: The organization's feasibility requests and the incentives Terac quoted back. There is no page for a single request, so this list is the only feasibility link; give it after you request feasibility or when the customer asks where a quote went. Null if Terac cannot resolve the organization or project this link belongs to.
### 400: Invalid input data

- `message` (string) **(required)**: The error message
- `code` (string) **(required)**: The error code
- `issues` (array): An array of issues that were responsible for the error
  - `message` (string) **(required)**
### 401: The API key is missing, invalid, disabled, expired or revoked, its owner no longer exists, or it is not linked to an organization. The body is nested under `error`.

- `error` (object) **(required)**
  - `code` (string) **(required)**: one of: `UNAUTHORIZED`: The error code.
  - `message` (string) **(required)**: What went wrong.
### 403: Either the account that owns the API key is banned or deleted (from the key check, nested under `error`), or the key's owner lacks the organization permission this operation needs (from the operation, with `code` and `message` at the top level).

- One of: API key error (403)
  - `error` (object) **(required)**
    - `code` (string) **(required)**: one of: `FORBIDDEN`: The error code.
    - `message` (string) **(required)**: What went wrong.
- One of: Insufficient access error (403)
  - `message` (string) **(required)**: The error message
  - `code` (string) **(required)**: The error code
  - `issues` (array): An array of issues that were responsible for the error
    - `message` (string) **(required)**
### 404: Not found

- `message` (string) **(required)**: The error message
- `code` (string) **(required)**: The error code
- `issues` (array): An array of issues that were responsible for the error
  - `message` (string) **(required)**
### 429: The API key is rate limited. A key accepts 100 requests, then refuses every request until more than 60 seconds pass with no accepted request; refused requests do not extend the wait. Wait the number of seconds in `Retry-After`, then retry. The body is nested under `error`.

- `error` (object) **(required)**
  - `code` (string) **(required)**: one of: `RATE_LIMITED`: The error code.
  - `message` (string) **(required)**: What went wrong.
### 500: Internal server error

- `message` (string) **(required)**: The error message
- `code` (string) **(required)**: The error code
- `issues` (array): An array of issues that were responsible for the error
  - `message` (string) **(required)**