/v2/pricing/catalogPublic pricing catalog
Everything you need to predict a bill before you send a request, with no credential. skus is the price list: one row per sellable unit (grade, repo tags, the contribution garden, identity, contact, the AI summaries, the match rationale, deep lens, an AI-written email, and the free identity skeleton), with the facet keys that buy each one. You buy a SKU, not a key: naming one key of a sku and naming all of them cost the same, once, per developer, and owning any key of a sku owns the sku. plans is the sellable subscriptions with live Stripe amounts, seat cap, and monthly credit allotment; amounts fall back to null when Stripe is unreachable so the page always renders. Each plan price carries interval (week, month, quarter or year) and intervalMonths (months per period; null for week, which is not a whole number of months); Vamo Developer sells week, month and year, Pro sells month, quarter and year; a developer price also carries discountedUnitAmountCents, the per-term early-adopter price actually charged. creditUsd is the dollars-per-credit rate: multiply it by any credit figure in this API, including the x-vamo.pricing block carried on every operation, to get money. facets is the price table for the seven keys you can name in facets on the developer routes (POST /v2/developers, GET /v2/developers/enrich, POST /v2/developers/search and /similar): identity.linkedin, contact.socials, contact.emails, tags.repos, ai.person_summary, ai.repo_summaries and ai.match_rationale, one entry per facet with its credit price, the same price in dollars, what the facet gives you, and requires, the facets that are resolved and billed alongside it because it cannot be computed without them. requiresReport true means the facet is written in the background and can come back pending; false means it always comes back inline. bundles lists what each depth tier (core, enriched, deep) contains, so you can price a tier before sending it. addOns lists what is sold outside the tiers by name: the AI summaries (portrait, ai.person_summary plus ai.repo_summaries) with their price per developer. They are written in the background and are slower than the rest of a profile, and you request them only on GET /v2/developers/summaries or with facets on GET /v2/developers/enrich. Prices are read from the same catalog the biller charges from, so this list cannot drift from what you are charged. A facet cell you already own within its freshSeconds window bills 0, so these are ceiling prices.
Responses
200The public plan catalogplansarray of PricingCatalogPlan requiredplanstring requiredseatCapinteger requiredmonthlyCreditsinteger requiredpricesarray of PricingCatalogPrice requiredintervalstring requiredweekmonthquarteryearintervalMonthsinteger | null requiredMonths per billing period (1, 3 or 12). Null for `interval: week`, which is one week per period and not a whole number of months: price a weekly term off `interval`.
unitAmountCentsinteger | null requireddiscountedUnitAmountCentsinteger | null requiredThe amount actually charged per period after the Vamo Developer early-adopter coupon for this term. Null when there is no discount to show (no coupon, a non-developer plan, or the amount is unknown): render `unitAmountCents` alone.
currencystring | null required
creditUsdnumber requiredskusarray of PricingCatalogSku requiredskustring requiredcreditsinteger requiredmin 0usdnumber requiredmin 0descriptionstring requiredfacetsarray of string required
facetsarray of PricingCatalogFacet requiredkeystring requiredskustring requiredfreegradesignalsdeep_signalsidentitycontactportraitdossierdossier_contextpitch_sheetmatch_rationalecreditsinteger requiredmin 0usdnumber requiredmin 0descriptionstring requiredrequiresarray of string requiredcontextScopedboolean requiredrequiresReportboolean requiredwithRequiresCreditsinteger requiredmin 0freshSecondsinteger required
bundlesarray of PricingCatalogBundle requirednamestring requiredfacetsarray of string required
addOnsarray of PricingCatalogAddOn requirednamestring requiredfacetsarray of string requiredcreditsinteger requiredmin 0usdnumber requiredmin 0asyncboolean requiredroutesarray of string requirednotestring required
429A rate limit or a usage quota is exhausted. Back off and retry; the `x-quota-*` response headers report the remaining allowance.codestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failedself_serve_checkout_disabledwork_email_requiredtrial_unavailabletrial_not_offeredcheckout_pendingchange_email_not_allowedmessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at how to restore access).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxbook_callcheckouturlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.