Create news article for entity

View as Markdown

Creates a news article and links it to an entity. When an article with the same canonical newsUrlOriginal (or externalId) already exists, the existing article is reused and this entity is attached to it instead of creating a duplicate.

Authentication

AuthorizationBearer

User bearer token: Supabase or Clerk session JWT, Clerk OAuth access token, or Clerk personal API key

OR
X-API-Keystring

Admin API key for system-to-system write operations

Query parameters

idstringOptionalformat: "uuid"

Owner-scoped resource UUID selector.

slugstringOptionalformat: "^[a-z0-9_-]+$"<=255 characters

Owner-scoped resource slug selector.

sourceTypeenumRequired
Write provenance source type.
sourceDetailstringRequired
Source detail or reviewer reference for the write.
sourceProviderstringOptional

Provider name for provider-native IDs or slugs.

sourceProviderIdstringOptional

Provider-native source ID.

sourceProviderSlugstringOptional

Provider-native source slug.

actorTypeenumOptional

Actor type; inferred as agent when agentChassis and agentModel are supplied, or as employee from an authenticated user JWT session.

Allowed values:
agentChassisstringOptional

Agent chassis token for agent-authored writes.

agentModelstringOptional

Agent model id for agent-authored writes.

overrideGateenumOptional
Gate to override from the prior ProblemDetail resolution.
overrideReasonstringOptional0-2048 characters

Source-backed reason for overriding the returned gate requirement.

observedHttpStatusintegerOptional
HTTP status observed when the API freshly fetches the canonical article URL.
fetchBlockEvidencestringOptional0-2048 characters

Source-backed evidence that the access-walled canonical URL is the article.

nativeThumbnailBlockedbooleanOptional

Must be true when the publisher blocks direct acquisition of a native article image; the managed import lane may still recover the image through the Web Unlocker.

Request

This endpoint expects an object.
allowSuspectedShellStripboolean or nullOptional

Override suspected shell-strip rejection for intentional prose; prefer —from-file.

authorstring or nullOptional
Author name
categorystring or nullOptional

Comma-separated category tags (e.g. “Fintech,Startups”); array syntax is rejected.

contentstring or nullOptional<=100000 characters

Article content body. Required on CREATE for internal articles (externalNewsArticle=false); external articles (the default) omit it and render via redirect to newsUrlOriginal.

detachEntityboolean or nullOptional
When true, removes all existing entity joins
detachPersonboolean or nullOptional
When true, removes the existing person join
entityJoinIdlist of strings or nullOptional

Entity ids for the replacement entity join set; scoped routes keep route entity

entityMatchEvidencestring or nullOptional0-2000 characters
Supporting quote or evidence for entity match
entityMatchScoredouble or nullOptional0-100
Score applied to every entityJoinId replacement join
entityMatchStatusstring or nullOptionalformat: "^(auto-match|needs-review|approved|rejected)(\|user=[^|]+\|at=[^|]+)?$"

Match status applied to every entityJoinId replacement join; matchStatus must be auto-match|needs-review|approved|rejected with optional audit metadata

excerptstring or nullOptional

Article excerpt/summary. Required on CREATE for external articles (the default).

externalIdstring or nullOptional
External source identifier
externalNewsArticleboolean or nullOptional

External article flag. Defaults to true (external/third-party article) when omitted; set false only for an internal aVenture-hosted article, which requires content.

newSlugstring or nullOptional

Preferred detail-update slug rename field; omit on create.

newsImageThumbnailstring or nullOptional

Managed news thumbnail path returned by media upload/import; sourceDetail must match stored media provenance.

newsUrlOriginalstring or nullOptional

Original live news article URL. Required on CREATE for external articles. Rejected (422): ycombinator.com/companies/{company-slug}, pitchbook.com/profiles/, linkedin.com/company/, producthunt.com/products/**, and other entity/profile URLs; use the ProblemDetail surface, usually EntityUrl.urlType=* via entities urls create.

personIdstring or nullOptionalformat: "uuid"
Single person id for the replacement person join
personMatchEvidencestring or nullOptional0-2000 characters
Supporting quote or evidence for person match
personMatchScoredouble or nullOptional0-100

Score for the person match (0-100)

personMatchStatusstring or nullOptionalformat: "^(auto-match|needs-review|approved|rejected)(\|user=[^|]+\|at=[^|]+)?$"

Match status for the replacement person join; matchStatus must be auto-match|needs-review|approved|rejected with optional audit metadata

personSlugstring or nullOptional
Single person slug for the replacement person join
publicationstring or nullOptional

Publication/source name. Required on CREATE for external articles (the default).

publishedAtdatetime or nullOptional
Publication timestamp
qwen4bFp16Embeddinglist of float or nullOptional

Deprecated: caller-supplied article embeddings are rejected. Canonical section-fusion embeddings refresh from saved article content. Embedding vector pinned to qwen-4b-fp16 (Qwen3-Embedding-4B-f16.gguf) from https://huggingface.co/Qwen/Qwen3-Embedding-4B-GGUF?show_file_info=Qwen3-Embedding-4B-f16.gguf; only this fp16 model is accepted and exactly 2560 floats are required

slugstring or nullOptional

Article slug. Omit for the dated slug generated from publishedAt and title; detail updates may rename through this field or newSlug.

titlestring or nullOptional0-500 characters
Article title

Response

Existing article matched; entity attached

coreobject
Canonical news owner for list and core semantics
entityMentionResolvedlist of objects

Resolved entity mentions — read-only display projections. News mutations attach entities only via flat entityJoinId values, never these nested objects.

personMentionResolvedlist of objects

Resolved person mentions — read-only display projections. News mutations attach people only via flat personId/personSlug values, never these nested objects.

contentstring or nullOptional
externalIdstring or nullOptional
linkedContentstring or nullOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
406
Not Acceptable Error
409
Conflict Error
415
Unsupported Media Type Error
422
Unprocessable Entity Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error