Documentación Referencia de la API correos electrónicos

Enviar Email

Envía un email individual a uno o múltiples destinatarios. Compatible con plantillas, variables, archivos adjuntos, programación y seguimiento.

POST /emails
## Encabezados
Authorization string Required

Token Bearer para autenticación.

Idempotency-Key string

Clave única (máx. 256 caracteres, alfanuméricos/guiones/guiones bajos) para evitar envíos duplicados durante 24 horas.

## Cuerpo de la Solicitud
from string Required

Email del remitente en formato RFC: email@dominio.com o Nombre Mostrado <email@dominio.com>.

to string | string[] Required

Dirección(es) de email del destinatario. Máximo 50 destinatarios.

subject string

Asunto del email. Obligatorio a menos que la plantilla lo proporcione.

html string

Contenido HTML del email. Obligatorio a menos que la plantilla lo proporcione o se incluya texto plano.

text string

Contenido en texto plano del email.

reply_to string | string[]

Dirección(es) de email para responder.

cc string | string[]

Destinatarios en copia. Máximo 50 destinatarios.

bcc string | string[]

Destinatarios en copia oculta. Máximo 50 destinatarios.

template string

Alias o ID de plantilla (formato tem_xxx).

variables object

Variables para sustitución en plantillas usando sintaxis {{variable}}.

attachments array

Array de objetos de archivos adjuntos (ver Objeto de Archivo Adjunto más abajo).

headers object

Encabezados personalizados del email como pares clave-valor.

meta object

Metadatos como pares clave-valor de cadenas. Se almacenan y devuelven con el email.

scheduled_at string

Hora programada para el envío. Acepta ISO 8601, timestamp Unix, o lenguaje natural como mañana a las 9am.

tracking boolean | object

Anula la configuración predeterminada de seguimiento del dominio. Puede ser un booleano u objeto con propiedades loads y clicks.

## Objeto de Archivo Adjunto
filename string Required

Nombre del archivo con extensión.

content string

Contenido codificado en Base64. Mutuamente excluyente con url.

url string

URL desde donde obtener el archivo adjunto. Mutuamente excluyente con content.

content_type string

Tipo MIME. Obligatorio al usar content.

content_id string

Content-ID para imágenes en línea (cid:).

encoding string

Codificación del contenido (predeterminado: base64).

## Tipos de Archivos Adjuntos Permitidos
Categoría Extensiones
Texto .txt, .csv, .log, .css, .ics, .xml
Imágenes .jpg, .jpe, .jpeg, .gif, .png, .bmp, .psd, .tif, .tiff, .svg, .indd, .ai, .eps
Documentos .doc, .docx, .rtf, .odt, .ott, .pdf, .pub, .pages, .mobi, .epub
Audio .mp3, .m4a, .m4v, .wma, .ogg, .flac, .wav, .aif, .aifc, .aiff
Video .mp4, .mov, .avi, .mkv, .mpeg, .mpg, .wmv
Hojas de Cálculo .xls, .xlsx, .ods, .numbers
Presentaciones .odp, .ppt, .pptx, .pps, .key
Archivos Comprimidos .zip, .vcf
Email .eml
Criptográficos .p7c, .p7m, .p7s, .pgp, .asc, .sig

Encabezados de Límite de Velocidad

Los siguientes encabezados se incluyen en cada respuesta:

Encabezado Descripción
ratelimit-limit Máximo de solicitudes por segundo
ratelimit-remaining Solicitudes restantes en el segundo actual
ratelimit-reset Segundos hasta que se reinicie el límite de velocidad
ratelimit-daily-limit Máximo de solicitudes diarias
ratelimit-daily-remaining Solicitudes diarias restantes
ratelimit-daily-reset Segundos hasta que se reinicie el límite diario

::code-snippet{title=“Enviar email”}

const response = await fetch('https://api.emailit.com/v2/emails', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    from: 'Tu Empresa <hola@tudominio.com>',
    to: ['destinatario1@ejemplo.com', 'destinatario2@ejemplo.com'],
    subject: 'Hola Mundo',
    html: '<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>',
    tracking: {
      loads: true,
      clicks: true
    }
  })
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => 'https://api.emailit.com/v2/emails',
  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([
    'from' => 'Tu Empresa <hola@tudominio.com>',
    'to' => ['destinatario1@ejemplo.com', 'destinatario2@ejemplo.com'],
    'subject' => 'Hola Mundo',
    'html' => '<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>',
    'tracking' => [
      'loads' => true,
      'clicks' => true
    ]
  ]),
  CURLOPT_HTTPHEADER => [
    'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type: application/json'
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "Error cURL #:" . $err;
} else {
  $result = json_decode($response, true);
  print_r($result);
}
import requests

