Hostinger Reach (Email Marketing) skill

Hostinger Reach (Email Marketing) API for contact management, segmentation, contact groups, and profile management.

by hostinger·MIT license·GitHub ↗

★ 23 Stars on the repo·Checked

npx degit hostinger/hostinger-agent-skills/skills/reach#main ~/.claude/skills/reach

SKILL.md · 8.8 KB · installs the whole folder to ~/.claude/skills/reach

Files of Hostinger Reach (Email Marketing)

Files 1 file
Show the full text264 lines

Hostinger Reach (Email Marketing)

The Reach API provides email marketing capabilities — managing contacts, creating segments for targeted campaigns, and working with sender profiles.

Table of Contents

Core Concepts

Contacts

Contacts are email recipients in your marketing system. Each contact has basic information (name, email, surname) and a subscription status. If double opt-in is enabled, new contacts start with a pending status and receive a confirmation email.

Segments

Segments group contacts based on specific criteria (email, name, subscription status, engagement metrics, etc.). Segments support complex filtering with operators like equals, contains, gte, lte, opened, clicked, etc.

Profiles

Sender profiles represent the email identity used to send campaigns. Each profile has basic information and is associated with your account.

Contact Groups

Groups are a way to organize contacts (deprecated in favor of segments).

Subscription Status

Contacts can have different subscription statuses that determine whether they receive emails. Status can be used as a filter when listing contacts.

Common Patterns

Create and Manage Contacts
# Create a new contact (direct)
curl -X POST "https://developers.hostinger.com/api/reach/v1/contacts" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "name": "John",
    "surname": "Doe",
    "phone": "+15551234567",
    "note": "Met at conference"
  }'

# Create a new contact (scoped to a specific sender profile)
curl -X POST "https://developers.hostinger.com/api/reach/v1/profiles/{profileUuid}/contacts" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "[email protected]",
    "name": "John",
    "surname": "Doe"
  }'

# List contacts (paginated)
curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts?page=1" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

# Filter contacts by subscription status
curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts?subscription_status=active" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

# List contact groups
curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts/groups" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

# Delete a contact
curl -X DELETE "https://developers.hostinger.com/api/reach/v1/contacts/{uuid}" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

Python SDK:

from hostinger_api import Hostinger

client = Hostinger(api_token="YOUR_API_TOKEN")

# List contacts
contacts = client.reach.contacts.list(page=1)
for contact in contacts:
    print(f"{contact.name} <{contact.email}>")

TypeScript SDK:

import { Hostinger } from "hostinger-api-sdk";

const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });

const contacts = await client.reach.contacts.list({ page: 1 });
for (const contact of contacts) {
  console.log(`${contact.name} <${contact.email}>`);
}

PHP SDK:

use Hostinger\Api\HostingerApi;

$client = new HostingerApi('YOUR_API_TOKEN');

$contacts = $client->reach->contacts->list(['page' => 1]);
foreach ($contacts as $contact) {
    echo "{$contact->name} <{$contact->email}>\n";
}
Work with Segments
# List all segments
curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

# Create a segment (e.g., engaged subscribers who opened emails)
curl -X POST "https://developers.hostinger.com/api/reach/v1/segmentation/segments" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Engaged Subscribers",
    "logic": "and",
    "conditions": [
      {
        "field": "subscription_status",
        "operator": "equals",
        "value": "active"
      },
      {
        "field": "email_engagement",
        "operator": "opened"
      }
    ]
  }'

# Get segment details
curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments/{segmentUuid}" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

# List contacts in a segment (paginated)
curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments/{segmentUuid}/contacts?page=1&per_page=50" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
Manage Profiles
# List all sender profiles
curl -X GET "https://developers.hostinger.com/api/reach/v1/profiles" \
  -H "Authorization: Bearer $HOSTINGER_API_TOKEN"

API Reference

