# clicksend
ClickSend via SkillBoss API Hub Send SMS, MMS, and voice messages via SkillBoss API Hub. Manage contacts and lists, and track message delivery. Quick Start import requests, os SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"] response = requests.post( "https://api.heybossai.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) Base URL
https://api.heybossai.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. Authentication 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"
Getting Your API Key Sign in or create an account at heybossai.com Go to your account settings Copy your API key API Reference Response Format All SkillBoss API Hub responses follow this structure: { "status": "success", "result": { ... } } 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": "[email protected]", "user_email": "[email protected]", "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:
FieldTypeDescriptiontostringRecipient phone number (E.164 format)bodystringSMS message contentsourcestringSource 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: ParameterDescriptiondate_fromUnix timestamp for start datedate_toUnix timestamp for end datepagePage 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: FieldDescriptiontoRecipient phone numberbodyText to be spokenvoiceVoice gender: male or femalelangLanguage code (e.g., en-us, en-gb, de-de)scheduleUnix timestamp for scheduled callrequire_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: ParameterDescriptionpagePage numberlimitResults per pageupdated_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": "[email protected]", "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": "[email protected]" } Contact Fields: FieldDescriptionphone_numberPhone number (E.164 format)first_nameFirst namelast_nameLast nameemailEmail addressfax_numberFax numberorganization_nameCompany namecustom_1 - custom_4Custom fieldsaddress_line_1, address_line_2Addressaddress_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 List Verified Email Addresses GET /clicksend/v3/email/addresses Add Email Address POST /clicksend/v3/email/addresses
Content-Type: application/json
{ "email_address": "[email protected]" } 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.heybossai.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); Python import os import requests SKILLBOSS_API_KEY = os.environ["SKILLBOSS_API_KEY"] response = requests.post( "https://api.heybossai.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) 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 All requests use the /v1/run endpoint: https://api.heybossai.com/v1/run SkillBoss API Hub automatically routes to the optimal SMS provider Error Handling StatusMeaning200Success400Bad request401Unauthorized - invalid credentials403Forbidden - insufficient permissions404Resource not found429Rate limited500Internal 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
Check that the SKILLBOSS_API_KEY environment variable is set: echo $SKILLBOSS_API_KEY Verify the API key is valid by making a test request: python <<'EOF' import urllib.request, os, json req = urllib.request.Request('https://api.heybossai.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 Resources ClickSend Developer Portal ClickSend REST API v3 Documentation ClickSend PHP SDK ClickSend Help Center SkillBoss API Hub SkillBoss Support
Join 80,000+ one-person companies automating with AI