Docs
DocumentationExamplesDashboard →

Getting Started

  • Introduction
  • Authentication
  • Base URL

API Reference

  • Sending SMS
  • Scheduled SMS
  • Sender IDs

Resources

  • Error Responses
  • Code Examples

Error Responses

All API errors follow a consistent format. This page documents common error responses.

Error Format

All errors return a JSON response with this structure:

{
  "success": false,
  "error": "Error message description",
  "code": "ERROR_CODE"
}

HTTP Status Codes

StatusDescription
400Bad Request - Invalid parameters
401Unauthorized - Invalid or missing API key
402Payment Required - Insufficient credits
403Forbidden - Access denied
404Not Found - Resource doesn't exist
429Too Many Requests - Rate limit exceeded
500Internal Server Error

Common Errors

401 Unauthorized

Invalid API Key

{
  "success": false,
  "error": "Invalid API key",
  "code": "INVALID_API_KEY"
}

Missing Authorization Header

{
  "success": false,
  "error": "Authorization header is required",
  "code": "MISSING_AUTH"
}

400 Bad Request

Missing Phone

{
  "success": false,
  "error": "Phone, message, and sender ID are required",
  "code": "MISSING_PHONE"
}

Invalid Phone Number Format

{
  "success": false,
  "error": "Invalid phone number format: 12345. Use a valid Ghana number such as 0200000000, 233200000000, or +233200000000.",
  "code": "INVALID_PHONE"
}

Missing Message

{
  "success": false,
  "error": "Message content is required",
  "code": "MISSING_MESSAGE"
}

Message Too Long

{
  "success": false,
  "error": "Message exceeds maximum length of 918 characters",
  "code": "MESSAGE_TOO_LONG"
}

Invalid Sender ID

{
  "success": false,
  "error": "Sender ID 'InvalidName' is not approved",
  "code": "INVALID_SENDER_ID"
}

402 Payment Required

Insufficient Credits

{
  "success": false,
  "error": "Insufficient credits. Required: 50, Available: 10",
  "code": "INSUFFICIENT_CREDITS"
}

403 Forbidden

Sender ID Not Owned

{
  "success": false,
  "error": "Sender ID does not belong to user or does not exist",
  "code": "SENDER_ID_NOT_OWNED"
}

429 Too Many Requests

Rate Limit Exceeded

{
  "success": false,
  "error": "Rate limit exceeded. Please wait 60 seconds.",
  "code": "RATE_LIMIT_EXCEEDED",
  "retry_after": 60
}

500 Internal Server Error

Server Error

{
  "success": false,
  "error": "An unexpected error occurred. Please try again later.",
  "code": "INTERNAL_ERROR"
}

Handling Errors

Example error handling in JavaScript:

try {
  const response = await fetch("https://kixon.app/api/send-sms", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${apiKey}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(data),
  });
 
  const result = await response.json();
 
  if (!response.ok) {
    switch (response.status) {
      case 401:
        console.error("Authentication failed:", result.error);
        break;
      case 402:
        console.error("Insufficient credits:", result.error);
        break;
      case 429:
        console.error("Rate limited. Retry after:", result.retry_after);
        break;
      default:
        console.error("API error:", result.error);
    }
    return;
  }
 
  console.log("SMS sent:", result.messageId);
} catch (error) {
  console.error("Network error:", error);
}