Get submission details
Returns one submission with its status, screening answers and per-task progress. An applicant still in the screener, or waiting on your invite decision, returns 404 here; the latter are listed in GET /opportunities/{opportunityId}/applicants.
Authorization
apiKey API key as Bearer token: Authorization: Bearer
In: header
Path Parameters
ID of the submission, as listed by GET /opportunities/{opportunityId}/submissions.
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/submissions/string"{
"id": "string",
"opportunity_id": "string",
"status": "screen_passed",
"participant_id": "string",
"created_at": "string",
"updated_at": "string",
"screening_outcome": "passed",
"screening_answers": [
{
"key": "string",
"question": "string",
"answer": [
"string"
],
"outcome": "qualify"
}
],
"dashboard_url": "string",
"tasks": [
{
"sequence": 0,
"task_type": "string",
"status": "string"
}
]
}{
"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": []
}List applicants awaiting your invite decision GET
Applicants who passed screening and are waiting on your decision to invite them. They are deliberately absent from `GET /opportunities/{opportunityId}/submissions`: an applicant here has not been invited yet, so they hold no submission status, and `GET /submissions/{id}` returns 404 for them. This collection is where they exist until you decide. Act on one with `POST /submissions/{submissionId}/invite` or `/decline`. Inviting makes them `screen_passed` and starts their tasks; declining makes them `screened_out`. Either way they leave this collection and appear in the submissions listing from then on. An opportunity on `manual_review` routes every qualified applicant here. One on `auto_invite` still routes an individual applicant here when a screening answer you marked `review` flags them, so poll this even when you did not opt into reviewing everyone.
Invite an applicant awaiting your decision POST
Invites an applicant sitting in your applicant-review queue, which materializes their tasks and notifies them. The submission becomes `screen_passed`. Returns 409 if the applicant is not awaiting your decision, which includes one you have already decided on.