PlugToPay

Pagamentos

Criação, consulta e detalhe de transações com cartão e PIX.

Criar pagamento — cartão

POST /api/v1/payments — requer X-Client-ID + X-API-Key.

POST /api/v1/payments
Content-Type: application/json
X-Client-ID: client_...
X-API-Key: sk_...
Idempotency-Key: ORD-2026-12345  (opcional, mas recomendado)
{
  "merchant_order_id": "ORD-2026-12345",
  "amount": 15000,
  "currency": "BRL",
  "payment_method": "card",
  "customer": {
    "name": "João Silva",
    "email": "joao@example.com",
    "document": "12345678909"
  },
  "card": {
    "number": "4111111111111111",
    "cvv": "123",
    "expiration_month": "12",
    "expiration_year": "2028",
    "installments": 1,
    "save_card": true
  }
}

Para reutilizar um cartão tokenizado, substitua os campos do cartão pelo token:

{
  "card": {
    "token": "tok_a1b2c3d4e5f6",
    "installments": 1
  }
}

Para forçar um gateway específico, inclua process_on_gateway:

{
  "process_on_gateway": "pagarme"
}

Códigos de resposta

HTTPSignificado
201 CreatedAprovado dentro do time_to_wait_sync configurado
202 AcceptedProcessamento em andamento — acompanhe via webhook ou polling
500Falhou em todas as tentativas configuradas

O backend usa coroutines para processar o pagamento em paralelo à requisição. Se o gateway não responder dentro do time_to_wait_sync (padrão 5s), o status 202 é retornado imediatamente e o resultado final chega via webhook.

Resposta (201 ou 202)

{
  "status": "approved",
  "transaction_id": "019ddb56-fbe3-72e1-9f3c-8d0b2faf8f73",
  "amount": 15000,
  "message": "Payment approved",
  "attempts": 1,
  "payment_method": "card",
  "vault_token": "tok_a1b2c3d4e5f6",
  "request_time": "1.23s",
  "created_at": "2026-04-30T01:23:45+00:00",
  "updated_at": "2026-04-30T01:23:46+00:00",
  "transactions": [
    {
      "attempt": 1,
      "gateway": "pagarme",
      "status": "approved",
      "holder_name": "JOAO SILVA",
      "brand": "visa",
      "last_4_digits": "1111",
      "installments": 1,
      "response_code": "00",
      "gateway_message": "Transação aprovada",
      "soft_descriptor": null,
      "request_time": "1.23s"
    }
  ],
  "card": {
    "brand": "visa",
    "last_4_digits": "1111",
    "authorization_nsu": "123456",
    "authorization_code": "654321",
    "soft_descriptor": null,
    "response_code": "00",
    "gateway_message": "Transação aprovada"
  },
  "webhooks": []
}

Criar pagamento — PIX

POST /api/v1/payments/pix — requer X-Client-ID + X-API-Key. O campo payment_method é injetado automaticamente pelo backend.

POST /api/v1/payments/pix
Content-Type: application/json
X-Client-ID: client_...
X-API-Key: sk_...
Idempotency-Key: ORD-PIX-2026-999  (opcional)
{
  "merchant_order_id": "ORD-PIX-2026-999",
  "amount": 5000,
  "currency": "BRL",
  "customer": {
    "name": "Maria Santos",
    "email": "maria@example.com",
    "document": "98765432100"
  }
}

Resposta PIX

O objeto pix contém tudo que é necessário para renderizar o QR ao cliente:

{
  "status": "pending",
  "transaction_id": "019ddb60-6f6e-72ee-99ff-a75b60ce6d87",
  "amount": 5000,
  "payment_method": "pix",
  "pix": {
    "qr_code": "00020126580014br.gov.bcb.pix...",
    "qr_code_url": "data:image/png;base64,...",
    "qr_copy_paste": "00020126580014br.gov.bcb.pix...",
    "expiration_at": "2026-04-30T02:23:45+00:00"
  },
  "webhooks": []
}
CampoUso
qr_codeString EMV — copiar e colar
qr_code_urlData URL da imagem do QR — renderizar com <img>
qr_copy_pasteAlias de qr_code para compatibilidade
expiration_atQuando o QR expira — exiba countdown ao usuário

Recomendamos aguardar o webhook de approved em vez de fazer polling. Se o usuário fechar a tela, armazene o transaction_id e consulte o status sob demanda via GET /user/payments/{id}.


Listar pagamentos

Disponível em dois contextos com autenticação diferente:

RotaAuthContexto
GET /api/v1/paymentsX-API-KeyIntegração servidor-a-servidor
GET /api/v1/user/paymentsBearer JWTPainel administrativo

Ambas retornam o mesmo shape paginado e aceitam os mesmos filtros:

ParâmetroTipoDescrição
start_dateYYYY-MM-DDData inicial (criação)
end_dateYYYY-MM-DDData final (criação)
statuspending|approved|failed|refundedStatus da transação
payment_methodpix|card|billetMétodo de pagamento
gatewaypagarme|safe2pay|picpayGateway processador
amount_frominteiro (centavos)Valor mínimo
amount_tointeiro (centavos)Valor máximo
transaction_typepayment|withdrawTipo de transação
per_pageinteiroItens por página (padrão 15)
pageinteiroPágina atual

Resposta:

{
  "data": [ /* array de PaymentResource */ ],
  "meta": {
    "current_page": 1,
    "per_page": 15,
    "total": 142,
    "last_page": 10
  }
}

Buscar pagamento por ID

GET /api/v1/user/payments/{id} — requer Bearer JWT.

curl https://dev.plugtopay.com/api/v1/user/payments/019ddb56-fbe3-72e1-9f3c-8d0b2faf8f73 \
  -H "Authorization: Bearer eyJ..."

Retorna um único PaymentResource com o mesmo shape da listagem, incluindo o array webhooks com as tentativas de entrega associadas à transação.

On this page