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 Billing.

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 Billing 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 Billing 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)

Go to the Offering (Features) section on the Settings page, enter an ident and description, set Type to consumable, then click Create Offering (Feature). You can also use the POST /feature/create endpoint.
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. Use the Price Points CSV manager or the POST /pp/create endpoint.

View consumables

You can see a customer’s consumables in three places:
  • Support Tool: Each user page has a Consumables section that lists every consumable with its status (active or revoked), granted and revoked timestamps, source order, and Offering. 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 Billing sends a consumable event with subtype granted on each purchase and renewal, and revoked on a full refund. See FunnelFox Billing 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

To make a charge, call POST /payment/one_off_charge with the customer’s external_id, an amount, a currency_code, and an idempotency_key. The customer needs a prior successful payment, since the card, , region, and merchant account are all reused from it.
Call this endpoint from your server only, because the amount comes straight from your request.
FunnelFox Billing grants one consumable per successful charge through a hidden one_off_charge Price Point that it creates on your first charge and reuses for every charge after it. You never manage that Price Point, and you cannot use one_off_charge or update_payment_method as your own idents. The charge appears only as a consumable. idempotency_key is required and must be unique per customer. Reusing a key with the same amount and currency charges nothing and returns the original outcome with idempotent_replay: true. Reusing it with a different amount or currency charges nothing and returns idempotency_key_reused. Generate one key per purchase intent and reuse it on every retry of that intent, because a new key always creates a new charge.

Purchase lifecycle

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