arrobaMail
REST API v3

Email Marketing, programmable

REST over JSON, JWT authentication, 11 modules, more than 100 documented endpoints. Connect arrobaMail to your stack in minutes.

  • 100+
    Endpoints
  • 11
    Modules
  • JWT
    Auth

The Free Plan works as a sandbox: a real account with all features, API and MCP included, no card required.

curl · example
# 1. Get your JWT token
curl -X POST https://envios.arrobamail.com/v3/api/auth/getToken \
  -H "Content-Type: application/json" \
  -d '{"username":"youraccount","pass":"***"}'

# 2. List active campaigns
curl https://envios.arrobamail.com/v3/api/campaigns?status=active \
  -H "Authorization: Bearer eyJhbGciOi..."

# 3. Launch a campaign to your lists
curl -X POST https://envios.arrobamail.com/v3/api/campaigns \
  -H "Authorization: Bearer eyJhbGciOi..." \
  -d '{"camp_name":"April promo","asunto":"Your promo is here","html":"<h1>Hi</h1>","from_name":"Your company","from_mail":"[email protected]","list_id":["1A2B3C"]}'
Quickstart

From zero to your first send in 3 requests

No SDK or proprietary libraries needed: REST over JSON from your stack. Pick your language and follow the three steps.

  1. 01Step 1

    Get your JWT token

    With your username and password, POST /auth/getToken returns a Bearer token you'll use for the rest of your calls. Supports rememberMe so it lasts up to 365 days.

    curl
    curl -X POST https://envios.arrobamail.com/v3/api/auth/getToken \
      -H "Content-Type: application/json" \
      -d '{"username":"tucuenta","pass":"***"}'
    
    # 200 OK
    # { "token": "eyJhbGciOi..." }
  2. 02Step 2

    Verify a sender

    The sender (from) must be verified before sending. When you create it, arrobaMail runs DNS checks (SPF/DKIM) unless it's a free email address.

    curl
    curl -X POST https://envios.arrobamail.com/v3/api/senders \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"from_name":"Tu empresa","from_mail":"[email protected]"}'
    
    # 200 OK
    # { "status": "ok", "spf": true, "dkim": true }
  3. 03Step 3

    Launch your first campaign

    A single POST call with the name, subject, HTML, sender, and list queues the send. Add track_reads and track_links to measure opens and clicks.

    curl
    curl -X POST https://envios.arrobamail.com/v3/api/campaigns \
      -H "Authorization: Bearer $TOKEN" \
      -H "Content-Type: application/json" \
      -d '{
        "camp_name": "Promo abril",
        "asunto": "Llegó la promo",
        "html": "<h1>Hola</h1>",
        "from_mail": "[email protected]",
        "list_id": ["1A2B3C"]
      }'
    
    # 200 OK  → { "ok": true }
Modules

11 modules · 100+ endpoints

Full coverage of the platform. Tap a module to see its reference: endpoints, parameters, responses, and examples in curl, Node, PHP, and Python.

Module 012 endpoints

Auth

JWT Bearer Token, rate limiting by IP and username, multi-language support (es/en), and rememberMe for 365-day sessions.

  • POST /auth/getToken
  • POST /auth/logout
View module reference
Module 0322 endpoints

Campaigns

Create, schedule, and send campaigns. Custom HTML, visual editor, templates, and tracking of opens, clicks, conversions, and bounces.

  • POST /campaigns
  • PUT /campaigns/:id/send
  • GET /campaigns/:id/stats
View module reference
Module 0424 endpoints

Lists & Contacts

Lists, CSV/Excel import, custom fields, double opt-in, cleanup tools, and management of unsubscribes and bounces.

  • POST /lists
  • POST /lists/:id/contacts
  • DELETE /lists/:id/contacts/:contact
View module reference
Module 0513 endpoints

Segmentations

Segmentation V2 with advanced condition groups, behavior-based segmentation (opens, clicks), and custom field segmentation.

  • POST /segments
  • GET /segments/:id/preview
View module reference
Module 0621 endpoints

Users & Roles

Admin / Reseller / User roles. Sub-account management, reseller hierarchy, public endpoint for demo signup.

  • POST /users
  • GET /users/:id
  • PUT /users/:id/role
View module reference
Module 073 endpoints

Senders

Sender verification, with configurable from name, from email, and reply_to per sender.

  • POST /senders/verify
  • GET /senders
View module reference
Module 083 endpoints

Templates

