Referencia
Paginación
Recorre los endpoints de listado de la API de Emailit con page y limit, lee next_page_url, gestiona los formatos per_page y offset y las ventanas de tiempo de los emails y los eventos.
Los endpoints de listado devuelven los resultados página a página. La mayoría usan números de página con page y limit, las plantillas y las automatizaciones usan page y per_page, y los endpoints DMARC usan limit y offset. Esta página explica cada formato, las ventanas de tiempo de las listas de emails y de eventos, y cómo recorrer todas las páginas.
Page y limit
La mayoría de los endpoints de listado aceptan dos parámetros de consulta:
| Parámetro | Descripción |
|---|---|
page |
La página que se devuelve, empezando por 1. Por defecto, 1. |
limit |
Objetos por página, de 1 a 100. Los valores fuera de ese rango devuelven un error de validación 400. |
El tamaño de página por defecto depende del endpoint:
limit por defecto |
Endpoints |
|---|---|
| 10 | Dominios, claves de API, listas de contactos, contactos, campañas, formularios, direcciones bloqueadas, webhooks, listas de direcciones (verificación masiva) |
| 25 | Emails, suscriptores |
| 50 | Resultados de las listas de direcciones (verificación masiva) |
| 100 | Eventos |
Listar suscriptores también acepta per_page como alias de limit.
Respuesta
{
"data": [
{ "object": "domain", "id": "dom_4K468YrjOkR1wwdhqiO0G9XEUey", "name": "acme.com" }
],
"next_page_url": "/v2/domains?page=3&limit=10",
"previous_page_url": "/v2/domains?page=1&limit=10"
}| Campo | Descripción |
|---|---|
data |
Los objetos de esta página, de más reciente a más antiguo salvo que los ordenes. |
next_page_url |
Ruta de la página siguiente, o null en la última página. |
previous_page_url |
Ruta de la página anterior, o null en la primera página. |
Las URL de página son rutas, no URL completas, y en la mayoría de los endpoints solo llevan page y limit, no tus filtros. Para obtener la página siguiente, repite tu propia petición aumentando page en uno, y detente cuando next_page_url sea null.
Algunas listas añaden campos junto a data:
| Campo | Endpoints | Contiene |
|---|---|---|
total_records |
Contactos, listas de contactos, campañas, formularios | El número de objetos que coinciden, sumando todas las páginas. |
usage |
Webhooks | used y limit (endpoints de webhook usados y permitidos en tu plan) y filters_allowed. |
usage |
Suscriptores | used y limit (suscriptores usados y permitidos en la lista) y el plan. |
domain_limit, domain_count, plan_name |
Dominios | Cuántos dominios de envío permite tu plan (null significa sin límite), cuántos tienes y el nombre del plan. |
Page y per_page
Listar plantillas, Listar automatizaciones y Listar ejecuciones usan per_page en lugar de limit y devuelven recuentos de páginas en lugar de URL de página:
| Parámetro | Descripción |
|---|---|
page |
La página que se devuelve, empezando por 1. Por defecto, 1. |
per_page |
Objetos por página, de 1 a 100. Por defecto, 25. |
{
"data": [],
"total_records": 42,
"per_page": 25,
"current_page": 2,
"total_pages": 2
}Sigue pidiendo páginas mientras current_page sea menor que total_pages.
Limit y offset
Los endpoints DMARC se saltan un número de filas en lugar de contar páginas:
| Parámetro | Descripción |
|---|---|
limit |
Filas que se devuelven. Informes: por defecto 25, máximo 100. Orígenes, países, redes y emisores de informes: por defecto 50, máximo 200. |
offset |
Filas que se saltan. Por defecto, 0. |
Listar informes agregados y Listar informes forenses devuelven el recuento total, así que sabes cuándo parar:
{
"data": [],
"meta": { "total": 130, "limit": 25, "offset": 50 }
}Los endpoints de desglose devuelven meta solo con limit y offset. Detente cuando una página tenga menos filas que limit.
Ventanas de tiempo
Dos listas solo tienen en cuenta los datos recientes, salvo que pidas más:
- Emails. Listar emails devuelve por defecto los emails de los últimos 14 días. Pasa
date_from(y, opcionalmente,date_to) como una fecha, por ejemplo2026-08-01, para buscar más atrás. Los filtroscreated_atno amplían la ventana, así que usadate_from. - Eventos. Listar eventos devuelve por defecto los eventos de los últimos dos días. Cualquier filtro
created_at, comocreated_at.after=2026-09-01, sustituye esa ventana. La lista también se detiene en un desplazamiento de 2500: una página que empieza más allá del evento número 2500 devuelve422con el códigoevents_offset_too_large. Acota los resultados con los filtrostypeocreated_atpara llegar a eventos más antiguos.
Obtener todas las páginas
Repite hasta que la API indique que no hay página siguiente. Estos ejemplos recopilan todos los contactos de una lista de contactos:
page=1
while : ; do
response=$(curl -s -G https://api.emailit.com/v2/contacts \
-H "Authorization: Bearer $EMAILIT_API_KEY" \
--data-urlencode "audience_id=aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2" \
--data-urlencode "limit=100" \
--data-urlencode "page=$page")
echo "$response" | jq -c '.data[]'
[ "$(echo "$response" | jq -r '.next_page_url')" = "null" ] && break
page=$((page + 1))
doneasync function* listAll(path, params = {}) {
for (let page = 1; ; page++) {
const query = new URLSearchParams({ ...params, limit: '100', page: String(page) });
const response = await fetch(`https://api.emailit.com/v2${path}?${query}`, {
headers: { Authorization: `Bearer ${process.env.EMAILIT_API_KEY}` },
});
if (!response.ok) throw new Error(`Emailit ${response.status}`);
const body = await response.json();
yield* body.data;
if (!body.next_page_url) return;
}
}
for await (const contact of listAll('/contacts', { audience_id: 'aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2' })) {
console.log(contact.email);
}import os
import requests
def list_all(path, params=None):
session = requests.Session()
session.headers["Authorization"] = f"Bearer {os.environ['EMAILIT_API_KEY']}"
page = 1
while True:
response = session.get(
f"https://api.emailit.com/v2{path}",
params={**(params or {}), "limit": 100, "page": page},
timeout=30,
)
response.raise_for_status()
body = response.json()
yield from body["data"]
if not body["next_page_url"]:
return
page += 1
for contact in list_all("/contacts", {"audience_id": "aud_4KbFmQPy1feMCGAY8F8pAhiZ1u2"}):
print(contact["email"])Resultados coherentes
Las páginas se calculan en el momento en que las pides. Si se crean o eliminan objetos mientras recorres una lista ordenada de más reciente a más antiguo, los objetos pueden cambiar de página, así que podrías ver uno dos veces o saltarte otro. Para obtener una exportación estable de una lista que no deja de crecer, ordena de más antiguo a más reciente con order=created_at&direction=asc (o sort=created_at&order=asc en los contactos y las direcciones bloqueadas) y omite los ID que ya hayas visto.