Sonar Customers API
The Customers API from Sonar — 7 operation(s) for customers.
The Customers API from Sonar — 7 operation(s) for customers.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/sendsonar-com:sendsonar-com-customers-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Settings Customers API
version: '1.0'
servers:
- url: https://www.sendsonar.com/api
security:
- sec0: []
sec1: []
tags:
- name: Customers
paths:
/v1/customers:
get:
summary: GET Customer
description: ''
operationId: get-customer
parameters:
- name: phone_number
in: query
description: The unique phone number of the customer you want to retrieve.
required: true
schema:
type: string
default: '+13105551234'
- name: token
in: query
description: Your private API token for your account.
required: true
schema:
type: string
- name: email
in: query
description: The email address of the customer you want to retrieve.
schema:
type: string
- name: customer_id
in: query
description: The unique ID of the customer you want to retrieve.
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"phone_number\": \"+13105551234\",\n \"email\": \"matt@sendsonar.com\",\n \"first_name\": \"Matthew\",\n \"last_name\": \"Berman\",\n \"subscribed\": true,\n \"unsubscribed_at\": null,\n \"public_id\": \"4092e34b-a5bc-4b89-8268-7370ff47c3c2\",\n \"external_id\": null,\n \"properties\": {\n \t\"cool_dude\": \"TRUE\"\n },\n \"assigned_phone_number\": \"+14155558888\",\n \"assignee\": null,\n \"doubly_opted_in\": false,\n \"team_names\": []\n}"
schema:
type: object
properties:
phone_number:
type: string
example: '+13105551234'
email:
type: string
example: matt@sendsonar.com
first_name:
type: string
example: Matthew
last_name:
type: string
example: Berman
subscribed:
type: boolean
example: true
default: true
unsubscribed_at: {}
public_id:
type: string
example: 4092e34b-a5bc-4b89-8268-7370ff47c3c2
external_id: {}
properties:
type: object
properties:
cool_dude:
type: string
example: 'TRUE'
assigned_phone_number:
type: string
example: '+14155558888'
assignee: {}
doubly_opted_in:
type: boolean
example: false
default: true
team_names:
type: array
items:
type: object
properties: {}
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: html
code: https://www.sendsonar.com/api/v1/customers?token=your_private_token&phone_number=3105551234
samples-languages:
- html
tags:
- Customers
post:
summary: Add/Update Customer
description: ''
operationId: addupdate-customer
requestBody:
content:
application/json:
schema:
type: object
required:
- phone_number
properties:
phone_number:
type: string
description: The phone number of the customer you want to add. This is the unique identifier for a customer.
default: '+13105551234'
email:
type: string
description: Email address of the customer.
first_name:
type: string
description: First name of the customer.
last_name:
type: string
description: Last name of the customer.
properties:
type: object
description: Add as many properties as you want for each customer, in hash format.
properties: {}
picture_url:
type: string
description: Link to the customer's picture so you can see their picture whe replying to them
default: http://where_the_pics_live.com/the_bermanator.png
subscribed:
type: boolean
description: Whether the customer will receive API Messages and Mass Messages.
default: false
assign:
type: string
description: 'Assign the customer to the team member (user) specified by their email. {"user_email": "john@company.com"}'
format: json
zipcode:
type: string
description: Specific Zipcode of the contact
default: '90210'
timezone:
type: string
description: State the timezone your contact is in
default: America/Los_Angeles
external_id:
type: string
description: 'OPTIONAL: Represents an ID from a system external to Sonar'
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"phone_number\": \"+13105551234\",\n \"email\": \"matt@sendsonar.com\",\n \"first_name\": \"Matthew\",\n \"last_name\": \"Berman\",\n \"picture_url\": \"http://where_the_pics_live.com/the_bermanator.png\",\n \"subscribed\": true,\n \"properties\": {\n \"great_customer\": \"true\"\n }\n}"
schema:
type: object
properties:
phone_number:
type: string
example: '+13105551234'
email:
type: string
example: matt@sendsonar.com
first_name:
type: string
example: Matthew
last_name:
type: string
example: Berman
picture_url:
type: string
example: http://where_the_pics_live.com/the_bermanator.png
subscribed:
type: boolean
example: true
default: true
properties:
type: object
properties:
great_customer:
type: string
example: 'true'
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n \"phone_number\": \"+13105551234\",\n \"email\": \"matt@sendsonar.com\",\n \"first_name\": \"Matthew\",\n \"last_name\": \"Berman\",\n \"picture_url\": \"http://where_the_pics_live.com/the_bermanator.png\",\n \"subscribed\": true,\n \"properties\": {\n \"great_customer\": \"true\"\n }\n}"
schema:
type: object
properties:
phone_number:
type: string
example: '+13105551234'
email:
type: string
example: matt@sendsonar.com
first_name:
type: string
example: Matthew
last_name:
type: string
example: Berman
picture_url:
type: string
example: http://where_the_pics_live.com/the_bermanator.png
subscribed:
type: boolean
example: true
default: true
properties:
type: object
properties:
great_customer:
type: string
example: 'true'
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: curl
code: "curl 'https://www.sendsonar.com/api/v1/customers' \\\n -X POST \\\n -H 'X-Token:XXXXXXXXXXXXXXXXXXXXX' \\\n -H \"Content-Type: application/json\" \\\n -d '{\"phone_number\": \"+13105551234\", \"email\": \"matt@sendsonar.com\", \"first_name\": \"Matthew\", \"last_name\": \"Berman\", \"picture_url\": \"http://where_the_pics_live.com/the_bermanator.png\", \"assign\": {\"user_email\": \"john@company.com\"}, \"properties\": {\"great_customer\": \"true\"}, \"external_id\": \"12345\"}'"
samples-languages:
- curl
tags:
- Customers
/v1/customers/close:
post:
summary: Close Customer
description: ''
operationId: close-customer
parameters:
- name: X-Token
in: header
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- phone_number
properties:
phone_number:
type: string
description: The phone number of the customer you want to close.
default: '+13105551234'
responses:
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n\t\"success\":true\n}"
schema:
type: object
properties:
success:
type: boolean
example: true
default: true
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: curl
code: "curl 'https://www.sendsonar.com/api/v1/customers/close' \\\n -X POST \\\n -H 'X-Token:XXXXXXXXXXXXXXXXXXXXX' \\\n -H \"Content-Type: application/json\" \\\n -d '{\"phone_number\": \"+13105551234\"}'"
samples-languages:
- curl
tags:
- Customers
/v1/customers/follow_ups:
post:
summary: Follow-Up Endpoint
description: ''
operationId: follow-up-endpoint
parameters:
- name: token
in: header
description: Sonar Account Private Key
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
phone_number:
type: string
description: Phone Number of the contact
default: '+12223334444'
follow_up_strategy_id:
type: string
description: ID of the specific follow-up to attach to the given customer
default: XXXX-XXXX-XXXX-XXXX
responses:
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n \"message\": \"Successfully attached follow-up to customer\",\n \"customer_id\": \"ed726e4b-xxxx-406d-xxxx-46874acex9bf\",\n \"follow_up_id\": \"xxxxxxxx-2cc8-xxxx-a03a-67931xe3c16e\"\n}"
schema:
type: object
properties:
message:
type: string
example: Successfully attached follow-up to customer
customer_id:
type: string
example: ed726e4b-xxxx-406d-xxxx-46874acex9bf
follow_up_id:
type: string
example: xxxxxxxx-2cc8-xxxx-a03a-67931xe3c16e
'400':
description: '400'
content:
application/json:
examples:
No Follow-up Id:
value: "{\n \"error\": \"Follow-up strategy with this ID cannot be found: \"\n}"
No Customer Provided:
value: "{\n \"error\": \"That customer cannot be found\"\n}"
schema:
oneOf:
- title: No Follow-up Id
type: object
properties:
error:
type: string
example: 'Follow-up strategy with this ID cannot be found: '
- title: No Customer Provided
type: object
properties:
error:
type: string
example: That customer cannot be found
'401':
description: '401'
content:
application/json:
examples:
Unauthorized:
value: "{\n \"error\": \"Token or publishable_key not found\"\n}"
schema:
type: object
properties:
error:
type: string
example: Token or publishable_key not found
deprecated: false
tags:
- Customers
delete:
summary: Remove Follow-Up
description: ''
operationId: remove-follow-up
parameters:
- name: X-Token
in: header
description: Your Sonar Account's private token
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- phone_number
- follow_up_strategy_id
properties:
phone_number:
type: string
description: Phone Number of the customer you want to cancel a Follow-Up for
follow_up_strategy_id:
type: string
description: Specific Follow-Up strategy id that you wish to cancel for your giving customer
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"message\": \"Successfully removed follow-up from customer\",\n \"customer_id\": \"XXX6f63f-d596-4de3-9725-abb51663fXXX\",\n \"follow_up_id\": \"XXX81af3-4baf-BBBB-9f2d-XXXX5cdbbf85\"\n}"
schema:
type: object
properties:
message:
type: string
example: Successfully removed follow-up from customer
customer_id:
type: string
example: XXX6f63f-d596-4de3-9725-abb51663fXXX
follow_up_id:
type: string
example: XXX81af3-4baf-BBBB-9f2d-XXXX5cdbbf85
'400':
description: '400'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"Follow-up strategy with this ID cannot be found: CAA\"\n}"
schema:
type: object
properties:
error:
type: string
example: 'Follow-up strategy with this ID cannot be found: CAA'
'500':
description: '500'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"Internal error, we have been notified.\"\n}"
schema:
type: object
properties:
error:
type: string
example: Internal error, we have been notified.
deprecated: false
tags:
- Customers
/v1/customers/personal_data?token=company_private_token&phone_number=contact_phone_number:
get:
summary: GDPR GET Request
description: ''
operationId: gdpr-get-request
parameters:
- name: token
in: query
description: Optional. See Authentication section above
schema:
type: string
- name: phone_number
in: query
description: Optional
schema:
type: string
- name: external_id
in: query
description: Optional. Customer ID from a system external to Sonar
schema:
type: string
- name: email
in: query
description: Optional. Customer email
schema:
type: string
- name: customer_id
in: query
description: Optional. The public id of a customer found. Public id can be obtained from the response to a GET Customer request or from custom webhook payloads
schema:
type: string
- name: destination_email
in: query
description: Optional. The email address where personal information and message data will be sent in .csv format. If `destination_email` is omitted from the request, data is provided in the response body
schema:
type: string
- name: X-Token
in: header
description: Optional. See Authentication section above
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n {\n \"status\": \"complete\",\n \"customer_data\": {\n \"customer_phone_number\": \"+12085555835\",\n \"email\": \"help@sendsonar.com\",\n \"first_name\": \"Nic\",\n \"last_name\": \"Bahoogaman\"\n },\n \"message_data\": [\n {\n \"to_phone_number\": \"+12085555835\",\n \"from_phone_number\": \"+15556200755\",\n \"media_url\": null,\n \"text\": \"Hello Nic, I'm a sales rep responding to your request. How can I help?\",\n \"created_at\": \"2022-04-08T11:45:01-07:00\"\n }\n ]\n }\n}"
'404':
description: '404'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"Sorry, we couldn't find a customer with that phone number.\"\n}"
schema:
type: object
properties:
error:
type: string
example: Sorry, we couldn't find a customer with that phone number.
deprecated: false
x-readme:
code-samples:
- language: curl
code: curl "https://www.sendsonar.com/api/v1/customers/personal_data?token=company_private_token&phone_number=contact_phone_number"
samples-languages:
- curl
tags:
- Customers
/v1/customers/personal_data?token=your_private_token&phone_number=contact_phone_number:
delete:
summary: GDPR DELETE Request
description: ''
operationId: gdpr-delete-request
requestBody:
content:
application/json:
schema:
type: object
properties:
phone_number:
type: string
description: The phone number of the customer you want to delete. This is the unique identifier for a customer.
default: '+13105551234'
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"status\": \"queued\",\n \"message\": \"Your customer data delete request is currently being processed\"\n}"
schema:
type: object
properties:
status:
type: string
example: queued
message:
type: string
example: Your customer data delete request is currently being processed
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: text
code: "curl 'https://www.sendsonar.com/api/v1/customers/personal_data' \\\n -X DELETE \\\n -H 'X-Token:XXXXXXXXXXXXXXXXXXXXX' \\\n -H \"Content-Type: application/json\" \\\n -d '{\"phone_number\": \"+13105551234\" }'"
samples-languages:
- text
tags:
- Customers
/v1/customers/properties:
delete:
summary: DELETE Customer Properties
description: ''
operationId: delete-customer-properties
requestBody:
content:
application/json:
schema:
type: object
required:
- property_name
properties:
phone_number:
type: string
description: The phone number of the customer you want to modify. This is the unique identifier for a customer. Required only if you're not including the email parameter.
default: '+13105551234'
email:
type: string
description: Email address of the customer. Required only if you're not including the phone_number parameter.
property_name:
type: string
description: The exact name of the property you'd like to delete for the customer
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: '{ "phone_number": "+13105551234","email": "matt@sendsonar.com", "property_name": "delete_me", "deleted": true }'
schema:
type: object
properties:
phone_number:
type: string
example: '+13105551234'
email:
type: string
example: matt@sendsonar.com
property_name:
type: string
example: delete_me
deleted:
type: boolean
example: true
default: true
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: curl
code: "curl 'https://www.sendsonar.com/api/v1/customers/properties' \\\n -X DELETE \\\n -H 'X-Token:XXXXXXXXXXXXXXXXXXXXX' \\\n -H \"Content-Type: application/json\" \\\n -d '{\"phone_number\": \"+13105551234\", \"email\": \"matt@sendsonar.com\", \"property_name\": \"delete_me\"}'"
samples-languages:
- curl
tags:
- Customers
/v1/customers/unassign:
post:
summary: Unassign Agent
description: ''
operationId: unassign-agent
parameters:
- name: token
in: header
description: Your private API token for your account
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
properties:
phone_number:
type: string
description: The unique phone number of the customer you want to unassign a rep from
default: '+12223334444'
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"success\": true\n}"
schema:
type: object
properties:
success:
type: boolean
example: true
default: true
'404':
description: '404'
content:
application/json:
examples:
Result:
value: "{\n \"error\": \"Sorry, we couldn't find a customer with that phone number.\"\n}"
schema:
type: object
properties:
error:
type: string
example: Sorry, we couldn't find a customer with that phone number.
deprecated: false
tags:
- Customers
components:
securitySchemes:
sec0:
type: apiKey
name: X-Token
in: header
x-default: ''
sec1:
type: apiKey
name: token
in: query
x-default: ''
x-readme-fauxas: true
x-provenance:
method: searched
source: https://docs.sendsonar.com/reference
harvested: '2026-10-25'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://docs.sendsonar.com/reference/addupdate-customer.md
- https://docs.sendsonar.com/reference/append-tag-to-message.md
- https://docs.sendsonar.com/reference/available-phone-number.md
- https://docs.sendsonar.com/reference/close-customer.md
- https://docs.sendsonar.com/reference/create-new-role-permission.md
- https://docs.sendsonar.com/reference/create-new-sonar-account.md
- https://docs.sendsonar.com/reference/create-webhook.md
- https://docs.sendsonar.com/reference/delete-customer-properties.md
- https://docs.sendsonar.com/reference/delete-webhooks.md
- https://docs.sendsonar.com/reference/double-opt-in-prompt.md
- https://docs.sendsonar.com/reference/events.md
- https://docs.sendsonar.com/reference/follow-up-endpoint.md
- https://docs.sendsonar.com/reference/gdpr-delete-request.md
- https://docs.sendsonar.com/reference/gdpr-get-request.md
- https://docs.sendsonar.com/reference/get-account-roles.md
- https://docs.sendsonar.com/reference/get-all-users-from-account.md
- https://docs.sendsonar.com/reference/get-conversation-by-id.md
- https://docs.sendsonar.com/reference/get-customer.md
- https://docs.sendsonar.com/reference/get-specific-user-by-id.md
- https://docs.sendsonar.com/reference/get-webhook.md
- https://docs.sendsonar.com/reference/invite-new-user.md
- https://docs.sendsonar.com/reference/personalized-campaign.md
- https://docs.sendsonar.com/reference/remove-follow-up.md
- https://docs.sendsonar.com/reference/send-campaign.md
- https://docs.sendsonar.com/reference/send-message.md
- https://docs.sendsonar.com/reference/unassign-agent.md
- https://docs.sendsonar.com/reference/update-webhook.md
merge:
pages: 27
deduped: 52
conflicts_kept_first: 0