Delete a draft opportunity
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
apiKey API key as Bearer token: Authorization: Bearer
In: header
Path Parameters
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.