Quickstart
Integra disponibilidad de boletos, precios y enlaces de checkout en tu sitio web en menos de 10 minutos.
https://api.eventpass.mx/api/publicTodas las rutas llevan el prefijo /api. Autenticación con API Key en el header Authorization: Bearer ep_live_...
En 4 pasos
Genera tu API Key
En el backoffice ve a /settings/api-keys. Copia la clave que empieza con
ep_live_oep_test_para sandbox.Obtén el ID de tu evento
Desde el detalle del evento en el backoffice copia el ID (formato MongoDB ObjectId). El evento debe estar publicado.
Consulta tipos de entrada desde tu backend
Llama a la API con tu API Key para obtener precio vigente, cupos y checkoutUrl. No expongas la clave en el navegador.
Muestra en tu web
Usa el campo checkoutUrl de cada tipo para enlazar directo a pay.eventpass.mx. Si tu landing es propia, instala el snippet de Analytics en tu sitio. Si usas referidos, concatena
?ref=CODIGO— ver Referidos en tu sitio.
Endpoints
| Método | Ruta | Descripción |
|---|---|---|
| GET | /public/events/:eventId | Datos del evento publicado |
| GET | /public/events/:eventId/ticket-types | Tipos de entrada con precio y checkoutUrl |
| GET | /public/ticket-types/:id | Un tipo de entrada específico |
Prefijo completo: https://api.eventpass.mx/api + ruta (ej. https://api.eventpass.mx/api/public/events/EVENT_ID/ticket-types).
Ejemplo: listar tipos de entrada
Reemplaza EVENT_ID y tu API Key. Ejecuta estos ejemplos desde tu servidor, no desde el navegador del visitante.
curl "https://api.eventpass.mx/api/public/events/EVENT_ID/ticket-types" \
-H "Authorization: Bearer ep_live_XXXX" \
-H "Accept: application/json"const response = await fetch(
'https://api.eventpass.mx/api/public/events/EVENT_ID/ticket-types',
{
headers: {
Authorization: 'Bearer ep_live_XXXX',
Accept: 'application/json',
},
},
)
if (!response.ok) throw new Error(`HTTP ${response.status}`)
const tickets = await response.json()import requests
resp = requests.get(
'https://api.eventpass.mx/api/public/events/EVENT_ID/ticket-types',
headers={
'Authorization': 'Bearer ep_live_XXXX',
'Accept': 'application/json',
},
timeout=10,
)
resp.raise_for_status()
tickets = resp.json()<?php
$ch = curl_init('https://api.eventpass.mx/api/public/events/EVENT_ID/ticket-types');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ep_live_XXXX',
'Accept: application/json',
],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($status !== 200) {
throw new RuntimeException("HTTP $status: $body");
}
$tickets = json_decode($body, true);Ejemplo de respuesta
[
{
"id": "6a185611402f04a6b1cea457",
"name": "General Access",
"description": "Acceso General",
"currentPrice": 659900,
"currentTierLabel": "Early Access",
"nextTierPrice": null,
"nextTierStartsAt": null,
"availableQty": 297,
"status": "active",
"checkoutUrl": "https://pay.eventpass.mx/EVENT_ID/6a185611402f04a6b1cea457"
}
]Campos útiles en la respuesta
- currentPrice
- Precio vigente en centavos MXN (659900 = $6,599.00)
- currentTierLabel
- Nombre del tier activo (Early bird, Normal, etc.)
- availableQty
- Cupos restantes
- checkoutUrl
- URL directa a pay.eventpass.mx — úsala tal cual en tu botón de compra
- status
- active | sold_out | inactive
Integrar en tu sitio web
La API Key no debe ir en JavaScript del cliente. Expón un endpoint propio que consulte EventPass y devuelva solo los datos públicos (precio, cupos, checkoutUrl).
1. Backend proxy (recomendado)
// GET /api/tickets — tu endpoint, sin exponer la API Key al navegador
app.get('/api/tickets', async (_req, res) => {
const response = await fetch(
'https://api.eventpass.mx/api/public/events/' + process.env.EVENTPASS_EVENT_ID + '/ticket-types',
{ headers: { Authorization: 'Bearer ' + process.env.EVENTPASS_API_KEY } },
)
if (!response.ok) return res.status(502).json({ error: 'upstream_failed' })
res.json(await response.json())
})2. Frontend con checkoutUrl
const ALLOWED_HOSTS = ['pay.eventpass.mx']
function isAllowedCheckoutUrl(url) {
try {
return ALLOWED_HOSTS.includes(new URL(url).hostname)
} catch {
return false
}
}
async function renderTickets() {
const res = await fetch('/api/tickets')
const tickets = await res.json()
const container = document.getElementById('tickets')
container.innerHTML = tickets
.filter((t) => t.availableQty > 0 && t.status === 'active')
.map((t) => {
const price = (t.currentPrice / 100).toLocaleString('es-MX', {
style: 'currency',
currency: 'MXN',
maximumFractionDigits: 0,
})
const href = isAllowedCheckoutUrl(t.checkoutUrl) ? t.checkoutUrl : '#'
return `<a href="${href}" class="btn">${t.name} — ${price}</a>`
})
.join('')
}
renderTickets()https://pay.eventpass.mx/{eventId}/{ticketTypeId}. No uses rutas como /events/{eventId}.Si tu sitio usa códigos de referido (?ref= en tu landing), consulta Referidos en tu sitio para concatenar el código al checkoutUrl.
Errores comunes
| HTTP | Mensaje | Causa habitual |
|---|---|---|
| 401 | API key required | Falta el header Authorization |
| 401 | Invalid API key | Clave incorrecta o revocada |
| 404 | Event not found | ID incorrecto o evento no publicado |
| 404 | (sin JSON) | Ruta sin prefijo /api |
| 429 | Too Many Requests | Superaste 30 req/min — implementa caché |