Skip to main content
POST
Enabled per organizationUsage-based billing must be enabled for your organization before these endpoints accept requests. Contact your Yuno account manager to enable it. Requests from an organization where it is not enabled return 403 PRODUCT_NOT_ENABLED.
The plan’s flat price and existing subscribers’ base amount never change when you attach a meter. Every subscription on the plan inherits the metered price and can start reporting usage right away.
Two ways to attach
  • On creation: pass meters[] (same shape as this request body) to Create Plan. Duplicated meter_id entries are rejected with 409.
  • On a live plan: call this endpoint once per meter, or send { "meters": [ ... ] } to PATCH /subscriptions/plans/{plan_id} — that PATCH is attach-only and atomic: if any entry in the list is invalid (already attached, unknown or inactive meter, bad price) nothing is attached. Any other plan field in that body (name, base_amount, …) is silently ignored — plans stay immutable outside meters[].
Price inheritanceIf the plan’s base currency is USD and the meter has a default_price, you can omit price_per_credit: the meter’s default applies and the metered price is returned with price_per_credit: null. In any other case (price_per_credit currency must always equal the plan’s base currency) send it explicitly. Only ACTIVE meters can be attached; an archived meter is rejected with 400 METER_NOT_FOUND.
pricing_strategy configPER_UNIT uses price_per_credit/country_prices. PACKAGE uses package_size, package_price and optionally package_country_prices. TIERED uses tiers[] (ascending up_to bounds, last tier up_to: null). Sending config fields for a strategy other than the one you selected is rejected with 400 PLAN_METER_PRICING_CONFIG_UNSUPPORTED. Once attached, PACKAGE/TIERED config cannot be changed — see Update Plan Meter.
See The Metered Price Object for every field. Refer to Meter Error Codes for the possible error outcomes.

Authorizations

public-api-key
string
header
default:<Your public-api-key>
required
private-secret-key
string
header
default:<Your private-secret-key>
required

Headers

X-Account-Code
string
required

The account_id found in your Yuno Dashboard (UUID). Required — omitting it returns 400 BAD_REQUEST ("Invalid x-account-code header.").

X-Idempotency-Key
string
required

Unique identifier used in HTTP headers to ensure that a request is processed only once, even if it is retried due to network issues or timeouts. Optional, as on the rest of the Yuno API.

Path Parameters

plan_id
string
required

The unique identifier of the plan.

Body

application/json
meter_id
string
required

The unique identifier of the meter to attach (MAX 64; MIN 36). Must be an existing ACTIVE meter of the account — an unknown or INACTIVE meter is rejected with 400 METER_NOT_FOUND. A meter can be attached to a plan only once, else 409 PLAN_METER_ALREADY_ASSIGNED.

credits
number<float>
required

Units included in the plan per billing cycle — the allowance a subscriber can consume before any usage is billed. Must be >= 0. 0 means every unit is billed.

pricing_strategy
enum<string>
required

How usage beyond credits is priced: PER_UNIT (billable units × price_per_credit), PACKAGE (bundles of N units, partial bundle counts as a full one) or TIERED (graduated tiers, each band at its own rate).

Available options:
PER_UNIT,
PACKAGE,
TIERED
price_per_credit
object
country_prices
object[]

Optional explicit per-country price per unit. One entry per country — a repeated country is rejected with 400 INVALID_PARAMETERS. A country not listed falls back to price_per_credit.

package_size
number<float>

Only for pricing_strategy: PACKAGE. The bundle size — billable units are rounded up to the nearest whole multiple. Must be > 0; decimals and scientific notation (1e3) are accepted and coerced. Stored rounded to 4 decimal places. Required when pricing_strategy is PACKAGE; rejected with 400 PLAN_METER_PRICING_CONFIG_UNSUPPORTED for any other strategy.

package_price
object

Only for pricing_strategy: PACKAGE. The price per bundle. Same shape as price_per_credit. Required when pricing_strategy is PACKAGE.

package_country_prices
object[]

Only for pricing_strategy: PACKAGE. Optional per-bundle price by subscriber country. Same shape as country_prices.

tiers
object[]

Only for pricing_strategy: TIERED. Ordered, graduated pricing bands. Required when pricing_strategy is TIERED (at least one entry). Every tier but the last needs a strictly-ascending up_to; the last tier's up_to must be null (unbounded). Every tier must share the same currency (and the same country_rates countries, if used).

Response

201

id
string

The unique identifier of the metered price (the plan-meter relation).

plan_id
string
meter_id
string
credits
number

Units included in the plan per billing cycle.

pricing_strategy
enum<string>
Available options:
PER_UNIT,
PACKAGE,
TIERED
price_per_credit
object | null

null when inherited from the meter's default_price (USD plans).

country_prices
object[]
created_at
string

Set by Yuno on creation.

updated_at
string

Set by Yuno on every update.