Billing & Credits

Manage subscriptions, purchase credits, and track billing — checkout, balance, invoices, and portal.

9 min readUpdated Mar 15, 2026
Share

AskVerdict billing is powered by Stripe. All billing endpoints require authentication and operate on the currently signed-in user. Checkout endpoints return a Stripe-hosted URL - redirect the user to that URL to complete payment.

Authentication required

All billing endpoints require a valid session cookie or Authorization: Bearer <token> header. There is no public billing API.


Plans overview

PlanPriceCredits / DebatesModesAPI accessTeam seats
Free$010 on signupAllNo1
Pro$29/mo ($24/mo annual)500 credits/monthAllYesUp to 25
BYOK$19/moUnlimited (your keys)AllYesUp to 5
BYOK Pro$39/moUnlimited (your keys)AllYesUp to 10

Founding member offer

The first 100 users receive 1 month free Pro. The founding member discount is applied automatically at checkout when the offer is active - no coupon code required.


Credit costs

Credits are consumed when running debates using AskVerdict's hosted API keys. BYOK subscribers run debates against their own API keys and are not charged credits per debate.

ModeCredits per debateBest for
instant / quick_take1 creditRapid verdict in under 5 seconds
fast1 creditQuick decisions, lightweight questions
balanced3 creditsMost debates - good depth and speed
thorough8 creditsHigh-stakes decisions, comprehensive analysis
compare5 creditsEvaluating 2-5 options against each other

Credit packs

Credit packs are one-time purchases. Credits never expire.

PackCreditsPricePer credit
credits_100 - Starter100 credits$4.99$0.050
credits_500 - Standard500 credits$19.99$0.040
credits_2000 - Power2000 credits$59.99$0.030

BYOK subscription intervals

The BYOK and BYOK Pro subscriptions are billed monthly:

IntervalBYOKBYOK Pro
monthly$19 / month$39 / month

Endpoints

Create BYOK checkout session

POST/api/billing/checkout-session

Create a Stripe-hosted checkout URL for a BYOK subscription.

Creates a Stripe Checkout session for the BYOK plan. The response contains a url — redirect the user to it to complete the subscription purchase.

If this is the user's first purchase, a Stripe customer record is created automatically.

Request body

NameTypeRequiredDescription
intervalstringRequiredBilling cadence. Must be: 'monthly'.

Example request

bash
curl -X POST https://api.askverdict.ai/api/billing/checkout-session \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ "interval": "monthly" }'

Response

Error responses

StatusCodeDescription
400VALIDATION_ERRORinterval is missing or not one of the allowed values
401UNAUTHORIZEDNot authenticated
503BILLING_NOT_CONFIGUREDBYOK subscription pricing is not configured on this server

Create BYOK Pro checkout session

POST/api/billing/checkout-session-pro

Create a Stripe-hosted checkout URL for a BYOK Pro subscription.

Identical to the BYOK checkout endpoint but starts a BYOK Pro subscription, which unlocks decision matrix, convergence scores, argument graph heatmap, file upload + storage, and up to 10 team seats.

Request body

NameTypeRequiredDescription
intervalstringRequiredBilling cadence. Must be: 'monthly'.

Example request

bash
curl -X POST https://api.askverdict.ai/api/billing/checkout-session-pro \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ "interval": "monthly" }'

Response

Error responses

StatusCodeDescription
400VALIDATION_ERRORinterval is missing or not one of the allowed values
401UNAUTHORIZEDNot authenticated
503BILLING_NOT_CONFIGUREDBYOK Pro subscription pricing is not configured on this server

Create credit pack checkout session

POST/api/billing/credit-checkout

Create a Stripe-hosted checkout URL for a one-time credit pack purchase.

Creates a Stripe Checkout session for a one-time credit pack payment. Credits are added to the user's balance automatically via Stripe webhook after payment succeeds.

Request body

NameTypeRequiredDescription
packstringRequiredCredit pack identifier. One of: 'credits_100' (100 credits, $4.99), 'credits_500' (500 credits, $19.99), 'credits_2000' (2000 credits, $59.99).

Example request

bash
curl -X POST https://api.askverdict.ai/api/billing/credit-checkout \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{ "pack": "credits_100" }'

Response

Credit delivery

Credits are credited to your balance asynchronously via Stripe webhook. There may be a few seconds delay between completing the Stripe checkout and seeing your updated balance. Poll GET /api/billing/balance or refresh your billing page after returning from checkout.

Error responses

StatusCodeDescription
400VALIDATION_ERRORpack is missing or not one of the allowed values
401UNAUTHORIZEDNot authenticated
503BILLING_NOT_CONFIGUREDCredit pack pricing is not configured on this server

Get credit balance