Contacts
Method Endpoint Description
GET /api/reach/v1/contacts List contacts (paginated, filterable)
POST /api/reach/v1/contacts Create a contact (direct)
POST /api/reach/v1/profiles/{profileUuid}/contacts Create a contact scoped to a sender profile
GET /api/reach/v1/contacts/groups List contact groups
DELETE /api/reach/v1/contacts/{uuid} Delete a contact
Segments
Method Endpoint Description
GET /api/reach/v1/segmentation/segments List all segments
POST /api/reach/v1/segmentation/segments Create a new segment
GET /api/reach/v1/segmentation/segments/{segmentUuid} Get segment details
GET /api/reach/v1/segmentation/segments/{segmentUuid}/contacts List segment contacts
Profiles
Method Endpoint Description
GET /api/reach/v1/profiles List sender profiles
Contact Query Parameters
Parameter Description
page Page number
group_uuid Filter by group UUID
subscription_status Filter by subscription status
Segment Condition Operators
Operator Description
equals / not_equals Exact match
contains / not_contains Partial match
gte / lte Greater/less than or equal
exists Field has a value
within_last_days / not_within_last_days Date range
older_than_days Older than N days
opened / not_opened Email open engagement
clicked / not_clicked Email click engagement
bounced / not_bounced Bounce status
delivered / not_delivered Delivery status
unsubscribed / not_unsubscribed Unsubscribe status

Best Practices

Contact Management
  • Use the direct POST /contacts endpoint for general contact creation; use POST /profiles/{profileUuid}/contacts when the contact must be tied to a specific sender profile
  • Prefer segments over contact groups for organizing contacts — groups are legacy
  • Enable double opt-in for compliance with email marketing regulations (GDPR, CAN-SPAM)
  • Clean your contact list regularly by removing bounced and unsubscribed contacts
Segmentation
  • Use and logic for narrow, precise targeting
  • Use or logic for broader audience reach
  • Combine engagement operators (opened, clicked) with time-based operators for re-engagement campaigns
  • Create segments before campaigns to preview audience size
Profiles
  • Verify sender profiles to improve deliverability
  • Use consistent sender identity across campaigns

Troubleshooting

Contact Not Receiving Emails
  • Check subscription status — contact may be unsubscribed or pending
  • If double opt-in is enabled, contact must confirm their email first
  • Verify the contact's email address is valid and not bouncing
Segment Returns No Contacts
  • Verify conditions and operators are correct
  • Check that logic field (and/or) matches your intent
  • Ensure contacts exist that match all/any conditions
422 Validation Error on Contact Creation
  • Missing required fields (email is required)
  • Invalid email format
  • Duplicate email address in the system

References

