Research
Request question research
Enqueue or reuse bounded public-evidence research. Checks saved originals first. Explicit URL and date constraints can select stored originals even without matching words in their body. No scraping in enqueue. Never approves Lore or attaches a profile. Newest-available retrieval first checks stored dated public evidence, including own social captions and responses already published in Latest. Stored Spotify/Deezer release catalogs and InProcess moments share durable snapshots with the public Latest endpoint. Provider refreshes run only in queued latest_refresh work; question/status/original reads never refresh these providers. A bounded agent explores the saved public snapshot with paginated browsing, model-chosen searches and exact source-window reads before selecting unchanged evidence; exact supporting quotations and factual claims are checked during answer drafting. If stored evidence is insufficient, the model chooses a next lookup from server-validated web, page or connected social options based on the missing information. There is no fixed social-platform priority. Explicit URL/platform restrictions, account identity and existing provider budgets still constrain execution; the chosen plan is persisted and revalidated before subsequent job slices. Web pages retain explicit publication metadata when unambiguous; unknown dates remain unknown, never replaced by fetch time. Every new job reserves one slot in the rolling global saved-question admission cap (100 per 24 hours), with no per-artist saved-chat cap. This is an operational request limit, not a dollar spending guarantee. Direct or saved-source answers consume no outside-research slot. Only when insufficient saved evidence leads to a validated external lookup does the server reserve outside allowance (5 per artist and 100 globally per rolling 24 hours). That reservation is atomic, lease-fenced, and idempotent for the same job; all existing per-job provider/model/lifetime limits still apply. Exhausted outside allowance ends the job unresolved without starting a provider, with outsideResearchReason=quota plus quotaScope, retryAfterSeconds and resetAt. Exhausted global saved admission returns saved_evidence_quota (429), quotaScope=saved_global, and the same reset fields; Retry-After matches retryAfterSeconds. Reset timing comes from the actual rolling-window boundary and is an estimate assuming no newer reservations consume capacity. Old jobs retain their original quota accounting until their rolling window expires. Single-active-job research_busy remains distinct. Completed matching jobs can be reused independently of these admission limits, subject to current eligibility and cache lifetime. Cache identity preserves topic and all source/date/evidence constraints; reuse is not restricted to an arbitrary last-ten-jobs window. Saved research reads all eligible originals within the existing corpus guard, independently of the Latest UI card limits. Published answers retain publication eligibility and private answers remain excluded. Partial saved support is revalidated and combined with newly collected originals before final assessment. Saved selection returns at most 12,000 original characters; combined outside assessment can return at most six windows totaling 24,000 characters. Exploration uses a current public-research model through AI Gateway, with per-step reservation and usage tracking; external provider budgets are unchanged. Service callers may opt into preferDirectEvidence: true to offer bounded saved candidates before model-driven evidence exploration. This option is not part of the persisted neutral request. Selection candidates means evidence is ready for a checked answer attempt, not that it answers the question. At most six exact windows and 12,000 characters are selected. Latest reporting overviews select the six newest distinct canonical posts first, preferring written evidence over a duplicate transcript, then interleave providers only within that cohort. For overview follow-ups with excluded source URLs and no target URL, known In Process posts from the same connected account and stable collection URL contribute their newest eligible representative before the six-candidate limit. Other social posts remain separate activities. Collection names and question keywords do not determine grouping. This diversifies candidate evidence without treating an entire collection as excluded or answered; focused requests and overviews without exclusions keep individual-post selection. Explicit source, platform, evidence-kind, date and URL exclusions still apply. Semantic project exclusions remain an answer-layer obligation. An empty selection enters ordinary research. Candidate jobs reserve the same quota once and preserve normal claim and expiry checks. Legacy callers never reuse a candidate-only job. A client must register and verify its answer, reread current evidence, and continue the same job if the candidate answer is insufficient or fails verification.
Path Parameters
idstringrequiredBody
application/jsonrequiredtopicstringrequiredNeutral public work/topic terms, not private visitor chat.
minLength: 3 · maxLength: 160
evidenceNeedstring · enumrequiredValues: "reporting", "release_date", "credits", "social_caption", "spoken_content"
freshnessstring · enumFor relevance retrieval, recent defaults to the past seven days unless fromDate is supplied. For latest retrieval, newest available evidence may be older; answers must preserve its actual date and coverage limitations.
Values: "stored", "recent"
Default: "stored"
targetUrlstringformat: uri · maxLength: 2048
platformstring · enumRestrict evidence to this platform, including when targetUrl is supplied. InProcess and catalog providers use stored Latest snapshots. If these cannot answer, research ends unresolved with provider_latest_refresh_required; no unrelated social provider is selected. Conflicting platform and target URL ends unresolved with source_platform_mismatch.
Values: "instagram", "tiktok", "x", "inprocess", "spotify", "deezer"
fromDatestringformat: date
toDatestringformat: date
retrievalstring · enumUse latest for a newest-available activity overview or newest post on a requested platform. Selects dated originals in descending order without requiring topic keyword overlap or imposing a seven-day cutoff. Explicit fromDate/toDate bounds still apply. Use relevance for a specific topic or fact; latest is not proof of current exhaustive coverage. For latest release_date requests, prefer eligible catalog originals with activityDateKind=release after applying explicit source and date constraints. If none exist, other eligible originals may be read as candidates; their publication dates never establish release dates.
Values: "relevance", "latest"
Default: "relevance"
excludeSourceUrlsarray<string>Exact public citation URLs already discussed; excluded before evidence selection and included in request identity.
maxItems: 10
Item properties for excludeSourceUrls
string
answerScopestring · enumUse overview for a broad account of recent activity, focused for a specific post, release or detail. The agent can browse all eligible saved public sources by page or provider, search with its own terms, and read exact original windows. Broad browsing includes multiple available providers instead of selecting only the newest posts from one busy account. Source, date, URL, speech and exclusion constraints remain authoritative. Exploration is bounded by five model steps, twelve tool calls, 24,000 original-text characters, and the job slice deadline. Saved exploration returns at most six read windows and 12,000 characters; an overview selects up to three distinct useful activities. A limit or invalid selection is an operational failure, not evidence that information is absent. Outside collection keeps its existing budgets and can run only from a validated server plan. Saved exploration does not refresh providers. This is not a comprehensive freshness guarantee.
Values: "focused", "overview"
Default: "focused"
preferDirectEvidencebooleanService credential only. Offer bounded candidates for a checked answer attempt before normal research. Optional and false by default; not persisted in the neutral request or its identity.
Response
application/jsonPersisted acknowledgement
statusanyrequiredjobIdstringrequiredformat: uuid
stagestring · enumrequiredValues: "checking_saved", "searching", "reading", "transcribing", "waiting_provider", "complete", "unresolved", "failed", "cancelled"
messagestringrequiredproviderstring | nullupdatedAtstringrequiredformat: date-time
reusedbooleanreferencesarray<Reference>requiredmaxItems: 6
Item properties for references
sourceIdstringrequiredStable current source reference, including latest:<spotify|deezer|inprocess>:<64hex> provider snapshot originals. Removing/changing the connected account or successfully refreshing away a hidden/removed item makes its old reference unavailable; changed originals have a different revision.
revisionstringrequiredstartintegerrequiredminimum: 0
endintegerrequiredminimum: 0
textstringrequiredurlstringrequiredcurationstring · enumrequiredValues: "approved", "pending"
evidenceKindstring · enumValues: "original_text", "caption", "provider_transcript"
speakerstring · enumValues: "not_applicable", "unverified"
publishedAtstring | nullretrievedAtstring | nulltruncatedboolean | nullactivityDatestringOptional provider activity date. Preserves YYYY, YYYY-MM or full date/time precision. Never substitutes for source publication time.
activityDateKindstring · enumMeaning of activityDate. Exact catalog release-date claims require original catalog text, not publishedAt.
Values: "release", "moment"
limitationsarray<string>requiredItem properties for limitations
string
outsideResearchReasonstring · enumOutside collection was not admitted. Saved sources may still provide a bounded answer. New quota-blocked jobs include a shared quota scope and reset time; retry from a new question after reset, without restarting this terminal job. Older saved-only jobs can omit reset metadata.
Values: "quota"
selectionstring · enumOptional for legacy jobs. candidates is an unassessed evidence selection, not an answer or a sufficiency finding. If the checked answer is insufficient, continue this same job. research means the normal bounded research path.
Values: "candidates", "research"
quotaScopestring · enumShared operational budget that blocked this work, never a personal visitor limit.
Values: "saved_global", "outside_artist", "outside_global"
retryAfterSecondsintegerSeconds until resetAt, rounded up. A current status read recomputes this duration; new traffic can consume later capacity.
minimum: 0
resetAtstringActual rolling-window boundary calculated when the quota was checked.
format: date-time