Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,13 @@
honoured. The `-beta` rule is stated in `billing.md`.
- GPT Image 2.6 Flare and Sunburst: `output_format` `png` or `gif`, the GIF limits and how a
GIF is billed (one price per GIF) in `billing.md`, with a pointer from `run.md`.
- Token-billed image models (`-token` IDs): how they are charged (reserved estimate,
settled tokens), the GPT `quality` setting, and that they run as async tasks only,
in `billing.md`, with a pointer from `run.md`.
- Token-billed image models renamed from `-token` to `-std` (`gpt-image-2-std`,
`gpt-image-2.5-flare-std`, `gpt-image-2.5-sunburst-std`, `nano-banana-2-std`,
`nano-banana-pro-std`, `nano-banana-2-lite-std`); the old ids are removed, not
aliased. Behaviour and prices are unchanged. `billing.md` states the naming rule
(`-beta` = fixed price per image; official = per token, bare name on GPT Image 2.6,
`-std` on older families) and which ids take `quality` and a custom GIF `size`.
Charging (reserved estimate, settled tokens) and async-only runs are as before.
- SEO research recipe for a domain, using the `data:seo.*` capabilities, linked from the index.

### Changed
Expand Down
28 changes: 19 additions & 9 deletions references/billing.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,28 @@ a call cost. The main Skill is <https://beatapi.io/skill.md>.
- Report cost from the response's `usage` (`price_usd`, sync calls) or the
task's `credits_settled`; both are US dollars.

## Token-billed image models
## Token-billed image models (-std)

- An image model whose ID ends in `-token` (`gpt-image-2-token`,
`nano-banana-2-token`, …) is its base model billed by the tokens each image
uses, not a flat price per image. Same request fields as the base model.
- Naming rule: a `-beta` suffix is the lower-cost version at a fixed price per
image; the official version is billed per token. For GPT Image 2.6 that is
the bare name; for older families it carries `-std`. Model IDs are lowercase.
- The `-std` IDs are `gpt-image-2-std`, `gpt-image-2.5-flare-std`,
`gpt-image-2.5-sunburst-std`, `nano-banana-2-std`, `nano-banana-pro-std` and
`nano-banana-2-lite-std`. Each is its base model billed by the tokens each
image uses, not a flat price per image. Same request fields as the base
model; the Nano Banana ones are the same models billed per token.
- `credits_reserved` is the estimate held when the task is created;
`credits_settled` is the tokens the render actually used, so the two can
differ. A failed task is not charged. Rates per 1M tokens and per-image
estimates: <https://beatapi.io/pricing>.
- The GPT ones take an optional `quality` (Inspect lists the levels; default
`medium`) that sets the output tokens and so the price. Their fixed-price
GPT models refuse `quality`; the Nano Banana ones have no `quality`.
- Only the official ids take `quality` (Inspect lists the levels; default
`medium`), which sets the output tokens and so the price: `gpt-image-2-std`
`low`, `medium`, `high`; `gpt-image-2.5-*-std` and the GPT Image 2.6 bare
names `low`, `medium`, `high`, `xhigh`, `max`. The fixed-price siblings
(`gpt-image-2`, `gpt-image-2.5-*`, `gpt-image-2.6-*-beta`) refuse `quality`;
the Nano Banana ones have no `quality`.
- The GPT `-std` ids accept `background` `auto`, `opaque` or `transparent`, as
their base models do.
- Async only: run them like any image task and poll until `succeeded`. There is
no synchronous `/v1/images/generations` for them.

Expand All @@ -53,11 +63,11 @@ a call cost. The main Skill is <https://beatapi.io/skill.md>.
`png` (default) or `gif`, and have no `background` and no `quality`.
Prices: <https://beatapi.io/pricing>.
- `gpt-image-2.6-flare` and `gpt-image-2.6-sunburst` are the official version,
billed by tokens like the `-token` models above, at 90% of OpenAI's list
billed by tokens like the `-std` models above, at 90% of OpenAI's list
price (list per 1M tokens: text input $5, image input $8, image output $30).
They take the optional `quality` (`low`, `medium`, `high`, `xhigh`, `max`;
default `medium`), which sets the output tokens and so the price, and
`output_format` `png` or `gif`. Async only, like the `-token` models.
`output_format` `png` or `gif`; only these take a custom GIF `size`. Async only, like the `-std` models.
- A GIF is a short animation made from the prompt alone: send no `images`;
`n` is 1.
- On the `-beta` models the spec is fixed by the model (each side about
Expand Down
2 changes: 1 addition & 1 deletion references/run.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Over MCP, pass the same JSON to `capabilities_run`.
45 s) before answering; an image or video task comes back at once. A music
video can also stop at `requires_action` or `storyboard_ready`, which needs
the user's choice.
`-token` image models are async only and billed by tokens:
`-std` and GPT Image 2.6 bare-name image models are async only, billed by tokens:
<https://beatapi.io/skill-refs/billing.md>.
GPT Image 2.6 can return a GIF (`output_format` `gif`, prompt only):
<https://beatapi.io/skill-refs/billing.md>.
Expand Down
28 changes: 19 additions & 9 deletions skills/beatapi-video/references/billing.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,18 +27,28 @@ a call cost. The main Skill is <https://beatapi.io/skill.md>.
- Report cost from the response's `usage` (`price_usd`, sync calls) or the
task's `credits_settled`; both are US dollars.

