设计与多媒体

ClickSend

试用

通过托管认证调用 ClickSend API,发送 SMS、MMS 与语音消息,每次写入操作均需用户确认。

它能做什么

通过 api.maton.ai 代理网关调用 ClickSend API,认证由网关统一管理。可向 E.164 号码发送 SMS 与 MMS,以多种语言发起语音呼叫,并查询发送历史与回执。支持 SMS 模板、联系人列表、单条联系人(新增、修改、复制、转移)以及已验证发件邮箱地址的增删改查。所有写入操作都必须经过用户明确确认;发送短信、彩信或语音会触达真实收件人并可能产生费用,因此执行前应核对收件人、内容与发送时间。

什么时候用它

  • 向客户手机号发送事务性 SMS
  • 查询近期短信任务的发送回执
  • 在 ClickSend 中创建并维护联系人列表
  • 用指定语言安排一条语音呼叫

技能文档

ClickSend

Access the ClickSend API with managed authentication. Send SMS, MMS, and voice messages, manage contacts and lists, and track message delivery.

Quick Start

# Get account info
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Base URL

https://api.maton.ai/clicksend/{native-api-path}

Maton proxies requests to rest.clicksend.com and automatically injects your authentication.

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"

Getting Your API Key

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your ClickSend connections at https://api.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Create Connection

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'clicksend'}).encode()
req = urllib.request.Request('https://api.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

Get Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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": "{connection_id}",
    "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": {}
  }
}

Delete Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Specifying Connection

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://api.maton.ai/clicksend/v3/account')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always include this header to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to SMS, MMS, voice messages, contacts, lists, verified email addresses, and account info within the connected ClickSend account.
  • All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.
  • Messaging operations (SMS, MMS, voice) deliver to real recipients and may incur costs. Confirm the recipient, content, and timing before sending.
  • Email address management modifies verified sender identities on the account. Deleting a verified address may affect other services that depend on it. Confirm before modifying.

API Reference

Response Format

All ClickSend API responses follow this structure:

{
  "http_code": 200,
  "response_code": "SUCCESS",
  "response_msg": "Description of the result",
  "data": { ... }
}

Account

Get Account

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": "$"
    }
  }
}

SMS

Send SMS

POST /clicksend/v3/sms/send
Content-Type: application/json

{
  "messages": [
    {
      "to": "+15551234567",
      "body": "Hello from ClickSend!",
      "source": "api"
    }
  ]
}

Parameters:

FieldTypeDescription
tostringRecipient phone number (E.164 format)
bodystringSMS message content
sourcestringSource identifier (e.g., "api", "sdk")
fromstringSender ID (optional)
scheduleintUnix timestamp for scheduled send (optional)
custom_stringstringCustom reference (optional)

Get SMS Price

POST /clicksend/v3/sms/price
Content-Type: application/json

{
  "messages": [
    {
      "to": "+15551234567",
      "body": "Test message",
      "source": "api"
    }
  ]
}

SMS History

GET /clicksend/v3/sms/history

Query Parameters:

ParameterDescription
date_fromUnix timestamp for start date
date_toUnix timestamp for end date
pagePage number (default: 1)
limitResults per page (default: 15)

Inbound SMS

GET /clicksend/v3/sms/inbound

SMS Receipts (Delivery Reports)

GET /clicksend/v3/sms/receipts

Cancel Scheduled SMS

PUT /clicksend/v3/sms/{message_id}/cancel

Cancel All Scheduled SMS

PUT /clicksend/v3/sms/cancel-all

SMS Templates

List Templates

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"
      }
    ]
  }
}

Create Template

POST /clicksend/v3/sms/templates
Content-Type: application/json

{
  "template_name": "Welcome Message",
  "body": "Hello {name}, welcome to our service!"
}

Update Template

PUT /clicksend/v3/sms/templates/{template_id}
Content-Type: application/json

{
  "template_name": "Updated Template",
  "body": "Updated message content"
}

Delete Template

DELETE /clicksend/v3/sms/templates/{template_id}

MMS

Send MMS

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"
    }
  ]
}

MMS History

GET /clicksend/v3/mms/history

Get MMS Price

POST /clicksend/v3/mms/price
Content-Type: application/json

{
  "messages": [...]
}

MMS Receipts

GET /clicksend/v3/mms/receipts

Voice

Send Voice Message

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:

FieldDescription
toRecipient phone number
bodyText to be spoken
voiceVoice gender: male or female
langLanguage code (e.g., en-us, en-gb, de-de)
scheduleUnix timestamp for scheduled call
require_inputRequire keypad input (0-1)
machine_detectionDetect answering machine (0-1)

Available Languages

GET /clicksend/v3/voice/lang

Returns list of supported languages with codes and available genders.

Voice History

GET /clicksend/v3/voice/history

Note: Requires voice access enabled on account.

Get Voice Price

POST /clicksend/v3/voice/price

Cancel Voice Message

PUT /clicksend/v3/voice/{message_id}/cancel

Contact Lists

List All Lists

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 List

GET /clicksend/v3/lists/{list_id}

Create List

POST /clicksend/v3/lists
Content-Type: application/json

{
  "list_name": "My New List"
}

Update List

PUT /clicksend/v3/lists/{list_id}
Content-Type: application/json

