List submissions for an opportunity

GET
/opportunities/{opportunityId}/submissions

Lists an opportunity's submissions, newest first, each with its status and screening answers. Filter to one status; the awaiting_review ones wait on you to approve or reject them. Applicants still in the screener, or waiting on your invite decision, are not listed; the latter are in GET /opportunities/{opportunityId}/applicants. Returns up to limit per page; while pagination.has_more is true, pass pagination.next_cursor back as cursor for the next page. For totals, read submission_stats on the opportunity rather than counting pages.

Authorization<token>

API key as Bearer token: Authorization: Bearer

In: header

Path Parameters

opportunityId*string

ID of the opportunity, as returned by POST /opportunities or GET /opportunities.

Query Parameters

limit?integer

Most items to return in one page, from 1 to 100. Defaults to 25.

Default25
Range1 <= value <= 100
cursor?string

pagination.next_cursor from the previous page, to fetch the page after it. Omit it for the first page.

status?string

"screened_out" never reached the work, "rejected" did the work and was not accepted, "abandoned" stopped part-way.

Value in"screen_passed" | "screened_out" | "in_progress" | "awaiting_review" | "approved" | "rejected" | "abandoned"

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/opportunities/string/submissions"
{
  "data": [
    {
      "id": "q3w8e1r6t4y9u2i7o5p0a3sd",
      "opportunity_id": "h7k2p9w4c1v6n3x8b5m0q2rt",
      "status": "awaiting_review",
      "participant_id": "6f1c2a9e-3b7d-4e58-9a21-c4d8e7f0b3a6",
      "participant_name": "Maya Chen",
      "participant_linkedin_url": "https://www.linkedin.com/in/maya-chen",
      "participant_background": {
        "experiences": [
          {
            "company": "Northwind Logistics",
            "role": "Head of Procurement",
            "started_at": "2021-03",
            "ended_at": null,
            "description": "Led the evaluation and rollout of a new supplier platform."
          }
        ],
        "educations": [
          {
            "school": "University of Michigan",
            "degree": "MBA",
            "major": "Operations"
          }
        ]
      },
      "created_at": "2026-09-29T11:42:57.020Z",
      "updated_at": "2026-09-29T13:18:04.655Z",
      "screening_outcome": "passed",
      "screening_answers": [
        {
          "key": "chose_tool",
          "question": "Were you involved in choosing your company's current spend management software?",
          "answer": [
            "Yes, I led or approved the decision"
          ],
          "outcome": "qualify"
        }
      ]
    },
    {
      "id": "z6x1c8v3b7n2m9k4j0h5g2fd",
      "opportunity_id": "h7k2p9w4c1v6n3x8b5m0q2rt",
      "status": "in_progress",
      "participant_id": "0d9e4b2c-7a1f-4c63-8e5b-2f7a9c1d6e84",
      "participant_name": "Daniel Okafor",
      "participant_linkedin_url": null,
      "participant_background": null,
      "created_at": "2026-09-29T11:15:33.748Z",
      "updated_at": "2026-09-29T11:21:09.302Z",
      "screening_outcome": "passed",
      "screening_answers": [
        {
          "key": "chose_tool",
          "question": "Were you involved in choosing your company's current spend management software?",
          "answer": [
            "Yes, I gave input"
          ],
          "outcome": "qualify"
        }
      ]
    }
  ],
  "pagination": {
    "next_cursor": null,
    "has_more": false
  },
  "dashboard_url": "https://terac.com/acme-research/customer-research-mg4q7x2a/opportunities/h7k2p9w4c1v6n3x8b5m0q2rt/submissions"
}
{
  "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": []
}