<!-- Source: https://docs.geopera.com/api-reference/guides/enterprise · Markdown for LLMs -->

# Enterprise & governance

Enterprise organizations run on contracted, post-paid billing — a minimum-commitment agreement at negotiated rates, a monthly statement, and per-member spend controls — layered on top of the same operations every account already uses. Nothing about how you place orders, run processing, or read the catalog changes; what changes is how spend is settled and governed.

> **Note** — Enterprise billing, commitments, and contracted rates are configured by your account team, not self-serve. The operations on this page let you _read_ your contract's state and _govern_ your members; the contract itself is set up off-platform.

## Billing models

Every organization uses one of two billing models.

- **Credit pre-pay (default)** — you hold a prepaid credit balance and each operation draws it down. This is the standard path; see [Billing & credits](/api-reference/guides/billing).
- **Enterprise post-pay** — orders are settled on a monthly cycle against your contract instead of a prepaid balance. You place orders exactly as before; eligible orders accrue toward a monthly invoice, and you read your commitment burn-down and statement through the API.

The rest of this guide covers the post-pay surface.

## Minimum commitments & take-or-pay

A **commitment** is a contracted minimum — a spend or volume over a period, at a negotiated rate for a set of products. Delivered orders burn it down; if you finish a period below the minimum, the shortfall is billed as **take-or-pay**. `organizations.commitments.list` returns each commitment with a server-computed rollup so you never reconcile this by hand.

| Operation                             | Side-effect | Scope          | Use                                                |
| ------------------------------------- | ----------- | -------------- | -------------------------------------------------- |
| `organizations.commitments.list`      | read        | `orders:read`  | Commitments with burn-down + take-or-pay           |
| `organizations.commitments.statement` | read        | `billing:read` | A month's statement with settlement reconciliation |

```bash
curl -s -X POST https://api.geopera.com/v1/op/organizations.commitments.list \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "include_line_items": true }'
```

The response is `{ "commitments": [ ... ] }`, one entry per commitment scoped to your organization. Each entry carries its contracted terms (the products and negotiated rate, the period, and the committed minimum) alongside a server-computed rollup: delivered to date, remaining, any take-or-pay shortfall, and a status. Pass `commitment_id` to fetch one, or `include_line_items` to expand the contributing orders.

### Monthly statements

`organizations.commitments.statement` returns a single period's enterprise statement: all activity for the month (lines billed at a commitment rate are flagged), the burn-down, and a settlement reconciliation that matches what is invoiced.

```bash
curl -s -X POST https://api.geopera.com/v1/op/organizations.commitments.statement \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "organization_id": "org_4a1b", "period": "2026-05" }'
```

`organization_id` is required; `period` is a `YYYY-MM` month and defaults to the prior (settled) month.

## Per-member spend caps

Spend governance lets an organization admin cap what individual members can spend, so a single order — or a member's 30-day run rate — can't run past a contracted limit. Each member has two optional caps, both in credits:

- **Per-order cap** — the most a single order may cost.
- **Rolling-window cap** — the most a member may spend over a rolling **30-day** window.

| Operation                               | Side-effect | Scope                 | Use                                   |
| --------------------------------------- | ----------- | --------------------- | ------------------------------------- |
| `organizations.members.list`            | read        | `organizations:read`  | Member roster with roles and caps     |
| `organizations.members.set_spend_limit` | compute     | `organizations:write` | Set a member's per-order / window cap |

> **Note** — Both operations require an organization **admin** or **owner**. A member can't read the roster or change caps.

`organizations.members.list` returns the roster — each member's `user_id`, `email`, `name`, `role`, and current `per_order_limit_credits` and `spend_limit_credits`:

```bash
curl -s -X POST https://api.geopera.com/v1/op/organizations.members.list \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "organizationId": "org_4a1b" }'
```

`organizations.members.set_spend_limit` sets both caps for one member. Send the **full intended state** — pass a number to set a cap, or `null` to clear it (unlimited). Omitting a field does not leave it unchanged.

```bash
curl -s -X POST https://api.geopera.com/v1/op/organizations.members.set_spend_limit \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "organizationId": "org_4a1b",
    "userId": "usr_9f1c",
    "perOrderLimitCredits": 50000,
    "spendLimitCredits": 200000
  }'
```

### What a member sees at the cap

Caps are enforced when an order is placed, **before** anything is charged. An order that would breach either cap fails with `403 Spend limit exceeded` and a message naming the limit — for example:

```json
{
	"status": 403,
	"title": "Spend limit exceeded",
	"detail": "This order costs 62000 credits, over your per-order limit of 50000 credits. Ask an organization admin to raise it."
}
```

Because the check runs before the spend, a rejected order never reserves or charges credits. See [Errors](/api-reference/errors) for the problem envelope.

## Contracted pricing

Enterprise organizations can be priced at negotiated rates for specific vendors and products. Once a contracted rate is in place, cost [estimates](/api-reference/guides/ordering) and the orders you place reflect it automatically — there's nothing to pass on each request. Contracted rates are set up with your account team.

## Next steps

- **[Billing & credits](/api-reference/guides/billing)** — the pre-pay credit path and how operations charge.
- **[Ordering archive imagery](/api-reference/guides/ordering)** — placing and estimating orders.
- **[Scopes & authorization](/api-reference/scopes)** — the `orders`, `billing`, and `organizations` scopes these operations require.
