Embedded App — Guía para partners
Estado: Draft · Audiencia: equipos técnicos de partners.
Crowder es la plataforma de ticketing sobre la que operan distintas ticketeras. Crowder expone un slot dentro del flujo de compra donde se puede embeber un iframe de un tercero. Ese tercero —vos, el partner— ofrece un producto adicional cuyo precio se suma al total de la orden y se cobra junto con los tickets en un único checkout operado por la ticketera.
Ejemplos típicos: una agencia de viajes que vende paquetes hotel + traslado asociados a un show; una tienda oficial de un club que vende merch junto con la entrada; una empresa que ofrece un seguro de cancelación; una organización deportiva que vende kits de inscripción con extras.
Lo que vas a construir
Sección titulada «Lo que vas a construir»- Un iframe hosteado en tu dominio, embebido dentro del checkout de la ticketera. Implementa un protocolo
postMessagecon la página parent. - Un endpoint HTTP de estado (GET) que Crowder llama server-to-server para consultar el lifecycle de una
interaction. - Un endpoint HTTP de eventos (POST) que recibe los webhooks de Crowder a lo largo del lifecycle (
purchaseReserved,purchasePaid,purchaseExpired,purchaseRefunded). - Un conjunto de datos de configuración que le entregás a la ticketera para que te de de alta en su instancia de Crowder.
Lo que NO hacés
Sección titulada «Lo que NO hacés»- No cobrás vos al usuario. La ticketera es merchant of record: cobra con su gateway y te paga después según el contrato comercial bilateral.
- No manejás el branding del checkout. Tu iframe convive dentro del look & feel de la ticketera.
- No hablás directamente con Crowder para el onboarding ni para el contrato comercial. Tu contraparte operativa y comercial es la ticketera. Crowder es la infraestructura sobre la que ella opera y la que define este protocolo.
Quién te llama
Sección titulada «Quién te llama»| Tu entregable | Quién lo invoca |
|---|---|
| Iframe (front) | Frontend de Crowder, dentro del dominio de la ticketera |
| Endpoint de estado (GET) | Backend de Crowder |
| Endpoint de eventos (POST) | Backend de Crowder |
Modelo de mensajes
Sección titulada «Modelo de mensajes»Todos los mensajes del protocolo —tanto los postMessage del iframe como los HTTP— comparten una misma forma: un único objeto con un campo status que indica de qué mensaje se trata. Cada status usa el subconjunto de campos que le aplica; el resto se omite. Así, una sola estructura cubre todo el lifecycle y podés reutilizar el mismo parser/serializer en cliente y servidor.
| Aspecto | Valor |
|---|---|
| Encoding | UTF-8 / JSON |
| Naming | camelCase |
| IDs internos de Crowder | Numéricos (event, channel, partner) |
| IDs opacos externos | Strings (interaction lo emite el partner, uuid por item) |
| Timestamps | ISO 8601 UTC |
| Moneda | ISO 4217 a nivel raíz (no por item) |
| Locale | BCP 47 |
Lifecycle de una interaction
Sección titulada «Lifecycle de una interaction» purchaseReserved purchasePaid purchaseRefunded (total) submitted → valid ─────────────→ reserved ─────────→ confirmed ────────────────→ refunded │ │ purchaseExpired (TTL vence) ▼ expiredvalid: cotización vigente. Sin compromiso de stock, sin TTL.reserved: hold real conexpiresAt.expired: el hold venció sin pago. Crowder disparapurchaseExpiredpara sincronizar la liberación; el partner igual debe liberar por su cuenta al vencer el TTL local.confirmed: pago capturado. Fulfillment del partner en curso. La devolubilidad la declara el partner por item conrefundable.refunded: terminal. Se alcanza cuandopurchaseRefundedabarca todos los items vigentes. Devoluciones parciales mantienen la interacción enconfirmedconpartnerItemsreducido.
Flujo end-to-end
Sección titulada «Flujo end-to-end»- El usuario selecciona tickets en el checkout de la ticketera.
- La página monta tu iframe; vos emitís
readyy Crowder responde concontext(evento, tickets, usuario). - El usuario arma una selección en tu iframe. Vos emitís
selectedcon lospartnerItems(podés emitirlo N veces); el resumen del checkout se actualiza. Todavía no se persiste nada. - El usuario presiona Continuar. Crowder te envía
submitpor postMessage. Persistís la oferta en tu backend (lifecyclevalid), generás lainteractionopaca y respondés consubmitted. - Crowder hace
GET {endpoint}/{interaction}para revalidar (status: valid). - Crowder dispara
POST {endpoint}/{interaction}/eventsconstatus: purchaseReserved. Vos reservás stock real y devolvésexpiresAten el ack — ahí arranca el TTL. - Cobro en Crowder. Llega
purchasePaid→confirmed. - (Opcional, según escenario)
purchaseRefundedcon los items a devolver (parcial o total).
Alcance
Sección titulada «Alcance»Lo que no está cubierto por el protocolo:
- Descuentos o modificaciones al precio base del ticket. Solo
partnerItemsaditivos. - Múltiples partners simultáneos en el mismo evento.
- Slot post-compra (tipo “ya compraste, ¿querés un hotel?”). El iframe vive solo en el flujo pre-orden.
- Multi-currency dentro de una misma
interaction. La moneda vive a nivel raíz. - Notificación posterior al
deferred. Si respondés202 deferred, Crowder no espera callback: el siguiente GET refleja la realidad cuando el partner termine de procesar.
Por dónde seguir
Sección titulada «Por dónde seguir»Contacto y soporte
Sección titulada «Contacto y soporte»Tu interlocutor primario es la ticketera. Crowder se involucra solo si hay un problema del protocolo mismo o de la plataforma (bug, incidente de seguridad, evolución del protocolo).