Discovery
25 operations. Each REST operation is also an MCP tool of the same name. REST https://tlntconnect.com/api/v1
GET/api/v1/discovery/runs
Pages through the workspace's Discovery runs (newest first), as the Discovery history in the app: filter by status, platform or a text match on the search. `page` starts at 1; `limit` is at most 50. Each run carries its status, requested and found counts and cache expiry. Requires discovery:read and a member with Discovery access (an admin, or a member an admin granted Discovery): anyone else gets 404.
list_discovery_runsdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
status query"queued" | "running" | "waiting_provider_config" | "completed" | "failed" | "cancelled"platform query"instagram" | "tiktok" | "youtube" | "x"q querystring — Text match on the search niche/query.page queryintegerlimit queryintegerResponses
GET/api/v1/discovery/runs/{run_id}
Returns one run of this workspace: status (queued → running → completed / failed / cancelled), requested and found counts, the cache expiry and the provider units it used. Poll it after run_discovery_search until it is completed, then page the results with list_discovery_results. Another workspace's run id is 404.
get_discovery_rundiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.Responses
GET/api/v1/discovery/runs/{run_id}/results
Pages through one run's results in rank order: each result has its platform, handle, profile data from the provider, scores, status (candidate / imported / existing / rejected) and creator_id once it is on the roster. Profile text (bios, names, captions) is authored by the creators, not the agency: it is labelled untrusted. `offset` + `limit` (≤ 50) page through the run. Another workspace's run id is 404.
list_discovery_resultsdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
data
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.offset queryintegerlimit queryintegerResponses
GET/api/v1/discovery/runs/{run_id}/diagnostics
The support diagnostics the app shows for one run: each provider call (cache hit or miss, provider units used, error), the cost decisions taken before spending, enrichment events, result counts and alerts, with a copyable summary. Free-text values are sanitised (secrets redacted, strings bounded). Another workspace's run id is 404.
get_discovery_run_diagnosticsdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.Responses
POST/api/v1/discovery/runs/{run_id}/cancel
Cancels a queued or running run of this workspace and aborts its active provider calls, as the app's Cancel does (400 for a run that already finished, checked atomically). A search started over the API holds its credits until the run ends: a cancelled run is charged only for the result pages it already delivered, at the quoted per-page price, and the rest is released (also back to the key's daily cap); list_discovery_results then shows exactly the charged pages. Requires discovery:spend (the scope that starts runs) and an admin or manager member. Another workspace's run id is 404.
cancel_discovery_rundiscovery:spend- admin, manager
- optional
- 1
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.Idempotency-Key headerstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.reason bodystringResponses
POST/api/v1/discovery/runs/{run_id}/results/import
Imports up to 25 results of one run into the roster through the app's own import — the creator, their platform profile and metrics — and with add_to_pipeline also into the pipeline. A result already on the roster is linked, not duplicated. Each result answers its own outcome: imported (with creator_id) or failed with an error code — e.g. trial_limit_reached when a trial workspace's roster is full. Billable seats sync after an import. Free (no Discovery credits). Requires discovery:read and roster:write, an admin or manager member, and Discovery access. Another workspace's run or result is 404.
import_discovery_resultsdiscovery:read+roster:write- admin, manager
- optional
- 1
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.Idempotency-Key headerstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.result_ids body, requiredarray of string (uuid)add_to_pipeline bodybooleanResponses
POST/api/v1/discovery/runs/{run_id}/results/add-to-list
Adds results of one run to a creator list of this workspace, importing each creator into the roster first when it is not there yet — the app's Discovery "Add to list". Free (no Discovery credits). Requires discovery:read, lists:write and roster:write (it can create roster creators), an admin or manager member, and Discovery access. Another workspace's run, result or list is 404; a trial workspace whose roster is full gets 402 trial_limit_reached.
add_discovery_results_to_listdiscovery:read+lists:write+roster:write- admin, manager
- optional
- 1
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.Idempotency-Key headerstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.list_id body, requiredstring (uuid) — Creator list id in this workspace.result_ids body, requiredarray of string (uuid)Responses
GET/api/v1/discovery/runs/{run_id}/results/{result_id}/report
Returns the stored creator report (audience demographics, metrics, contact email when the provider has one) for one Discovery result — free, never a provider call. status is available with the report, or unavailable when this workspace does not hold it: buy it with preflight_creator_report + purchase_creator_report. The preflight block says what loading it would cost. Report text (bio, names) is authored by the creator: it is labelled untrusted. Another workspace's run or result is 404.
get_creator_reportdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
report
Input
run_id path, requiredstring (uuid) — Discovery run id in this workspace.result_id path, requiredstring (uuid) — Discovery result id (of that run).calculation_method query"median" | "average"Responses
POST/api/v1/discovery/runs/{run_id}/results/{result_id}/report
Loads the creator report you priced with preflight_creator_report, presenting its quote_token. A report this workspace holds answers at 0 credits; a fresh report another workspace bought is sold without a provider call; otherwise the provider is called. The charge is keyed by the report, so the same report is never charged twice — whatever the retries or Idempotency-Keys. Charged exactly as in the app: a provider pull that returns no report still costs its credits (the rate card). On a key left on "Ask for approval in TLNT" a paid report is queued for an admin (202 pending_approval); a 0-credit (cached) report always answers directly. Report text (bio, names) is authored by the creator: labelled untrusted. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
purchase_creator_reportdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 5
report
Input
run_id path, requiredstring (uuid)result_id path, requiredstring (uuid)Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.calculation_method body"median" | "average"refresh bodybooleanquote_token body, requiredstring — The quote_token from the paired preflight (valid 5 minutes, this key only).Responses
GET/api/v1/discovery/credits
The workspace's customer-credit balance for the current period (the figure the app's credits chip shows): credits granted (per billable manager on per-seat plans), spent, released by failed actions, remaining and the date it resets. remaining is null and metered false on a plan with no credit pool (nothing is ever charged). Credits are integers; one credit is the unit every Discovery price is quoted in. Requires discovery:read.
get_discovery_creditsdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Responses
GET/api/v1/discovery/credits/history
The customer-credit ledger for the current period, newest first (the app's credit history): each spend (negative amount) with what it was for, each release (a failed or cancelled action handing credits back) and grant, who drew it and the balance after it. `limit` is at most 200. Requires discovery:read.
list_discovery_credit_historydiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
limit queryintegerResponses
GET/api/v1/discovery/presets
Lists the workspace's saved Discovery searches (presets) the key's member can see: every shared one, plus their own private ones — another member's private saved search never leaves the database. Each carries its search, schedule (off / daily / weekly) and whether this member can edit it. `q` matches the name; `limit` ≤ 50. A seeded budget cap is hidden from a member who cannot see money. Requires discovery:read.
list_discovery_presetsdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
q querystringmine querybooleanlimit queryintegerResponses
GET/api/v1/discovery/presets/{preset_id}
Returns one saved search the key's member can see (shared, or their own). Another member's private saved search and another workspace's id are both 404. Requires discovery:read.
get_discovery_presetdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
Input
preset_id path, requiredstring (uuid) — Saved search id in this workspace.Responses
POST/api/v1/discovery/presets/{preset_id}/unschedule
Sets a saved search's schedule to off: no more scheduled runs, so no more recurring spend. Turning a schedule ON is recurring spend and follows the credential's Discovery credits setting (schedule_discovery_preset); turning it off never needs approval. Requires discovery:spend, an admin or manager member (or the saved search's owner). Another workspace's id, or another member's private saved search, is 404.
unschedule_discovery_presetdiscovery:spend- admin, manager
- optional
- 1
Input
preset_id path, requiredstring (uuid) — Saved search id in this workspace.Idempotency-Key headerstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.Responses
POST/api/v1/discovery/searches/preflight
Free. Prices one Discovery search exactly as the workbench does — per 15-result page (classic filters 3 credits a page, AI text 6 and lookalike 6), cache applied — and checks the workspace can run it (plan allowance, credit balance, provider guards). When it can, returns a signed quote_token (valid 5 minutes, usable only by this key and its member, for exactly this search_plan) for run_discovery_search: pass the same search_plan and lookalike_source. A fully cached search is quoted 0 credits. When it cannot run, quote is null and reason_codes say why (e.g. customer_credit_balance_exceeded). Requires discovery:spend, an admin or manager member with Discovery access.
preflight_discovery_searchdiscovery:spend- admin, manager
- Ignored (read)
- 1
Input
search_plan body, requiredobjectlookalike_source bodyobjectResponses
POST/api/v1/discovery/searches
Starts one Discovery search (a run) for the search_plan and lookalike_source you priced with preflight_discovery_search, presenting its quote_token. Credits: at most the quoted amount; the run holds them until it finishes — a run that fails releases them, and a cancelled run is charged only for the result pages it delivered (the rest released at the quoted per-page price). Returns 201 { status: "started", data.run } (poll get_discovery_run, then list_discovery_results). Retrying with the same quote never starts or charges a second run (status replayed). By default it runs within the credential's daily Discovery-credit cap (100 by default; 429 daily_credit_cap_reached). When the credential asks for approval in TLNT for Discovery credits, a priced search is queued for an admin to approve in TLNT instead (202 pending_approval). 409 quote_expired / quote_invalid / quote_stale mean: preflight again. 402 insufficient_credits when the balance cannot cover it. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
run_discovery_searchdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 5
Input
Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.search_plan body, requiredobjectlookalike_source bodyobjectquote_token body, requiredstring — The quote_token from the paired preflight (valid 5 minutes, this key only).Responses
POST/api/v1/discovery/runs/{run_id}/results/{result_id}/report/preflight
Free. Prices the full creator report (audience demographics, metrics, contact email when the provider has one) for one Discovery result: 0 credits when this workspace already holds a fresh copy, otherwise the report rate (15 credits). A refresh re-pulls a report this workspace holds, allowed once it is 14 days old. Returns the app's report preflight and, when the report can be loaded, a quote_token (5 minutes, this key only) for purchase_creator_report with the same run_id, result_id, calculation_method and refresh. Requires discovery:spend, an admin or manager member with Discovery access. Another workspace's run or result is 404.
preflight_creator_reportdiscovery:spend- admin, manager
- Ignored (read)
- 1
Input
run_id path, requiredstring (uuid)result_id path, requiredstring (uuid)calculation_method body"median" | "average"refresh bodybooleanResponses
POST/api/v1/discovery/contact-unlock/preflight
Free. Price a contact unlock (1 credit per email; pricing provisional) and get the quote_token unlock_creator_contacts needs. The quote_token is valid 5 minutes, only for this key and its member and exactly this request; pass the same fields to unlock_creator_contacts. Calls the paid-provider gate first (503 while live provider calls are switched off, 403 when the member may not spend). Requires discovery:spend, an admin or manager member with Discovery access.
preflight_contact_unlockdiscovery:spend- admin, manager
- Ignored (read)
- 1
Input
emails body, requiredarray of string (email)Responses
POST/api/v1/discovery/contact-unlock
Looks up which creator profiles registered each email (up to 100 emails), presenting the quote_token from preflight_contact_unlock. 1 credit per email. Pricing is provisional (it follows the metering catalog's rate card, so the daily credit cap bounds provider spend). Profile names and handles are authored by the creators: labelled untrusted. The charge is keyed by the quote's signed provider request, so a retry is never charged twice; a provider failure releases the credits. By default it runs within the credential's daily Discovery-credit cap (429 daily_credit_cap_reached). When the credential asks for approval in TLNT for Discovery credits, the lookup is queued for an admin instead (202 pending_approval; once executed, read the result with get_discovery_spend_result). 409 quote_expired / quote_invalid / quote_stale: preflight again; 402 insufficient_credits. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
unlock_creator_contactsdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 5
data
Input
Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.emails body, requiredarray of string (email)quote_token body, requiredstring — The quote_token from the paired preflight (valid 5 minutes, this key only).Responses
POST/api/v1/discovery/audience-overlap/preflight
Free. Price an audience overlap (15 credits; pricing provisional) and get the quote_token get_audience_overlap needs. The quote_token is valid 5 minutes, only for this key and its member and exactly this request; pass the same fields to get_audience_overlap. Calls the paid-provider gate first (503 while live provider calls are switched off, 403 when the member may not spend). Requires discovery:spend, an admin or manager member with Discovery access.
preflight_audience_overlapdiscovery:spend- admin, manager
- Ignored (read)
- 1
Input
platform body, required"instagram" | "youtube"influencers body, requiredarray of stringResponses
POST/api/v1/discovery/audience-overlap
Measures how much the audiences of 2 to 10 Instagram or YouTube creators overlap (each creator's overlapping and unique share, and the totals), presenting the quote_token from preflight_audience_overlap. 15 credits. Pricing is provisional (it follows the metering catalog's rate card, so the daily credit cap bounds provider spend). Usernames are authored by the creators: labelled untrusted. The charge is keyed by the quote's signed provider request, so a retry is never charged twice; a provider failure releases the credits. By default it runs within the credential's daily Discovery-credit cap (429 daily_credit_cap_reached). When the credential asks for approval in TLNT for Discovery credits, the lookup is queued for an admin instead (202 pending_approval; once executed, read the result with get_discovery_spend_result). 409 quote_expired / quote_invalid / quote_stale: preflight again; 402 insufficient_credits. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
get_audience_overlapdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 5
data
Input
Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.platform body, required"instagram" | "youtube"influencers body, requiredarray of stringquote_token body, requiredstring — The quote_token from the paired preflight (valid 5 minutes, this key only).Responses
POST/api/v1/discovery/collaborations/preflight
Free. Price a collaborations lookup (3 credits; pricing provisional) and get the quote_token get_creator_collaborations needs. The quote_token is valid 5 minutes, only for this key and its member and exactly this request; pass the same fields to get_creator_collaborations. Calls the paid-provider gate first (503 while live provider calls are switched off, 403 when the member may not spend). Requires discovery:spend, an admin or manager member with Discovery access.
preflight_creator_collaborationsdiscovery:spend- admin, manager
- Ignored (read)
- 1
Input
kind body, required"posts" | "summary"platform body, required"instagram" | "tiktok" | "youtube"id body, requiredstring — The creator's or brand's profile id, username or URL.collaborator_id bodystringcursor bodystringlimit bodyintegergroup_brand_collaborations bodybooleancreated_after_ms bodyinteger — posts onlycreated_before_ms bodyinteger — posts onlyResponses
POST/api/v1/discovery/collaborations
Lists the brand collaborations of a creator (or the creators of a brand): kind posts (the sponsored posts, up to 30, optionally between created_after_ms and created_before_ms) or summary (counts per counterpart, up to 10), presenting the quote_token from preflight_creator_collaborations. 3 credits. Pricing is provisional (it follows the metering catalog's rate card, so the daily credit cap bounds provider spend). Post text and names are authored outside the agency: labelled untrusted. The charge is keyed by the quote's signed provider request, so a retry is never charged twice; a provider failure releases the credits. By default it runs within the credential's daily Discovery-credit cap (429 daily_credit_cap_reached). When the credential asks for approval in TLNT for Discovery credits, the lookup is queued for an admin instead (202 pending_approval; once executed, read the result with get_discovery_spend_result). 409 quote_expired / quote_invalid / quote_stale: preflight again; 402 insufficient_credits. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
get_creator_collaborationsdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 5
data
Input
Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.kind body, required"posts" | "summary"platform body, required"instagram" | "tiktok" | "youtube"id body, requiredstring — The creator's or brand's profile id, username or URL.collaborator_id bodystringcursor bodystringlimit bodyintegergroup_brand_collaborations bodybooleancreated_after_ms bodyinteger — posts onlycreated_before_ms bodyinteger — posts onlyquote_token body, requiredstring — The quote_token from the paired preflight (valid 5 minutes, this key only).Responses
POST/api/v1/discovery/presets/{preset_id}/schedule
Schedules one of your own saved searches to run daily or weekly. Each scheduled run spends Discovery credits like a search, capped at the saved search's current uncached price per run, and is charged to THIS credential's daily Discovery credit cap when it runs: a run that would pass the cap is skipped (not charged), and the schedule stops when the API key or connection is revoked or expires or its member is deactivated. In the "Discovery credits" approval class: by default it is scheduled at once — the price per run is computed now and also counts against today's credit cap (429 daily_credit_cap_reached past it, nothing scheduled) — and answers 200 { status: "scheduled", data: { preset_id, schedule_frequency, schedule_next_run_at } }. When the credential asks for approval in TLNT for Discovery credits, it is queued for an admin instead (202 pending_approval; the approver sees the price per run; poll get_action). Turn it off at once with unschedule_discovery_preset. Only the saved search's owner can schedule it (403); another workspace's id or another member's private saved search is 404. Requires discovery:spend, an Idempotency-Key, an admin or manager member with Discovery access.
schedule_discovery_presetdiscovery:spend- admin, manager
- Runs directly; queued when the credential asks for approval for discovery_spend
- required
- 1
Input
preset_id path, requiredstring (uuid)Idempotency-Key header, requiredstring — Retry-safe key (1-255 printable ASCII; a UUID is recommended; an RFC 8941 quoted string is accepted). The same key with the same request within 24h replays the stored response byte for byte (Idempotent-Replayed: true) without running again; the replay still consumes the operation's rate weight.frequency body, required"daily" | "weekly"Responses
GET/api/v1/discovery/spend-results/{action_id}
For a paid Discovery call THIS key queued for approval: once an admin approved it and it ran (get_action status executed), returns what it produced — the search's discovery_run_id, the report's result_id (read it free with get_creator_report), a lookup's data (contact unlock, audience overlap, collaborations), the script job, or the schedule — and the credits it charged. Before that, result is null and status says where it is. Another credential's or workspace's action id is 404. Lookup data is authored outside the agency: labelled untrusted. It is kept for the Modash data-retention window (30 days, result_expires_at); after that the result carries result_expired: true and no data.
get_discovery_spend_resultdiscovery:read- admin, manager, scout, viewer
- Ignored (read)
- 1
result
Input
action_id path, requiredstring (uuid) — The action_id a queued paid call returned.