Delete a draft opportunity

DELETE
/opportunities/{opportunityId}

Deletes a draft opportunity, which was never charged, and drops it from GET /opportunities. A launched opportunity returns 409; end one with POST /opportunities/{opportunityId}/stop instead.

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.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://terac.com/api/external/v2/opportunities/string"
{
  "id": "string",
  "deleted": true,
  "dashboard_url": "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": []
}

Update opportunity PATCH

Edits a draft opportunity; send only the fields you are changing. A list you send (`tasks`, `filters`, `screening_questions`, `quotas`, `cross_quotas`) replaces the stored one rather than merging into it, so read the opportunity first and send the whole list back. `quotas` and `cross_quotas` are only accepted alongside `screening_questions`. A new `expected_days_to_complete` moves the deadline without re-pricing. A request that changes nothing returns 400, and a launched opportunity returns 409.

Launch opportunity POST

Launches a draft opportunity: charges your organization's balance and starts recruiting. The charge is the participant incentive for every one of `num_participants` plus the platform fee, as `pricing` on the draft shows, and `funding` says beforehand whether the balance covers it. The response is the opportunity, already `active`, so there is nothing to poll for. Only a `draft` can be launched; any other status returns 409. A draft that cannot run is refused with 412 before anything is charged, and the message says what to fix: the balance does not cover the charge, the screener is missing or nobody can pass it, the participant budget is under the $5 minimum, or the feasibility request it was priced from is not answered yet. Unused budget is refunded when the opportunity is stopped or completes. A screener is recommended. A draft without `screening_questions` launches only when Terac has enabled that for your organization and you send `without_screener: true`. Unless Terac runs its AI screening interview on it, everyone who matches its filters then goes straight to the task, so the tasks that deliver the work have to be `review_type: manual_review` and `customer_screening_review` has to be `auto_invite`: nobody is paid until you approve their submission with `POST /submissions/{submissionId}/approve`.