Skip to main content
Consumables let you grant a customer an entitlement when they buy a product, without tracking it as a subscription or a lifetime purchase. This makes them ideal for selling credit packs, one-time add-ons, and similar products with FunnelFox Payments.

How it works

A consumable is an Offering (Feature) with the type consumable that you attach to a Price Point. These are the same Offerings and Price Points you already use for subscriptions and lifetime products.
When a customer buys a product that carries a consumable Offering, FunnelFox Payments grants the consumable. What happens next depends on the product it is attached to:
  • Subscription product: The consumable is re-granted on every billing cycle.
  • Lifetime (one-off) product: The consumable is granted once.
  • Consumable-only product: A Price Point whose only Offering is a consumable, so the product exists purely to sell that consumable.
    • Custom charge: No product at all. You set the amount in the API call, and the consumable is granted once per charge.
Consumables have no balance or counter. Each grant is one record, either active or revoked. FunnelFox Payments does not count or deduct them, so keep that logic in your own product.

Manage consumables

Create consumable

Create a consumable in two steps. Granting is automatic, so there is no separate step to give it to a customer.
1

Create the Offering (Feature)

Call the POST /feature/create endpoint with an ident and feature_type set to consumable. The Settings > Products (features) page in your FunnelFox Payments dashboard creates time-based offerings only.
2

Attach it to a product

Add the Offering to a Price Point’s features, on its own or alongside a subscription or lifetime Offering. On the Settings > Price points page, click the pencil icon next to a price point and select the Offering in the Products (features) field, or import new price points with Upload CSV. You can also use the POST /pp/create endpoint.

View consumables

You can see a customer’s consumables in three places:
  • FunnelFox Payments dashboard: Each customer’s page has a Consumables block that lists every consumable with its status (active, or revoked with the revoke date), start date, paid amount, initial order, price point, and Offering. A payment’s page shows what the payment granted. This view is read-only.
  • Billing API: Call POST /my_assets with the customer’s external_id to return their consumables alongside subscriptions and one-off purchases. Each consumable includes is_active, started_at, and revoked_at.
  • Webhooks: FunnelFox Payments sends a consumable event with subtype granted on each purchase and renewal, and revoked on a full refund. See FunnelFox Payments webhooks to receive and verify them.

Custom charges

A custom charge bills any amount you choose against a customer’s saved card, with no Price Point and no checkout page. Use it when the price is not known in advance, such as credit top-ups, token packs, and one-time add-ons. Custom charges come with these limits:
  • No tax calculation, so the customer is charged exactly the amount you send.
  • No 3D Secure, so a card that requires it declines.
  • Not for the first payment, so the customer must already have a saved card.
  • The maximum amount applies to a single charge, not to a period, and nothing limits how many charges you make.
Custom charges are off by default. Contact your Solution manager to enable them, then set the descriptor, dispute description, and maximum amount in Custom charges settings.

Create custom charges

Call POST /payment/one_off_charge with the customer’s external_id, amount, currency_code, and idempotency_key. The customer needs an earlier successful payment: the charge reuses its card, , region, and merchant account.
Call this endpoint only from your server, because it charges the amount you send.
Each successful charge grants one consumable. The charge appears only as a consumable, not as a subscription or one-off purchase. FunnelFox Payments grants it through a hidden one_off_charge Price Point, created on your first charge and reused after that. You don’t manage this Price Point, and you can’t use one_off_charge or update_payment_method as your own idents. idempotency_key is required and must be unique per customer. Create one key per purchase and reuse it on every retry, because a new key always makes a new charge. Reusing a key never charges again:
  • Same amount and currency: Returns the original result with idempotent_replay: true.
  • Different amount or currency: Returns idempotency_key_reused.

Purchase lifecycle

Consumables are managed entirely through the order lifecycle. There are no manual grant, top-up, revoke, or pause actions.