Skip to content
Docs menu

REST API reference

Base URL: https://freshlycited.com/api/v1. Authenticate with an API key: Authorization: Bearer ipk_… (or X-Api-Key). Every response is { "ok": true, "data": … } or { "ok": false, "error": { "code", "message", "request_id" } } and carries an X-Request-Id header. This page is generated from the same OpenAPI 3.1 spec the server publishes, which is built from the live route table.

The story · 3 steps
Get an API keyFree plan: 10 free links to try (once you verify your email), then 100 free checks a month, no card.
bash
curl https://freshlycited.com/api/v1/me -H "Authorization: Bearer ipk_YOUR_KEY"

Errors: 401 missing/invalid key · 402 not enough credits · 403 role too low or account awaiting approval · 404 not found or outside your workspace · 409 conflict · 413 more than 10,000 URLs · 422 validation · 429 rate limit (see Retry-After). Lists take page, page_size (≤200), sort, dir and return { items, total, page, page_size }.

Account

Identity, profile, sessions and connected apps.

GET /me

Identity of the API key or session.

GET /mcp-tools

MCP tool catalog (names, descriptions, input schemas, examples).

GET /routes

Every REST route.

GET /pricing

Credits, packs, plans, the credit-back guarantee and rate limits (USD).

GET /oauth/grants

Apps connected to your login via OAuth.

DELETE /oauth/grants/{id}

Disconnect an app (revokes its tokens).

ParameterInTypeRequiredDescription
idpathstringyes

GET /profile

Your profile.

PATCH /profile

Update your profile.

Request body (JSON):

Any JSON object (see the app for fields).

DELETE /profile

Delete your account.

Request body (JSON):

Any JSON object (see the app for fields).

POST /profile/password

Change your password.

Request body (JSON):

ParameterTypeRequiredDescription
current_passwordstringyes
new_passwordstringyes

GET /profile/sessions

Your sign-in sessions.

DELETE /profile/sessions/{sid}

Sign out one session.

ParameterInTypeRequiredDescription
sidpathstringyes

Clients

Your agency workspace, client workspaces and members.

GET /tenants

List your workspace and its clients (tree order). MCP tool: list_tenants.

ParameterInTypeRequiredDescription
qquerystringno
kindqueryagency | team | clientno
include_archivedquerystringno

POST /tenants

Create a client or team workspace. Role admin or higher. MCP tool: create_sub_tenant.

Request body (JSON):

ParameterTypeRequiredDescription
namestring (≤120 chars)yes
kindteam | clientno
parent_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
notesstringno

GET /tenants/{id}

Get a workspace. MCP tool: get_tenant.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /tenants/{id}

Update, move, archive or restore a workspace. Role admin or higher. MCP tool: update_tenant.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
namestringno
kindteam | clientno
notesstringno
default_recheck_daysinteger (≥0, ≤5)no
parent_idstringno
archivedbooleanno

DELETE /tenants/{id}

Delete an empty workspace (confirm=<name>) or archive it (mode=archive). Role admin or higher. MCP tool: delete_tenant.

ParameterInTypeRequiredDescription
idpathstringyes
confirmquerystringno
modequerydelete | archiveno

GET /tenants/{id}/members

List a workspace's members. MCP tool: list_members.

ParameterInTypeRequiredDescription
idpathstringyes

POST /tenants/{id}/members

Add or invite a member. Role admin or higher. MCP tool: add_member.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
emailstringyes
roleowner | admin | member | client_vieweryes
namestringno

PATCH /tenants/{id}/members/{uid}

Change a member's role. Role admin or higher. MCP tool: update_member_role.

ParameterInTypeRequiredDescription
idpathstringyes
uidpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
roleowner | admin | member | client_vieweryes

DELETE /tenants/{id}/members/{uid}

Remove a member. Role admin or higher. MCP tool: remove_member.

ParameterInTypeRequiredDescription
idpathstringyes
uidpathstringyes

GET /members

List members (of tenant_id, default yours).

ParameterInTypeRequiredDescription
tenant_idquerystringnoLimit to one workspace

POST /members

Add or invite a member. Role admin or higher.

Request body (JSON):

ParameterTypeRequiredDescription
emailstringyes
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
roleowner | admin | member | client_vieweryes
namestringno

GET /tenants/{id}/branding

White-label branding of a workspace and what the plan allows.

ParameterInTypeRequiredDescription
idpathstringyes

PUT /tenants/{id}/branding

Update white-label branding (logo: Agency Starter+; colours, sender name: Agency Pro+; custom domain: Agency Scale). Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
logo_urlstring | nullno
accentstring | nullno
from_namestring | nullno
domainstring | nullno

