Approve a submission

POST
/submissions/{submissionId}/approve

Approves a submission that is awaiting_review, accepting the reviewed work. The expert is paid when the submission lands in approved, once all of its work is accepted. It stays in_progress while tasks remain, and on an hourly or per-task opportunity, where approval puts the expert on the project and they are paid through payout runs instead. The response carries the status it lands in. A submission in any other status returns 409.

Authorization<token>

API key as Bearer token: Authorization: Bearer

In: header

Path Parameters

submissionId*string

ID of the submission, as listed by GET /opportunities/{opportunityId}/submissions.

Request Body

application/json

This operation takes no body fields, but the request must still carry Content-Type: application/json and a JSON body: send {}.

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://terac.com/api/external/v2/submissions/string/approve" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "q3w8e1r6t4y9u2i7o5p0a3sd",
  "status": "approved",
  "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": []
}