Add a single contact to a sending list, with optional journey enrollment and custom field tracking.
Creates or updates a contact on the specified sending list. If the contact already exists on the list, their custom fields are merged (not replaced) and existing data is preserved. New contacts are automatically validated via carrier lookup, which populates carrier, timezone, and line type fields.Documentation Index
Fetch the complete documentation index at: https://docs.tracklysms.com/llms.txt
Use this file to discover all available pages before exploring further.
+14155559876). The number is validated via carrier lookup on first creation.+18005551234). Must be a list owned by your account.true, the contact will be enrolled in any matching Welcome Journeys configured for the target list.true, skips journey enrollment if the ListContact record already exists (i.e., the contact was previously added to this list). Only relevant when use_journeys is true.2025-03-15T14:30:00Z). Defaults to the current timestamp if omitted.true, replaces the contact’s custom fields entirely instead of merging. When false (default), provided custom fields are merged into existing fields.adwords, facebook).true, the contact’s phone number is run through phone validation (LRN + internal DNC) and the result is attached to the response and persisted to the contact’s 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. The validation field in the response shows the per-disposition outcome.Billing. Requires an active payment method on file — requests without one return HTTP 402. Each non-cached lookup is billed at $0.003 (same as the /v1/phone/validate endpoint) and rolled up into your monthly invoice. Once a number has been validated for your account, repeat opt-ins of the same number are free indefinitely (validation.cached: true, validation.cost: 0). Pass force=true to bypass the cache and re-validate at $0.003 (rare; LRN data only changes on carrier porting).true if a new Contact record was created. false if the phone number already existed in the system.true if a new ListContact record was created. false if the contact was already on this list.0 if use_journeys is false.use_journeys was not set to true.use_validation was true. Contains the full phone validation payload — same schema as the /v1/phone/validate response: phone, valid, line_type, carrier, carrier_raw, ported, country, state, city, on_dnc, disposition, cost, cached. The contact is created regardless of disposition — use the validation_status audience filter to segment out invalid or unreachable numbers from campaigns.| HTTP Status | Error Code | Description |
|---|---|---|
| 400 | missing_phone_number | The phone_number field was not provided in the request body. |
| 400 | missing_list_number | The list_number field was not provided in the request body. |
| 400 | list_not_found | No sending list with the given list_number exists for this account. |
| 400 | invalid_phone | The phone_number is not a valid E.164 phone number. |
| 400 | invalid_list_number | The list_number is not a valid E.164 phone number. |
| 400 | not_sendable | The phone number failed carrier validation or is a VOIP number rejected by account settings. |
| 401 | unauthorized | Missing or invalid X-Api-Key header. |
| 402 | no_billing_config / no_payment_method / payment_failed / suspended | use_validation=true requires an active payment method on file. |
| 503 | provider_error | use_validation=true could not reach the validation provider. Retry later. |
| 500 | internal_error | An unexpected server error occurred. |
reject_voip_numbers setting enabled. Contact support to adjust this setting.