Pricing
The API is one flat rate per 1,000 credits. A first look at a video is quoted by the length of the video, and a second question about the same video costs a fraction of that, because it reads what the first look found. Every answer carries what it charged, so you never have to work a bill out afterwards.
Last updated
The rate
One published figure: $0.017 per 1,000 credits. Every price below is that rate over a credit count.
Credits are the unit the work is metered in. The rate is flat: it does not fall with volume, and adding funds gives you exactly what you paid for. $100 in is $100 of balance. A discount, when there is one, is a subscription rather than a bigger button.
curl https://api.tryplayhead.com/v1/billing/config | jq .api_rate
{
"credits_per_usd": 60000,
"usd_per_1k_credits": 0.0167,
"usd_per_video_minute": 0.0180
}What a call costs
A first look is quoted in bands by the length of the video, with a floor of 1,100 credits. A follow-up on the same video does not open it again.
| The video | Quoted | About |
|---|---|---|
| A 15-second advert | 1,100 credits | $0.02 |
| A 60-second reel | 1,100 credits | $0.02 |
| A 10-minute walkthrough | 11,000 credits | $0.18 |
| An hour-long webinar | 65,000 credits | $1.08 |
The bands are estimates from measured runs, not a tariff. The floor is the whole quote for a short video: the fixed work of a reading does not shrink with the clock, so a 15-second advert is quoted the same as a full minute.
The figures above are a quote rather than a bill. What you are charged is what the work actually cost, and the answer says so in credits_charged. A question the first look already answered can come back for two credits without opening anything.
Many videos at once
One request, one question, as many videos as you have. Each is charged as its own first look.
curl -X POST https://api.tryplayhead.com/v1/batches \
-H "Authorization: Bearer $PLAYHEAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"question": "What is the hook, and when does it land?",
"items": [
{ "url": "https://...", "ref": "spring-a" },
{ "url": "https://...", "ref": "spring-b" }
]
}'
# Then ask once, and it holds the connection until they are done.
curl "https://api.tryplayhead.com/v1/batches/$BATCH_ID?wait=60" \
-H "Authorization: Bearer $PLAYHEAD_API_KEY"A batch is one request and not one price: twenty videos cost twenty readings. What it saves is the round trips and the waiting. ref comes back beside each answer, so nothing has to be matched by position.
What the API is billed from
Bought credit, always. The plan's monthly credits do not pay for the API.
| Bought credit | Plan credits | |
|---|---|---|
| What it is | Money you added | The plan's monthly grant |
| Renewal | Never touched | Set on renewal, not added to |
| Rate | $0.017 per 1,000 | $0.091 to $0.190 per 1,000 |
| Pays for | The API, every key | The dashboard and the connector |
An API key is refused when the bought balance runs out, even where the plan still has credits. That refusal is the product rather than a fault. A key is handed to software, and often to somebody else’s software, so a key that could reach the plan is one pasted credential away from spending the seat you bought for a person.
The plan is not idle in the meantime: it pays for the dashboard, for the MCP connector and for the browser extension, because each of those is a person signed in to the seat the subscription bought.
Add funds on API billing. There is no setting on a key to change, because there is nothing to choose.
Running out
A 402 that says what it needed, and a switch that stops it happening.
{
"error": {
"type": "insufficient_credits",
"message": "This call costs 1,200 credits, 340 left.",
"credits_required": 1200,
"credits_available": 340,
"wallet": "topup"
}
}Nothing is half done and nothing is charged. Automatic top-up buys more before this happens: set a threshold and an amount on API billing, and the card your last purchase saved is charged when the balance falls under it. It is off until you turn it on, and a declined card stops it rather than retrying.
GET /v1/account reports the balance in credits and in money, with the wallet this credential spends. On a key that is always topup. Read it before an expensive run rather than after a refusal.
Questions
- How much does one call cost?
- A first look is quoted in bands by the length of the video: 1,100 credits up to a minute, 11,000 up to ten minutes, 65,000 up to an hour. The first band is also the floor, so a 15-second advert is quoted the same as a full minute: the fixed work of a reading does not shrink with the clock. These are estimates from measured runs, not a tariff. A second question about the same video costs a fraction, because it reads what the first look found instead of watching again, and every answer carries credits_charged.
- Is the API cheaper on a subscription?
- Yes, and deliberately. A plan works out between $0.09 and $0.19 per 1,000 credits against $0.33 on the API. A subscription is a commitment and is priced as one; the API rate is what you pay to owe nothing next month. An API key can be set to spend either pot.
- Do credits expire?
- Money you add never expires and no renewal touches it. A plan's monthly grant is the other pot: it is set on renewal rather than added to, so it does not roll over.
- What happens when the balance runs out?
- The call is refused with a 402 that says how many credits it needed and how many are left. Nothing is half done and nothing is charged. Automatic top-up buys more before that happens, on the card your last purchase saved.
- Am I charged for a failed call?
- No. A call reserves what it might cost before it starts, and the difference comes back when it settles. A call that failed is refunded in full.