Reusable templates, with import and export between accounts.

  • POST /templates
  • GET /templates/:id
View module reference
Module 094 endpoints

Dashboard

Consolidated metrics for the authenticated user: sends, opens, clicks, and bounces.

  • GET /dashboard
  • GET /dashboard/stats
View module reference
Module 102 endpoints

Search

Cross-cutting search across campaigns, lists, and contacts.

  • GET /search?q=
View module reference
Module 123 endpoints

Subscription

Public endpoints (no auth) for subscriber self-service. Usable in forms embedded on external sites.

  • POST /public/subscribe
  • POST /public/unsubscribe
View module reference
Module 169 endpoints

Automations V2

Automated flows with nodes and edges. Event-based triggers, chainable actions, and configurable delays.

  • POST /automations
  • PUT /automations/:id/activate
View module reference

Looking for something specific? Explore the full reference with an endpoint search.

Bidirectional webhooks

Your app reacts in real time

You configure a URL for your app and we send HTTP POSTs with events as they happen: a campaign finished, a contact opened, an email bounced, someone unsubscribed, an automation flow triggered.

  • Events for opens, clicks, bounces, complaints, unsubscribes, and automations
  • HTTP POSTs to the URL you configure in your system
  • Event history to audit what happened and when
  • Useful for CRM, ecommerce, internal systems, and custom dashboards

Receiving endpoint

POST https://tudominio.com/webhooks/arrobamail
Available eventsLive feed
  • campaign.sentPOST
    { "campaign_id": 9821, "sent_at": "2026-05-26T14:32:00Z", "recipients": 8420 }

    A campaign finished sending.

  • contact.openPOST
    { "campaign_id": 9821, "contact_id": 555012, "opened_at": "..." }

    A contact opened an email.

  • contact.bouncePOST
    { "contact_id": 555013, "type": "hard", "reason": "user_not_found" }

    An email bounced.

  • contact.complaintPOST
    { "contact_id": 555014, "campaign_id": 9821 }

    A recipient reported spam.

  • contact.unsubscribePOST
    { "contact_id": 555015, "list_id": 1234 }

    A contact unsubscribed.

  • automation.triggeredPOST
    { "automation_id": 88, "contact_id": 555016, "node": "welcome" }

    A contact entered an automation flow.

HTTP Clients

Integrate with the stack you already use

The API is REST JSON: you don't depend on a proprietary library to get started.

Available today

curl + any HTTP client

The API is standard REST JSON. Any language that can make HTTP calls can consume it.

Available today

JavaScript / TypeScript

Use native fetch, Axios, or another HTTP client. The examples show headers, payload, and response.

Available today

Python

Consume the API with requests, httpx, or the HTTP client your stack already uses.

Available today

PHP

Works with cURL, Guzzle, or PSR-18 clients. You don't need a proprietary library.

Frequently asked questions

What people ask most about the API

With a JWT token. You request the token with POST /auth/getToken (your username and password) and send it in the Authorization header of every call. You can enable rememberMe for sessions of up to 365 days. One clarification: creating accounts isn't part of the public API — signups are managed by the reseller.

Yes, we apply limits by IP and by user. They're generous for normal use; if we detect abuse, we automatically slow down the rate. If your integration needs a higher quota, write to us and we'll look at your case.

REST. JSON over HTTP, with the usual verbs (GET, POST, PUT, DELETE) and standard status codes. We chose REST because it's the most universal and easiest to consume from any language.

Yes. You configure a URL in your account and arrobaMail notifies you when something happens: a campaign finished sending, someone opened an email, a message bounced, someone complained or unsubscribed, or a contact entered an automation. It's how your system reacts in real time.

No need. The API is REST/JSON and works with curl, fetch, Axios, requests, httpx, Guzzle, or the HTTP client your stack already uses. The quickstart includes ready-to-copy examples in curl, Node, PHP, and Python. If your team needs a specific library, tell us about your stack.

Yes. arrobaMail has an MCP server so assistants like Claude or Cursor can query data, prepare drafts, and execute actions, always within the permissions you define. It's complementary to the API: MCP for assisted day-to-day work, the API for custom integrations.

Yes: the Free Plan account works as a sandbox. You do everything you'd do in production — with monthly sends and AI generations included, no card required. For a larger testing volume before going to production, talk to us.

Get started with arrobaMail
in under 5 minutes.

Free plan, AI generations included, no credit card required — and real support from a real team.

Try it free now
WhatsAppOur team replies