Skip to content

Link a visitor to your own user id or email

POST
/v1/analytics/identify

Call it from your server after a signup or login, with the visitor id from the nv_vid cookie your site received (the part before the dot). Body: { "visitor_id"?: string, "user_id"?: string, "email"?: string, "first_touch"?: { referrer?, utm_source?, utm_medium?, utm_campaign?, landing_path? }, "source"?: string, "details"?: object, "consents"?: object }, at least one of user_id and email. Without visitor_id (a person known only to your server, such as an account made in an app or an import) the person is still recorded as a contact, reachable by notifications and Contacts filters, with no visits until a later call carries their id. The email is kept on the person’s contact and as a SHA-256 of its normalised form, for matching. It lets a later Stripe payment by that user be traced to the visitor’s first visit. source is a short tag you choose for where the person came in ("ios-app", "sales-call"), shown as the contact’s source when the visit carries no referrer or UTM tag; nothing to create first, and the first one named is kept. details and consents go on the person’s contact (see Contacts). With an email they reach that person; with only a user_id they reach the person identified earlier with that user id and an email, and are dropped when there is none. At most 20 details and consents together in one call. Details and consents need a person with an email: they are kept against the normalised email, and are deleted when the person’s last source row (waitlist signup, subscriber, feedback, Stripe customer, identify) is deleted. In the browser, nordva('identify', { user_id, email, source, details, consents }) does the same once the visit may carry ids, and a form with data-nordva-identify sends fields marked data-nordva-detail and ticked checkboxes marked data-nordva-consent.

Auth: Secret key only.

object
visitor_id
required
string
user_id
string
<= 128 characters
email
string format: email
first_touch
object
source
string
<= 64 characters
details

Details about the person, name to value. A name is lowercase letters, digits and _, starting with a letter, up to 40 characters (stage, company_size). A value is text, a number or true/false, stored as text, up to 200 characters; null removes the detail. A person holds at most 50 details: a new one beyond that is skipped, an existing one is always updated.

object
key
additional properties
string | number | boolean | null
<= 200 characters
consents

Consents, purpose to true (granted) or false (withdrawn), such as { "email_marketing": true }. A purpose follows the same naming rule as a detail. waitlist and changelog are recorded by Launch itself (on the waitlist and not unsubscribed; subscribed to the changelog) and are refused here. Record only what the person actually agreed to: Launch stores the answer, it cannot know what your form said.

object
key
additional properties
boolean

Identified

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties

Error envelope. See error.code for the discriminator.

object
data
required
null
error
required
object
code
required
string
message
required
string
remediation
required
string
doc_url
string format: uri
param
string
request_id
string
meta
object
key
additional properties