---
title: "Create new billing config (admin only, append-only)"
method: POST
path: "/v1/billing/config"
---

# Create new billing config (admin only, append-only)

`POST /v1/billing/config`

## Request

- Base URL: `https://api.clichefactory.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.clichefactory.com/v1/billing/config`
- Auth: none declared

## Headers

- `X-API-KEY` string, nullable

## Request body

- BillingConfigCreateRequest
  - `credits_per_dollar` integer, nullable
  - `extraction_fast_cpp` integer, nullable
  - `extraction_default_cpp` integer, nullable
  - `extraction_robust_cpp` integer, nullable
  - `extraction_fast_cpp_byok` integer, nullable
  - `extraction_default_cpp_byok` integer, nullable
  - `extraction_robust_cpp_byok` integer, nullable
  - `to_markdown_cpp` integer, nullable
  - `to_markdown_cpp_byok` integer, nullable
  - `training_base_fee_credits` integer, nullable
  - `training_byok_fee_credits` integer, nullable
  - `training_tiny_credits` integer, nullable
  - `training_mipro_min_credits` integer, nullable
  - `training_mipro_max_credits` integer, nullable
  - `training_gepa_per_metric_call` integer, nullable
  - `dspy_examples_fee_credits` integer, nullable
  - `free_extraction_pages` integer, nullable
  - `created_by` string, nullable
  - `note` string, nullable

## Response `201`

Successful Response

- BillingConfigResponse
  - `id` integer, required
  - `credits_per_dollar` integer
  - `price_list` CreditPriceListResponse: The price-list version currently in force, with all its entries. Django renders checkout from this and quotes ``price_list_id`` back on the webhook so the server can reject a quote made against a superseded version. The entries are also the currency allow-list: a currency absent here cannot be sold in, and adding one is a data change rather than a deploy.
    - `price_list_id` integer, required
    - `effective_from` string, date-time, required
    - `change_reason` string
    - `announced_at` string, date-time, nullable
    - `entries` CreditPriceEntryItem[]
      - `currency` string, required
      - `credits_per_unit` integer, required
      - `min_topup_minor` integer
      - `pricing_fx_rate` number, nullable
    - `functional_currency` string
    - `created_by` string, nullable
    - `note` string, nullable
  - `extraction_fast_cpp` integer
  - `extraction_default_cpp` integer
  - `extraction_robust_cpp` integer
  - `extraction_fast_cpp_byok` integer
  - `extraction_default_cpp_byok` integer
  - `extraction_robust_cpp_byok` integer
  - `to_markdown_cpp` integer
  - `to_markdown_cpp_byok` integer
  - `training_base_fee_credits` integer
  - `training_byok_fee_credits` integer
  - `training_tiny_credits` integer
  - `training_mipro_min_credits` integer
  - `training_mipro_max_credits` integer
  - `training_gepa_per_metric_call` integer
  - `dspy_examples_fee_credits` integer
  - `free_extraction_pages` integer
  - `effective_from` string, date-time, required
  - `created_by` string, nullable
  - `note` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/clichefactory/apis/aio-server.md) · [All operations](https://skmtc.dev/clichefactory/apis/aio-server/llms.txt) · [OpenAPI document](https://skmtc.dev/clichefactory/apis/aio-server/revisions/9bd59f9bbb31?raw)
