Credits, billing & usage tracking
Every call to the Nyne.ai API is priced in credits. Most endpoints charge a fixed amount per call; a few price dynamically by the number of results you request. This guide covers exactly how much each endpoint costs, how feature toggles change the price, when credits are checked and deducted, the monthly request quota, and how to reconcile usage without double-counting.
credits
One flat charge per successful call, whatever the payload. person_enrichment = 2, person_ask = 10.
credits x requested_limit
You pay for the number of results you asked for. person_search, company_search, and company_employees scale with limit.
The credit model
Most endpoints cost a fixed number of credits per call. Search and company employees are dynamic: the charge is credits x requested_limit, so asking for more results costs
proportionally more. These are the documented default costs - your workspace may have negotiated overrides, and
the live figures load from your account into the endpoint pages.
Person
| Action | Credits | Notes |
|---|---|---|
| person_search | 1x limit | Per result requested (x limit). |
| person_enrichment | 2 | Standard full-profile enrichment. |
| person_lookup_fields | 1 | Only the fields you ask for. |
| person_email | 1 | Single best work email. |
| person_phone | 1 | Single best phone. |
| person_newsfeed | 1 | ceil(limit / 10) units; by-URL lookup bills 1. |
| person_ask | 10 | AI-powered profile Q&A. |
| person_interests | 5 | Interest analysis. |
| person_leads | 1 | Lead search. |
| person_discover | 10 | Discovery. |
| person_deep_research | 100 | Long-running deep research. |
| social_account_validation | 10 | Validate a social account. |
Company
| Action | Credits | Notes |
|---|---|---|
| company_search | 1x limit | Per result requested (x limit). |
| company_enrichment | 1 | Full company profile. |
| company_employees | 1x limit | Per result requested (x limit). |
| company_intent | 10 | Buyer-intent signals. |
| company_competitor_engagements | 5 | Per engagement result. |
| company_needs | 1 | Company needs. |
| company_funding | 1 | Funding history. |
A few pricing specifics worth knowing
person_askcosts 10 credits per call - it runs an AI analysis over the profile.- Newsfeed quantity is
ceil(limit / 10)units, so a larger feed costs more units; a single by-URL newsfeed lookup bills 1. - Standard
person_enrichmentis the everyday tier. The higher-tierperson_enrichforces a full newsfeed and costs more - see Request depth for when to reach for it.
Feature surcharges
On search endpoints, feature toggles change the price. The more you turn on, the more each result costs. The billing action key is a function of the feature combination - deduped and canonically ordered - so the same set of toggles always maps to the same key:
show_emailsshow_phone_numbersinsightsprofile_scoringhigh_freshnessrequire_emailsrequire_phone_numbersrequire_phones_or_emailsFor example, a search with emails and phones on bills under person_search:show_emails:show_phone_numbers. Which toggles are
available and what each one adds is covered in Request depth.
Pre-flight checks & deduction
Credits are handled in two moments. Before any work starts, the request runs a pre-flight allowance
check: if the workspace cannot cover the estimated cost, the call fails immediately with 402 insufficient_credits and nothing is spent. Credits are only deducted on completion, after a meaningful result. Async endpoints reserve at submit and debit
in the worker once the result lands. Every charge carries a billing_action_key naming exactly what was billed:
{
"success": true,
"data": {
"request_id": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4_1717000000_4271",
"status": "completed",
"billing_action_key": "person_search:show_emails:show_phone_numbers",
"credits_charged": 20,
"requested_limit": 10
},
"timestamp": "2026-05-28T18:04:45"
}Empty results do not burn credits
When the pre-flight check fails, the shape is the standard error envelope - branch on error.code:
{
"success": false,
"error": {
"code": "insufficient_credits",
"message": "Not enough credits to complete this request."
},
"timestamp": "2026-05-28T18:04:45"
}The monthly quota
On top of per-request credits, your plan has a monthly request quota - a cap on how many calls
you can make in a billing month, independent of credit balance. Exceeding it returns monthly_limit_exceeded with HTTP 429:
{
"success": false,
"error": {
"code": "monthly_limit_exceeded",
"message": "Monthly request quota exceeded."
},
"timestamp": "2026-05-28T18:04:45"
}Every response carries the quota state in headers, so you can watch your remaining budget without a separate call:
| Header | Meaning |
|---|---|
| X-Quota-Limit | Requests allowed this month. |
| X-Quota-Used | Requests already spent this month. |
| X-Quota-Remaining | Requests left before the cap. |
| X-Quota-Reset | When the quota window resets. |
The quota is distinct from per-minute and per-hour throttling. For those, see Rate limits.
Usage tracking & analytics
You can see per-call spend and history through the Usage Analytics API, which reports credits grouped by billing_action_key:
{
"success": true,
"data": {
"period": "2026-05",
"total_credits": 142,
"by_action": [
{
"billing_action_key": "person_search",
"credits": 40,
"calls": 40
},
{
"billing_action_key": "person_search:show_emails",
"credits": 60,
"calls": 30
},
{
"billing_action_key": "person_enrichment",
"credits": 42,
"calls": 21
}
]
},
"timestamp": "2026-05-28T18:04:45"
}Two ledgers - do not double-count
api_requests is the request ledger (call
counts; its credits column is 0). credit_tracker is the credits ledger and is
authoritative for billing. Reconcile spend by SUMming credit_tracker grouped by billing_action_key, never by adding up request rows.| Table | Role | Reconcile with |
|---|---|---|
| api_requests | Request ledger. One row per call. The credits column is 0 here. | Count calls, inspect status and timing. |
| credit_tracker | Credits / billing ledger. One row per charge, keyed by billing_action_key. | SUM credits for authoritative billing. |
What isn't billed yet
Some newer or observability-only pricing is computed but not yet debited. For instance, a
general-search backend path calculates a cost without charging it. You may see a computed cost that never shows
up on the bill - that is expected, not a discrepancy. Treat credit_tracker as the source of truth for what you were actually charged.
What's next
- Rate limits - per-minute and per-hour throttling, and how the monthly quota fits in.
- Request depth - the feature toggles and enrichment tiers that move the price.
- Effective requests - shaping calls to get the results you need for the fewest credits.
- Responses - the envelope, error codes, and status fields you branch on.