GET/api/billing/balance

Return the current user's credit balance and active plan.

Returns a fresh read from the database — this always reflects the most current state, not a cached value.

Example request

bash
curl https://api.askverdict.ai/api/billing/balance \
  -H "Authorization: Bearer <token>"

Response

The plan field is one of: "free", "starter", "pro", "byok", "byok_pro", "enterprise".

Error responses

StatusCodeDescription
401UNAUTHORIZEDNot authenticated
404USER_NOT_FOUNDAuthenticated user record not found

Open Stripe Customer Portal

POST/api/billing/portal-session

Create a Stripe Customer Portal session to manage subscriptions and payment methods.

Returns a Stripe-hosted Customer Portal URL. Use it to let users cancel subscriptions, update payment methods, download past invoices, and manage billing details — all handled by Stripe's secure portal.

Requires an existing billing account

This endpoint only works if the user has previously completed at least one checkout session (subscription or credit pack). Users who have never purchased anything will receive a NO_STRIPE_CUSTOMER error.

Example request

bash
curl -X POST https://api.askverdict.ai/api/billing/portal-session \
  -H "Authorization: Bearer <token>"

Response

Error responses

StatusCodeDescription
400NO_STRIPE_CUSTOMERUser has no billing account (no prior purchases)
401UNAUTHORIZEDNot authenticated

Invoices

Invoice records are written to your AskVerdict account automatically when Stripe webhooks confirm a payment. Each invoice has a link to the Stripe-hosted invoice page and/or a receipt URL.

List invoices

GET/api/invoices

List all invoices for the current user, paginated.

Returns invoices ordered by most recent first. Optionally filter to a specific workspace.

Query parameters

NameTypeRequiredDescription
pagenumberOptionalPage number (1-based). Default: 1.
limitnumberOptionalResults per page. Default: 20. Max: 50.
workspaceIdstringOptionalFilter invoices to a specific workspace.

Example request

bash
curl "https://api.askverdict.ai/api/invoices?page=1&limit=20" \
  -H "Authorization: Bearer <token>"

Response

Invoice fields

FieldTypeDescription
idstringInvoice ID
typestringInvoice type: "subscription" or "credit_pack"
descriptionstringHuman-readable description
amountCentsnumberAmount charged in cents (e.g. 1900 = $19.00)
currencystringISO 4217 currency code (e.g. "usd")
statusstringPayment status: "paid", "open", "void", "uncollectible"
workspaceIdstring | nullSet if this invoice belongs to a workspace
stripeInvoiceUrlstring | nullLink to the Stripe-hosted invoice page
stripeReceiptUrlstring | nullLink to the Stripe receipt
metadataobjectAdditional data (e.g. creditAmount, creditPack for pack purchases)
createdAtstringISO 8601 timestamp

Error responses

StatusCodeDescription
401UNAUTHORIZEDNot authenticated

Get invoice

GET/api/invoices/:id

Get a single invoice by ID.

Returns full invoice details including Stripe payment intent and session IDs. Only returns invoices belonging to the authenticated user.

Path parameters

NameTypeRequiredDescription
idstringRequiredThe invoice ID.

Example request

bash
curl https://api.askverdict.ai/api/invoices/inv_abc123 \
  -H "Authorization: Bearer <token>"

Response

The single-invoice response includes additional Stripe identifiers not present in the list response:

Extra fieldTypeDescription
stripePaymentIntentIdstring | nullStripe PaymentIntent ID (pi_...)
stripeSessionIdstring | nullStripe Checkout Session ID (cs_...)
stripeInvoiceIdstring | nullStripe Invoice ID (in_...)

Error responses

StatusCodeDescription
401UNAUTHORIZEDNot authenticated
404NOT_FOUNDInvoice not found or does not belong to this user

Plan feature matrix

FeatureFreeProBYOKBYOK ProEnterprise
Credits / debates10 on signup500/moUnlimited (own keys)Unlimited (own keys)Custom
All debate modesYesYesYesYesYes
Quick TakeYesYesYesYesYes
Verdict CompareYesYesYesYesYes
API accessNoYesYesYesYes
CLI & SDKNoYesYesYesYes
Evidence engineNoYesNoYesYes
Decision matrixNoYesNoYesYes
Convergence scoresNoYesNoYesYes
Argument graph heatmapNoYesNoYesYes
File upload + storageNoYesNoYesYes
Advanced audit logsNoYesNoYesYes
Team seats1Up to 25Up to 5Up to 10Unlimited
SSO / SAMLNoNoNoNoYes
Custom SLANoNoNoNoYes

Enterprise

For enterprise pricing, custom SLAs, dedicated support, and on-premise options, contact support@askverdict.ai.

Was this page helpful?