Install
openclaw skills install alv-clicksendSkillBoss API Hub integration for SMS/MMS messaging and voice calls. Send SMS, MMS, and voice messages, manage contacts and lists. Use this skill when users want to send text messages, make voice calls, manage contact lists, or track message delivery.
openclaw skills install alv-clicksendSend SMS, MMS, and voice messages via SkillBoss API Hub. Manage contacts and lists, and track message delivery.
import requests, os
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
response = requests.post(
"https://api.skillboss.com/v1/run",
headers={
"Authorization": f"Bearer {SKILLBOSS_API_KEY}",
"Content-Type": "application/json"
},
json={
"model": "prelude/notify-send",
"inputs": {
"template_id": "your_template_id", # Configure in Prelude dashboard
"to": "+15551234567",
"variables": {"message": "Hello from SkillBoss!"}
}
}
)
result = response.json()
print(result)
https://api.skillboss.com/v1/run
All SMS requests are routed through SkillBoss API Hub using the /v1/run endpoint with Prelude as the SMS provider.
Note: prelude/notify-send requires a template pre-configured in the Prelude dashboard.
For OTP verification, use prelude/verify-send / prelude/verify-check.
All requests require the SkillBoss API key in the Authorization header:
Authorization: Bearer $SKILLBOSS_API_KEY
Environment Variable: Set your API key as SKILLBOSS_API_KEY:
export SKILLBOSS_API_KEY="YOUR_API_KEY"
All SkillBoss API Hub responses follow this structure:
{
"status": "success",
"result": { ... }
}
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 |
|---|---|---|
to | string | Recipient phone number (E.164 format) |
body | string | SMS message content |
source | string | Source identifier (e.g., "api", "sdk") |
from | string | Sender ID (optional) |
schedule | int | Unix timestamp for scheduled send (optional) |
custom_string | 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 |
|---|---|
date_from | Unix timestamp for start date |
date_to | Unix timestamp for end date |
page | Page number (default: 1) |
limit | 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 |
|---|---|
to | Recipient phone number |
body | Text to be spoken |
voice | Voice gender: male or female |
lang | Language code (e.g., en-us, en-gb, de-de) |
schedule | Unix timestamp for scheduled call |
require_input | Require keypad input (0-1) |
machine_detection | 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 | Page number |
limit | Results per page |
updated_after | 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 | Phone number (E.164 format) |
first_name | First name |
last_name | Last name |
email | Email address |
fax_number | Fax number |
organization_name | Company name |
custom_1 - custom_4 | Custom fields |
address_line_1, address_line_2 | Address |
address_city, address_state, address_postal_code, address_country | 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://api.skillboss.com/v1/run',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.SKILLBOSS_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'prelude/notify-send',
inputs: {
template_id: 'your_template_id',
to: '+15551234567',
variables: { message: 'Hello from SkillBoss!' }
}
})
}
);
const data = await response.json();
const result = data.result;
console.log(result);
import os
import requests
SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"]
response = requests.post(
"https://api.skillboss.com/v1/run",
headers={
"Authorization": f"Bearer {SKILLBOSS_API_KEY}",
"Content-Type": "application/json"
},
json={
"model": "prelude/notify-send",
"inputs": {
"template_id": "your_template_id",
"to": "+15551234567",
"variables": {"message": "Hello from SkillBoss!"}
}
}
)
result = response.json()
print(result)
+15551234567)source field to identify your application in analytics{name}, {custom_1}, etc./v1/run endpoint: https://api.skillboss.com/v1/run| 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 numberSKILLBOSS_API_KEY environment variable is set:echo $SKILLBOSS_API_KEY
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.skillboss.com/v1/run')
req.add_header('Authorization', f'Bearer {os.environ["SKILLBOSS_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
import urllib.parse
data = json.dumps({'discover': True}).encode()
req.data = data
req.method = 'POST'
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF