Developer docs
Credits & pricing
One currency for everything — model prices for media, tokens for chat, small platform credits for the marketing engine, and free API calls up to 1,000 a day.
Poremu bills in credits. 1 credit = ₩10. Everything — the AI marketer, reports, connector syncs, images, videos, chat — draws from the same balance, and every price is visible before you run anything.
| What | Price |
|---|---|
| Image / video generation | The model's per-output price (depends on resolution, quality, duration, audio) — quote it with /estimate |
LLM chat, copy generation, agent reasoning in CREDITS mode | Per token (chatPricing on each chat model) |
| Marketing platform credits | analysis 1 · strategy / content write 1 · report 5 · connector sync 1 per channel per day · connector action (budget / pause execution) 2 |
| API calls | Free up to 1,000 per day, then 1 per 100 calls |
Marketing engine modes
Each workspace chooses how the AI marketer reasons (GET / PATCH /):
| Mode | Who pays for thinking | What Poremu charges |
|---|---|---|
CREDITS | Poremu models (gpt-5.4-mini by default) | tokens + platform credits |
BYO_KEY | Your own OpenAI / Gemini / Anthropic / xAI key (stored encrypted) | platform credits only |
BYO_MCP | The assistant you connected over MCP — Claude Code, Claude, Cursor, ChatGPT | platform credits only |
Media is always charged at the model price, whatever the mode. See what the AI spent per tool with GET / and GET /.
Media prices
Quote a job
POST /v1/generations/estimateSame body as create (prompt optional):
{ "model": "gemini-omni-flash", "duration": 10, "resolution": "720p", "audio": true }{ "credits": 520, "balance": 3 180, "sufficient": true }Balance
GET /v1/balance{ "paid": 2 900, "bonus": 280, "total": 3 180, "plan": { "code": "PLUS", "status": "ACTIVE", "currentPeriodEnd": "2026-04-01T00:00:00.000Z", "cancelAtPeriodEnd": false } }- Paid credits come from subscriptions and top-ups and never expire.
- Bonus credits (welcome gift, pack bonuses, first-month bonus) expire 60 days after they are granted and are always spent first.
Reservation model
- On create, the full price is reserved and your balance drops immediately.
- On success the reservation is captured.
- On failure or cancel the reservation is refunded in full, back to the same bucket (bonus or paid).
If your balance is too low you get 402 INSUFFICIENT_CREDITS with details.required and details.balance.
Getting credits
Subscriptions and one-time packs are managed in Billing on the website. Auto-recharge can top you up automatically when the balance drops under a threshold (at most 3× a day, plus an optional monthly limit of 1, 3, 5, 10 or 20 recharges) — handy for production API workloads.
History
GET /v1/credits/history?cursor=…Every reservation, capture, refund, purchase and expiry is a ledger row, so your balance is always auditable.
API call billing
Requests made with an API key (pk_live_…) or an OAuth token (pmo_…) are free up to 1,000 calls per UTC day; after that each block of 100 calls costs 1 credit (₩10). The first request of every new block of 100 writes one RESERVE + CAPTURE pair to the ledger (description API · 100 calls).
- These paths never count:
/v1/me,/v1/billing/*,/v1/models*,/v1/developer/*,/mcp/docs,/health. - If a new block must start and your balance is 0, that request is refused with
402 INSUFFICIENT_CREDITS. Top up and continue. - Generation and agent-run prices are separate; call billing is added on top.
- See today's usage and the daily history with
GET /(developer/ usage ApiUsageSummaryDto) or under Settings → Developer. Counters are aggregated every 15 seconds, so the dashboard may lag slightly.