Download OpenAPI specification:
Credit-based dynamic pricing surface for Convilyn (pricing v2).
payment_openapi.yaml for backwards compatibility during transition).See docs/business/pricing/pricing-v2.md for rates and the three-layer
raw → insured → charged cost stack. Engineering contract:
backend-api/docs/pricing/PRICING_CONTRACT.md. Paddle integration specifics:
backend-api/docs/pricing/PADDLE_TOPUP_NOTES.md.
Idempotency-Key header on /workflow/commit and /credits/topup| workflowKind required | string (WorkflowKind) Enum: "goal_lane" "conversion" "forge" |
| specId required | string |
| inputsSummary | object Optional hints that improve quote accuracy without revealing PII — file_size_bytes, expected_token_count, expected_megapixels, expected_minutes_audio, etc. Server may ignore unknown fields. |
{- "workflowKind": "goal_lane",
- "specId": "goal_lane.business_report_summary",
- "inputsSummary": { }
}{- "costCredits": 0,
- "balanceCredits": 0,
- "freeCredits": 0,
- "sufficient": true,
- "minFloorCredits": 0,
- "topUp": {
- "minCredits": 500,
- "suggestedCredits": 2000,
- "maxCredits": 50000
}
}| Idempotency-Key required | string [ 8 .. 128 ] characters Caller-generated opaque key (8–128 chars; SHOULD be a UUIDv4). Replays return the original run_id without re-debiting. |
| workflowKind required | string (WorkflowKind) Enum: "goal_lane" "conversion" "forge" |
| specId required | string |
| quotedCostCredits required | integer Echo of the quote's costCredits; server re-validates within 20% tolerance |
| inputsSummary | object |
{- "workflowKind": "goal_lane",
- "specId": "string",
- "quotedCostCredits": 0,
- "inputsSummary": { }
}{- "runId": "78c33d18-170c-44d3-a227-b3194f134f73",
- "balanceAfterCredits": 0,
- "chargedCredits": 0
}| cursor | string |
| limit | integer <= 200 Default: 50 |
| kind_filter | Array of strings (LedgerEntryKind) Items Enum: "credit_grant_subscription" "credit_grant_trial" "credit_grant_promo" "credit_grant_free_monthly" "credit_deduction_workflow" "credit_topup" "credit_refund" |
{- "entries": [
- {
- "id": "string",
- "kind": "credit_grant_subscription",
- "costCredits": 0,
- "occurredAt": "2019-08-24T14:15:22Z",
- "workflowRunId": "string",
- "paddleTransactionId": "string",
- "breakdownCredits": {
- "llm": 0,
- "compute": 0,
- "storage": 0,
- "mcp": 0,
- "runFloor": 0
}
}
], - "nextCursor": "string"
}Creates a Paddle non-catalog one-time transaction. Returns a Paddle checkout URL the
frontend renders inline (CustomCheckout). Credits are added to the ledger only
after transaction.completed webhook arrives — never before payment confirmation.
| Idempotency-Key required | string [ 8 .. 128 ] characters Caller-generated opaque key (8–128 chars; SHOULD be a UUIDv4). Replays return the original draft without re-creating it. |
| amountCredits required | integer [ 500 .. 50000 ] Top-up amount in credits. Default bounds $5–$500 = 500–50,000 credits ($1 = 100 credits). |
| currency | string Default: "USD" Value: "USD" USD-only at MVP (multi-currency in P8). |
{- "amountCredits": 500,
- "currency": "USD"
}{- "paddleTransactionId": "string",
- "status": "draft"
}