---
title: "Conector de SendGrid"
description: "Guía completa de integración con SendGrid para sincronizar contactos, emails transaccionales, campañas de marketing y eventos de engagement con Brevo a través de Tajo."
url: https://tajo.io/es/docs/connectors/marketing/sendgrid/
markdown: https://tajo.io/es/docs/connectors/marketing/sendgrid.md
lang: es-ES
robots: noindex
---

Solicita acceso anticipado

Escribe tu nombre y dirección de correo de trabajo. Te enviaremos un enlace para confirmar tu solicitud de acceso a Tajo.

# Conector de SendGrid

Estado del conector: En desarrollo En construcción. Aún no verificado.

| Campo de origen | Campo de destino | Valor de ejemplo |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Conecta tu cuenta de SendGrid con Brevo a través de Tajo para migrar tu infraestructura de email, sincronizar contactos, transferir datos de campaña y unificar la analítica de engagement entre ambas plataformas.

## Resumen

| Propiedad | Valor |
| --- | --- |
| **Plataforma** | SendGrid (Twilio) |
| **Categoría** | Marketing |
| **Complejidad de configuración** | Fácil |
| **Integración oficial** | No |
| **Datos sincronizados** | Contactos, Campañas, Email transaccional, Eventos |
| **URL base de la API** | `https://api.sendgrid.com/v3` |

## Funcionalidades

- **Migración de contactos** - Migra los contactos de SendGrid Marketing a Brevo con campos personalizados
- **Sincronización de email transaccional** - Registra los eventos de email transaccional para un reporting unificado
- **Datos de campaña** - Sincroniza los datos de rendimiento de Single Send y Automation
- **Webhooks de eventos** - Reenvía los eventos de email (entregado, abierto, clicado, rebotado) a Brevo
- **Sincronización de suppressions** - Migra las listas de rebotes, bloqueos y bajas para cumplimiento
- **Migración de plantillas** - Exporta Dynamic Transactional Templates para usarlas en Brevo
- **Verificación de remitente** - Sincroniza identidades de remitente verificadas y autenticación de dominio
- **Sincronización de estadísticas** - Importa estadísticas históricas de engagement como atributos de Brevo

## Requisitos previos

Antes de empezar, asegúrate de tener:

1. Una cuenta de SendGrid (Free, Essentials, Pro o Premier)
2. Una clave API de SendGrid con los permisos necesarios
3. Una cuenta de Brevo con acceso a la API
4. Una cuenta de Tajo

## Autenticación

### Autenticación con clave API

SendGrid usa autenticación con bearer token.

```bash
curl https://api.sendgrid.com/v3/marketing/contacts \
  -H "Authorization: Bearer SG.YOUR_API_KEY" \
  -H "Content-Type: application/json"
```

Crea claves API en SendGrid Settings > API Keys con niveles de permisos específicos:

- **Full Access** - Acceso completo a la API
- **Restricted Access** - Control granular de permisos
- **Billing Access** - Solo operaciones de facturación

#### Permisos necesarios

```
Marketing: Full Access
  - Contacts (read)
  - Single Sends (read)
  - Automations (read)
Mail Send: Full Access
  - Mail Send (read)
Stats: Read Access
Suppressions: Read Access
Tracking: Read Access
```

Seguridad de la clave API

Las claves API de SendGrid solo se muestran una vez al crearlas. Guárdalas de forma segura. Si las pierdes, tendrás que crear una nueva clave.

## Configuración

### Configuración básica

```yaml
connectors:
  sendgrid:
    enabled: true
    api_key: "${SENDGRID_API_KEY}"

    # Data sync options
    sync:
      contacts: true
      campaigns: true
      transactional: true
      suppressions: true
      statistics: true

    # List mapping to Brevo
    list_mapping:
      "All Contacts": 60
      "Newsletter": 61
      "Transactional": 62
```

### Asignación de campos

Asocia los campos de contacto de SendGrid con los atributos de contacto de Brevo:

#### Default Mappings

