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.
- 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 |
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.
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:
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.
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:
{
"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 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 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 — the pre-pay credit path and how operations charge.
- Ordering archive imagery — placing and estimating orders.
- Scopes & authorization — the
orders,billing, andorganizationsscopes these operations require.