# Twilio Integration via LowCodeAPI

## Overview

Twilio is a cloud communications platform providing APIs for voice, messaging, video, and more. The Twilio API offers comprehensive functionality for:

- **SMS Messages** - Send and receive text messages
- **Voice Calls** - Make and receive phone calls
- **WhatsApp** - Send WhatsApp messages
- **Email** - Send transactional emails
- **Verify** - Two-factor authentication and verification
- **Video** - Real-time video communication

## Base Endpoint

```
https://api.lowcodeapi.com/twilio/
```

## Authentication

LowCodeAPI handles authentication automatically using Basic Auth with Account SID and Auth Token. You only need to:

1. **Sign up** at [Twilio Console](https://console.twilio.com/) to get your Account SID and Auth Token
2. **Connect your account** in the LowCodeAPI dashboard
3. **Use your `api_token`** in all requests

The `api_token` is your LowCodeAPI authentication token. LowCodeAPI will automatically:
- Fetch your Twilio Account SID and Auth Token
- Apply them to each request using Basic Authentication

**Auth Type**: Basic Auth (Account SID + Auth Token)

## API Categories

- **Communication & Messaging** - Team communication, messaging, and notification services

## Common Endpoints

### Category: Message Resource

#### Send SMS Message

**Method**: `POST` | **LowCodeAPI Path**: `/2010-04-01/Accounts/AccountSid/Messages.json`

**Full URL**:
```
https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?api_token={api_token}
```

**Description**: Send an SMS message to a phone number.

**Request Body**:
```json
{
  "To": "+1234567890",
  "From": "+0987654321",
  "Body": "Hello from Twilio via LowCodeAPI!"
}
```

**Request Body Fields**:

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `To` | string | Yes | Destination phone number in E.164 format |
| `From` | string | Yes | Twilio phone number or shortcode |
| `Body` | string | Yes | Message content (max 1600 characters) |
| `StatusCallback` | string | No | URL to receive status updates |
| `MediaUrl` | string | No | URL of media to send (MMS) |

**Example Request**:
```bash
curl -X POST "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "To": "+1234567890",
    "From": "+0987654321",
    "Body": "Hello from Twilio via LowCodeAPI!"
  }'
```

**Official Documentation**: [Send Message](https://www.twilio.com/docs/sms/api/message-resource)

---

#### Get Message

**Method**: `GET` | **LowCodeAPI Path**: `/2010-04-01/Accounts/AccountSid/Messages/Sid.json`

**Full URL**:
```
https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages/Sid.json?sid={sid}&api_token={api_token}
```

**Description**: Retrieve details of a specific message.

**Query Parameters**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sid` | string | Yes | Message SID (unique identifier) |

**Example Request**:
```bash
# Replace SID with actual message SID
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages/Sid.json?sid=MSGXXXXX&api_token=YOUR_API_TOKEN"
```

**Official Documentation**: [Get Message](https://www.twilio.com/docs/sms/api/message-resource)

---

#### List Messages

**Method**: `GET` | **LowCodeAPI Path**: `/2010-04-01/Accounts/AccountSid/Messages.json`

**Full URL**:
```
https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?api_token={api_token}
```

**Description**: Retrieve multiple messages from your account.

**Query Parameters**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `To` | string | No | Filter by recipient phone number |
| `From` | string | No | Filter by sender phone number |
| `DateSent` | string | No | Filter by date sent (YYYY-MM-DD) |
| `Limit` | integer | No | Maximum number of results (default: 50) |

**Example Request**:
```bash
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?To=%2B1234567890&Limit=50&api_token=YOUR_API_TOKEN"
```

**Official Documentation**: [List Messages](https://www.twilio.com/docs/sms/api/message-resource)

---

### Category: Call Resource

#### Make Voice Call

**Method**: `POST` | **LowCodeAPI Path**: `/2010-04-01/Accounts/AccountSid/Calls.json`

**Full URL**:
```
https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls.json?api_token={api_token}
```

**Description**: Initiate a voice call to a phone number.

**Request Body**:
```json
{
  "To": "+1234567890",
  "From": "+0987654321",
  "Url": "http://demo.twilio.com/docs/voice.xml"
}
```

**Request Body Fields**:

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `To` | string | Yes | Destination phone number |
| `From` | string | Yes | Twilio phone number |
| `Url` | string | Yes | URL containing TwiML instructions |
| `Method` | string | No | HTTP method for URL request (default: POST) |
| `StatusCallback` | string | No | URL for status callbacks |

**Example Request**:
```bash
curl -X POST "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls.json?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "To": "+1234567890",
    "From": "+0987654321",
    "Url": "http://demo.twilio.com/docs/voice.xml"
  }'
```

**Official Documentation**: [Make Call](https://www.twilio.com/docs/voice/api/call-resource)

---

#### Get Call

**Method**: `GET` | **LowCodeAPI Path**: `/2010-04-01/Accounts/AccountSid/Calls/Sid.json`

**Full URL**:
```
https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls/Sid.json?sid={sid}&api_token={api_token}
```

**Description**: Retrieve details of a specific call.

**Query Parameters**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `sid` | string | Yes | Call SID |

**Example Request**:
```bash
# Replace SID with actual call SID
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls/Sid.json?sid=CAXXXXXX&api_token=YOUR_API_TOKEN"
```

**Official Documentation**: [Get Call](https://www.twilio.com/docs/voice/api/call-resource)

---

## Usage Examples

### Example 1: Send SMS Messages

Send text messages:

```bash
# Send an SMS message
# No ID needed in path - AccountSid is automatic
curl -X POST "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "To": "+1234567890",
    "From": "+0987654321",
    "Body": "Your verification code is 123456"
  }'

# Get message status
# Replace SID with actual message SID
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages/Sid.json?sid=MSGXXXXX&api_token=YOUR_API_TOKEN"
```

### Example 2: Make Voice Calls

Initiate phone calls:

```bash
# Make a voice call
# No ID needed in path
curl -X POST "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls.json?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "To": "+1234567890",
    "From": "+0987654321",
    "Url": "http://demo.twilio.com/docs/voice.xml"
  }'

# Get call status
# Replace SID with actual call SID
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Calls/Sid.json?sid=CAXXXXXX&api_token=YOUR_API_TOKEN"
```

### Example 3: List Messages

View message history:

```bash
# List recent messages
# No ID needed in path
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?Limit=50&api_token=YOUR_API_TOKEN"

# Filter by recipient
# No ID needed in path
curl -X GET "https://api.lowcodeapi.com/twilio/2010-04-01/Accounts/AccountSid/Messages.json?To=%2B1234567890&Limit=100&api_token=YOUR_API_TOKEN"
```

## Complete Endpoint Reference

For a complete list of all 155 endpoints and their parameters, refer to:

- **OpenAPI Definition**: https://backend.lowcodeapi.com/twilio/definition
- **Official Twilio Documentation**: https://www.twilio.com/docs/usage/api

## Rate Limits & Best Practices

- **Rate Limit**: Refer to your Twilio account for rate limits
- **Best Practices**:
  - Store message and call SIDs for tracking
  - Use status callbacks for real-time updates
  - Implement retry logic for failed messages
  - Validate phone numbers in E.164 format
  - Use webhooks for incoming messages
  - Monitor account balance to avoid service interruption
  - Handle errors gracefully with proper status codes

## Error Handling

All responses are wrapped in a `data` key:
```json
{
  "data": {
    // Actual response from Twilio
  }
}
```

Common errors:
- **400**: Invalid request parameters
- **401**: Invalid Account SID or Auth Token
- **404**: Resource not found
- **429**: Rate limit exceeded
- **500**: Twilio server error