Settings

Workspace and platform settings.

GET /settings/email

Email delivery settings. Platform admin only.

PUT /settings/email

Update email delivery settings. Platform admin only.

Request body (JSON):

Any JSON object (see the app for fields).

POST /settings/email/test

Send a test email. Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
tostringno

GET /settings/email/templates

Email templates. Role admin or higher.

GET /settings/email/templates/{name}

Preview an email template. Role admin or higher.

ParameterInTypeRequiredDescription
namepathstringyes

POST /settings/email/templates/{name}/send

Send a template preview to yourself. Role admin or higher.

ParameterInTypeRequiredDescription
namepathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
tostringno

GET /emails

Email log. Role admin or higher.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
statusquerystringno
templatequerystringno

GET /emails/{id}

One logged email. Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

POST /emails/{id}/resend

Resend a logged email. Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

GET /tenants/{id}/notifications

Notification settings of a workspace.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /tenants/{id}/notifications

Update notification settings. Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

Any JSON object (see the app for fields).

POST /tenants/{id}/digest

Send the daily digest now. Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
tostringno
skip_if_unchangedbooleanno

GET /tenants/{id}/digest/preview

Preview the daily digest.

ParameterInTypeRequiredDescription
idpathstringyes

GET /settings/integrations

Check engines, caps and spend. Platform admin only.

PUT /settings/integrations

Update check engines and caps. Platform admin only.

Request body (JSON):

Any JSON object (see the app for fields).

POST /settings/integrations/{source}/test

Test a check engine. Platform admin only.

ParameterInTypeRequiredDescription
sourcepathstringyes

GET /settings/crawl

Crawl routes: status, circuit breaker, last errors, plan and allowance. Platform admin only.

PUT /settings/crawl

Update crawl plan tier, cost, monthly allowance and failover thresholds. Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
plan_tierstring | nullno
cost_per_indexed_usdnumber | nullno
monthly_allowanceinteger (≥-9007199254740991, ≤9007199254740991) | nullno
fallback_cost_per_indexed_usdnumberno
failover_errorsinteger (≥-9007199254740991, ≤9007199254740991)no
failover_window_mininteger (≥-9007199254740991, ≤9007199254740991)no
failover_cooldown_mininteger (≥-9007199254740991, ≤9007199254740991)no
failover_allowance_pctnumberno
failover_day3_min_rate_pctnumberno

POST /settings/crawl/breaker/reset

Close the crawl circuit breaker (route new batches to the primary again). Platform admin only.

POST /settings/crawl/{route}/test

Test a crawl route (free, read-only call). Platform admin only.

ParameterInTypeRequiredDescription
routepathstringyes

GET /settings/job-sync

Crawl-status sync schedule.

PUT /settings/job-sync

Update the crawl-status sync schedule. Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
frequencydaily | 6h | 1hno
timestringno
tzstringno

GET /settings/access

Sign-up mode and the Free plan grant. Platform admin only.

PUT /settings/access

Update the sign-up mode. Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
signup_modeapproval | openno

Credits

Balances, ledger, allocations and credit packs.

GET /credits

Credit balance and recent ledger. MCP tool: get_credits.

ParameterInTypeRequiredDescription
tenant_idquerystringnoLimit to one workspace

GET /credits/ledger

Paginated credit ledger (kind=index|check). MCP tool: list_ledger.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
tenant_idquerystringnoLimit to one workspace
kindqueryindex | checkno
directionqueryin | outno

GET /credits/ledger/{id}

One ledger entry with related lines.

ParameterInTypeRequiredDescription
idpathstringyes

POST /credits/ledger/{id}/reverse

Reverse an allocation or grant. Role admin or higher. MCP tool: reverse_ledger_entry.

ParameterInTypeRequiredDescription
idpathstringyes

POST /credits/allocate

Give index or check credits to a client (negative pulls back). Role admin or higher. MCP tool: allocate_credits.

Request body (JSON):

ParameterTypeRequiredDescription
tenant_idstringyes
amountinteger (≥-9007199254740991, ≤9007199254740991)yes
kindindex | checknoWhich credits to move (default index)
notestringno

POST /credits/adjust

Adjust index or check credits (platform admin). Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
tenant_idstringyes
amountinteger (≥-9007199254740991, ≤9007199254740991)yes
reasonstringyes
kindindex | checkno

GET /credits/packs

Credit packs (index + check credits, USD).

GET /credits/requests

Credit pack requests.

ParameterInTypeRequiredDescription
statusquerystringno

POST /credits/requests

