---
title: "Price, time and validation for a question draft."
method: POST
path: "/v1/billing/estimate"
tags: ["pricing"]
---

# Price, time and validation for a question draft.

`POST /v1/billing/estimate`

## Request

- Base URL: `https://api.50heads.com`
- URL: `https://api.50heads.com/v1/billing/estimate`
- Auth: none required

Counts as half a request against the rate limit. `validation` lists anything that would stop the ask, one issue per field.

## Request body

- EstimateRequest
  - `draft` QuestionDraft, required
    - `type` 'single_choice' | 'multi_choice' | 'ab_image' | 'pairwise' | 'scale_1_5' | 'ranking' | 'yes_no' | 'yes_mostly_no' | 'free_text' | 'click_test' | 'reaction' | 'rate_each', required
    - `text` string, required
    - `context` string
    - `language` string
    - `options` object[]
      - `label` string, required
      - `imageUrl` string, uri
      - `imageUrls` string[]
    - `scaleLabels` object
      - `low` string, required
      - `high` string, required
    - `neither` boolean
    - `stimulus` object
      - `imageUrl` string, uri
      - `audioUrl` string, uri
      - `text` string
      - `exposureMs` integer
    - `n` integer
    - `tier` union
      - 1
      - 2
      - 3
    - `rush` boolean
    - `targeting` object
      - `countries` string[]
      - `tags` string[]
      - `ageBands` string[]
      - `genders` string[]
      - `verifiedAge` boolean
    - `clickTest` object
      - `maxTaps` integer
    - `scheduledFor` string, date-time
    - `publicResults` boolean
    - `reason` 'off' | 'optional' | 'required'
    - `goRule` object
      - `goAbove` number, required
      - `minAnswers` integer, required
    - `contentFlag` 'none' | 'medical' | 'violence' | 'distressing' | 'alcohol_gambling' | 'political'
    - `interestAudienceId` string
    - `minGrade` union
      - 1
      - 2
      - 3
    - `interestPrice` object
      - `perAnswerPence` integer, required
      - `headShareBps` integer, required
    - `answeredBy` 'heads' | 'private'
    - `openForDays` union
      - 1
      - 7
      - 14
      - 30
    - `shownAs` string
  - `surface` 'app' | 'web'

## Response `200`

OK

- Quote
  - `creditsPerAnswer` integer, required
  - `creditsTotal` integer, required
  - `payPerAnswer` integer, required
  - `etaMinutes` integer, required
  - `traits` integer, required
  - `breakdown` object[], required
    - `label` string, required
    - `value` string, required
  - `breakdownLine` string, required
  - `validation` object[], required
    - `field` string, required
    - `code` string, required
    - `message` string, required
  - `poolSize` integer, nullable, required

## Other responses

- `400`: The request is not valid; `error.details.validation` lists the fixes.
- `429`: Too many requests; wait for Retry-After.

---

[API](https://skmtc.dev/50heads/apis/50heads-api.md) · [All operations](https://skmtc.dev/50heads/apis/50heads-api/llms.txt) · [OpenAPI document](https://skmtc.dev/50heads/apis/50heads-api/revisions/20175e8b00e3?raw)
