Partner Management Features
APIs operativas usadas por organizaciones partner autenticadas después del onboarding.
1. Settings (/api/partner-settings)
GET /api/partner-settingsPATCH /api/partner-settings/profilePATCH /api/partner-settings/businessPATCH /api/partner-settings/brandingPOST /api/partner-settings/api-keys/regeneratePATCH /api/partner-settings/apiPATCH /api/partner-settings/notificationsPATCH /api/partner-settings/billingGET /api/partner-settings/commissionPATCH /api/partner-settings/commission
PATCH /api/partner-settings/commission solo acepta customRates[]. Enviar defaultRate, o intentar cambiar la tasa de pago, responde 403 error.partner.commission_rate_admin_only. La tasa de pago se cambia por la API admin de partners.
PATCH /api/partner-settings/api con webhookUrl debe ser HTTPS público. Las URLs privadas y de metadata se rechazan. La entrega no sigue redirecciones.
2. Users (/api/partners/users)
POST /api/partners/usersGET /api/partners/usersGET /api/partners/users/statisticsGET /api/partners/users/:userIdPATCH /api/partners/users/:userIdDELETE /api/partners/users/:userIdPOST /api/partners/users/inviteGET /api/partners/users/:userId/permissionsPOST /api/partners/users/:userId/update-access
POST /api/partners/users/invite crea una membresía pendiente (isActive=false). No envía correo (emailDelivery=pending_manual). Los roles distintos de client se rechazan. Las cuentas nuevas quedan en el rol client hasta que aceptan.
3. Reports (/api/partner-reports)
GET /api/partner-reports/revenueGET /api/partner-reports/performanceGET /api/partner-reports/top-destinationsGET /api/partner-reports/daily-revenueGET /api/partner-reports/monthly-trendGET /api/partner-reports/commissionGET /api/partner-reports/cenote-comparisonGET /api/partner-reports/owned-venues— reservas e ingresos de los cenotes que operas. QuerystartDateyendDate(YYYY-MM-DD). Requierepartner.view_reportsypartner.view_cenotes.
4. Reservations (/api/partner-reservations)
GET /api/partner-reservationsGET /api/partner-reservations/statsGET /api/partner-reservations/:idPOST /api/partner-reservationsPATCH /api/partner-reservations/:idPOST /api/partner-reservations/:id/cancel
POST /api/partner-reservations (y el público POST /api/partner/reservations) aceptan los mismos campos core de booking WEB: ageBreakdown?, nationality?, transportationType?, pickup, additionalServices?, couponCode?, promotionId?, locale?, paymentMethod?, más guest/contact. Los filtros de lista honran alias dateFrom/dateTo y sortDirection junto a startDate/endDate/sortOrder.
5. Webhooks (/api/partners/webhooks)
POST /api/partners/webhooks/test— partner JWT + permissions (partner.manage_settings); endpoint de prueba del partnerPOST /api/partners/webhooks/trigger— solo JWT de admin. El usuario partner llamaPOST /api/partners/webhooks/test(partner.manage_settings).
El CRUD de webhooks del portal vive en /api/partner-portal/webhooks* y exige HTTPS público + sin redirects + DNS fijado en test/entrega saliente.
6. Sandbox (/api/partner-sandbox) — live
Sandbox está disponible cuando el almacenamiento sandbox está provisionado. Requiere una API key sk_test_. Esas claves no valen en /api/partner/* (error.partner.sandbox_key_not_allowed_on_production_api). Generate está topado (máximo 50 por tipo de recurso).
POST /api/partner-sandbox/generate-dataGET /api/partner-sandbox/statisticsDELETE /api/partner-sandbox/cleanup
7. Webhook simulator (/api/partner/webhooks/simulator) — live
Requiere clave sandbox sk_test_ (misma restricción de API de producción que §6).
POST /api/partner/webhooks/simulator/simulatePOST /api/partner/webhooks/simulator/simulate-batchPOST /api/partner/webhooks/simulator/test-endpointGET /api/partner/webhooks/simulator/history
delay máximo 10 segundos, lote máximo 20 eventos, limit del historial máximo 500. El envío solo acepta HTTPS público y no sigue redirecciones.
8. Supply cenotes (/api/partner-portal/cenotes) — solo partners de supply
Tipos elegibles: tour_operator y hotel_partner (activos + verificados). Tipos solo-demanda (OTA, travel agency, etc.) reciben 403.
Requiere JWT + roles partner (partner_admin / partner_manager) y permisos:
| Method | Path | Permission |
|---|---|---|
| GET | /api/partner-portal/cenotes | partner.view_cenotes |
| POST | /api/partner-portal/cenotes | partner.manage_cenotes |
| GET | /api/partner-portal/cenotes/:id | partner.view_cenotes |
| PATCH | /api/partner-portal/cenotes/:id | partner.manage_cenotes |
| POST | /api/partner-portal/cenotes/:id/images | partner.manage_cenotes |
| POST | /api/partner-portal/cenotes/:id/request-publish | partner.request_publish_cenote |
draft → request-publish → pending_review → admin publish (active) o reject-publish (vuelve a draft). Admin puede suspend / reactivate. El partner solo edita y adjunta imágenes en draft. El attach exige un archivo subido por el mismo usuario (uploaded_by).
Checklist antes de request-publish / publish admin: nombre ES, pricing (agePricing o paquetes), ≥1 imagen activa.
Métricas de venues propios: GET /api/partner-reports/owned-venues.
Notas
- Estas rutas no son la integración pública con API key
- La mayoría exige JWT de partner y un permiso
- Los montos de reportes y reservas van en centavos
POST /api/partner-settings/api-keys/regeneratedevuelveapiKeyuna vez. La auth es el JWT del partner. No envíesx-api-secret.