Endpoint: POST /event/event/{event_id}/checkout/
Autenticação: Pública (sem auth) Endpoint público destinado ao comprador. Cria um EventCheckout para um ou mais ingressos de um evento, captura a identidade do comprador, aplica opcionalmente um cupom de desconto e reserva o estoque. O checkout é criado com status PENDING e permanece pagável por 20 minutos (após isso transita para EXPIRED). Se o total final ficar abaixo de um centavo (por exemplo, com um cupom de 100%), o checkout é promovido automaticamente para FREE e os e-mails de confirmação são disparados. O estoque é reservado contabilizando checkouts em PENDING/PAID/FREE contra a quantity do EventTicket — checkouts PENDING com mais de 16 minutos são expirados automaticamente antes da contagem.

Pré-requisitos

  • O evento deve existir e ser acessível pelo contexto público.
  • Cada id de ingresso enviado deve pertencer ao mesmo evento da URL.
  • Para cada id de ingresso solicitado, quantity_available deve cobrir a quantidade pedida, caso contrário um 400 é retornado.
  • Todas as questions configuradas no ingresso devem ser respondidas, com valores compatíveis com o tipo declarado (LIST, RADIO, STRING, INTEGER, DATE, EMAIL, PHONE, CPF).
  • Se coupon_code for informado, deve corresponder a um cupom do evento (case-insensitive — códigos são convertidos para maiúsculas no servidor).

Parâmetros de caminho

event_id
string (uuid)
required
Evento ao qual o checkout pertence.

Corpo da requisição

customer
object
required
Identidade do comprador.
tickets
array
required
Uma entrada por ingresso individual sendo comprado (repita o mesmo ticket id para comprar várias unidades do mesmo tipo).
coupon_code
string
Opcional. É feito trim e conversão para maiúsculas antes da consulta.

Resposta

201 Created com o resumo do checkout.
id
string (uuid)
Use este id para acionar os endpoints de pagamento (pay, payment_details, tickets).
status
string
PENDING (pendente) para eventos pagos, FREE (gratuito) quando o total com desconto chega a zero.
total
integer
Valor final a ser pago, em centavos de BRL.
original_total
integer
Soma dos ticket.amount antes do desconto, em centavos de BRL.
discount_amount
integer
Desconto aplicado, em centavos de BRL.
customer
object
Eco dos dados do comprador enviados.
tickets
array
Cada entrada: id (id do ingresso do checkout), ticket (id do tipo de ingresso), question_answers.
{
  "id": "7b8c9d0e-1f2a-3b4c-5d6e-7f8a9b0c1d2e",
  "status": "PENDING",
  "total": 11400,
  "original_total": 12000,
  "discount_amount": 600,
  "customer": {
    "name": "Maria Silva",
    "email": "maria@example.com",
    "phone_number": "11987654321",
    "country_code": "+55"
  },
  "tickets": [
    {
      "id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "ticket": "9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e",
      "question_answers": []
    }
  ]
}

Ações relacionadas no mesmo recurso

Estas rotas adicionais também são públicas:
  • GET /event/event/{event_id}/checkout/{checkout_id}/ — retorna dados de pagamento: status, totais, resumo dos ingressos e payment_plan (allowPix, allowCreditCard, maxInstallments, maxInstallmentsWithoutInterest). Expira o checkout automaticamente se a janela de 20 minutos já tiver passado.
  • POST /event/event/{event_id}/checkout/{checkout_id}/pay/ — envia os dados de pagamento (cartão ou PIX) e cria a transação subjacente. O corpo reutiliza o comprador capturado na criação. Retorna o payment_info do gateway (por exemplo, QR Code PIX, desafio 3DS). Retorna 400 se o checkout não estiver pagável.
  • POST /event/event/{event_id}/checkout/validate-coupon/ — corpo {"code": "..."}. Retorna {valid, coupon:{id,name,code,type,value}} ou {valid: false, error}.
  • GET /event/event/{event_id}/checkout/{checkout_id}/tickets/ — quando o checkout está pago, faz streaming de um PDF com os ingressos adquiridos. Caso contrário, renderiza uma página HTML de “não pago”.

Erros

StatusQuando
400Falha de validação: campos faltando, telefone inválido, ingresso de outro evento, ingresso esgotado, pergunta não respondida, cupom inválido, respostas ausentes.

Exemplos

curl -X POST https://api.dlpay.cloud/event/event/1a4e3d12-5b3f-4f0b-9c2c-89d2e1c1d111/checkout/ \
  -H "Content-Type: application/json" \
  -d '{
    "customer": {
      "name": "Maria Silva",
      "email": "maria@example.com",
      "phone_number": "11987654321",
      "country_code": "+55"
    },
    "tickets": [
      {"ticket": "9b1c2d3e-4f5a-6b7c-8d9e-0f1a2b3c4d5e", "question_answers": []}
    ],
    "coupon_code": "SUNSET10"
  }'