Create one entity URL

View as Markdown

Create one entity-owned URL row. Defaults to current and primary; terminal Acquired, Closed, or Inactive entities reject current website rows.

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

Path parameters

entityIdstringRequiredformat: "uuid"
Entity UUID owning the URL row

Query parameters

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.

Request

This endpoint expects an object.
crawlCdnProviderenum or nullOptional
CDN or hosting provider observed during crawl checks.
crawlRenderModeenum or nullOptional
JavaScript rendering requirement observed during crawl checks.
isCurrentboolean or nullOptional

Whether the owner currently uses this URL. Defaults true on create; update omits preserve the existing value. For terminal entity operatingStatus values (Acquired, Closed, Inactive), website rows must be written with isCurrent=false.

isPrimaryboolean or nullOptional

Whether this is the owner’s primary URL for its urlType. Defaults true for current create rows; update omits preserve the existing value. Setting isCurrent=false forces isPrimary=false; terminal entities cannot have a current primary website row. Website primacy belongs to the homepage: while the owner has a current root-URL website row, a deep-path or query-carrying website URL cannot be primary — such a create is stored with isPrimary=false (even when requested true), and an update promoting one, or moving a primary row’s URL across the root/deep boundary, is rejected (409).

statusstring or nullOptional

Crawl/check status label, not lifecycle.

statusCheckeddatetime or nullOptional

Last crawl/check timestamp.

urlstring or nullOptional

Absolute owner URL (https://…), normalized before validation. Must be a page the owner actually operates. URL surface misclassification is rejected (422): news/press articles such as a dated article path or a techcrunch.com/businesswire.com/forbes.com article — record it through the owner’s canonical news create surface, NEVER as a website link; domain-marketplace/for-sale pages (dan.com, hugedomains.com, …); and binary assets (.png/.pdf/…). Eponymous Product/Service full-create may omit the entire URL link array when no distinct official page URL exists. Submit either www. or apex host form; after write the stored host form is normalized from live evidence — apex (no www.) when that route serves healthy without redirecting to www., the www. form otherwise — so the persisted URL may differ from the submitted one by its www. label.

urlTypestring or nullOptional

Canonical platform role for the URL, from EntityUrlType (website, linkedin, twitter, github, crunchbase, wikipedia, appstore, …). Pick the platform the URL host belongs to for owner-specific platform paths. Platform host roots and first-party product pages stay website; security quote paths, social profiles, marketplace listings, and similar owner-specific platform paths use their platform type. Lifecycle (former domain, rebrand source) lives on isCurrent/isPrimary, never here. Required on create unless inferable from the URL host/path.

Response

Created
urlstringformat: "uri"

Canonical absolute HTTP URL value - validates scheme + host at construction

urlTypeenum
Canonical URL platform type such as website, linkedin, twitter, or github. Lifecycle facts belong on link flags such as isCurrent and isPrimary.
crawlCdnProviderenum or nullOptional
CDN or hosting provider fronting a web URL.
crawlRenderModeenum or nullOptional
JavaScript rendering requirement for crawl checks.
createdAtdatetime or nullOptional
idinteger or nullOptional
isCurrentboolean or nullOptional

true = owner currently uses this URL; false = historical/former (rebrand source domain, deprecated platform handle). The lifecycle state lives here, NEVER in the urlType discriminator.

isPrimaryboolean or nullOptional

true = canonical/primary URL of this urlType for this owner. Only one row per (owner, urlType) may be isCurrent=true AND isPrimary=true.

ownerobject or nullOptional

Owning record, nested ids only: owner.entityId or owner.personId — exactly one is set, and no name fields. Writes are scoped by the owning entity/person route; owner is never a write field.

sourceIdstring or nullOptional
statusstring or nullOptional
statusCheckeddatetime or nullOptional
updatedAtdatetime or nullOptional

Errors

400
Bad Request Error
401
Unauthorized Error
403
Forbidden Error
404
Not Found 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