For AI agencies and SIs
Bill every client for exactly the tokens they used.
Give each client its own workspace, budget and markup rule. PALM SOUQ isolates their spend at the gateway and turns it into an invoice line, so month end stops being a week of spreadsheets.
| Client workspace | Model | Token cost | Budget used | Invoice line |
|---|---|---|---|---|
| meridian-bank | GPT-4.1 | $3,600 | 90% | $5,110 |
| orchid-retail | Claude Haiku 4.5 | $1,200 | 80% | $1,870 |
| kestrel-health | Claude Sonnet 4.5 | $2,310 | 96% | $3,369 |
| polaris-edu | Gemini 2.5 Flash | $400 | 50% | $790 |
| Month total | $7,510 | $11,139 | ||
gross profit on AI usage: $11,139 - $7,510 = $3,629 (33% of billings)
Month end today
Five days to send an invoice nobody can explain.
Day 1
Download provider invoices
One OpenAI invoice, one Anthropic invoice, one cloud bill. None of them mention clients.
Day 2
Split by API key or by guesswork
Clients that share a key are split by request logs, if anyone kept them, or by an agreed ratio.
Day 3
Apply markup in a spreadsheet
Different clients have different terms. Errors here go straight onto an invoice.
Day 5
Answer the client's questions
The client asks why the bill doubled. The answer is somewhere in a log nobody kept.
Isolation
Shared keys, a key per client, or a workspace per client.
Keys per client fix attribution and create a secrets problem. Workspaces fix both.
| Shared provider key | Key per client | PALM SOUQ workspace per client | |
|---|---|---|---|
| Cost per client | Estimated from logs | Exact, but keys multiply | Exact, per workspace and per feature |
| Budget cap per client | No | Provider project limits, where offered | Soft and hard caps, fallbacks |
| One runaway agent affects | Every client on the key | That client's key | That client's workspace only |
| Markup and invoice line | Spreadsheet | Spreadsheet | Calculated and synced to billing |
| Key handling | One shared secret | Dozens of secrets | Provider keys held in KMS; clients see none |
Worked margin example
The same client, on a fixed fee and on cost plus.
A health-sector client ran $1,870 of Claude tokens last month. Here is what the agency kept under each contract.
- Fixed fee
- ($2,000 - $1,870) / $2,000 = 6.5%
- Cost plus invoice
- $1,870 x 1.35 + $250 = $2,774.50
- Cost plus margin
- ($2,774.50 - $1,870) / $2,774.50 = 32.6%
On the fixed fee, one busy month away from a loss. On cost plus, the margin holds whatever the client's usage does, and the soft cap warns both sides before the budget runs out.
workspace "kestrel-health" {
billing = { model = "cost_plus", markup = 0.35, platform_fee_usd = 250 }
budget_usd = 2400
soft_cap = 0.80 # email the client lead and your account manager
hard_cap = 1.00 # pause non-critical features
providers = ["anthropic"] # client contract allows one provider
region = "eu" # data residency per client
sync = { platform = "stripe", customer = "cus_Kestrel" }
}One block per client: billing model, budget, caps, allowed providers, region and the billing customer to sync to.
Questions, answered
Can each client use different providers or regions?
Yes. Each client workspace has its own provider list, region and policies, so a health client can stay on one provider in the EU while a retail client uses several.
Can I give clients their own dashboard?
Yes. Invite client users to their workspace with a read-only role, so they see their own usage, budget and invoice lines and nothing else.
Do I need a separate provider key per client?
No. PALM SOUQ attributes by workspace and tenant header, not by key, so one provider key can serve many clients with exact attribution. Clients that insist on their own key can bring it.
How is markup billed?
Choose cost plus a percentage, a fixed rate per million tokens, or pass-through with a platform fee. PALM SOUQ calculates the line and syncs it to Stripe, Metronome, Orb or Lago.
Close the month in an afternoon.
Create a workspace per client, route their agents through PALM SOUQ, and the invoice lines write themselves.
14-day free production trial · 100k requests included · no card required