{
  "list_name": "Updated List Name"
}

Delete List

DELETE /clicksend/v3/lists/{list_id}

Remove Duplicates

PUT /clicksend/v3/lists/{list_id}/remove-duplicates

Contacts

List Contacts in a List

GET /clicksend/v3/lists/{list_id}/contacts

Query Parameters:

ParameterDescription
pagePage number
limitResults per page
updated_afterFilter contacts updated after timestamp

Get Contact

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"
  }
}

Create Contact

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:

FieldDescription
phone_numberPhone number (E.164 format)
first_nameFirst name
last_nameLast name
emailEmail address
fax_numberFax number
organization_nameCompany name
custom_1 - custom_4Custom fields
address_line_1, address_line_2Address
address_city, address_state, address_postal_code, address_countryAddress components

Update Contact

PUT /clicksend/v3/lists/{list_id}/contacts/{contact_id}
Content-Type: application/json

{
  "first_name": "Jane",
  "last_name": "Smith"
}

Delete Contact

DELETE /clicksend/v3/lists/{list_id}/contacts/{contact_id}

Copy Contact to Another List

PUT /clicksend/v3/lists/{from_list_id}/contacts/{contact_id}/copy/{to_list_id}

Transfer Contact to Another List

PUT /clicksend/v3/lists/{from_list_id}/contacts/{contact_id}/transfer/{to_list_id}

Email Addresses

Account configuration. These endpoints manage verified sender email addresses on the ClickSend account. Adding or deleting addresses affects which sender identities are available for email campaigns. Confirm the address and intent with the user before modifying.

List Verified Email Addresses

GET /clicksend/v3/email/addresses

Add Email Address

POST /clicksend/v3/email/addresses
Content-Type: application/json

{
  "email_address": "sender@example.com"
}

Delete Email Address

DELETE /clicksend/v3/email/addresses/{email_address_id}

Utility Endpoints

List Countries

GET /clicksend/v3/countries

Returns list of all supported countries with codes.


Pagination

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)

Code Examples

JavaScript

const response = await fetch(
  'https://api.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);

Python

import os
import requests

response = requests.post(
    'https://api.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']}")

Notes

  • Phone numbers must be in E.164 format (e.g., +15551234567)
  • All timestamps are Unix timestamps (seconds since epoch)
  • Use source field to identify your application in analytics
  • Templates support placeholders like {name}, {custom_1}, etc.
  • SMS messages over 160 characters are split into multiple segments
  • Voice access requires account-level permissions
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments

Error Handling

StatusMeaning
200Success
400Bad request
401Unauthorized - invalid credentials
403Forbidden - insufficient permissions
404Resource not found
429Rate limited
500Internal server error

Response codes:

  • SUCCESS - Operation completed successfully
  • FORBIDDEN - Access denied to resource
  • BAD_REQUEST - Invalid request parameters
  • INVALID_RECIPIENT - Invalid phone number

Troubleshooting: API Key Issues

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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

Troubleshooting: Invalid App Name

  1. Ensure your URL path starts with clicksend. For example:
  • Correct: https://api.maton.ai/clicksend/v3/account
  • Incorrect: https://api.maton.ai/v3/account

Resources

相关技能

通过 OAuth 认证网关管理 Stripe 客户、订阅、发票、产品、价格和支付。

作者 byungkyu720 次安装29 星标

通过托管 OAuth 访问 Microsoft Graph Excel 接口,读写 OneDrive 中的工作簿、工作表、区域、表格与图表。

作者 byungkyu800 次安装42 星标

通过托管的 OAuth GraphQL 接口查询与管理 Linear 的 issue、项目、团队、周期、标签和评论。

作者 byungkyu518 次安装18 星标

通过托管 OAuth 代理访问 YouTube Data API v3,搜索与管理视频、播放列表、频道、订阅和评论。

作者 byungkyu880 次安装145 星标

通过一次 REST API 调用,向 10 个社交平台发布视频、图片、文字与文档。

作者 victorcavero14375 次安装50 星标

在本地磁盘以分类纯 Markdown 文件保存需要长期留存的事实,与智能体内置记忆并存。

作者 Iván555 次安装18 星标

byungkyu 的更多技能

浏览全部技能

通过托管 OAuth 访问 Microsoft Graph Excel 接口,读写 OneDrive 中的工作簿、工作表、区域、表格与图表。

作者 byungkyu800 次安装42 星标

通过托管的 OAuth GraphQL 接口查询与管理 Linear 的 issue、项目、团队、周期、标签和评论。

作者 byungkyu518 次安装18 星标

通过 OAuth 认证网关管理 Stripe 客户、订阅、发票、产品、价格和支付。

作者 byungkyu720 次安装29 星标

通过托管 OAuth 代理访问 YouTube Data API v3,搜索与管理视频、播放列表、频道、订阅和评论。

作者 byungkyu880 次安装145 星标

通过托管 OAuth 代理调用 WooCommerce REST API,管理商品、订单、客户、优惠券、物流、税务等数据。

作者 byungkyu508 次安装18 星标

通过托管 OAuth 认证,访问并管理 ClickUp 工作区、空间、文件夹、清单与任务等数据。

作者 byungkyu611 次安装12 星标