Processing your request, please wait...

    Referência da API — Pagamentos

    Endpoints /integrated-payment e /integrated-payment/status, com exemplos em 6 linguagens

    Sobre esta referência

    Esta página documenta, endpoint a endpoint, a criação de cobranças PIX e a consulta de status. Todos os campos, exemplos de resposta e mensagens de erro abaixo foram verificados ao vivo contra a API de produção em 19/07/2026 (cobranças reais de R$ 10,00, R$ 25,00 e R$ 50,00) e batem com a especificação OpenAPI usada em produção (/api-docs, versão 3.5) — em caso de qualquer divergência, a especificação Swagger é sempre a fonte de verdade.

    Autenticação: todos os endpoints abaixo usam o parâmetro code (query em GET, corpo JSON em POST) — não é Basic Auth. Veja a página de Autenticação para detalhes. URL base usada nos exemplos: https://blackrocket.space/api.

    ⚠️ Sempre envie o header Accept: application/json. Vários endpoints validam parâmetros obrigatórios (code, value, ...) com o validador padrão do Laravel. Se a requisição não enviar esse header e um parâmetro obrigatório estiver faltando, a API retorna um redirect HTML 302 para a raiz do site em vez de um erro JSON — isso foi reproduzido ao vivo em /integrated-payment ao omitir code. Todos os exemplos de código abaixo já enviam esse header.

    GET/integrated-payment

    Cria um link/QRCode de cobrança PIX com valor pré-definido. Quando qrprint=true, a resposta é a imagem do QRCode (image/png) em vez de JSON. Limite de taxa: 60 requisições por minuto (verificado ao vivo via headers X-RateLimit-* em 19/07/2026).

    Identificação do pagador (KYC) é obrigatória na prática. Mesmo que a validação da própria API não rejeite a requisição por falta desse dado, o PSP upstream (Eulen/DePix) rejeita a cobrança com 422 a menos que o pagador já seja conhecido (tenha um EUID cadastrado) ou que endUserTaxNumber seja informado. Veja o parâmetro abaixo e os exemplos de erro 422.

    Parâmetros (query string)

    ParâmetroTipoObrigatórioDescrição
    codestringSimSeu código de integração (API). Se ausente, com Accept: application/json retorna 422; sem esse header, retorna um redirect HTML 302.
    valuenumberSimValor em REAIS (BRL), não centavos (ex.: 10 = R$ 10,00) — a API multiplica por 100 internamente. Mínimo de R$ 2,00 por cobrança.
    descriptionstringNãoDescrição da cobrança.
    qrprintbooleanNãoSe true, retorna a imagem do QRCode diretamente em vez de JSON.
    thirdwalletstringNãoEndereço Liquid Network customizado para receber o pagamento, no lugar da carteira padrão associada ao code. Aviso crítico: a plataforma não é responsável por perdas causadas por endereço incorreto — transações na Liquid Network não podem ser revertidas.
    endUserTaxNumberstringNão (mas necessário na prática)CPF/CNPJ do pagador (somente dígitos) ou um EUID DePix já existente (EU...). Usado para o KYC obrigatório do PSP upstream — sem ele, pagadores não cadastrados recebem 422.
    webhookstring ("1", "true", "0", "false")NãoAtiva o modo de webhook genérico quando 1 ou true.
    response_urlstring (URI)NãoURL do seu listener (HTTPS em produção). Recebe um POST quando o pagamento é confirmado.
    detailsobjectNãoMetadata customizada. Fica armazenada e é ecoada em details_transaction no callback.

    Resposta de sucesso (200)

    Resposta real, capturada em produção (cobrança de R$ 10,00, 19/07/2026). Note que id, qrCopyPaste e qrImageUrl ficam aninhados em pix.data.response, não no nível raiz.

    {
      "customer": {
        "nome": null,
        "email": null,
        "telefone": null,
        "cpf_cnpj": null,
        "id": null,
        "liquid_address_short_cut": "lq1qqv...l59ky8"
      },
      "user_by": null,
      "pix": {
        "success": true,
        "data": {
          "response": {
            "id": "019f7bd84a99797a88b617b0be04790d",
            "qrCopyPaste": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/a9d7f9ba144040e3885442c2ca4efb845204000053039865802BR5909Transfero6014Rio de Janeiro62290525ISP019F7BD84A99797A88B6176304CEC3",
            "qrImageUrl": "https://resources.eulen.app/qr/pix/019f7bd84a99797a88b617b0be04790d"
          },
          "async": false
        }
      },
      "reais": "10.00",
      "depixfees": "0.00",
      "delayDepixInHours": null,
      "eulenEndUserTaxNumber": "00550235175",
      "eulenMerchantId": null,
      "publicAlertCredit": false
    }

    qrImageUrl aponta para o domínio do PSP (resources.eulen.app), não para esta plataforma.

    Para obter a imagem do QRCode diretamente:

    # qrprint=true retorna a imagem do QRCode (image/png) em vez de JSON
    curl -G "https://blackrocket.space/api/integrated-payment" \
      --data-urlencode "code=SEU_CODIGO" \
      --data-urlencode "value=10" \
      --data-urlencode "qrprint=true" \
      -o qrcode.png

    Erros

    StatusQuando ocorre
    400value ausente ou inválido. Formato error (não success/message): {"error": "Value (amount) is required and must be a positive number"}.
    404code sem permanent_link correspondente — {"error": "Invalid integrate code"} — ou wallet ausente — {"error": "Wallet not found"}.
    422Duas formas possíveis: (a) code ausente, com Accept: application/json{"message": "The given data was invalid.", "errors": {"code": ["The code field is required."]}}; (b) valor abaixo do mínimo de R$ 2,00, mensagem sempre em português independentemente de Accept-Language{"success": false, "message": "Erro de validação.", "errors": {"value": ["O valor mínimo para gerar um boleto é de R$ 2,00."]}}; (c) PSP rejeita por falta de KYC — {"success": false, "message": "EUID or end-user tax number is required to create a deposit", ...}.
    429Limite de 60 requisições/minuto excedido. {"message": "Too Many Attempts."}.
    500Erro interno do servidor.

    Exemplos de código

    cURL
    curl -G "https://blackrocket.space/api/integrated-payment" \
      -H "Accept: application/json" \
      --data-urlencode "code=SEU_CODIGO" \
      --data-urlencode "value=10" \
      --data-urlencode "description=Pedido 1234" \
      --data-urlencode "endUserTaxNumber=00550235175"
    PHP
    <?php
    
    $params = http_build_query([
        'code'              => 'SEU_CODIGO',
        'value'             => 10, // reais, não centavos: 10 = R$ 10,00
        'description'       => 'Pedido 1234',
        'endUserTaxNumber'  => '00550235175', // CPF/CNPJ do pagador ou EUID DePix existente
    ]);
    
    $ch = curl_init("https://blackrocket.space/api/integrated-payment?{$params}");
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => ['Accept: application/json'], // evita redirect HTML 302 em caso de erro
    ]);
    $response = curl_exec($ch);
    curl_close($ch);
    
    $data = json_decode($response, true);
    
    // Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    $pix = $data['pix']['data']['response'];
    echo $pix['id'] . ' — ' . $pix['qrCopyPaste'];
    JavaScript (fetch)
    const params = new URLSearchParams({
      code: 'SEU_CODIGO',
      value: '10', // reais, não centavos: 10 = R$ 10,00
      description: 'Pedido 1234',
      endUserTaxNumber: '00550235175', // CPF/CNPJ do pagador ou EUID DePix existente
    });
    
    const response = await fetch(`https://blackrocket.space/api/integrated-payment?${params}`, {
      headers: { Accept: 'application/json' }, // evita redirect HTML 302 em caso de erro
    });
    const data = await response.json();
    
    // Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    const { id, qrCopyPaste, qrImageUrl } = data.pix.data.response;
    console.log(id, qrCopyPaste, qrImageUrl);
    TypeScript
    interface IntegratedPaymentResponse {
      customer: {
        nome: string | null;
        email: string | null;
        telefone: string | null;
        cpf_cnpj: string | null;
        id: number | null;
        liquid_address_short_cut: string;
      };
      user_by: string | null;
      pix: {
        success: boolean;
        data: {
          response: {
            id: string;
            qrCopyPaste: string;
            qrImageUrl: string;
          };
          async: boolean;
        };
      };
      reais: string;
      depixfees: string;
      delayDepixInHours: number | null;
      eulenEndUserTaxNumber: string | null;
      eulenMerchantId: string | null;
      publicAlertCredit: boolean;
    }
    
    const params = new URLSearchParams({
      code: 'SEU_CODIGO',
      value: '10', // reais, não centavos: 10 = R$ 10,00
      description: 'Pedido 1234',
      endUserTaxNumber: '00550235175',
    });
    
    const response = await fetch(`https://blackrocket.space/api/integrated-payment?${params}`, {
      headers: { Accept: 'application/json' },
    });
    const data: IntegratedPaymentResponse = await response.json();
    
    // Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    const { id, qrCopyPaste, qrImageUrl } = data.pix.data.response;
    Python (requests)
    import requests
    
    params = {
        "code": "SEU_CODIGO",
        "value": 10,  # reais, não centavos: 10 = R$ 10,00
        "description": "Pedido 1234",
        "endUserTaxNumber": "00550235175",  # CPF/CNPJ do pagador ou EUID DePix existente
    }
    
    response = requests.get(
        "https://blackrocket.space/api/integrated-payment",
        params=params,
        headers={"Accept": "application/json"},  # evita redirect HTML 302 em caso de erro
    )
    data = response.json()
    
    # Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    pix = data["pix"]["data"]["response"]
    print(pix["id"], pix["qrCopyPaste"])
    Java (java.net.http)
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://blackrocket.space/api/integrated-payment?code=SEU_CODIGO&value=10&description=Pedido+1234&endUserTaxNumber=00550235175"))
            .header("Accept", "application/json") // evita redirect HTML 302 em caso de erro
            .GET()
            .build();
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    // Os campos úteis ficam em pix.data.response.{id,qrCopyPaste,qrImageUrl}

    POST/integrated-payment

    Mesmo comportamento do GET, com os parâmetros enviados como corpo JSON e a mesma resposta aninhada em pix.data.response. Retorna sempre JSON (não há modo qrprint no POST). Limite de taxa: 60 requisições por minuto.

    Ao habilitar o webhook genérico (webhook: 1 + response_url), a plataforma faz o POST no seu response_url quando o pagamento é confirmado — é a plataforma que chama seu endpoint, não o contrário. O corpo desse callback segue o mesmo formato do payload documentado em /webhooks/deposit_v2, e a metadata enviada em details é ecoada em details_transaction. Veja um exemplo de endpoint receptor na página de Webhooks.

    Corpo da requisição (JSON)

    CampoTipoObrigatórioDescrição
    codestringSimSeu código de integração (API).
    valuenumberSimValor em REAIS (BRL), não centavos (ex.: 10 = R$ 10,00; 12.10 = R$ 12,10). Mínimo de R$ 2,00.
    descriptionstringNãoDescrição da cobrança.
    endUserTaxNumberstringNão (mas necessário na prática)CPF/CNPJ do pagador (somente dígitos) ou EUID DePix existente. Sem isso, o PSP upstream pode rejeitar com 422 por falta de KYC.
    thirdwalletstringNãoEndereço Liquid Network customizado. Mesmo aviso de irreversibilidade do GET acima.
    webhookinteger (0/1) ou booleanNãoAtiva o modo de webhook genérico.
    response_urlstring (URI)NãoURL do seu listener. Recebe um POST quando o pagamento é confirmado.
    detailsobjectNãoMetadata customizada, aceita chaves e estruturas arbitrárias. Ecoada em details_transaction no callback.

    Resposta de sucesso (200)

    Resposta real, capturada em produção (cobrança de R$ 25,00, 19/07/2026):

    {
      "customer": {
        "nome": null,
        "email": null,
        "telefone": null,
        "cpf_cnpj": null,
        "id": null,
        "liquid_address_short_cut": "lq1qqv...l59ky8"
      },
      "user_by": null,
      "pix": {
        "success": true,
        "data": {
          "response": {
            "id": "019f7bd854be797a94cd821a7b2404d8",
            "qrCopyPaste": "00020101021226790014br.gov.bcb.pix2557brcode.starkinfra.com/v2/162bf6c761da480b9e27a610acc091925204000053039865802BR5909Transfero6014Rio de Janeiro62290525ISP019F7BD854BE797A94CD8263048F1D",
            "qrImageUrl": "https://resources.eulen.app/qr/pix/019f7bd854be797a94cd821a7b2404d8"
          },
          "async": false
        }
      },
      "reais": "25.00",
      "depixfees": "0.00",
      "delayDepixInHours": null,
      "eulenEndUserTaxNumber": "00550235175",
      "eulenMerchantId": null,
      "publicAlertCredit": false
    }

    Erros

    StatusQuando ocorre
    400value ausente ou inválido: {"error": "Value (amount) is required and must be a positive number"}.
    404code inválido: {"error": "Invalid integrate code"}.
    422Validação (veja o detalhamento completo em GET acima) — inclui o caso de KYC ausente: {"success": false, "message": "EUID or end-user tax number is required to create a deposit", ...}.
    429Limite de 60 requisições/minuto excedido.
    500Erro interno do servidor.

    Exemplos de código

    cURL
    curl -X POST "https://blackrocket.space/api/integrated-payment" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
            "code": "SEU_CODIGO",
            "value": 10,
            "description": "Pedido 1234",
            "endUserTaxNumber": "00550235175",
            "webhook": 1,
            "response_url": "https://seu-sistema.exemplo.com/webhook/pix-pago"
          }'
    PHP
    <?php
    
    $payload = [
        'code'              => 'SEU_CODIGO',
        'value'             => 10, // reais, não centavos: 10 = R$ 10,00
        'description'       => 'Pedido 1234',
        'endUserTaxNumber'  => '00550235175', // CPF/CNPJ do pagador ou EUID DePix existente
        'webhook'           => 1,
        'response_url'      => 'https://seu-sistema.exemplo.com/webhook/pix-pago',
    ];
    
    $ch = curl_init('https://blackrocket.space/api/integrated-payment');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
        CURLOPT_POSTFIELDS     => json_encode($payload),
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    $data = json_decode($response, true);
    
    // Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    $pix = $data['pix']['data']['response'];
    echo $pix['id'] . ' — ' . $pix['qrCopyPaste'];
    JavaScript (fetch)
    const response = await fetch('https://blackrocket.space/api/integrated-payment', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json', // evita redirect HTML 302 em caso de erro
      },
      body: JSON.stringify({
        code: 'SEU_CODIGO',
        value: 10, // reais, não centavos: 10 = R$ 10,00
        description: 'Pedido 1234',
        endUserTaxNumber: '00550235175',
        webhook: 1,
        response_url: 'https://seu-sistema.exemplo.com/webhook/pix-pago',
      }),
    });
    
    const data = await response.json();
    
    // Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    const { id, qrCopyPaste } = data.pix.data.response;
    console.log(id, qrCopyPaste);
    TypeScript
    interface PaymentLinkRequest {
      code: string;
      value: number; // reais, não centavos: 10 = R$ 10,00
      description?: string;
      endUserTaxNumber?: string; // CPF/CNPJ do pagador ou EUID DePix — necessário na prática
      webhook?: 0 | 1 | boolean;
      response_url?: string;
      thirdwallet?: string;
      details?: Record<string, unknown>;
    }
    
    interface IntegratedPaymentResponse {
      customer: Record<string, unknown>;
      user_by: string | null;
      pix: {
        success: boolean;
        data: {
          response: { id: string; qrCopyPaste: string; qrImageUrl: string };
          async: boolean;
        };
      };
      reais: string;
      depixfees: string;
      delayDepixInHours: number | null;
      eulenEndUserTaxNumber: string | null;
      eulenMerchantId: string | null;
      publicAlertCredit: boolean;
    }
    
    const payload: PaymentLinkRequest = {
      code: 'SEU_CODIGO',
      value: 10,
      description: 'Pedido 1234',
      endUserTaxNumber: '00550235175',
      webhook: 1,
      response_url: 'https://seu-sistema.exemplo.com/webhook/pix-pago',
    };
    
    const response = await fetch('https://blackrocket.space/api/integrated-payment', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
      body: JSON.stringify(payload),
    });
    
    const data: IntegratedPaymentResponse = await response.json();
    const { id, qrCopyPaste, qrImageUrl } = data.pix.data.response;
    Python (requests)
    import requests
    
    payload = {
        "code": "SEU_CODIGO",
        "value": 10,  # reais, não centavos: 10 = R$ 10,00
        "description": "Pedido 1234",
        "endUserTaxNumber": "00550235175",
        "webhook": 1,
        "response_url": "https://seu-sistema.exemplo.com/webhook/pix-pago",
    }
    
    response = requests.post(
        "https://blackrocket.space/api/integrated-payment",
        json=payload,
        headers={"Accept": "application/json"},
    )
    data = response.json()
    
    # Os campos úteis ficam aninhados em pix.data.response, não no nível raiz.
    pix = data["pix"]["data"]["response"]
    print(pix["id"], pix["qrCopyPaste"])
    Java (java.net.http)
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    
    String json = """
            {
              "code": "SEU_CODIGO",
              "value": 10,
              "description": "Pedido 1234",
              "endUserTaxNumber": "00550235175",
              "webhook": 1,
              "response_url": "https://seu-sistema.exemplo.com/webhook/pix-pago"
            }""";
    
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://blackrocket.space/api/integrated-payment"))
            .header("Content-Type", "application/json")
            .header("Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    // Os campos úteis ficam em pix.data.response.{id,qrCopyPaste,qrImageUrl}
    // Requer Java 15+ (text blocks). Em versões anteriores, use uma string concatenada.

    POST/integrated-payment/status

    Verifica o status de uma ou mais cobranças de uma vez, a partir dos IDs retornados na criação. A API é stateless — não armazena sessões de cliente. O QRCode é válido por 20 minutos; o intervalo recomendado de verificação é de 10 em 10 minutos. Limite de taxa: 60 requisições por minuto. Este endpoint não exige o parâmetro code — apenas os IDs das transações.

    ⚠️ A resposta é um array JSON puro, na mesma ordem de listIds — não um envelope {"success": ..., "data": {...}}. Uma versão anterior desta documentação descrevia incorretamente um objeto indexado por ID; isso foi corrigido após verificação ao vivo em 19/07/2026.

    Corpo da requisição (JSON)

    CampoTipoObrigatórioDescrição
    listIdsarray de stringSimLista de IDs de transação a verificar (os mesmos id retornados em pix.data.response.id na criação das cobranças).

    Resposta de sucesso (200)

    Resposta real, capturada em produção para duas cobranças pendentes e um ID desconhecido (19/07/2026):

    [
      {
        "depix_id": "019f7bd84a99797a88b617b0be04790d",
        "status": "pending",
        "date": "2026-07-19 19:26:42"
      },
      {
        "depix_id": "019f7bd854be797a94cd821a7b2404d8",
        "status": "pending",
        "date": "2026-07-19 19:26:44"
      },
      {
        "depix_id": "nonexistent_id",
        "status": "not_found",
        "date": null
      }
    ]

    status pode ser paid, pending, refunded, expired, delayed ou not_found (ID desconhecido, date sempre null nesse caso). Quando status é refunded, o item também traz payer, payer_euid e details, além de payer_tax_numer — sim, esse nome de campo tem um erro de digitação real da API (falta o "b" de "number"), mantido de propósito na documentação porque é exatamente o que a API retorna. Exemplo:

    [
      {
        "depix_id": "0197fb09ec7f7dfe94d015f5647aca19",
        "status": "refunded",
        "date": "2026-02-26 12:00:00",
        "payer": "Jane Doe",
        "payer_tax_numer": "12345678901",
        "payer_euid": "EU014794399658321",
        "details": "some transaction detail text"
      }
    ]

    Erros

    StatusQuando ocorre
    401Não autorizado.
    429Limite de 60 requisições/minuto excedido.
    500Erro interno do servidor.

    Exemplos de código

    cURL
    curl -X POST "https://blackrocket.space/api/integrated-payment/status" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
            "listIds": [
              "019f7bd84a99797a88b617b0be04790d",
              "019f7bd854be797a94cd821a7b2404d8"
            ]
          }'
    PHP
    <?php
    
    $payload = [
        'listIds' => [
            '019f7bd84a99797a88b617b0be04790d',
            '019f7bd854be797a94cd821a7b2404d8',
        ],
    ];
    
    $ch = curl_init('https://blackrocket.space/api/integrated-payment/status');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_HTTPHEADER     => ['Content-Type: application/json', 'Accept: application/json'],
        CURLOPT_POSTFIELDS     => json_encode($payload),
    ]);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    // A resposta é um ARRAY JSON puro, na mesma ordem de listIds — não um objeto {success, data}.
    $items = json_decode($response, true);
    foreach ($items as $item) {
        echo "{$item['depix_id']}: {$item['status']} ({$item['date']})\n";
    }
    JavaScript (fetch)
    const response = await fetch('https://blackrocket.space/api/integrated-payment/status', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
      body: JSON.stringify({
        listIds: [
          '019f7bd84a99797a88b617b0be04790d',
          '019f7bd854be797a94cd821a7b2404d8',
        ],
      }),
    });
    
    // A resposta é um ARRAY JSON puro, na mesma ordem de listIds — não um objeto {success, data}.
    const items = await response.json();
    
    for (const { depix_id, status, date } of items) {
      console.log(depix_id, status, date);
    }
    TypeScript
    interface PaymentStatusItem {
      depix_id: string;
      status: 'paid' | 'pending' | 'refunded' | 'expired' | 'delayed' | 'not_found';
      date: string | null;
      details?: string;
      payer?: string;
      // Nome de campo com erro de digitação real da API — mantido como está.
      payer_tax_numer?: string;
      payer_euid?: string;
    }
    
    // A resposta é um ARRAY JSON puro, não um objeto { success, data }.
    type PaymentStatusResponse = PaymentStatusItem[];
    
    const response = await fetch('https://blackrocket.space/api/integrated-payment/status', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
      body: JSON.stringify({
        listIds: [
          '019f7bd84a99797a88b617b0be04790d',
          '019f7bd854be797a94cd821a7b2404d8',
        ],
      }),
    });
    
    const items: PaymentStatusResponse = await response.json();
    Python (requests)
    import requests
    
    payload = {
        "listIds": [
            "019f7bd84a99797a88b617b0be04790d",
            "019f7bd854be797a94cd821a7b2404d8",
        ],
    }
    
    response = requests.post(
        "https://blackrocket.space/api/integrated-payment/status",
        json=payload,
        headers={"Accept": "application/json"},
    )
    
    # A resposta é uma LISTA JSON pura, na mesma ordem de listIds — não um objeto {"success", "data"}.
    items = response.json()
    
    for item in items:
        print(item["depix_id"], item["status"], item["date"])
    Java (java.net.http)
    import java.net.URI;
    import java.net.http.HttpClient;
    import java.net.http.HttpRequest;
    import java.net.http.HttpResponse;
    
    String json = """
            {
              "listIds": [
                "019f7bd84a99797a88b617b0be04790d",
                "019f7bd854be797a94cd821a7b2404d8"
              ]
            }""";
    
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://blackrocket.space/api/integrated-payment/status"))
            .header("Content-Type", "application/json")
            .header("Accept", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
    
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    // A resposta é um array JSON puro, na mesma ordem de listIds.

    Próximos passos