Pause opportunity

POST
/opportunities/{opportunityId}/pause

Pauses an active opportunity, so it stops taking new applicants. Participants already working can still finish and submit, and nothing is charged or refunded. Resume it with POST /opportunities/{opportunityId}/resume. Only an active opportunity can be paused; any other status returns 409.

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.

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/opportunities/string/pause" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "string",
  "title": "string",
  "internal_title": "string",
  "description": "string",
  "status": "draft",
  "num_participants": 0,
  "estimated_duration_minutes": 0,
  "filters": [
    {
      "property1": {
        "property1": 0,
        "property2": 0
      },
      "property2": {
        "property1": 0,
        "property2": 0
      }
    }
  ],
  "screening_questions": [
    {
      "key": "string",
      "text": "string",
      "question_rich_text": "string",
      "pick": "one",
      "answers": [
        {
          "text": "string",
          "qualify_logic": "may",
          "allow_free_text": true
        }
      ],
      "grid": {
        "pick": "one",
        "rows": [
          {
            "key": "string",
            "text": "string"
          }
        ],
        "columns": [
          {
            "value": "string",
            "text": "string"
          }
        ],
        "cell_actions": [
          {
            "row": "string",
            "column": "string",
            "qualify_logic": "may"
          }
        ]
      },
      "min_qualifying": 1,
      "display_condition": {
        "conditions": [
          {
            "screening_question": "string",
            "answer": "string",
            "operator": "eq"
          }
        ],
        "join": "and"
      },
      "conditional_rules": [
        {
          "conditions": [
            {
              "screening_question": "string",
              "answer": "string",
              "operator": "eq"
            }
          ],
          "join": "and",
          "outcome": "reject"
        }
      ],
      "skip_rules": [
        {
          "conditions": [
            {
              "screening_question": "string",
              "answer": "string",
              "operator": "eq"
            }
          ],
          "join": "and",
          "target_question": "string"
        }
      ],
      "allow_paste": true
    }
  ],
  "quotas": [
    {
      "screening_question": "string",
      "targets": [
        {
          "value": "string",
          "count": 1,
          "type": "exact"
        }
      ]
    }
  ],
  "cross_quotas": [
    {
      "label": "string",
      "conditions": [
        {
          "screening_question": "string",
          "answer": "string",
          "operator": "eq"
        }
      ],
      "join": "and",
      "target": 0,
      "quota_type": "exact",
      "dimension": "string"
    }
  ],
  "tasks": [
    {
      "sequence": 0,
      "task_type": "string",
      "review_type": "string",
      "task_url": "string",
      "participant_url_template": "string",
      "title": "string",
      "description": "string",
      "duration_minutes": 0,
      "available_after_sequence": 0,
      "available_after_delay_minutes": 0,
      "provider": "string",
      "calendar_owner": "string",
      "event_type_url": "string",
      "instructions": "string",
      "accepted_mime_types": [
        "string"
      ],
      "min_files": 0,
      "max_files": 0,
      "max_file_size_bytes": 0
    }
  ],
  "pricing": {
    "cost_per_participant_cents": 0,
    "total_cost_cents": 0,
    "currency": "usd"
  },
  "funding": {
    "affordable": true,
    "draws_on_credit": true,
    "balance_cents": 0,
    "shortfall_cents": 0,
    "finance_url": "string"
  },
  "device_types": [
    "string"
  ],
  "business_type": "string",
  "candidate_profile": "string",
  "required_accounts": [
    "string"
  ],
  "video_required": "string",
  "screen_share_required": "string",
  "customer_screening_review": "string",
  "pay_frequency": "string",
  "screening_option_randomization": "string",
  "forwarding_email_enabled": "string",
  "max_responses_per_expert": 0,
  "feasibility_request_id": "string",
  "project_id": "string",
  "created_at": "string",
  "updated_at": "string",
  "ending_at": "string",
  "launched_at": "string",
  "links": {
    "self": "string",
    "launch": "string",
    "submissions": "string",
    "dashboard": {
      "study": "string",
      "draft_editor": "string",
      "submissions": "string",
      "recruitment": "string",
      "task": "string",
      "settings": "string"
    }
  },
  "submission_stats": {
    "total": 0,
    "in_progress": 0,
    "awaiting_review": 0,
    "approved": 0,
    "rejected": 0
  },
  "quota_progress": [
    {
      "screening_question": "string",
      "targets": [
        {
          "value": "string",
          "count": 0,
          "current": 0,
          "type": "string"
        }
      ]
    }
  ],
  "cross_quota_progress": [
    {
      "label": "string",
      "conditions": [
        {
          "screening_question": "string",
          "answer": "string",
          "operator": "eq"
        }
      ],
      "join": "and",
      "target": 0,
      "quota_type": "exact",
      "dimension": "string",
      "current": 0
    }
  ],
  "screening_stats": [
    {
      "screening_question": "string",
      "graded": 0,
      "rejected": 0,
      "rejection_rate": 0,
      "answers": [
        {
          "text": "string",
          "selected": 0,
          "share": 0
        }
      ]
    }
  ]
}
{
  "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": []
}

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`.

Resume opportunity POST

Resumes a paused opportunity, so it takes new applicants again. Nothing is charged: the budget taken at launch still covers it. Only a `paused` opportunity can be resumed; any other status returns 409.