response = requests.post(
    'https://api.emailit.com/v2/emails',
    headers={
        'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
        'Content-Type': 'application/json'
    },
    json={
        'from': 'Tu Empresa <hola@tudominio.com>',
        'to': ['destinatario1@ejemplo.com', 'destinatario2@ejemplo.com'],
        'subject': 'Hola Mundo',
        'html': '<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>',
        'tracking': {
            'loads': True,
            'clicks': True
        }
    }
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
request.body = {
  from: 'Tu Empresa <hola@tudominio.com>',
  to: ['destinatario1@ejemplo.com', 'destinatario2@ejemplo.com'],
  subject: 'Hola Mundo',
  html: '<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>',
  tracking: {
    loads: true,
    clicks: true
  }
}.to_json

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    url := "https://api.emailit.com/v2/emails"
    
    data := map[string]interface{}{
        "from": "Tu Empresa <hola@tudominio.com>",
        "to": []string{"destinatario1@ejemplo.com", "destinatario2@ejemplo.com"},
        "subject": "Hola Mundo",
        "html": "<h1>¡Bienvenido!</h1><p>Gracias por registrarte.</p>",
        "tracking": map[string]bool{
            "loads": true,
            "clicks": true,
        },
    }
    
    jsonData, _ := json.Marshal(data)
    
    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    req.Header.Set("Content-Type", "application/json")
    
    client := &http.Client{}
    resp, _ := client.Do(req)
    defer resp.Body.Close()
    
    var result map[string]interface{}
    json.NewDecoder(resp.Body).Decode(&result)
    fmt.Println(result)
}
use reqwest;
use serde_json::{json, Value};

#[tokio::main

Listar Correos

Lista los correos electrónicos de tu espacio de trabajo con paginación y filtrado opcional por tipo.

GET/emails

Parámetros de Consulta

pageinteger

Número de página. Mínimo: 1. Por defecto: 1.

limitinteger

Cantidad de resultados por página. Rango: 1–100. Por defecto: 10.

typestring

Filtrar por tipo de correo: inbound (entrante) o outbound (saliente).

