Add a contact to a list
Creates or updates Contact and ListContact records. Optionally enrolls contact in matching Welcome Journeys.
Request
- Base URL: https://api.tracklysms.com/api
- URL: https://api.tracklysms.com/api/v2/contacts
- Auth: API key in header X-Api-Key
Request body
Ad network campaign/account ID
Ad network source (e.g. adwords, facebook)
Exact disclosure text shown to consumer at consent
How consent was obtained (web_form, sms_keyword, mobile_app, verbal, written, api_with_proof, double_opt_in). Optional; stored on the contact for TCPA compliance when a valid method is provided, null otherwise. Invalid or verbal values are ignored, not rejected.
URL or description of consent capture point. Defaults to url when omitted.
Custom fields key-value pairs
When true, the contact is held pending confirmation (not sendable, not enrolled in journeys) and sent the confirmation message from optin_configuration_id; they activate only after replying Y/YES/CONFIRM within 24h. Requires optin_configuration_id (a double-opt-in config on the same list). For DOI contacts, journey enrollment happens at confirmation and follows the opt-in configuration's journey settings, not this request's use_journeys. Defaults false — omit for standard single opt-in.
IP address for consent tracking
Sending list phone number in E.164 format
Double-opt-in opt-in configuration to drive confirmation. Required when double_optin is true.
Replace custom fields entirely instead of merging
Contact phone number in E.164 format
When true, the contact phone number is screened for litigator / DNC status (Blacklist Alliance) and the result is badged onto the contact profile asynchronously. Independent of use_validation. The contact is always created and never rejected on a hit — suppress litigators downstream via the is_litigator audience filter. Per non-cached screen billed at $0.015. Requires an active payment method (HTTP 402 if not enabled). Single-contact endpoint only for now.
Initial signup date for a new membership (ISO datetime UTC, defaults to now; existing membership dates are preserved)
Skip journey enrollment if ListContact already exists
Signup URL for consent tracking
Enroll contact in matching journeys
When true, the contact phone number is validated (LRN + DNC) and the validation result is attached to the response and persisted to the contact profile. The contact is created either way — invalid or unreachable numbers are accepted and stored, then can be segmented out of campaigns using the validation_status audience filter. Per non-cached lookup is billed at $0.003 (rolled up monthly). Requires an active payment method (HTTP 402 if not enabled). There is no reject_on_fail flag by design: the audience builder is the right segmentation surface for excluding invalid numbers from sends, and a per-API rejection flag would force callers to choose between two divergent code paths instead of treating accept-and-segment as the universal contract.
Browser/device user agent string at consent
Response
Contact added
Contact ID
Whether a new Contact was created
Whether a new ListContact was created
Number of journeys enrolled
ListContact ID
Operation success
Warnings about missed configuration
Changes
No recorded changes to this operation across all 1 revision of this API.