| Parameter | Type | Description |
| --- | --- | --- |
| `email` required | string | Dirección de email del contacto (identificador único) |
| `first_name` optional | string | Se asigna al atributo FIRSTNAME |
| `last_name` optional | string | Se asigna al atributo LASTNAME |
| `phone_number` optional | string | Se asigna al atributo SMS |
| `city` optional | string | Ciudad del contacto |
| `country` optional | string | País del contacto |
| `custom_fields` optional | object | Pares clave-valor de campos personalizados |
| `list_ids` optional | array | Pertenencia a listas de SendGrid |

#### Asignación de campos personalizados

```yaml
field_mapping:
  # Standard fields
  email: email
  first_name: FIRSTNAME
  last_name: LASTNAME
  phone_number: SMS

  # Location fields
  city: CITY
  state_province_region: STATE
  country: COUNTRY
  postal_code: POSTAL_CODE

  # Engagement metrics
  avg_open_rate: AVG_OPEN_RATE
  avg_click_rate: AVG_CLICK_RATE

  # Custom fields
  custom_fields.company: COMPANY_NAME
  custom_fields.plan: PLAN_TYPE
```

## Endpoints de la API

### Marketing Contacts

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `PUT` | `/v3/marketing/contacts` | Añadir o actualizar contactos |
| `POST` | `/v3/marketing/contacts/search` | Buscar contactos |
| `GET` | `/v3/marketing/contacts/count` | Obtener el número de contactos |
| `POST` | `/v3/marketing/contacts/exports` | Exportar contactos |
| `DELETE` | `/v3/marketing/contacts` | Eliminar contactos |
| `GET` | `/v3/marketing/lists` | Listar todas las listas de contactos |

### Email transaccional (Mail Send)

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `POST` | `/v3/mail/send` | Enviar un email |
| `GET` | `/v3/templates` | Listar Dynamic Templates |
| `GET` | `/v3/templates/{id}` | Obtener los detalles de una plantilla |

### Campañas (Single Sends)

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/v3/marketing/singlesends` | Listar Single Sends |
| `GET` | `/v3/marketing/singlesends/{id}` | Obtener detalles de un Single Send |
| `GET` | `/v3/marketing/automations` | Listar Automations |

### Estadísticas

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/v3/stats` | Obtener estadísticas globales de email |
| `GET` | `/v3/categories/stats` | Obtener estadísticas por categoría |
| `GET` | `/v3/marketing/stats/singlesends` | Obtener estadísticas de Single Send |

### Suppressions

| Método | Endpoint | Descripción |
| --- | --- | --- |
| `GET` | `/v3/suppression/bounces` | Listar emails rebotados |
| `GET` | `/v3/suppression/blocks` | Listar emails bloqueados |
| `GET` | `/v3/suppression/spam_reports` | Listar reportes de spam |
| `GET` | `/v3/suppression/unsubscribes` | Listar bajas globales |

## Eventos

### Eventos de email (a través del Event Webhook)

| Evento | Disparador | Caso de uso |
| --- | --- | --- |
| `processed` | Email aceptado por SendGrid | Confirmación de envío |
| `delivered` | Email entregado al destinatario | Seguimiento de entrega |
| `open` | Email abierto | Scoring de engagement |
| `click` | Clic en enlace | Seguimiento de intereses |
| `bounce` | Email rebotado | Higiene de la lista |
| `dropped` | Email suprimido | Revisión de cumplimiento |
| `deferred` | Entrega pospuesta | Monitorización de reintentos |
| `spam_report` | Marcado como spam | Gestión de reputación |
| `unsubscribe` | Baja a través del enlace | Sincronización de preferencias |

## Ejemplos de código

### Inicializar el conector

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect SendGrid
await tajo.connectors.connect('sendgrid', {
  apiKey: process.env.SENDGRID_API_KEY
});
```

### Migrar contactos a Brevo

```javascript
// Full contact migration from SendGrid to Brevo
await tajo.connectors.sync('sendgrid', {
  type: 'full',
  resources: ['contacts', 'suppressions'],
  options: {
    includeCustomFields: true,
    migrateListMemberships: true,
    migrateSuppressions: true
  }
});

