Skip to main content
POST
Save Discover offer

Authorizations

Authorization
string
header
required

OAuth 2.1 authorization code + PKCE (S256). Tokens are tenant-bound (company_id) and scoped. Discover endpoints via /.well-known/oauth-authorization-server.

Body

application/json

Discover offer/listing fields. The OAuth POST REBUILDS the entire public listing from the body (a full replace, not a merge). companyId is bound to the token tenant and is NOT a client input. The completeness guard (lib/api/discover/oauth-offer-validation.ts) requires title, description, longDescription, and an explicit category regardless of the publish flag. Unknown fields pass through (the route never strict-parses the body).

title
string
required

Offer title (max 120 chars). Required.

Maximum string length: 120
description
string
required

Short description (max 500 chars). Required.

Maximum string length: 500
longDescription
string
required

Full description (max 5000 chars). Required.

Maximum string length: 5000
category
enum<string>
required

Marketplace category. Required and must be exactly one of ugc_agencies, clipping, or wildcards.

Available options:
ugc_agencies,
clipping,
wildcards
imageUrl
string

Card/thumbnail image URL.

bannerImageUrl
string

Banner image URL.

heroUrls
string[]

Hero gallery image URLs (max 10).

heroCaptions
string[]

Captions aligned to heroUrls (max 10).

price
string | null

Display price string; derived from the first pricing option when omitted.

Legacy single cal.com booking link (prefer bookingHosts).

videoUrls
string[]

Showcase video URLs (max 8).

notionDocs
object[]

Linked Notion docs (max 12).

pricingOptions
object[]

Pricing option rows (max 6).

caseStudies
object[]

Case studies (max 8).

faqs
object[]

FAQ entries (max 10).

mediaOrder
object[]

Explicit media ordering for the gallery (max 20).

leadForm
object

The Discover lead-capture form config. Mirrors DiscoverLeadFormConfig (lib/discover/lead-form.ts).

bookingHosts
object[]

Bookable calendar hosts (max 2; exactly one default).

calendarRouting
object | null

Route leads to different hosts by a lead-form answer. Requires >=2 booking hosts; null to disable.

publish
boolean
default:true

false saves a draft ("save progress") without publishing or unpublishing; defaults to true (publish).

Response

The upserted Discover offer.

data
object
required

The Discover offer. Always present (a missing offer 404s instead of returning null).