## Token-billed image models
## Token-billed image models (-std)

- An image model whose ID ends in `-token` (`gpt-image-2-token`,
`nano-banana-2-token`, …) is its base model billed by the tokens each image
uses, not a flat price per image. Same request fields as the base model.
- Naming rule: a `-beta` suffix is the lower-cost version at a fixed price per
image; the official version is billed per token. For GPT Image 2.6 that is
the bare name; for older families it carries `-std`. Model IDs are lowercase.
- The `-std` IDs are `gpt-image-2-std`, `gpt-image-2.5-flare-std`,
`gpt-image-2.5-sunburst-std`, `nano-banana-2-std`, `nano-banana-pro-std` and
`nano-banana-2-lite-std`. Each is its base model billed by the tokens each
image uses, not a flat price per image. Same request fields as the base
model; the Nano Banana ones are the same models billed per token.
- `credits_reserved` is the estimate held when the task is created;
`credits_settled` is the tokens the render actually used, so the two can
differ. A failed task is not charged. Rates per 1M tokens and per-image
estimates: <https://beatapi.io/pricing>.
- The GPT ones take an optional `quality` (Inspect lists the levels; default
`medium`) that sets the output tokens and so the price. Their fixed-price
GPT models refuse `quality`; the Nano Banana ones have no `quality`.
- Only the official ids take `quality` (Inspect lists the levels; default
`medium`), which sets the output tokens and so the price: `gpt-image-2-std`
`low`, `medium`, `high`; `gpt-image-2.5-*-std` and the GPT Image 2.6 bare
names `low`, `medium`, `high`, `xhigh`, `max`. The fixed-price siblings
(`gpt-image-2`, `gpt-image-2.5-*`, `gpt-image-2.6-*-beta`) refuse `quality`;
the Nano Banana ones have no `quality`.
- The GPT `-std` ids accept `background` `auto`, `opaque` or `transparent`, as
their base models do.
- Async only: run them like any image task and poll until `succeeded`. There is
no synchronous `/v1/images/generations` for them.

Expand All @@ -53,11 +63,11 @@ a call cost. The main Skill is <https://beatapi.io/skill.md>.
`png` (default) or `gif`, and have no `background` and no `quality`.
Prices: <https://beatapi.io/pricing>.
- `gpt-image-2.6-flare` and `gpt-image-2.6-sunburst` are the official version,
billed by tokens like the `-token` models above, at 90% of OpenAI's list
billed by tokens like the `-std` models above, at 90% of OpenAI's list
price (list per 1M tokens: text input $5, image input $8, image output $30).
They take the optional `quality` (`low`, `medium`, `high`, `xhigh`, `max`;
default `medium`), which sets the output tokens and so the price, and
`output_format` `png` or `gif`. Async only, like the `-token` models.
`output_format` `png` or `gif`; only these take a custom GIF `size`. Async only, like the `-std` models.
- A GIF is a short animation made from the prompt alone: send no `images`;
`n` is 1.
- On the `-beta` models the spec is fixed by the model (each side about
Expand Down
2 changes: 1 addition & 1 deletion skills/beatapi-video/references/run.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Over MCP, pass the same JSON to `capabilities_run`.
45 s) before answering; an image or video task comes back at once. A music
video can also stop at `requires_action` or `storyboard_ready`, which needs
the user's choice.
`-token` image models are async only and billed by tokens:
`-std` and GPT Image 2.6 bare-name image models are async only, billed by tokens:
<https://beatapi.io/skill-refs/billing.md>.
GPT Image 2.6 can return a GIF (`output_format` `gif`, prompt only):
<https://beatapi.io/skill-refs/billing.md>.
Expand Down
4 changes: 2 additions & 2 deletions test/setup-walkthrough.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -122,9 +122,9 @@ test('key handling is explicit about format and secrecy', () => {
assert.match(billing, /Configure it privately/);
assert.match(billing, /GET https:\/\/api\.beatapi\.io\/v1\/usage/);
assert.match(billing, /Credits are US dollars everywhere/);
assert.match(billing, /ends in `-token`/);
assert.match(billing, /carries `-std`/);
assert.match(billing, /no synchronous `\/v1\/images\/generations`/);
assert.match(page('run'), /`-token` image models are async only/);
assert.match(page('run'), /`-std` and GPT Image 2.6 bare-name image models are async only/);
assert.match(billing, /billed one price per GIF/);
assert.match(billing, /`output_format`\n `png` \(default\) or `gif`/);
assert.match(page('run'), /GPT Image 2\.6 can return a GIF/);
Expand Down
Loading