Content
Get a content opportunity
https://api.vidrys.com/v1/projects/{project_id}/content-assets/{asset_id}- Plan
- Grow and above
- Key
- read
- Rate cost
- 1 unit
- MCP tool
- get_content_asset
Content
https://api.vidrys.com/v1/projects/{project_id}/content-assets/{asset_id}Sent as a header on every request.
AuthorizationstringrequiredA Vidrys API key, sent as Bearer vidrys_sk_…. A read key is enough. See Authentication.
project_idstringrequiredThe project's id, from List projects.
asset_idstringrequiredThe opportunity's id, from List content opportunities.
application/json
assetobjectThe opportunity, as in the list.
idstringContent-opportunity id.
titlestringWhat to make, as the board shows it.
categorystringonsite is a page to write or fix on your own site. offsite is a third-party page to get onto.
Values:onsiteoffsite
statestringWhere it is: ready to draft, blocked by a technical problem, generating, generated (a draft is waiting), verifying (published, being measured), won, stalled (published, nothing moved), dismissed, or one of the internal and terminal states.
Values:detectedreadyblockedgeneratinggeneratedverifyingwonstalledunaddressabledismissedarchivedmergedsplit
asset_typestringThe kind of page or asset to produce.
Values:comparisonpricingfaqdefinitiondocumentationintegrationhow-touse-caseproductcase-studytrust-signalsresearch
audience_segmentstringnullableWho the prompts come from, e.g. startups or startups|india.
bulletsstring[]Why it ranks here, strongest reason first. Up to three.
cluster_sizeintegerTracked prompts this one asset would answer.
cluster_versionintegerRises whenever the prompts in the cluster change.
needs_reviewbooleanTrue when the grouping is uncertain and worth a human glance.
blockedbooleanTrue while a hard technical problem on the site would waste the draft.
draftablebooleanWhether a draft can be written for it at all — research briefs and some off-site sources can't be drafted.
deliverable_labelstringnullableWhat one credit buys here, e.g. page fixes, pitch email, review request. Null when it's a brand-new page.
not_draftable_reasonstringnullableWhy there's nothing to draft.
suggested_actionstringnullableOff-site: what to do about the cited source.
suggested_sourcestringnullableOff-site: the domain to get onto.
suggested_source_urlstringnullableOff-site: the exact page cited.
suggested_targetstringnullableOff-site: a readable name for that page.
target_urlstringnullableOn-site: the page being fixed, when it's an existing one.
prompt_idsstring[]The tracked prompts in the cluster.
scoreintegerOpportunity score the board ranks by. Normally 0–100; priority weighting can push it higher. 0 when it has never been scored.
classificationobjectWhy this lever (write a page vs. get onto someone else's) was chosen.
explanationstringnullableThe reasoning in a sentence.
rulestringnullableWhich rule decided it.
Values:rule_0_unaddressablerule_1_refine_rejectedrule_2_vendor_pages_citedrule_3_aggregator_lockedrule_4_mixed_evidencerule_5_no_citationsescalationmanual
confidencenumberHow clear the evidence was, 0–1.
score_componentsobject[]The bars behind the score. Empty until the opportunity has been scored.
namestringcloseness: how near the answers are to winning. reach: how many engines lose it. cluster_size: prompts covered. lever_confidence: how sure the lever is. winnability, urgency, ease: the rest of the ranking.
Values:closenessreachcluster_sizelever_confidencewinnabilityurgencyease
valuenumberThe signal itself, 0–1.
pointsnumberWhat it contributed to the score.
blocker_detailsstring[]The technical problems holding it back.
target_url_conflictstringnullableSet when another opportunity is already being measured on the same page.
membersobject[]The prompts in the cluster.
prompt_idstringPrompt id.
textstringThe prompt.
similaritynumberHow well it fits the cluster, 0–1.
fanout_questionsstring[]Sub-questions the piece should answer.
offsite_sourcesobject[]Off-site only: the third-party pages worth being on, most cited first.
urlstringnullableThe page.
titlestringnullableIts title.
domainstringIts domain.
citationsintegerTimes answers cited this domain for prompts you lost.
presencestringnullableWhether the brand is on that page already, and how it places. Null when the page couldn't be read.
Values:absentpresent_behindpresent_leading
deliverablestringnullableWhat can be drafted for it. Null when nothing can.
Values:review_requestlisting_copysocial_postforum_replypitch_emailvideo_brief
actionstringnullableWhat to do about it.
leading_competitorstringnullableWho leads that page today.
selectedbooleanTrue for the source a draft would target.
page_checksobject[]nullableHow the existing page reads to an engine. Null unless this is a fix to a page we've been able to read.
idstringWhich check.
Values:answer_capsuletablefaq_blockexplicit_numbersdatessourcessection_lengthbyline
labelstringIts name.
detailstringWhat was found.
passedbooleanWhether it passed.
verificationobject[]After publishing: how far each prompt has climbed on each engine.
prompt_idstringPrompt id.
enginestringEngine id.
Values:chatgptperplexitygeminicopilotai_overviewsclaude
runginteger1 published, 2 crawled, 3 indexed, 4 cited, 5 mentioned, 6 recommended.
outcomestringWhere it has got to.
Values:pendingimprovedno_change
generationsobject[]Every draft attempt, oldest first.
versionintegerWhich attempt, from 1.
kindstringWhat was asked for.
Values:initialrefinementregeneration
statusstringHow it ended.
Values:pendingsucceededfailedrefunded
credit_consumedbooleanWhether it spent a credit.
historyobject[]The state timeline, oldest first.
created_atstringWhen (ISO 8601).
from_statestringnullableState before. Null at creation.
to_statestringState after.
Values:detectedreadyblockedgeneratinggeneratedverifyingwonstalledunaddressabledismissedarchivedmergedsplit
reasonstringWhat caused it, e.g. user_action, generate, verification_won.
actorstringWho did it. Never a name or an email.
Values:youa teammatesystem
| 404 not_found | The project or item doesn't exist in this workspace. A project from another workspace also returns 404, never 403. |
| 401 unauthorized | No key was sent, or the key is unknown, revoked or expired, or the member who created it has left the workspace or been deactivated. |
| 402 plan_required | The workspace's plan doesn't include API access. It's included on Grow, Scale and Custom. |
| 403 workspace_not_approved | The workspace is still waiting for approval, or wasn't approved. |
| 429 rate_limited | Too many requests this minute. Wait for the number of seconds in the `Retry-After` header, then retry. |
Every code, and what to retry, is in Errors.