const response = await fetch('https://api.emailit.com/v2/emails?page=1&limit=10', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails?page=1&limit=10',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error de cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails',
params={'page': 1, 'limit': 10},
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails?page=1&limit=10')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails?page=1&limit=10"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails?page=1&limit=10")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class ListEmails {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails?page=1&limit=10"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class ListEmails
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails?page=1&limit=10");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET "https://api.emailit.com/v2/emails?page=1&limit=10" \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"
{
"data": [
{
  "object": "email",
  "id": "em_abc123xyz789def456ghi012jkl345",
  "type": "outbound",
  "from": "remitente@tudominio.com",
  "to": "destinatario@ejemplo.com",
  "subject": "Hola Mundo",
  "status": "delivered",
  "size": 4523,
  "scheduled_at": null,
  "created_at": "2026-01-08T12:00:00.123456Z",
  "updated_at": "2026-01-08T12:01:00.123456Z",
  "meta": null
},
{
  "object": "email",
  "id": "em_def456ghi789jkl012mno345pqr678",
  "type": "inbound",
  "from": "externo@otrodominio.com",
  "to": "buzon@tudominio.com",
  "subject": "Re: Tu consulta",
  "status": "delivered",
  "size": 2891,
  "scheduled_at": null,
  "created_at": "2026-01-08T11:30:00.123456Z",
  "updated_at": "2026-01-08T11:30:00.123456Z",
  "meta": null
}
],
"next_page_url": "/v2/emails?page=2&limit=10",
"previous_page_url": null
}

Obtener Email

Recupera un email individual por su ID, incluyendo encabezados, contenido del cuerpo procesado y archivos adjuntos.

GET/emails/{id}

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails/em_abc123xyz789def456")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class GetEmail {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class GetEmail
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET https://api.emailit.com/v2/emails/em_abc123xyz789def456 \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"

Campos de Respuesta

CampoTipoDescripción
objectstringSiempre "email"
idstringID del email en formato em_xxx
typestring"inbound" o "outbound"
tokenstringToken del email
message_idstringMessage-ID de SMTP
fromstringDirección de email del remitente
tostringDirección de email del destinatario
subjectstringAsunto del email
statusstringEstado actual del email
sizeintegerTamaño del email en bytes
scheduled_atstring | nullHora de entrega programada (ISO 8601)
created_atstringMarca de tiempo de creación (ISO 8601)
updated_atstringMarca de tiempo de última actualización (ISO 8601)
trackingobject | nullConfiguración de seguimiento (omitido para emails entrantes)
metaobject | nullMetadatos personalizados
headersobjectEncabezados del email procesados
bodyobjectCuerpo procesado con campos text y html
attachmentsarrayArchivos adjuntos procesados con contenido codificado en base64

Objeto Body

CampoTipoDescripción
textstring | nullContenido en texto plano
htmlstring | nullContenido HTML

Objeto Attachment

CampoTipoDescripción
filenamestringNombre del archivo adjunto
content_typestringTipo MIME
sizeintegerTamaño del archivo adjunto en bytes
content_idstring | nullContent-ID para archivos adjuntos en línea
content_dispositionstring"attachment" o "inline"
contentstringContenido del archivo adjunto codificado en base64
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "outbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@tudominio.com>",
"from": "remitente@tudominio.com",
"to": "destinatario@ejemplo.com",
"subject": "Hola Mundo",
"status": "delivered",
"size": 12345,
"scheduled_at": null,
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:05:00.123456Z",
"tracking": {
"loads": true,
"clicks": true
},
"meta": {
"campaign": "verano",
"type": "marketing"
},
"headers": {
"From": "remitente@tudominio.com",
"To": "destinatario@ejemplo.com",
"Subject": "Hola Mundo",
"Content-Type": "multipart/mixed; boundary=----boundary123"
},
"body": {
"text": "¡Bienvenido!",
"html": "<html><body><h1>¡Bienvenido!</h1></body></html>"
},
"attachments": [
{
  "filename": "documento.pdf",
  "content_type": "application/pdf",
  "size": 12345,
  "content_id": null,
  "content_disposition": "attachment",
  "content": "JVBERi0xLjQKJcOkw7zDqc..."
}
]
}
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "inbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@dominioexterno.com>",
"from": "externo@dominioexterno.com",
"to": "bandeja@tudominio.com",
"subject": "Re: Tu consulta",
"status": "delivered",
"size": 8234,
"scheduled_at": null,
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:00:00.123456Z",
"meta": null,
"headers": {
"From": "externo@dominioexterno.com",
"To": "bandeja@tudominio.com",
"Subject": "Re: Tu consulta",
"Content-Type": "text/plain; charset=utf-8"
},
"body": {
"text": "Gracias por contactarnos...",
"html": null
},
"attachments": []
}
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "outbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@tudominio.com>",
"from": "remitente@tudominio.com",
"to": "destinatario@ejemplo.com",
"subject": "Recordatorio de Cita",
"status": "scheduled",
"size": 8234,
"scheduled_at": "2026-01-10T15:00:00.000000Z",
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:00:00.123456Z",
"tracking": {
"loads": true,
"clicks": true
},
"meta": null,
"headers": {
"From": "remitente@tudominio.com",
"To": "destinatario@ejemplo.com",
"Subject": "Recordatorio de Cita",
"Content-Type": "text/html; charset=utf-8"
},
"body": {
"text": "Recordatorio de Cita...",
"html": "<html>..."
},
"attachments": []
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}

Obtener Email en Formato Raw

Devuelve el mensaje MIME completo en formato raw junto con los metadatos del email.

GET/emails/{id}/raw

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class GetEmailRaw {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class GetEmailRaw
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET https://api.emailit.com/v2/emails/em_abc123xyz789def456/raw \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "outbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@tudominio.com>",
"from": "remitente@tudominio.com",
"to": "destinatario@ejemplo.com",
"subject": "Hola Mundo",
"status": "delivered",
"size": 4523,
"scheduled_at": null,
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:05:00.123456Z",
"tracking": {
"loads": true,
"clicks": false
},
"meta": null,
"headers": {
"From": "remitente@tudominio.com",
"To": "destinatario@ejemplo.com",
"Subject": "Hola Mundo",
"Content-Type": "text/html; charset=utf-8"
},
"raw": "From: remitente@tudominio.com\r\nTo: destinatario@ejemplo.com\r\nSubject: Hola Mundo\r\nContent-Type: text/html; charset=utf-8\r\n\r\n<html><body><h1>¡Bienvenido!</h1></body></html>"
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}