1---
2name: reach
3description: Hostinger Reach (Email Marketing) API for contact management, segmentation, contact groups, and profile management. Use when creating or listing contacts, managing contact segments or groups, filtering contacts by subscription status, or working with email marketing profiles.
4last_updated: "2026-06-12"
5doc_source: https://developers.hostinger.com
6---
7 
8# Hostinger Reach (Email Marketing)
9 
10The Reach API provides email marketing capabilities — managing contacts, creating segments for targeted campaigns, and working with sender profiles.
11 
12## Table of Contents
13 
14- [Core Concepts](#core-concepts)
15- [Common Patterns](#common-patterns)
16- [API Reference](#api-reference)
17- [Best Practices](#best-practices)
18- [Troubleshooting](#troubleshooting)
19- [References](#references)
20 
21## Core Concepts
22 
23### Contacts
24 
25Contacts are email recipients in your marketing system. Each contact has basic information (name, email, surname) and a subscription status. If double opt-in is enabled, new contacts start with a pending status and receive a confirmation email.
26 
27### Segments
28 
29Segments group contacts based on specific criteria (email, name, subscription status, engagement metrics, etc.). Segments support complex filtering with operators like `equals`, `contains`, `gte`, `lte`, `opened`, `clicked`, etc.
30 
31### Profiles
32 
33Sender profiles represent the email identity used to send campaigns. Each profile has basic information and is associated with your account.
34 
35### Contact Groups
36 
37Groups are a way to organize contacts (deprecated in favor of segments).
38 
39### Subscription Status
40 
41Contacts can have different subscription statuses that determine whether they receive emails. Status can be used as a filter when listing contacts.
42 
43## Common Patterns
44 
45### Create and Manage Contacts
46 
47```bash
48# Create a new contact (direct)
49curl -X POST "https://developers.hostinger.com/api/reach/v1/contacts" \
50 -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
51 -H "Content-Type: application/json" \
52 -d '{
53 "email": "[email protected]",
54 "name": "John",
55 "surname": "Doe",
56 "phone": "+15551234567",
57 "note": "Met at conference"
58 }'
59 
60# Create a new contact (scoped to a specific sender profile)
61curl -X POST "https://developers.hostinger.com/api/reach/v1/profiles/{profileUuid}/contacts" \
62 -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
63 -H "Content-Type: application/json" \
64 -d '{
65 "email": "[email protected]",
66 "name": "John",
67 "surname": "Doe"
68 }'
69 
70# List contacts (paginated)
71curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts?page=1" \
72 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
73 
74# Filter contacts by subscription status
75curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts?subscription_status=active" \
76 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
77 
78# List contact groups
79curl -X GET "https://developers.hostinger.com/api/reach/v1/contacts/groups" \
80 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
81 
82# Delete a contact
83curl -X DELETE "https://developers.hostinger.com/api/reach/v1/contacts/{uuid}" \
84 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
85```
86 
87**Python SDK:**
88 
89```python
90from hostinger_api import Hostinger
91 
92client = Hostinger(api_token="YOUR_API_TOKEN")
93 
94# List contacts
95contacts = client.reach.contacts.list(page=1)
96for contact in contacts:
97 print(f"{contact.name} <{contact.email}>")
98```
99 
100**TypeScript SDK:**
101 
102```typescript
103import { Hostinger } from "hostinger-api-sdk";
104 
105const client = new Hostinger({ apiToken: "YOUR_API_TOKEN" });
106 
107const contacts = await client.reach.contacts.list({ page: 1 });
108for (const contact of contacts) {
109 console.log(`${contact.name} <${contact.email}>`);
110}
111```
112 
113**PHP SDK:**
114 
115```php
116use Hostinger\Api\HostingerApi;
117 
118$client = new HostingerApi('YOUR_API_TOKEN');
119 
120$contacts = $client->reach->contacts->list(['page' => 1]);
121foreach ($contacts as $contact) {
122 echo "{$contact->name} <{$contact->email}>\n";
123}
124```
125 
126### Work with Segments
127 
128```bash
129# List all segments
130curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments" \
131 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
132 
133# Create a segment (e.g., engaged subscribers who opened emails)
134curl -X POST "https://developers.hostinger.com/api/reach/v1/segmentation/segments" \
135 -H "Authorization: Bearer $HOSTINGER_API_TOKEN" \
136 -H "Content-Type: application/json" \
137 -d '{
138 "name": "Engaged Subscribers",
139 "logic": "and",
140 "conditions": [
141 {
142 "field": "subscription_status",
143 "operator": "equals",
144 "value": "active"
145 },
146 {
147 "field": "email_engagement",
148 "operator": "opened"
149 }
150 ]
151 }'
152 
153# Get segment details
154curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments/{segmentUuid}" \
155 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
156 
157# List contacts in a segment (paginated)
158curl -X GET "https://developers.hostinger.com/api/reach/v1/segmentation/segments/{segmentUuid}/contacts?page=1&per_page=50" \
159 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
160```
161 
162### Manage Profiles
163 
164```bash
165# List all sender profiles
166curl -X GET "https://developers.hostinger.com/api/reach/v1/profiles" \
167 -H "Authorization: Bearer $HOSTINGER_API_TOKEN"
168```
169 
170## API Reference
171 
172### Contacts
173 
174| Method | Endpoint | Description |
175|--------|----------|-------------|
176| `GET` | `/api/reach/v1/contacts` | List contacts (paginated, filterable) |
177| `POST` | `/api/reach/v1/contacts` | Create a contact (direct) |
178| `POST` | `/api/reach/v1/profiles/{profileUuid}/contacts` | Create a contact scoped to a sender profile |
179| `GET` | `/api/reach/v1/contacts/groups` | List contact groups |
180| `DELETE` | `/api/reach/v1/contacts/{uuid}` | Delete a contact |
181 
182### Segments
183 
184| Method | Endpoint | Description |
185|--------|----------|-------------|
186| `GET` | `/api/reach/v1/segmentation/segments` | List all segments |
187| `POST` | `/api/reach/v1/segmentation/segments` | Create a new segment |
188| `GET` | `/api/reach/v1/segmentation/segments/{segmentUuid}` | Get segment details |
189| `GET` | `/api/reach/v1/segmentation/segments/{segmentUuid}/contacts` | List segment contacts |
190 
191### Profiles
192 
193| Method | Endpoint | Description |
194|--------|----------|-------------|
195| `GET` | `/api/reach/v1/profiles` | List sender profiles |
196 
197### Contact Query Parameters
198 
199| Parameter | Description |
200|-----------|-------------|
201| `page` | Page number |
202| `group_uuid` | Filter by group UUID |
203| `subscription_status` | Filter by subscription status |
204 
205### Segment Condition Operators
206 
207| Operator | Description |
208|----------|-------------|
209| `equals` / `not_equals` | Exact match |
210| `contains` / `not_contains` | Partial match |
211| `gte` / `lte` | Greater/less than or equal |
212| `exists` | Field has a value |
213| `within_last_days` / `not_within_last_days` | Date range |
214| `older_than_days` | Older than N days |
215| `opened` / `not_opened` | Email open engagement |
216| `clicked` / `not_clicked` | Email click engagement |
217| `bounced` / `not_bounced` | Bounce status |
218| `delivered` / `not_delivered` | Delivery status |
219| `unsubscribed` / `not_unsubscribed` | Unsubscribe status |
220 
221## Best Practices
222 
223### Contact Management
224- Use the direct `POST /contacts` endpoint for general contact creation; use `POST /profiles/{profileUuid}/contacts` when the contact must be tied to a specific sender profile
225- Prefer **segments** over **contact groups** for organizing contacts — groups are legacy
226- Enable double opt-in for compliance with email marketing regulations (GDPR, CAN-SPAM)
227- Clean your contact list regularly by removing bounced and unsubscribed contacts
228 
229### Segmentation
230- Use `and` logic for narrow, precise targeting
231- Use `or` logic for broader audience reach
232- Combine engagement operators (`opened`, `clicked`) with time-based operators for re-engagement campaigns
233- Create segments before campaigns to preview audience size
234 
235### Profiles
236- Verify sender profiles to improve deliverability
237- Use consistent sender identity across campaigns
238 
239## Troubleshooting
240 
241### Contact Not Receiving Emails
242- Check subscription status — contact may be unsubscribed or pending
243- If double opt-in is enabled, contact must confirm their email first
244- Verify the contact's email address is valid and not bouncing
245 
246### Segment Returns No Contacts
247- Verify conditions and operators are correct
248- Check that `logic` field (`and`/`or`) matches your intent
249- Ensure contacts exist that match all/any conditions
250 
251### 422 Validation Error on Contact Creation
252- Missing required fields (email is required)
253- Invalid email format
254- Duplicate email address in the system
255 
256## References
257 
258- [Hostinger API Documentation](https://developers.hostinger.com)
259- [Hostinger API Changelog](https://github.com/hostinger/api/blob/main/CHANGELOG.md)
260- [Python SDK](https://github.com/hostinger/api-python-sdk)
261- [TypeScript SDK](https://github.com/hostinger/api-typescript-sdk)
262- [PHP SDK](https://github.com/hostinger/api-php-sdk)
263- [CLI Tool](https://github.com/hostinger/api-cli)
264 

Discussion

Alternatives

Also in Email sequencesSee all 401 in Marketing →
A Free Giveaway That Grows Your Email ListTell us about your business and who you sell to, and get back a ready-to-launch free offer that turns website visitors into email signups and future customers.Business & ops · MITEmail sequence designerUse when the user asks to "design a welcome flow", "set up an abandoned-cart sequence", "build a light re-engagement branch inside a lifecycle flow", or "plan a cold-outbound sequence"; produces general lifecycle automation flows (welcome, cart, browse-abandon, post-purchase, in-flow re-engagement, B2B cold outbound) with trigger, step timing, branch/exit conditions, goal, frequency governance (send caps, quiet hours, fatigue guardrail), a sunset path, and a SEND N-dimension score. Not for the closed-loop win-back / re-consent (re-permission) program on a lapsed cohort — use reactivation-specialist; not for writing each email''s copy — use email-creative-builder; not for computing EQS or the N1 unsubscribe veto — use email-quality-auditor. 邮件自动化流程设计/购物车挽回/流失召回序列Marketing · Apache-2.0Channels: Email MarketingWhen the user wants to plan email marketing, EDM, newsletter strategy, or email deliverability. Also use when the user mentions "email marketing," "EDM," "newsletter," "SPF," "DKIM," "DMARC," "email deliverability," "email content strategy," "email campaigns," "newsletter strategy," "email automation," or "cold email." For signup UI, use newsletter-signup-generator.Marketing · MITCold email starter kitComplete beginner-friendly cold email toolkit. Walks from zero to launched campaign — domain purchase, inbox setup, list building, copywriting, enrichment, and sending via Smartlead or Instantly. Use when setting up cold email for the first time, launching a new campaign, teaching someone cold email, or when you need an end-to-end guide that bundles strategy, copy, infrastructure, and API references in one place.Marketing · MIT