ClickSend
ClickSend API integration with managed authentication. Send SMS, MMS, and voice messages, manage contacts and lists. Use this skill when users want to send text messages, make voice calls, manage cont
ClickSend API integration with managed authentication. Send SMS, MMS, and voice messages, manage contacts and lists. Use this skill when users want to send text messages, make voice calls, manage cont
Real data. Real impact.
Emerging
Developers
Per week
Open source
Skills give you superpowers. Install in 30 seconds.
Access the ClickSend API with managed authentication. Send SMS, MMS, and voice messages, manage contacts and lists, and track message delivery.
# Get account info python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/clicksend/v3/account') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
https://gateway.maton.ai/clicksend/{native-api-path}
Replace
{native-api-path} with the actual ClickSend API endpoint path. The gateway proxies requests to rest.clicksend.com and automatically injects your authentication.
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY
Environment Variable: Set your API key as
MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Manage your ClickSend connections at
https://ctrl.maton.ai.
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections?app=clicksend&status=ACTIVE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
python <<'EOF' import urllib.request, os, json data = json.dumps({'app': 'clicksend'}).encode() req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Content-Type', 'application/json') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
Response:
{ "connection": { "connection_id": "37beee67-29f7-43b6-b0b2-5f0f7a5d6440", "status": "ACTIVE", "creation_time": "2026-02-10T10:04:12.418030Z", "last_updated_time": "2026-02-10T10:06:17.059090Z", "url": "https://connect.maton.ai/?session_token=...", "app": "clicksend", "metadata": {} } }
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
If you have multiple ClickSend connections, specify which one to use with the
Maton-Connection header:
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://gateway.maton.ai/clicksend/v3/account') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') req.add_header('Maton-Connection', '37beee67-29f7-43b6-b0b2-5f0f7a5d6440') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
If omitted, the gateway uses the default (oldest) active connection.
All ClickSend API responses follow this structure:
{ "http_code": 200, "response_code": "SUCCESS", "response_msg": "Description of the result", "data": { ... } }
GET /clicksend/v3/account
Response:
{ "http_code": 200, "response_code": "SUCCESS", "response_msg": "Here's your account", "data": { "user_id": 672721, "username": "user@example.com", "user_email": "user@example.com", "balance": "2.005718", "user_phone": "+18019234886", "user_first_name": "John", "user_last_name": "Doe", "country": "US", "default_country_sms": "US", "timezone": "America/Chicago", "_currency": { "currency_name_short": "USD", "currency_prefix_d": "$" } } }
POST /clicksend/v3/sms/send Content-Type: application/json{ "messages": [ { "to": "+15551234567", "body": "Hello from ClickSend!", "source": "api" } ] }
Parameters:
| Field | Type | Description |
|---|---|---|
| string | Recipient phone number (E.164 format) |
| string | SMS message content |
| string | Source identifier (e.g., "api", "sdk") |
| string | Sender ID (optional) |
| int | Unix timestamp for scheduled send (optional) |
| string | Custom reference (optional) |
POST /clicksend/v3/sms/price Content-Type: application/json{ "messages": [ { "to": "+15551234567", "body": "Test message", "source": "api" } ] }
GET /clicksend/v3/sms/history
Query Parameters:
| Parameter | Description |
|---|---|
| Unix timestamp for start date |
| Unix timestamp for end date |
| Page number (default: 1) |
| Results per page (default: 15) |
GET /clicksend/v3/sms/inbound
GET /clicksend/v3/sms/receipts
PUT /clicksend/v3/sms/{message_id}/cancel
PUT /clicksend/v3/sms/cancel-all
GET /clicksend/v3/sms/templates
Response:
{ "http_code": 200, "response_code": "SUCCESS", "response_msg": "Here are your templates.", "data": { "total": 1, "per_page": 15, "current_page": 1, "data": [ { "template_id": 632497, "body": "Hello {name}, this is a test message.", "template_name": "Test Template" } ] } }
POST /clicksend/v3/sms/templates Content-Type: application/json{ "template_name": "Welcome Message", "body": "Hello {name}, welcome to our service!" }
PUT /clicksend/v3/sms/templates/{template_id} Content-Type: application/json{ "template_name": "Updated Template", "body": "Updated message content" }
DELETE /clicksend/v3/sms/templates/{template_id}
POST /clicksend/v3/mms/send Content-Type: application/json{ "messages": [ { "to": "+15551234567", "body": "Check out this image!", "media_file": "https://example.com/image.jpg", "source": "api" } ] }
GET /clicksend/v3/mms/history
POST /clicksend/v3/mms/price Content-Type: application/json{ "messages": [...] }
GET /clicksend/v3/mms/receipts
POST /clicksend/v3/voice/send Content-Type: application/json{ "messages": [ { "to": "+15551234567", "body": "Hello, this is a voice message.", "voice": "female", "lang": "en-us", "source": "api" } ] }
Voice Parameters:
| Field | Description |
|---|---|
| Recipient phone number |
| Text to be spoken |
| Voice gender: or |
| Language code (e.g., , , ) |
| Unix timestamp for scheduled call |
| Require keypad input (0-1) |
| Detect answering machine (0-1) |
GET /clicksend/v3/voice/lang
Returns list of supported languages with codes and available genders.
GET /clicksend/v3/voice/history
Note: Requires voice access enabled on account.
POST /clicksend/v3/voice/price
PUT /clicksend/v3/voice/{message_id}/cancel
GET /clicksend/v3/lists
Response:
{ "http_code": 200, "response_code": "SUCCESS", "response_msg": "Here are your contact lists.", "data": { "total": 2, "data": [ { "list_id": 3555277, "list_name": "Opt-Out List", "_contacts_count": 0 }, { "list_id": 3555278, "list_name": "Example List", "_contacts_count": 10 } ] } }
GET /clicksend/v3/lists/{list_id}
POST /clicksend/v3/lists Content-Type: application/json{ "list_name": "My New List" }
PUT /clicksend/v3/lists/{list_id} Content-Type: application/json{ "list_name": "Updated List Name" }
DELETE /clicksend/v3/lists/{list_id}
PUT /clicksend/v3/lists/{list_id}/remove-duplicates
GET /clicksend/v3/lists/{list_id}/contacts
Query Parameters:
| Parameter | Description |
|---|---|
| Page number |
| Results per page |
| Filter contacts updated after timestamp |
GET /clicksend/v3/lists/{list_id}/contacts/{contact_id}
Response:
{ "http_code": 200, "response_code": "SUCCESS", "data": { "contact_id": 1581565666, "list_id": 3555278, "phone_number": "+18019234886", "first_name": "John", "last_name": "Doe", "email": "john@example.com", "custom_1": "", "custom_2": "", "custom_3": "", "custom_4": "", "organization_name": "", "address_city": "", "address_state": "", "address_country": "US" } }
POST /clicksend/v3/lists/{list_id}/contacts Content-Type: application/json{ "phone_number": "+15551234567", "first_name": "John", "last_name": "Doe", "email": "john@example.com" }
Contact Fields:
| Field | Description |
|---|---|
| Phone number (E.164 format) |
| First name |
| Last name |
| Email address |
| Fax number |
| Company name |
- | Custom fields |
, | Address |
, , , | Address components |
PUT /clicksend/v3/lists/{list_id}/contacts/{contact_id} Content-Type: application/json{ "first_name": "Jane", "last_name": "Smith" }
DELETE /clicksend/v3/lists/{list_id}/contacts/{contact_id}
PUT /clicksend/v3/lists/{from_list_id}/contacts/{contact_id}/copy/{to_list_id}
PUT /clicksend/v3/lists/{from_list_id}/contacts/{contact_id}/transfer/{to_list_id}
GET /clicksend/v3/email/addresses
POST /clicksend/v3/email/addresses Content-Type: application/json{ "email_address": "sender@example.com" }
DELETE /clicksend/v3/email/addresses/{email_address_id}
GET /clicksend/v3/countries
Returns list of all supported countries with codes.
ClickSend uses page-based pagination:
GET /clicksend/v3/lists?page=2&limit=50
Response includes:
{ "data": { "total": 100, "per_page": 50, "current_page": 2, "last_page": 2, "next_page_url": null, "prev_page_url": "...?page=1", "from": 51, "to": 100, "data": [...] } }
Parameters:
page - Page number (default: 1)limit - Results per page (default: 15)const response = await fetch( 'https://gateway.maton.ai/clicksend/v3/sms/send', { method: 'POST', headers: { 'Authorization': `Bearer ${process.env.MATON_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ messages: [ { to: '+15551234567', body: 'Hello from ClickSend!', source: 'api' } ] }) } ); const data = await response.json(); console.log(data);
import os import requestsresponse = requests.post( 'https://gateway.maton.ai/clicksend/v3/sms/send', headers={ 'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}', 'Content-Type': 'application/json' }, json={ 'messages': [ { 'to': '+15551234567', 'body': 'Hello from ClickSend!', 'source': 'api' } ] } ) data = response.json() print(f"Status: {data['response_code']}")
+15551234567)source field to identify your application in analytics{name}, {custom_1}, etc.curl -g when URLs contain brackets to disable glob parsingjq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad request |
| 401 | Unauthorized - invalid credentials |
| 403 | Forbidden - insufficient permissions |
| 404 | Resource not found |
| 429 | Rate limited |
| 500 | Internal server error |
Response codes:
SUCCESS - Operation completed successfullyFORBIDDEN - Access denied to resourceBAD_REQUEST - Invalid request parametersINVALID_RECIPIENT - Invalid phone numberMATON_API_KEY environment variable is set:echo $MATON_API_KEY
python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://ctrl.maton.ai/connections') req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}') print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2)) EOF
clicksend. For example:https://gateway.maton.ai/clicksend/v3/accounthttps://gateway.maton.ai/v3/accountNo automatic installation available. Please visit the source repository for installation instructions.
View Installation Instructions1,500+ AI skills, agents & workflows. Install in 30 seconds. Part of the Torly.ai family.
© 2026 Torly.ai. All rights reserved.