--- type: API title: Euromailing API overview description: Base URL, Bearer authentication, scopes, rate limiting and the shared error envelope for Euromailing's v1 REST API. resource: https://euromailing.com/api/v1 tags: [api, authentication] timestamp: 2026-07-06T00:00:00Z --- # API overview & authentication - **Base URL**: `https://euromailing.com/api/v1` (no separate api. host) - **Auth**: `Authorization: Bearer eml_live_…` on every request. Keys are created in the dashboard (Account → API keys) and shown only once. - **Content type**: JSON in, JSON out. ## Scopes Keys carry scopes; `*` grants everything. | Scope | Grants | |-------|--------| | `transactional:send` | [POST /transactional_emails](transactional-emails.md) (key must also be domain-bound) | | `contacts:read` / `contacts:write` | [Contacts](contacts.md) | | `lists:read` / `lists:write` | [Lists](lists.md) incl. memberships | | `campaigns:read` / `campaigns:write` / `campaigns:send` | Campaign CRUD + dispatch | | `templates:read` / `templates:write` | Template CRUD | ## Rate limiting 60 requests/minute per key. Responses carry `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset`; a 429 carries `Retry-After` and code `rate_limited`. ## Error envelope Every non-2xx response has this shape: ```json { "error": { "code": "machine_readable_code", "message": "Human sentence.", "details": {} } } ``` Billing-related refusals use HTTP 402 with codes `payment_required` or `email_limit_reached`. ## Pagination List endpoints accept `page` and `per_page` (max 100) and return `X-Total-Count`, `X-Page`, `X-Per-Page` headers.