Obtener Adjuntos de Email

Devuelve únicamente la lista de adjuntos de un email, con el contenido codificado en base64.

GET/emails/{id}/attachments

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class GetEmailAttachments {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class GetEmailAttachments
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET https://api.emailit.com/v2/emails/em_abc123xyz789def456/attachments \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"

Campos de Respuesta

CampoTipoDescripción
objectstringSiempre "list"
dataarrayArray de objetos de adjuntos

Objeto Adjunto

CampoTipoDescripción
filenamestringNombre del archivo adjunto
content_typestringTipo MIME
sizeintegerTamaño del adjunto en bytes
content_idstring | nullContent-ID para adjuntos en línea
content_dispositionstring"attachment" o "inline"
contentstringContenido del adjunto codificado en base64
{
"object": "list",
"data": [
{
  "filename": "doc.pdf",
  "content_type": "application/pdf",
  "size": 12345,
  "content_id": null,
  "content_disposition": "attachment",
  "content": "JVBERi0xLjQKJcOkw7zDqc..."
},
{
  "filename": "logo.png",
  "content_type": "image/png",
  "size": 5678,
  "content_id": "logo@yourdomain.com",
  "content_disposition": "inline",
  "content": "iVBORw0KGgoAAAANSUhEUg..."
}
]
}
{
"object": "list",
"data": []
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}

Obtener Cuerpo del Email

Devuelve únicamente el contenido del cuerpo procesado (texto y HTML) de un email.

GET/emails/{id}/body

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/body', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/body',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/body',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/body')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/body"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails/em_abc123xyz789def456/body")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class GetEmailBody {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/body"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class GetEmailBody
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/body");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET https://api.emailit.com/v2/emails/em_abc123xyz789def456/body \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"
{
"text": "Contenido en texto plano del email",
"html": "<html><body><h1>¡Bienvenido!</h1><p>Contenido HTML del email</p></body></html>"
}
{
"text": "Contenido en texto plano del email",
"html": null
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}

Obtener Metadatos del Email

Devuelve los metadatos del email con información de archivos adjuntos, pero sin el contenido de los mismos. Útil para inspeccionar un email sin descargar datos de archivos adjuntos que podrían ser de gran tamaño.

GET/emails/{id}/meta

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta', {
method: 'GET',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.get(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta"

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .get("https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class GetEmailMeta {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .GET()
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class GetEmailMeta
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.GetAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta");
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X GET https://api.emailit.com/v2/emails/em_abc123xyz789def456/meta \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"

Campos de Respuesta

La respuesta incluye todos los campos de metadatos del email más un array attachments con información de archivos adjuntos (sin el campo content).

Objeto de Archivo Adjunto (Meta)

CampoTipoDescripción
filenamestringNombre del archivo adjunto
content_typestringTipo MIME
sizeintegerTamaño del archivo adjunto en bytes
content_idstring | nullContent-ID para archivos adjuntos en línea
content_dispositionstring"attachment" o "inline"
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "outbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@yourdomain.com>",
"from": "sender@yourdomain.com",
"to": "recipient@example.com",
"subject": "Hola Mundo",
"status": "delivered",
"size": 4523,
"scheduled_at": null,
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:05:00.123456Z",
"tracking": {
"loads": true,
"clicks": false
},
"meta": null,
"headers": {
"From": "sender@yourdomain.com",
"To": "recipient@example.com",
"Subject": "Hola Mundo",
"Content-Type": "multipart/mixed; boundary=----boundary123"
},
"attachments": [
{
  "filename": "doc.pdf",
  "content_type": "application/pdf",
  "size": 12345,
  "content_id": null,
  "content_disposition": "attachment"
}
]
}
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"type": "outbound",
"token": "abc123xyz789",
"message_id": "<abc123xyz789@yourdomain.com>",
"from": "sender@yourdomain.com",
"to": "recipient@example.com",
"subject": "Hola Mundo",
"status": "delivered",
"size": 4523,
"scheduled_at": null,
"created_at": "2026-01-08T12:00:00.123456Z",
"updated_at": "2026-01-08T12:05:00.123456Z",
"tracking": {
"loads": true,
"clicks": false
},
"meta": null,
"headers": {
"From": "sender@yourdomain.com",
"To": "recipient@example.com",
"Subject": "Hola Mundo",
"Content-Type": "text/html; charset=utf-8"
},
"attachments": []
}
{
"error": "Email no encontrado",
"message": "Email con ID 'em_abc123' no encontrado en tu espacio de trabajo"
}

Actualizar Email Programado

Actualiza la hora de envío de un email programado. Solo funciona para emails con estado “scheduled” y únicamente si la hora programada actual es al menos 3 minutos en el futuro.

POST/emails/{id}

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

Cuerpo de la Solicitud

scheduled_atstringRequired

Nueva hora programada. Acepta formato ISO 8601, timestamp Unix, o lenguaje natural como mañana a las 9am. Debe ser al menos 3 minutos en el futuro.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
},
body: JSON.stringify({
scheduled_at: '2026-01-10T15:00:00Z'
})
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456',
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([
'scheduled_at' => '2026-01-10T15:00:00Z'
]),
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.post(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
},
json={
    'scheduled_at': '2026-01-10T15:00:00Z'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'
request.body = {
scheduled_at: '2026-01-10T15:00:00Z'
}.to_json

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456"

data := map[string]interface{}{
    "scheduled_at": "2026-01-10T15:00:00Z",
}

jsonData, _ := json.Marshal(data)

req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::{json, Value};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .post("https://api.emailit.com/v2/emails/em_abc123xyz789def456")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .json(&json!({
        "scheduled_at": "2026-01-10T15:00:00Z"
    }))
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;

public class UpdateEmail {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    String jsonBody = "{\"scheduled_at\":\"2026-01-10T15:00:00Z\"}";
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.ofString(jsonBody))
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

public class UpdateEmail
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var data = new { scheduled_at = "2026-01-10T15:00:00Z" };
        var json = JsonConvert.SerializeObject(data);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        
        var response = await client.PostAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456", content);
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X POST https://api.emailit.com/v2/emails/em_abc123xyz789def456 \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "2026-01-10T15:00:00Z"
}'
curl -X POST https://api.emailit.com/v2/emails/em_abc123xyz789def456 \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json" \
-d '{
"scheduled_at": "mañana a las 3pm"
}'
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"status": "scheduled",
"scheduled_at": "2026-01-10T15:00:00.000Z",
"updated_at": "2026-01-08T12:00:00.123456Z",
"message": "La programación del email se ha actualizado exitosamente"
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}
{
"error": "No se puede actualizar el email",
"message": "Los emails programados solo se pueden actualizar al menos 3 minutos antes de la hora programada. Este email está programado para enviarse en 2 minuto(s)."
}
{
"error": "scheduled_at inválido",
"message": "La nueva hora programada debe ser al menos 3 minutos en el futuro."
}

