AhaSend Go SDK
package main
import (
"context"
"fmt"
"log"
"os"
"time"
"github.com/AhaSend/ahasend-go"
"github.com/AhaSend/ahasend-go/api"
"github.com/AhaSend/ahasend-go/models/requests"
"github.com/google/uuid"
)
func main() {
client := api.NewAPIClient(api.WithAPIKey(os.Getenv("AHASEND_API_KEY")))
accountID := uuid.MustParse(os.Getenv("AHASEND_ACCOUNT_ID"))
ctx := context.Background()
// The SDK sends a fresh Idempotency-Key with this POST and reuses it on
// its own retries, so a retried request is not applied twice.
response, _, err := client.SuppressionsAPI.CreateSuppression(ctx, accountID, requests.CreateSuppressionRequest{
Email: "test@example.com",
Reason: ahasend.String("Inbox full"),
ExpiresAt: time.Now().Add(30 * 24 * time.Hour),
})
if err != nil {
log.Fatalf("Error creating suppression: %v", err)
}
fmt.Printf("Created %d suppression(s)\n", len(response.Data))
}
import { AhaSendClient } from "@ahasend/sdk";
const client = AhaSendClient.fromEnv();
// The SDK sends a fresh Idempotency-Key automatically and reuses it on its own retries.
const result = await client.suppressions.create({
email: "recipient@example.net",
reason: "User requested removal",
expires_at: "2030-01-01T00:00:00Z",
});
console.log("Suppression created.", { count: result.data.length });
curl --request POST \
--url https://api.ahasend.com/v2/accounts/{account_id}/suppressions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "user@example.com",
"domain": "example.com",
"reason": "User requested removal",
"expires_at": "2024-12-25T10:30:00Z"
}
'import requests
url = "https://api.ahasend.com/v2/accounts/{account_id}/suppressions"
payload = {
"email": "user@example.com",
"domain": "example.com",
"reason": "User requested removal",
"expires_at": "2024-12-25T10:30:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ahasend.com/v2/accounts/{account_id}/suppressions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'user@example.com',
'domain' => 'example.com',
'reason' => 'User requested removal',
'expires_at' => '2024-12-25T10:30:00Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.ahasend.com/v2/accounts/{account_id}/suppressions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"user@example.com\",\n \"domain\": \"example.com\",\n \"reason\": \"User requested removal\",\n \"expires_at\": \"2024-12-25T10:30:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ahasend.com/v2/accounts/{account_id}/suppressions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"user@example.com\",\n \"domain\": \"example.com\",\n \"reason\": \"User requested removal\",\n \"expires_at\": \"2024-12-25T10:30:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "suppression",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"email": "jsmith@example.com",
"domain": "<string>",
"reason": "<string>",
"protected": true,
"expires_at": "2023-11-07T05:31:56Z"
}
]
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "idempotency key was already used with a different request payload"
}{
"message": "Error message"
}Suppressions
Add an Address to the Suppression List via the API
Add an email address to your AhaSend suppression list through the API, for one sending domain or all domains, with a required expiry time.
POST
/
v2
/
accounts
/
{account_id}
/
suppressions
AhaSend Go SDK
package main
import (
"context"
"fmt"
"log"
"os"
"time"
"github.com/AhaSend/ahasend-go"
"github.com/AhaSend/ahasend-go/api"
"github.com/AhaSend/ahasend-go/models/requests"
"github.com/google/uuid"
)
func main() {
client := api.NewAPIClient(api.WithAPIKey(os.Getenv("AHASEND_API_KEY")))
accountID := uuid.MustParse(os.Getenv("AHASEND_ACCOUNT_ID"))
ctx := context.Background()
// The SDK sends a fresh Idempotency-Key with this POST and reuses it on
// its own retries, so a retried request is not applied twice.
response, _, err := client.SuppressionsAPI.CreateSuppression(ctx, accountID, requests.CreateSuppressionRequest{
Email: "test@example.com",
Reason: ahasend.String("Inbox full"),
ExpiresAt: time.Now().Add(30 * 24 * time.Hour),
})
if err != nil {
log.Fatalf("Error creating suppression: %v", err)
}
fmt.Printf("Created %d suppression(s)\n", len(response.Data))
}
import { AhaSendClient } from "@ahasend/sdk";
const client = AhaSendClient.fromEnv();
// The SDK sends a fresh Idempotency-Key automatically and reuses it on its own retries.
const result = await client.suppressions.create({
email: "recipient@example.net",
reason: "User requested removal",
expires_at: "2030-01-01T00:00:00Z",
});
console.log("Suppression created.", { count: result.data.length });
curl --request POST \
--url https://api.ahasend.com/v2/accounts/{account_id}/suppressions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "user@example.com",
"domain": "example.com",
"reason": "User requested removal",
"expires_at": "2024-12-25T10:30:00Z"
}
'import requests
url = "https://api.ahasend.com/v2/accounts/{account_id}/suppressions"
payload = {
"email": "user@example.com",
"domain": "example.com",
"reason": "User requested removal",
"expires_at": "2024-12-25T10:30:00Z"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ahasend.com/v2/accounts/{account_id}/suppressions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'email' => 'user@example.com',
'domain' => 'example.com',
'reason' => 'User requested removal',
'expires_at' => '2024-12-25T10:30:00Z'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}HttpResponse<String> response = Unirest.post("https://api.ahasend.com/v2/accounts/{account_id}/suppressions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"user@example.com\",\n \"domain\": \"example.com\",\n \"reason\": \"User requested removal\",\n \"expires_at\": \"2024-12-25T10:30:00Z\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ahasend.com/v2/accounts/{account_id}/suppressions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"email\": \"user@example.com\",\n \"domain\": \"example.com\",\n \"reason\": \"User requested removal\",\n \"expires_at\": \"2024-12-25T10:30:00Z\"\n}"
response = http.request(request)
puts response.read_body{
"object": "list",
"data": [
{
"object": "suppression",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"email": "jsmith@example.com",
"domain": "<string>",
"reason": "<string>",
"protected": true,
"expires_at": "2023-11-07T05:31:56Z"
}
]
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "Error message"
}{
"message": "idempotency key was already used with a different request payload"
}{
"message": "Error message"
}The AhaSend API creates a new suppression for an email address.
Validation Requirements:
emailmust be a valid email addressexpires_atmust be in RFC3339 formatdomainis optional - if not provided, applies to all account domains
Related Guides
- API authentication, Permission scopes, Suppression list API.
- Suppression CLI, Suppression durations, API errors.
- API rate limits.
Authorizations
Headers
Optional idempotency key for safe request retries. Must be a unique string for each logical request.
An identical request with a completed stored outcome returns the original status and body. An in-progress
execution returns 409, a changed method/path/body returns 422, and a released 5xx execution may run again.
Keys for non-secret responses expire after 24 hours. API-key create responses include a one-time secret_key,
so successful encrypted replay responses for those operations expire after 5 minutes.
Maximum string length:
255Body
application/json

