# AWS SES Integration via LowCodeAPI

**Last Updated**: February 11, 2026

## Overview

Amazon Simple Email Service (SES) is a cloud-based email sending service designed to help digital marketers and application developers send marketing, notification, and transactional emails. It provides a reliable, scalable, and cost-effective solution for sending emails.

**Main Features**:
- Send individual and bulk emails
- Manage email sending quotas
- Track delivery metrics and bounces
- Support for HTML and plain text emails
- Configuration sets for advanced email handling

## Base Endpoint

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

**Important**: Always include the provider name `awsses` in the URL path after `api.lowcodeapi.com/`.

## Authentication

AWS SES uses token-based authentication with AWS credentials:

1. **AWS Access Key ID**: Your AWS access key identifier
2. **AWS Secret Access Key**: Your AWS secret access key
3. **AWS Region**: The AWS region where your SES account is configured

### Setting Up Credentials

1. Go to the [AWS IAM Console](https://console.aws.amazon.com/iam/)
2. Create an IAM user with SES permissions or use an existing user
3. Generate an access key for the user
4. Copy the Access Key ID and Secret Access Key
5. Select your region (e.g., `us-east-1`, `us-east-2`, `us-west-1`)

**Note**: For detailed instructions on creating access keys, visit the [AWS IAM Documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)

## URL Format

LowCodeAPI supports two URL formats for AWS SES. Always try the **New Format first**, and only fall back to the **Old Format** if it doesn't work.

### New Format (Priority)

Path parameters remain in the URL path. This is the preferred format.

**Pattern**:
```
https://api.lowcodeapi.com/awsses/{path}?api_token={api_token}
```

### Old Format (Fallback)

Path parameters are converted to query parameters. Use this only if New Format fails.

**Pattern**:
```
https://api.lowcodeapi.com/awsses/{sanitized_path}?{path_params}&api_token={api_token}
```

### Decision Flow for AI Agents

1. **Always try New Format first** - Keep path parameters in the URL path
2. If you receive a 404 or error, **try Old Format** with sanitized path
3. Log which format worked for future requests to AWS SES

## API Categories

- **Email**: Core email sending operations (send single email, send bulk emails)

## Common Endpoints

### Send Email

**Method**: POST

**New Format URL**:
```
https://api.lowcodeapi.com/awsses/v2/email/outbound-emails?api_token=YOUR_API_TOKEN
```

**Old Format URL**:
```
https://api.lowcodeapi.com/awsses/v2/email/outbound-emails?api_token=YOUR_API_TOKEN
```

**Note**: This endpoint has no path parameters, so both formats are identical.

**Path Parameters**: None

**Query Parameters**: None

**Request Body**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `FromEmailAddress` | string | Yes | The email address to use as the "From" address for the email |
| `Destination` | object | Yes | An object that contains the recipients of the email message |
| `Content` | object | Yes | An object that contains the body of the message (Subject, HTML, Text) |
| `ReplyToAddresses` | array | No | The "Reply-to" email addresses for the message |
| `ConfigurationSetName` | string | No | The name of the configuration set to use when sending the email |
| `EmailTags` | array | No | A list of tags to apply to the email |
| `FeedbackForwardingEmailAddress` | string | No | The address for bounce and complaint notifications |
| `FeedbackForwardingEmailAddressIdentityArn` | string | No | Used only for sending authorization |
| `FromEmailAddressIdentityArn` | string | No | Used only for sending authorization |
| `ListManagementOptions` | object | No | An object used to specify a list or topic to which an email belongs |

**Request Body Schema**:
```json
{
  "FromEmailAddress": "[email protected]",
  "Destination": {
    "ToAddresses": ["[email protected]", "[email protected]"],
    "CcAddresses": ["[email protected]"],
    "BccAddresses": ["[email protected]"]
  },
  "Content": {
    "Simple": {
      "Subject": {
        "Data": "Email Subject",
        "Charset": "UTF-8"
      },
      "Body": {
        "Text": {
          "Data": "Plain text email body",
          "Charset": "UTF-8"
        },
        "Html": {
          "Data": "<h1>HTML Email Body</h1>",
          "Charset": "UTF-8"
        }
      }
    }
  },
  "ReplyToAddresses": ["[email protected]"],
  "ConfigurationSetName": "MyConfigurationSet",
  "EmailTags": [
    {
      "Name": "Campaign",
      "Value": "Newsletter"
    }
  ]
}
```

**Example Request** (New Format):
```bash
curl -X POST "https://api.lowcodeapi.com/awsses/v2/email/outbound-emails?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "FromEmailAddress": "[email protected]",
    "Destination": {
      "ToAddresses": ["[email protected]"]
    },
    "Content": {
      "Simple": {
        "Subject": {
          "Data": "Welcome to Our Service",
          "Charset": "UTF-8"
        },
        "Body": {
          "Text": {
            "Data": "Thank you for signing up!",
            "Charset": "UTF-8"
          },
          "Html": {
            "Data": "<h1>Welcome!</h1><p>Thank you for signing up!</p>",
            "Charset": "UTF-8"
          }
        }
      }
    }
  }'
```

**Example Response**:
```json
{
  "data": {
    "MessageId": "EXAMPLEf3f5-88a6-1234-5678-EXAMPLEabcd"
  }
}
```

**Official Documentation**: [SendEmail API Reference](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendEmail.html)

---

### Send Bulk Email

**Method**: POST

**New Format URL**:
```
https://api.lowcodeapi.com/awsses/v2/email/outbound-bulk-emails?api_token=YOUR_API_TOKEN
```

**Old Format URL**:
```
https://api.lowcodeapi.com/awsses/v2/email/outbound-bulk-emails?api_token=YOUR_API_TOKEN
```

**Path Parameters**: None

**Query Parameters**: None

**Request Body**:

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `FromEmailAddress` | string | Yes | The email address to use as the "From" address for the email |
| `BulkEmailEntries` | array | Yes | The list of bulk email entry objects (destinations and content) |
| `DefaultContent` | object | Yes | An object that contains the default body of the message |
| `ReplyToAddresses` | array | No | The "Reply-to" email addresses for the message |
| `ConfigurationSetName` | string | No | The name of the configuration set to use when sending the email |
| `DefaultEmailTags` | array | No | A list of tags to apply to all emails in the batch |
| `FeedbackForwardingEmailAddress` | string | No | The address for bounce and complaint notifications |
| `FeedbackForwardingEmailAddressIdentityArn` | string | No | Used only for sending authorization |
| `FromEmailAddressIdentityArn` | string | No | Used only for sending authorization |

**Example Request**:
```bash
curl -X POST "https://api.lowcodeapi.com/awsses/v2/email/outbound-bulk-emails?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "FromEmailAddress": "[email protected]",
    "BulkEmailEntries": [
      {
        "Destination": {
          "ToAddresses": ["[email protected]"]
        },
        "ReplacementTags": [
          {
            "Name": "CustomerName",
            "Value": "John"
          }
        ]
      },
      {
        "Destination": {
          "ToAddresses": ["[email protected]"]
        },
        "ReplacementTags": [
          {
            "Name": "CustomerName",
            "Value": "Jane"
          }
        ]
      }
    ],
    "DefaultContent": {
      "Template": {
        "TemplateName": "WelcomeTemplate",
        "TemplateData": "{\"name\":\"{{CustomerName}}\"}"
      }
    }
  }'
```

**Example Response**:
```json
{
  "data": {
    "BulkEmailEntries": [
      {
        "Status": "SUCCESS",
        "MessageId": "EXAMPLE123-4567-89ab-cdef-EXAMPLE123"
      },
      {
        "Status": "SUCCESS",
        "MessageId": "EXAMPLE456-7890-abcd-ef12-EXAMPLE456"
      }
    ]
  }
}
```

**Official Documentation**: [SendBulkEmail API Reference](https://docs.aws.amazon.com/ses/latest/APIReference-V2/API_SendBulkEmail.html)

---

## Complete Endpoint Reference

## Response Format

All responses from LowCodeAPI are wrapped in a `data` key:

```json
{
  "data": {
    // Actual response from provider API
  }
}
```

The `data` key contains the raw response from the provider's API.

| Method | Category | New Format Path | Old Format Path | Description |
|--------|----------|-----------------|-----------------|-------------|
| POST | Email | `/v2/email/outbound-emails` | `/v2/email/outbound-emails` | Sends an email message |
| POST | Email | `/v2/email/outbound-bulk-emails` | `/v2/email/outbound-bulk-emails` | Composes an email message to multiple destinations |

## API Definition Endpoints

To discover all available endpoints for AWS SES:

**New Format (OpenAPI Spec)**:
```
https://backend.lowcodeapi.com/awsses/openapi
```

**Old Format (API Definition)**:
```
https://backend.lowcodeapi.com/awsses/definition
```

## Usage Examples

### Example 1: Send a Welcome Email

Send a personalized welcome email to a new user.

```bash
curl -X POST "https://api.lowcodeapi.com/awsses/v2/email/outbound-emails?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "FromEmailAddress": "[email protected]",
    "Destination": {
      "ToAddresses": ["[email protected]"]
    },
    "Content": {
      "Simple": {
        "Subject": {
          "Data": "Welcome to Our Service",
          "Charset": "UTF-8"
        },
        "Body": {
          "Text": {
            "Data": "Hi there!\n\nWelcome to our service. We are excited to have you on board.\n\nBest regards,\nThe Team",
            "Charset": "UTF-8"
          },
          "Html": {
            "Data": "<h1>Welcome!</h1><p>Hi there!</p><p>Welcome to our service. We are excited to have you on board.</p><p>Best regards,<br>The Team</p>",
            "Charset": "UTF-8"
          }
        }
      }
    },
    "EmailTags": [
      {
        "Name": "EmailType",
        "Value": "Welcome"
      }
    ]
  }'
```

### Example 2: Send HTML Newsletter with CC and BCC

Send a newsletter to a primary recipient with CC and BCC addresses.

```bash
curl -X POST "https://api.lowcodeapi.com/awsses/v2/email/outbound-emails?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "FromEmailAddress": "[email protected]",
    "Destination": {
      "ToAddresses": ["[email protected]"],
      "CcAddresses": ["[email protected]"],
      "BccAddresses": ["[email protected]"]
    },
    "Content": {
      "Simple": {
        "Subject": {
          "Data": "Weekly Newsletter - February 2026",
          "Charset": "UTF-8"
        },
        "Body": {
          "Text": {
            "Data": "This is the text version of our newsletter...",
            "Charset": "UTF-8"
          },
          "Html": {
            "Data": "<html><body><h1>Weekly Newsletter</h1><p>This is our weekly newsletter content...</p></body></html>",
            "Charset": "UTF-8"
          }
        }
      }
    },
    "ReplyToAddresses": ["[email protected]"]
  }'
```

### Example 3: Send Bulk Personalized Emails

Send personalized emails to multiple recipients using templates.

```bash
curl -X POST "https://api.lowcodeapi.com/awsses/v2/email/outbound-bulk-emails?api_token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "FromEmailAddress": "[email protected]",
    "BulkEmailEntries": [
      {
        "Destination": {
          "ToAddresses": ["[email protected]"]
        },
        "ReplacementTags": [
          {
            "Name": "CustomerName",
            "Value": "Alice"
          },
          {
            "Name": "DiscountCode",
            "Value": "SAVE20"
          }
        ]
      },
      {
        "Destination": {
          "ToAddresses": ["[email protected]"]
        },
        "ReplacementTags": [
          {
            "Name": "CustomerName",
            "Value": "Bob"
          },
          {
            "Name": "DiscountCode",
            "Value": "SAVE15"
          }
        ]
      }
    ],
    "DefaultContent": {
      "Template": {
        "TemplateName": "PromotionTemplate",
        "TemplateData": "{\"name\":\"{{CustomerName}}\",\"code\":\"{{DiscountCode}}\"}"
      }
    }
  }'
```

**Note**: The `CustomerName` and `DiscountCode` tags in the template data will be replaced with the values specified in each `BulkEmailEntry`. This allows you to personalize each email in the batch with different content.

## Error Handling

AWS SES returns standard HTTP status codes:

| Status Code | Meaning |
|-------------|---------|
| 200 | Success - Request processed successfully |
| 400 | Bad Request - Invalid parameters or malformed request |
| 403 | Forbidden - Authentication failed or insufficient permissions |
| 429 | Too Many Requests - Rate limit exceeded |
| 500 | Internal Server Error - AWS SES service error |
| 503 | Service Unavailable - Temporary service outage |

**Common Error Messages**:
- **MessageRejected**: The email was rejected by AWS SES (e.g., content policy)
- **DailyQuotaExceeded**: You have exceeded your daily sending quota
- **MaxSendingRateExceeded**: You have exceeded your maximum sending rate
- **MailFromDomainNotVerified**: The MAIL FROM domain is not verified

## Notes

- AWS SES requires email addresses to be verified in the sandbox environment
- Move out of sandbox by submitting a request to AWS SES support
- Use configuration sets for advanced email tracking and handling
- Monitor bounces and complaints to maintain sender reputation
- Set appropriate sending limits to avoid rate limiting

**Official AWS SES Documentation**: [Amazon SES Documentation](https://docs.aws.amazon.com/ses/)