# Customer revenue

> POST /v1/revenue — record each customer's monthly revenue in US dollars to see AI cost as a share of it. Display only; never used for budgets or limits.

Source: https://infro.io/docs/api/revenue

> **Note:** INFRO is in private early access. Running these examples requires an early-access account, an active trial or subscription entitlement, and your own provider connection. Self-serve purchasing is not generally open. See [Early access](https://infro.io/early-access).

Revenue is optional. With it, [unit economics](https://infro.io/docs/api/unit-economics) `by=end_user` adds each customer's revenue, AI cost as a share of it, and a flag when that share passes a threshold. It is used for display only: it never changes a budget, a limit or a route. Included from the Team plan, and off until an owner, admin or the Finance role turns it on under **Unit economics** in the console.

```bash
curl https://api.infro.io/v1/revenue \
  -H "Authorization: Bearer $INFRO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data": [{"end_user_id": "cust_123", "period": "2026-08", "amount": "1250.00", "currency": "USD"}]}'
```

- `end_user_id` matches `metadata.user_id` on your requests. `period` is a month, `YYYY-MM`.
- **US dollars only.** Any other currency is refused with `400 revenue_currency_unsupported`, never converted.
- Sending a customer and month again replaces the earlier figure.
- The console also accepts the same rows as a CSV: `end_user_id,period,amount`.

Refusals: `403 plan_feature` below the Team plan, `403 revenue_tracking_disabled` while tracking is off, and `403 organization_scope_required` for a key whose read access is narrower than the organization. Turning tracking off keeps uploaded figures but stops showing them.
