Skip to main content
GET
/
api
/
v1
/
partners
/
{partnerId}
/
vouchers
cURL
# Página 1: sem cursor.
curl -G 'https://certificados.zapsign.com.br/api/v1/partners/PRT_ABC123/vouchers' \
  -H 'Authorization: Bearer czk_live_SUA_CHAVE' \
  --data-urlencode 'status=issued' \
  --data-urlencode 'created_after=2026-05-01T00:00:00Z' \
  --data-urlencode 'limit=20'

# Página 2: usar o voucher_id do último item da página 1 em `after`.
curl -G 'https://certificados.zapsign.com.br/api/v1/partners/PRT_ABC123/vouchers' \
  -H 'Authorization: Bearer czk_live_SUA_CHAVE' \
  --data-urlencode 'status=issued' \
  --data-urlencode 'created_after=2026-05-01T00:00:00Z' \
  --data-urlencode 'limit=20' \
  --data-urlencode 'after=ZS_ECPF_A1_01HXYZABCDEFGHJKMNPQRSTV'
async function listPage(after) {
const params = new URLSearchParams();
params.append('status', 'issued');
params.append('created_after', '2026-05-01T00:00:00Z');
params.append('limit', '20');
if (after) params.append('after', after);

const res = await fetch(
`https://certificados.zapsign.com.br/api/v1/partners/PRT_ABC123/vouchers?${params}`,
{
headers: { Authorization: 'Bearer czk_live_SUA_CHAVE' },
},
);
return res.json();
}

// Iterar enquanto houver mais páginas.
let cursor;
do {
const { object, has_more, data } = await listPage(cursor);
// ... processar `data` aqui ...
cursor = has_more ? data[data.length - 1].voucher_id : undefined;
} while (cursor);
import requests

def list_page(after=None):
params = [
('status', 'issued'),
('created_after', '2026-05-01T00:00:00Z'),
('limit', '20'),
]
if after:
params.append(('after', after))
res = requests.get(
'https://certificados.zapsign.com.br/api/v1/partners/PRT_ABC123/vouchers',
headers={'Authorization': 'Bearer czk_live_SUA_CHAVE'},
params=params,
)
return res.json()

# Iterar enquanto houver mais páginas.
cursor = None
while True:
body = list_page(cursor)
# ... processar body['data'] aqui ...
if not body['has_more']:
break
cursor = body['data'][-1]['voucher_id']
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://certificados.zapsign.com.br/api/v1/partners/{partnerId}/vouchers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
package main

import (
"fmt"
"net/http"
"io"
)

func main() {

url := "https://certificados.zapsign.com.br/api/v1/partners/{partnerId}/vouchers"

req, _ := http.NewRequest("GET", url, nil)

req.Header.Add("Authorization", "Bearer <token>")

res, _ := http.DefaultClient.Do(req)

defer res.Body.Close()
body, _ := io.ReadAll(res.Body)

fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://certificados.zapsign.com.br/api/v1/partners/{partnerId}/vouchers")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://certificados.zapsign.com.br/api/v1/partners/{partnerId}/vouchers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
{
  "object": "list",
  "has_more": true,
  "data": [
    {
      "voucher_id": "ZS_ECPF_A1_01HXYZABCDEFGHJKMNPQRSTV",
      "certificate_type": "ecpf_a1",
      "status": "issued",
      "issued_at": "2026-05-14T10:30:00.000Z",
      "redeemed_at": null,
      "decline_reason": null,
      "reference_id": "PEDIDO_12345",
      "created_at": "2026-05-14T10:30:00.000Z"
    },
    {
      "voucher_id": "ZS_ECNPJ_A1_01HXYZABCDEFGHJKMNPQRST0",
      "certificate_type": "ecnpj_a1",
      "status": "redeemed",
      "issued_at": "2026-05-13T08:00:00.000Z",
      "redeemed_at": "2026-05-13T09:15:00.000Z",
      "decline_reason": null,
      "reference_id": null,
      "created_at": "2026-05-13T08:00:00.000Z"
    }
  ]
}

Authorizations

Authorization
string
header
required

Token Bearer com prefixo czk_live_. Gere a chave no portal em https://certificados.zapsign.com.br/reseller/api-keys.

Path Parameters

partnerId
string
required

Identificador público do parceiro (Partner ID), exibido no portal.

Required string length: 1 - 64

Query Parameters

status
enum<string>[]

Filtra por estado do voucher.

Estado atual do voucher no ciclo de vida.

Available options:
issued,
redeemed,
expired,
declined
created_after
string<date-time>

Limite inferior (inclusivo) de created_at. Formato ISO-8601 com timezone explícito (Z ou ±HH:MM). Datas sem hora ou sem timezone são rejeitadas com invalid_filter.

created_before
string<date-time>

Limite superior (inclusivo) de created_at. Mesma regra de formato de created_after.

limit
integer
default:20

Quantos itens devolver por página. Mínimo 1, máximo 100. Quando omitido, o servidor usa 20.

Required range: 1 <= x <= 100
after
string

Cursor exclusivo: voucher_id da última linha da página atual. A próxima página começa logo depois desse id (ele NÃO é repetido). Mutuamente exclusivo com before. Um id desconhecido devolve data: [] sem erro.

Minimum string length: 1
before
string

Cursor exclusivo no sentido inverso: voucher_id do primeiro item da página atual. A página anterior termina logo antes desse id (ele NÃO é repetido). Mutuamente exclusivo com after. Um id desconhecido devolve data: [] sem erro.

Minimum string length: 1

Response

Página de vouchers do parceiro, ordenada por created_at decrescente.

Página de vouchers do parceiro. Envelope { object: "list", has_more, data }.

object
string
required

Discriminador do envelope. Sempre "list".

Allowed value: "list"
Example:

"list"

has_more
boolean
required

Indica se ainda existem páginas no sentido em que o cliente paginou. Quando true, use o voucher_id do último item de data em ?after= para a próxima página.

Example:

true

data
object[]
required

Vouchers da página atual, ordenados por created_at decrescente. Vazia quando não há resultados.