Request a credit pack. Role admin or higher.

Request body (JSON):

ParameterTypeRequiredDescription
packtry | boost | pro | checks | checks_lyes
tenant_idstringno
notestringno

GET /plans

Plans and their limits (USD).

Pushes

Push links to Google (index jobs) and track them. Verified IndexNow hosts are also sent to Bing & co.

GET /jobs

List pushes and visibility checks, each with an outcome. MCP tool: list_jobs.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
tenant_idquerystringnoLimit to one workspace
statusquerystringno
typequeryindex | checkno

POST /jobs

Push links (index job): free pre-flight, 1 index credit reserved per link and used only if indexed (credit back after the last re-check); verified IndexNow hosts are also sent to Bing. Role member or higher. MCP tool: submit_index_job.

Request body (JSON):

ParameterTypeRequiredDescription
urlsarray of stringyesFull http(s) URLs, up to 10,000 (Free plan: 50). Duplicates and invalid entries are dropped and reported.
modestandardnoLane. Only standard exists: 1 index credit per link, used only if the link gets indexed (credit back after 7 days if not). A faster priority lane is not available yet.
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
namestring (≤200 chars)noLabel shown in lists, emails and client reports
drip_daysinteger (≥0, ≤30)noSpread the push over this many days (0 = all now)
recheck_daysinteger (≥0, ≤5)noDeprecated, kept for compatibility: re-checks now follow the guarantee schedule (day 1, 3, 7) automatically
pre_checkbooleannoTake a 'before' snapshot first (1 check credit/URL); every link is still pushed
smartbooleannoRecommended: check first and only push what Google can't see (their index credit comes back)
preflightbooleannoRun the free pre-flight (default true)
skip_flaggedbooleannoSkip URLs the pre-flight flags, for free (default true)
push_anywayboolean | array of stringnoPush flagged URLs anyway (true = all, or a list). They aren't covered by the guarantee: their index credit is used
force_refreshbooleannoRefresh anyway (needs smart=true): links Google already has are sent too and use 1 index credit each when sent. No credit back: we can't see when Google re-crawls a page it already has, so the guarantee doesn't apply. IndexNow pings stay free
indexnow_forcebooleannoResend to IndexNow even if sent in the last 24 h (only when the content changed again)

POST /urls/validate

Validate and de-duplicate URLs (free). MCP tool: validate_urls.

Request body (JSON):

ParameterTypeRequiredDescription
urlsarray of string | stringyes

POST /preflight

Pre-flight URLs before pushing (free): 4xx/5xx, noindex, robots.txt, redirects, canonical elsewhere. Role member or higher. MCP tool: preflight_urls.

Request body (JSON):

ParameterTypeRequiredDescription
urlsarray of stringyes
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.

GET /jobs/{id}

One push or check with outcome, comparison and IndexNow summary. MCP tool: get_job_status.

ParameterInTypeRequiredDescription
idpathstringyes
url_limitquerystringno

PATCH /jobs/{id}

Rename a job. Role member or higher. MCP tool: update_job.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
namestring (≤200 chars)no
recheck_daysinteger (≥0, ≤5)no

DELETE /jobs/{id}

Delete a finished job. Role admin or higher. MCP tool: delete_job.

ParameterInTypeRequiredDescription
idpathstringyes

POST /jobs/{id}/sync

Refresh crawl status now.

ParameterInTypeRequiredDescription
idpathstringyes

POST /jobs/{id}/cancel

Cancel a job (unsent links refunded). Role member or higher. MCP tool: cancel_job.

ParameterInTypeRequiredDescription
idpathstringyes

POST /jobs/{id}/retry

Push failed links again. Role member or higher. MCP tool: retry_job.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
modestandardnoLane. Only standard exists: 1 index credit per link, used only if the link gets indexed (credit back after 7 days if not). A faster priority lane is not available yet.

POST /jobs/{id}/send-unindexed

Push the links Google can't see again. Role member or higher. MCP tool: send_unindexed_to_indexer.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
modestandardnoLane. Only standard exists: 1 index credit per link, used only if the link gets indexed (credit back after 7 days if not). A faster priority lane is not available yet.
drip_daysinteger (≥0, ≤30)no
recheck_daysinteger (≥0, ≤5)noDeprecated: guarantee re-checks are automatic

GET /jobs/{id}/urls

A job's links (filters: state, indexed=yes|no|unknown, credit=reserved|consumed|released|excluded). MCP tool: list_job_urls.

ParameterInTypeRequiredDescription
idpathstringyes
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
statequerystringno
indexedqueryyes | no | unknownno
creditqueryreserved | consumed | released | excludedno