// Check migration status
const status = await tajo.connectors.status('sendgrid');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsMigrated: 45000,
//   suppressionsSynced: 3200,
//   listsMapped: 8
// }
```

### Reenviar eventos de email

```javascript
// Handle SendGrid Event Webhook
app.post('/webhooks/sendgrid', async (req, res) => {
  const signature = req.get('X-Twilio-Email-Event-Webhook-Signature');

  // Verify webhook signature (ECDSA)
  if (!verifySendGridSignature(req.body, signature)) {
    return res.status(401).send('Unauthorized');
  }

  // Process batch of events
  for (const event of req.body) {
    await tajo.connectors.handleWebhook('sendgrid', {
      type: event.event,
      email: event.email,
      timestamp: event.timestamp,
      payload: event
    });
  }

  res.status(200).send('OK');
});
```

## Límites de velocidad

Límites de velocidad de la API de SendGrid:

| Endpoint | Límite | Detalles |
| --- | --- | --- |
| Mail Send (`/v3/mail/send`) | Depende del plan | Free: 100/día, Essentials: según el plan |
| Marketing Contacts PUT | 3 peticiones/segundo | Hasta 30.000 contactos por lote |
| Marketing Contacts Search | 50 peticiones/segundo | Por clave API |
| API general | 1.000 peticiones/segundo | Por clave API |
| Event Webhook | Entrega por lotes | Hasta 1.000 eventos por POST |

Límites de Mail Send

Los límites de Mail Send dependen de tu plan de SendGrid. Las cuentas Free están limitadas a 100 emails/día. Consulta los detalles de tu plan para conocer los límites exactos de envío.

## Resolución de problemas

### Problemas habituales

| Problema | Causa | Solución |
| --- | --- | --- |
| 401 Unauthorized | Clave API no válida | Verifica la clave API en SendGrid Settings |
| 403 Forbidden | Permisos insuficientes de la clave API | Crea una clave nueva con los scopes necesarios |
| Exportación de contactos pendiente | Procesamiento de gran volumen | Haz polling del endpoint de estado de la exportación hasta que finalice |
| Sincronización de suppressions incompleta | Se requiere paginación | Implementa paginación con el parámetro offset |
| Webhook de eventos no recibido | URL sin verificar | Completa la verificación de la URL del webhook en SendGrid |

### Modo depuración

Activa el registro detallado:

```yaml
connectors:
  sendgrid:
    debug: true
    log_level: verbose
    log_webhooks: true
```

### Probar la conexión

```bash
tajo connectors test sendgrid
# ✓ API connection successful
# ✓ Contacts readable
# ✓ Lists accessible
# ✓ Statistics readable
# ✓ Suppressions accessible
```

## Buenas prácticas

1. **Migra primero las suppressions** - Asegúrate de que los rebotes, bloqueos y bajas están en Brevo antes de enviar
2. **Usa subidas de contactos por lote** - Haz PUT de hasta 30.000 contactos por petición para mayor eficiencia
3. **Verifica el Event Webhook** - Activa los webhooks firmados con verificación ECDSA
4. **Asocia los campos personalizados** - Crea los atributos correspondientes en Brevo antes de la migración de contactos
5. **Sincroniza datos de engagement** - Importa estadísticas históricas para la segmentación en Brevo
6. **Gestiona las exportaciones asíncronas** - Las exportaciones de contactos son asíncronas; haz polling hasta que finalicen

## Seguridad

- **Autenticación con clave API** - Bearer token con niveles de permisos granulares
- **Firma del Event Webhook** - Verificación de firma ECDSA para los payloads de webhook
- **Cifrado TLS** - Toda la comunicación con la API se cifra vía HTTPS
- **IP Access Management** - Restringe el acceso al Dashboard y a la API por IP
- **Autenticación de dos factores** - 2FA disponible para el acceso a la cuenta

## Recursos relacionados

- [Documentación de la API de SendGrid](https://docs.sendgrid.com/api-reference)
- [Guía del Event Webhook de SendGrid](https://docs.sendgrid.com/for-developers/tracking-events/event)
- [Conector de Brevo](https://tajo.io/es/docs/connectors/marketing/brevo)
- [Conector de Mailchimp](https://tajo.io/es/docs/connectors/marketing/mailchimp)
- [Skill de sincronización de clientes](https://tajo.io/es/docs/skills/data-sync/customer-sync)