Cancelar Email

Cancela un email programado o pendiente. Para emails programados, la cancelación solo está permitida si el tiempo programado es de al menos 3 minutos en el futuro.

POST/emails/{id}/cancel

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.post(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
"strings"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel"

req, _ := http.NewRequest("POST", url, strings.NewReader(""))
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .post("https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;

public class CancelEmail {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.noBody())
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class CancelEmail
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.PostAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel", 
            new StringContent(""));
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X POST https://api.emailit.com/v2/emails/em_abc123xyz789def456/cancel \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"
{
"object": "email",
"id": "em_abc123xyz789def456ghi012jkl345",
"status": "canceled",
"message": "El email ha sido cancelado exitosamente"
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}
{
"error": "No se puede cancelar el email",
"message": "El email no puede ser cancelado. Estado actual: 'sent'. Solo se pueden cancelar emails con estado 'scheduled' o 'pending'."
}
{
"error": "No se puede cancelar el email",
"message": "Los emails programados solo pueden cancelarse al menos 3 minutos antes de la hora programada. Este email está programado para enviarse en 2 minuto(s)."
}

Estados de Email Cancelables

Estado¿Se puede cancelar?Notas
pending✅ SíEl email está en cola pero aún no se ha procesado
scheduled✅ SíSolo si la hora programada es dentro de 3+ minutos
sent❌ NoEl email ya fue enviado al servidor de correo
delivered❌ NoEl email ya fue entregado al destinatario
bounced❌ NoEl email ya fue procesado
canceled❌ NoEl email ya fue cancelado

Reintentar Email

Reintenta el envío de un email que falló, tuvo errores o fue retenido. Esto crea una copia del email original y lo envía nuevamente. El nuevo email recibe su propio ID único.

POST/emails/{id}/retry

Parámetros de Ruta

idstringRequired

El ID del email en formato em_xxx.

const response = await fetch('https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry', {
method: 'POST',
headers: {
'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type': 'application/json'
}
});

const result = await response.json();
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => [
'Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE',
'Content-Type: application/json'
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "Error cURL #:" . $err;
} else {
$result = json_decode($response, true);
print_r($result);
}
import requests

response = requests.post(
'https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry',
headers={
    'Authorization': 'Bearer em_test_51RxCWJ...vS00p61e0qRE',
    'Content-Type': 'application/json'
}
)

result = response.json()
print(result)
require 'net/http'
require 'json'

uri = URI('https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer em_test_51RxCWJ...vS00p61e0qRE'
request['Content-Type'] = 'application/json'

response = http.request(request)
result = JSON.parse(response.body)
puts result
package main

import (
"encoding/json"
"fmt"
"net/http"
"strings"
)

func main() {
url := "https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry"

req, _ := http.NewRequest("POST", url, strings.NewReader(""))
req.Header.Set("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
req.Header.Set("Content-Type", "application/json")

client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()

var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Println(result)
}
use reqwest;
use serde_json::Value;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = reqwest::Client::new();

let response = client
    .post("https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry")
    .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
    .header("Content-Type", "application/json")
    .send()
    .await?;

let result: Value = response.json().await?;
println!("{:?}", result);

Ok(())
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
import java.net.http.HttpRequest.BodyPublishers;

public class RetryEmail {
public static void main(String[] args) throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry"))
        .header("Authorization", "Bearer em_test_51RxCWJ...vS00p61e0qRE")
        .header("Content-Type", "application/json")
        .POST(BodyPublishers.noBody())
        .build();
    
    HttpResponse<String> response = client.send(request, 
        HttpResponse.BodyHandlers.ofString());
    
    System.out.println(response.body());
}
}
using System;
using System.Net.Http;
using System.Threading.Tasks;

public class RetryEmail
{
public static async Task Main()
{
    using (var client = new HttpClient())
    {
        client.DefaultRequestHeaders.Add("Authorization", 
            "Bearer em_test_51RxCWJ...vS00p61e0qRE");
        
        var response = await client.PostAsync(
            "https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry", 
            new StringContent(""));
        
        var result = await response.Content.ReadAsStringAsync();
        Console.WriteLine(result);
    }
}
}
curl -X POST https://api.emailit.com/v2/emails/em_abc123xyz789def456/retry \
-H "Authorization: Bearer em_test_51RxCWJ...vS00p61e0qRE" \
-H "Content-Type: application/json"
{
"object": "email",
"id": "em_new789xyz456abc123",
"original_id": "em_abc123xyz789def456",
"status": "pending",
"message": "El email ha sido puesto en cola para reintento"
}
{
"error": "Email no encontrado",
"message": "No se encontró el email con ID 'em_abc123' en tu espacio de trabajo"
}
{
"error": "No se puede reintentar el email",
"message": "El email no puede ser reintentado. Estado actual: 'delivered'. Solo se pueden reintentar emails con estado 'failed', 'errored' o 'held'."
}

Estados de Email que Permiten Reintento

Estado¿Se puede reintentar?Notas
failed✅ SíEmail rebotó definitivamente
errored✅ SíEmail tuvo errores durante el procesamiento
held✅ SíEmail fue retenido para revisión
pending❌ NoEmail ya está en cola
sent❌ NoEmail ya fue enviado
delivered❌ NoEmail ya fue entregado

Consideraciones Importantes

  • Facturación: Los emails reintentados se facturan como emails nuevos según las tarifas estándar
  • ID nuevo: El email reintentado recibe un ID nuevo, el email original permanece sin cambios
  • Referencia original: La respuesta incluye original_id para vincular con el email original
Localizado por IA