DELETE /jobs/{id}/urls/{uid}

Remove one link from a finished job. Role member or higher. MCP tool: delete_job_url.

ParameterInTypeRequiredDescription
idpathstringyes
uidpathstringyes

Checks

Visibility checks (index checks), stored search results, CSV exports and client reports.

POST /jobs/{id}/check

Re-check a job's links now (1 check credit per link, 5 with scan_live). Role member or higher.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
url_idsarray of integer (≥-9007199254740991, ≤9007199254740991)no
enginescan_standard | scan_live | scan_bing | upstreamno

GET /jobs/{id}/google

Stored search results (pass url for one link's history). MCP tool: get_check_results.

ParameterInTypeRequiredDescription
idpathstringyes
urlquerystringno

GET /jobs/{id}/google/raw/{rid}

Raw stored search response.

ParameterInTypeRequiredDescription
idpathstringyes
ridpathstringyes

GET /jobs/{id}/csv

Export a job as CSV. MCP tool: export_job_csv.

ParameterInTypeRequiredDescription
idpathstringyes

POST /check

Visibility check (index check). Role member or higher. MCP tool: check_index.

Request body (JSON):

ParameterTypeRequiredDescription
urlsarray of stringno
job_idstringno
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
namestring (≤200 chars)no
enginescan_standard | scan_live | scan_bing | upstreamno

POST /jobs/{id}/share

Create (or return) a client report link. Role member or higher. MCP tool: share_job_report.

ParameterInTypeRequiredDescription
idpathstringyes

DELETE /jobs/{id}/share

Stop sharing a client report. Role member or higher.

ParameterInTypeRequiredDescription
idpathstringyes

IndexNow

Sites verified for IndexNow (Bing, Copilot, Yandex, Seznam, Naver, Yep) and what each push sent.

GET /jobs/{id}/indexnow

What a push sent to IndexNow (per link + summary). MCP tool: get_job_indexnow.

ParameterInTypeRequiredDescription
idpathstringyes

GET /indexnow/sites

List IndexNow sites. MCP tool: list_indexnow_sites.

ParameterInTypeRequiredDescription
tenant_idquerystringnoLimit to one workspace

POST /indexnow/sites

Add a site (returns the key to host). Role admin or higher. MCP tool: add_indexnow_site.

Request body (JSON):

ParameterTypeRequiredDescription
hoststringyesDomain or any URL on it, e.g. https://www.example.com/blog
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
key_locationstringnoOptional full URL of the key file on the same host, e.g. https://example.com/keys/indexnow.txt

GET /indexnow/sites/{id}

One IndexNow site with recent submissions.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /indexnow/sites/{id}

Turn pings on/off or change the key location. Role admin or higher. MCP tool: update_indexnow_site.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
enabledbooleanno
key_locationstring | nullno

DELETE /indexnow/sites/{id}

Remove an IndexNow site. Role admin or higher. MCP tool: delete_indexnow_site.

ParameterInTypeRequiredDescription
idpathstringyes

POST /indexnow/sites/{id}/verify

Fetch the key file and verify the site. Role member or higher. MCP tool: verify_indexnow_site.

ParameterInTypeRequiredDescription
idpathstringyes

POST /indexnow/sites/{id}/rotate-key

Generate a new key (verify again afterwards). Role admin or higher.

ParameterInTypeRequiredDescription
idpathstringyes

POST /indexnow/preview

How many of these URLs would also go to IndexNow.

Request body (JSON):

ParameterTypeRequiredDescription
urlsarray of stringyes
tenant_idstringno

GET /indexnow/own

Our own site's IndexNow submissions (platform admin). Platform admin only.

POST /indexnow/tick

Run the daily re-verification now (platform admin). Platform admin only.

API keys

API keys and their per-key limits.

GET /api-keys

List API keys (prefix only). MCP tool: list_api_keys.

ParameterInTypeRequiredDescription
tenant_idquerystringnoLimit to one workspace
statusqueryactive | revokedno
qquerystringno

POST /api-keys

Create an API key (secret shown once). Role admin or higher. MCP tool: create_api_key.

Request body (JSON):

ParameterTypeRequiredDescription
namestringno
tenant_idstringnoWorkspace (tenant) id. Defaults to the workspace of the key or connection; use list_tenants to find client ids.
roleowner | admin | member | client_viewerno
rate_per_mininteger (≥1, ≤600)no
rate_per_dayinteger (≥1, ≤100000)no
daily_credit_capinteger (≥1, ≤9007199254740991) | nullno

GET /api-keys/{id}

One API key.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /api-keys/{id}

Rename, change role or limits. Role admin or higher. MCP tool: update_api_key.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
namestringno
roleowner | admin | member | client_viewerno
rate_per_mininteger (≥1, ≤600) | nullno
rate_per_dayinteger (≥1, ≤100000) | nullno
daily_credit_capinteger (≥1, ≤9007199254740991) | nullno

DELETE /api-keys/{id}

Delete an API key. Role admin or higher. MCP tool: delete_api_key.

ParameterInTypeRequiredDescription
idpathstringyes

POST /api-keys/{id}/revoke

Revoke an API key. Role admin or higher. MCP tool: revoke_api_key.

ParameterInTypeRequiredDescription
idpathstringyes

Platform

FreshlyCited platform administration.

GET /users

List users. Platform admin only. MCP tool: list_users.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
statusquerystringno

POST /users

Create a user. Platform admin only.

Request body (JSON):

Any JSON object (see the app for fields).

GET /users/{id}

One user. Platform admin only. MCP tool: get_user.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /users/{id}

Update a user. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

Any JSON object (see the app for fields).

DELETE /users/{id}

Delete a user. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /users/{id}/reset-password

Reset a user's password. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

Any JSON object (see the app for fields).

POST /users/{id}/suspend

Suspend a user. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /users/{id}/activate

Re-activate a user. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /users/{id}/memberships

Add a membership. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
tenant_idstringyes
rolestringyes

DELETE /users/{id}/memberships/{tid}

Remove a membership. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes
tidpathstringyes

DELETE /users/{id}/sessions/{sid}

Sign out a user's session. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes
sidpathstringyes

GET /audit

Audit trail. Platform admin only. MCP tool: list_audit_log.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno
actionquerystringno

GET /errors

Tracked errors. Platform admin only. MCP tool: list_errors.

ParameterInTypeRequiredDescription
pagequerystringno
page_sizequerystringno
qquerystringno
sortquerystringno
dirqueryasc | descno

GET /errors/{id}

One tracked error. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

PATCH /errors/{id}

Resolve or reopen an error. Platform admin only. MCP tool: resolve_error.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
resolvedbooleanyes

DELETE /errors/{id}

Delete a tracked error. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /users/{id}/approve

Approve a pending account. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /users/{id}/decline

Decline a pending account. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /credits/requests/{id}/approve

Approve a credit request. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

POST /credits/requests/{id}/decline

Decline a credit request. Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
notestringno

POST /credits/requests/{id}/refund

Refund an approved pack: takes back its unspent credits (platform admin). Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
notestringno

GET /upstream/balance

Upstream balances: Standard scans (USD), Live scans (searches left), Pilot Crawl. Platform admin only.

ParameterInTypeRequiredDescription
refreshquerystringno1 = bypass the 5-minute cache

PUT /tenants/{id}/plan

Set a workspace's plan (platform admin override; Stripe sets it automatically once payments are live). Platform admin only.

ParameterInTypeRequiredDescription
idpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
planfree | agency_starter | agency_pro | agency_scaleyes
statusactive | past_due | canceledno
intervalmonth | year | nullno
current_period_endstring | nullno
grace_untilstring | nullno
grant_periodbooleannoAlso grant one period of plan credits
period_startstringno
period_endstringno
refstringnoIdempotency key for the grant

GET /admin/margin

Margin dashboard: revenue vs upstream cost, index and credit-back rates, free-tier cost, upstream utilisation, reconciliation. Platform admin only.

ParameterInTypeRequiredDescription
fromquerystringno
toquerystringno
daysquerystringno

GET /admin/margin/settings

Upstream tier, $/indexed link, monthly allowance and check rates. Platform admin only.

PUT /admin/margin/settings

Update upstream tier, $/indexed link, monthly allowance and check rates. Platform admin only.

Request body (JSON):

ParameterTypeRequiredDescription
tierstring | nullno
cost_per_indexed_usdnumber | nullno
monthly_allowanceinteger (≥-9007199254740991, ≤9007199254740991) | nullno
standard_check_usdnumberno
live_check_usdnumberno

PUT /admin/margin/reconciliation/{month}

Enter the upstream billed count for a month (YYYY-MM). Platform admin only.

ParameterInTypeRequiredDescription
monthpathstringyes

Request body (JSON):

ParameterTypeRequiredDescription
billed_countinteger (≥-9007199254740991, ≤9007199254740991) | nullyes
notestringno

POST /billing/tick

Run the guarantee re-checks and credit housekeeping now (platform admin). Platform admin only.