openapi: 3.2.0 info: title: Reference Contacts API version: '2.0' contact: name: Sendlane url: https://sendlane.com email: support@sendlane.com description: Sendlane V2 API servers: - url: https://api.sendlane.com/v2 description: Sendlane security: - BearerToken: [] tags: - name: Contacts paths: /contacts: get: summary: Contacts parameters: - $ref: '#/components/parameters/from' - $ref: '#/components/parameters/to' tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Contact.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' operationId: get-contacts description: Get Contacts /contacts/{contactId}: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Get Contact tags: - Contacts responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ContactResponse.v2' operationId: get-contacts-contactId parameters: [] description: Get Contact delete: description: Delete contact summary: Delete Contact operationId: delete-contacts-contactId responses: '202': description: Accepted content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/AcceptedResponse.v2' tags: - Contacts /contacts/unsubscribed: get: summary: Contacts Unsubscribed parameters: - $ref: '#/components/parameters/from' - $ref: '#/components/parameters/to' tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Contact.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' operationId: get-contacts-unsubscribed description: Get Contacts Unsubscribed /contacts/{contactId}/custom-fields: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Get Contact Custom Fields tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ContactCustomField.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' operationId: get-contacts-contactId-custom-fields parameters: [] description: Get Contact Custom Fields post: description: Add Custom Field(s) To Contact summary: Add Contact Custom Field operationId: post-contacts-contactId-custom-fields requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactCustomFieldStoreRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/ContactCustomField.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' tags: - Contacts /contacts/{contactId}/custom-fields/{contactCustomFieldId}: parameters: - schema: type: integer name: contactCustomFieldId in: path required: true get: summary: Get Contact Custom Field description: Get Contact Custom Field tags: - Contacts responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ContactCustomFieldResponse.v2' operationId: get-contacts-contactId-custom-fields-contactCustomFieldId parameters: [] delete: description: Remove Custom Field from Contact summary: Remove Custom Field from Contact operationId: delete-contacts-contactId-custom-fields-contactCustomFieldId responses: '202': description: Accepted content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/AcceptedResponse.v2' tags: - Contacts /contacts/{contactId}/email-consent: parameters: - schema: type: integer name: contactId in: path required: true post: summary: Contact Email Consent tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactEmailConsentRequest.v2' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ContactResponse.v2' operationId: post-contacts-email-consent description: Add/Remove email consent to a contact *(This endpoint must first be enabled in your account by contacting support)*. Omit **list_ids** for global contacts. /contacts/{contactId}/history: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Contact History tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactHistoryRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/ContactHistory.v2' operationId: get-contacts-history description: Contact History /contacts/search: get: summary: Contact Search tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactSearchRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Contact.v2' operationId: get-contacts-search description: Contact Search /contacts/{contactId}/segments: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Contact Segments tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Segment.v2' operationId: get-contacts-segments description: Contact Segments /contacts/{contactId}/subscriptions: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Contact Subscriptions tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Subscription.v2' operationId: get-contacts-subscriptions description: Contact Subscriptions /contacts/subscriptions: get: summary: Contact Search Subscriptions tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactSubscriptionsRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Subscription.v2' operationId: get-search-contacts-subscriptions description: Contact Search Subscriptions /contacts/{contactId}/sms-consent: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Get Contact SMS Consent description: Get Contact SMS Consent tags: - Contacts responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SmsConsentResponse.v2' operationId: get-contacts-contactId-sms-consent parameters: [] post: summary: Contact Add SMS Consent tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactSmsConsentRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/SmsConsent.v2' operationId: post-contacts-sms-consent description: Add SMS Consent to a contact (This endpoint must first be enabled in your account by contacting support) delete: description: Remove SMS Consent from Contact summary: Remove SMS Consent from Contact tags: - Contacts operationId: delete-contacts-contactId-sms-consent responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SmsConsentResponse.v2' examples: SMS Consent Response: value: data: - id: 1 phone: string has_sms_consent: false sms_consent: sms_consent: false unsubscribed_date: '2025-01-01 09:00:00' /contacts/sms-consent: post: summary: Contact Search and Add SMS Consent tags: - Contacts requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactSearchSmsConsentRequest.v2' responses: '202': description: Accepted content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/AcceptedResponse.v2' operationId: post-contacts-search-sms-consent description: Search for a contact by email or phone to add SMS Consent /contacts/{contactId}/tags: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Get Contact Tags tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/TagIndexResponse.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' operationId: get-contacts-contactId-tags parameters: [] description: Get Contact Tags post: description: Add Tag To Contact summary: Add Contact Tag operationId: post-contacts-contactId-tags requestBody: content: application/json: schema: $ref: '#/components/schemas/ContactTagStoreRequest.v2' responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/TagIndexResponse.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' tags: - Contacts /contacts/{contactId}/tags/{tagId}: parameters: - schema: type: integer name: tagId in: path required: true get: summary: Get Contact Tag description: Get Contact Tag tags: - Contacts responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/TagResponse.v2' operationId: get-contacts-contactId-tags-tagId parameters: [] delete: description: Remove Tag from Contact summary: Remove Tag from Contact operationId: delete-contacts-contactId-tags-tagId responses: '202': description: Accepted content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/AcceptedResponse.v2' tags: - Contacts /contacts/{contactId}/unsubscribe: parameters: - schema: type: integer name: contactId in: path required: true post: summary: Contact Unsubscribe tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/ContactUnsubscribeResponse.v2' operationId: post-contacts-unsubscribe description: Contact Unsubscribe /back-in-stock-contacts: get: summary: Back In Stock Contacts tags: - Contacts responses: '200': description: OK content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/BackInStockContact.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' operationId: get-back-in-stock-contacts description: Get Back In Stock Contacts /back-in-stock-contacts/{contactId}: parameters: - schema: type: integer name: contactId in: path required: true get: summary: Get Back In Stock Contact tags: - Contacts responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/BackInStockContactResponse.v2' operationId: get-back-in-stock-contacts-contactId parameters: [] description: Get Back In Stock Contact delete: description: Delete Back In Stock Contact summary: Delete Back In Stock Contact operationId: delete-back-in-stock-contacts-contactId responses: '202': description: Accepted content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/AcceptedResponse.v2' tags: - Contacts components: schemas: ContactSearchSmsConsentRequest.v2: title: Contact SMS Consent Request type: object x-examples: SMS Consent Request: email: user@example.com phone: 15551234567 ip_address: 12.34.567.89 optin_date: 202X-01-01 09:00:00 sms_consent: true user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_3 rv:6.0; sl-SI) AppleWebKit/533.24.5 (KHTML, like Gecko) Version/4.0 Safari/533.24.5 optin_url: http://example.com/optin-url consent_language: http://example.com/terms-of-service cookie_uuid: 0H28vBAcx8PBbAmXqamTjY3BDyvMcyN8Xy5nAquShpB properties: email: type: string format: email example: user@example.com phone: type: string format: phone example: 15551234567 ip_address: type: string format: ip example: 12.34.567.89 optin_date: type: string format: date-time example: 202X-01-01 09:00:00 sms_consent: type: boolean example: true user_agent: type: string example: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_3 rv:6.0; sl-SI) AppleWebKit/533.24.5 (KHTML, like Gecko) Version/4.0 Safari/533.24.5 optin_url: type: string format: url example: http://example.com/optin-url consent_language: type: string description: text snippet or url to language example: http://example.com/terms-of-service cookie_uuid: type: string example: 0H28vBAcx8PBbAmXqamTjY3BDyvMcyN8Xy5nAquShpB required: - phone - ip_address - optin_date - sms_consent - user_agent - optin_url ContactResponse.v2: title: Contact Response type: object x-examples: Contact Response: data: id: 1 email: string first_name: string last_name: string phone: string sms_consent: [] subscribed: true suppressed: false properties: data: $ref: '#/components/schemas/Contact.v2' required: - data TagIndexResponse.v2: title: TagIndexResponse type: object properties: data: type: array items: $ref: '#/components/schemas/Tag.v2' links: $ref: '#/components/schemas/PaginatorLinks.v2' meta: $ref: '#/components/schemas/PaginatorMeta.v2' description: '' x-examples: Response: data: - id: 1 name: string audience_count: 1 created_at: string links: first: string last: string prev: string next: string meta: current_page: 1 from: 1 last_page: 1 path: string per_page: 100 to: 1 total: 1 ContactHistoryRequest.v2: title: Contact History Request type: object x-examples: Contact History Request: filter: email_open properties: filter: type: string format: email, email_open, email_click, subscribe, unsubscribe, global_unsubscribe, tracked_event, conversion, shopify_checkout, shopify_order, shopify_refund optional: - filter ContactCustomFieldStoreRequest.v2: title: Contact Custom Field Store Request type: object x-examples: Contact Custom Field Store Request: custom_fields: - id: 1 value: value1 - id: 2 value: value2 properties: custom_fields: type: array items: type: object properties: id: type: integer value: type: string required: - custom_fields ContactSearchRequest.v2: title: Contact Search Request type: object x-examples: Contact Search Request: email: string properties: email: type: string phone: type: string SmsConsentResponse.v2: title: SMS Consent Response type: object x-examples: Contact Response: data: id: 1 phone: string has_sms_consent: boolean sms_consent: {} properties: data: $ref: '#/components/schemas/SmsConsent.v2' required: - data Contact.v2: description: '' type: object title: Contact properties: id: type: integer custom_fields: type: array items: $ref: '#/components/schemas/CustomField.v2' email: type: string first_name: type: string integration_customer: type: array last_name: type: string lifetime_value: type: number lists: type: array items: $ref: '#/components/schemas/ContactList.v2' phone: type: string sms_consent: type: array subscribed: type: boolean suppressed: type: boolean tags: type: array items: $ref: '#/components/schemas/ContactTag.v2' AcceptedResponse.v2: title: Accepted Response type: object properties: message: type: string x-examples: Success Response: message: Successfully handled request ContactEmailConsentRequest.v2: title: Contact Email Consent Request type: object x-examples: Email Consent Request: email_consent: true properties: email_consent: type: boolean example: true list_ids: type: array example: - 1 - 2 required: - email_consent PaginatorLinks.v2: description: '' type: object x-examples: {} properties: first: type: string minLength: 1 format: uri readOnly: true last: type: string minLength: 1 format: uri readOnly: true prev: type: string minLength: 1 format: uri readOnly: true next: type: string minLength: 1 format: uri readOnly: true title: Paginator Links Subscription.v2: title: Subscription type: object properties: id: type: integer subscriber_id: type: integer list_id: type: integer list_name: type: string subscribed: type: boolean suppressed: type: boolean added_by: type: string date_added: type: string format: date-time ContactUnsubscribeResponse.v2: title: Contact Unsubscribe Response type: object properties: message: type: string x-examples: Success Response: message: Contact unsubscribed successfully BackInStockContact.v2: description: '' type: object title: BackInStockContact properties: id: type: integer email: type: string phone: type: string shop: type: string platform: type: string product_id: type: string sku: type: string ContactHistory.v2: title: Contact History type: object properties: type: type: string campaign_id: type: integer title: type: string list_id: type: integer list_name: type: string amount: type: number currency: type: string event_id: type: integer event_name: type: string event_location: type: string completed_at: type: string format: date-time restock: type: boolean processed_at: type: string format: date-time event_date: type: string format: date-time ContactCustomFieldResponse.v2: title: Contact Custom Field Response type: object x-examples: Contact Response: data: id: 1 custom_field_id: 1 name: string value: string created_at: string properties: data: $ref: '#/components/schemas/ContactCustomField.v2' required: - data PaginatorMeta.v2: description: '' type: object x-examples: {} properties: current_page: type: integer readOnly: true from: type: integer readOnly: true last_page: type: integer readOnly: true path: type: string minLength: 1 readOnly: true per_page: type: integer readOnly: true to: type: integer readOnly: true total: type: integer readOnly: true title: Paginator Meta ContactTag.v2: title: Contact Tag type: object properties: id: type: integer name: type: string SmsConsent.v2: title: SMS Consent type: object properties: id: type: integer phone: type: string has_sms_consent: type: boolean sms_consent: type: object properties: consent_type: type: string example: sms_keyword,web_form,integration ip_address: type: string format: ip example: 12.34.567.89 optin_date: type: string format: date-time example: 202X-01-01 09:00:00 sms_consent: type: boolean example: true user_agent: type: string example: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_3 rv:6.0; sl-SI) AppleWebKit/533.24.5 (KHTML, like Gecko) Version/4.0 Safari/533.24.5 optin_url: type: string format: url example: http://example.com/optin-url consent_language: type: string description: text snippet or url to language example: http://example.com/terms-of-service cookie_uuid: type: string example: 0H28vBAcx8PBbAmXqamTjY3BDyvMcyN8Xy5nAquShpB ContactTagStoreRequest.v2: title: Contact Tag Store Request type: object x-examples: Contact Tag Store Request: tag_ids: - 1 - 2 properties: tag_ids: type: array items: type: integer required: - tag_ids ContactSmsConsentRequest.v2: title: Contact SMS Consent Request type: object x-examples: SMS Consent Request: phone: 15551234567 ip_address: 12.34.567.89 optin_date: 202X-01-01 09:00:00 sms_consent: true user_agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_3 rv:6.0; sl-SI) AppleWebKit/533.24.5 (KHTML, like Gecko) Version/4.0 Safari/533.24.5 optin_url: http://example.com/optin-url consent_language: http://example.com/terms-of-service cookie_uuid: 0H28vBAcx8PBbAmXqamTjY3BDyvMcyN8Xy5nAquShpB properties: phone: type: string format: phone example: 15551234567 ip_address: type: string format: ip example: 12.34.567.89 optin_date: type: string format: date-time example: 202X-01-01 09:00:00 sms_consent: type: boolean example: true user_agent: type: string example: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_5_3 rv:6.0; sl-SI) AppleWebKit/533.24.5 (KHTML, like Gecko) Version/4.0 Safari/533.24.5 optin_url: type: string format: url example: http://example.com/optin-url consent_language: type: string description: text snippet or url to language example: http://example.com/terms-of-service cookie_uuid: type: string example: 0H28vBAcx8PBbAmXqamTjY3BDyvMcyN8Xy5nAquShpB required: - phone - ip_address - optin_date - sms_consent - user_agent - optin_url TagResponse.v2: title: TagResponse type: object properties: data: $ref: '#/components/schemas/Tag.v2' x-examples: Tag Response: data: id: 1 name: string audience_count: 1 created_at: string CustomField.v2: title: CustomField type: object properties: id: type: string name: type: string type: type: string created_at: type: string required: - name ContactCustomField.v2: title: ContactCustomField type: object properties: id: type: integer custom_field_id: type: integer name: type: string value: type: string created_at: type: string format: date-time readOnly: true required: - custom_field_id - value Segment.v2: title: Segment type: object properties: id: type: integer name: type: string list_id: type: integer match: type: string last_count: type: integer processed_at: type: string format: date-time created_at: type: string format: date-time is_in_progress: type: boolean ContactSubscriptionsRequest.v2: title: Contact Subscriptions Request type: object x-examples: Contact Subscriptions Request: email: string properties: email: type: string phone: type: string ContactList.v2: title: Contact List type: object properties: id: type: integer name: type: string Tag.v2: title: Tag type: object x-examples: Create Tag: name: string Update Tag: name: string status: active properties: id: type: integer readOnly: true name: type: string audience_count: type: integer readOnly: true created_at: type: string format: date-time readOnly: true required: - name BackInStockContactResponse.v2: description: '' type: object x-examples: BackInStockContact Response: data: id: 1 email: string phone: string shop: string platform: string product_id: string sku: string properties: data: $ref: '#/components/schemas/BackInStockContact.v2' required: - data title: BackInStockContact Response parameters: from: schema: type: string format: date-time name: from description: Starting datetime. Required if the "to" parameter is in the query. in: query required: false example: '`2024-12-04T12:30:40-05:00` or `2024-12-04T12:30:40%2b05:00` or `2024-12-04T12:00:00%2b00:00` or `2024-12-04T12:00:00Z`' to: schema: type: string format: date-time name: to description: Ending datetime. in: query required: false example: '`2024-12-04T12:30:40-05:00` or `2024-12-04T12:30:40%2b05:00` or `2024-12-04T12:00:00%2b00:00` or `2024-12-04T12:00:00Z`' securitySchemes: BearerToken: name: Authorization type: apiKey in: header description: API token sent in the Authorization header with the value "Bearer {apiToken}" OtherAccountBearerToken: name: Authorization-Destination type: apiKey in: header description: API token for other account sent in the Authorization-Destination header with the value "Bearer {apiToken}"