# Autenticação (/docs/cartao/authentication)



<QuickLinks>
  <QuickLink href="/docs/cartao/endpoints/token/post_token" title="Obter token de API" method="POST" path="/token" />

  <QuickLink href="/docs/cartao/getting-started" title="Primeiros passos" />

  <QuickLink href="/docs/cartao/test-cards" title="Cartões de teste" />

  <QuickLink href="/docs/cartao/webhooks" title="Webhooks" />
</QuickLinks>

A autenticação da **API Cartão** acontece em duas camadas que trabalham juntas:

1. **Mutual TLS (mTLS)**: toda conexão com a API usa um certificado de cliente emitido pela PayZu, garantindo a identidade tanto do servidor quanto do cliente durante a comunicação.
2. **Token JWT**: sobre a conexão mTLS, você obtém um `access_token` via [`POST /token`](/docs/cartao/endpoints/token/post_token) e o envia no header `Authorization: Bearer` em todas as demais rotas.

## Ambientes [#ambientes]

| Ambiente | URL base                          |
| -------- | --------------------------------- |
| Produção | `https://api.payzu.io/v1`         |
| Sandbox  | `https://api.sandbox.payzu.io/v1` |

## Mutual TLS [#mutual-tls]

Antes de qualquer chamada, instale o certificado de cliente fornecido pela equipe PayZu e configure seu sistema para utilizá-lo em **todas** as chamadas à API, sempre por HTTPS.

No `curl`, o certificado entra pelas flags `--cert` (certificado do cliente), `--key` (chave privada) e `--cacert` (cadeia da autoridade certificadora):

```bash
curl --request GET \
     --url https://api.sandbox.payzu.io/v1/charges \
     --header 'accept: application/json' \
     --cert cliente.crt \
     --key cliente.key \
     --cacert ca.pem
```

## Obter o token [#obter-o-token]

A rota [`POST /token`](/docs/cartao/endpoints/token/post_token) retorna um token JWT para autenticação das rotas. Ela usa **Basic Auth** (seu `client_id` como usuário e `client_secret` como senha), sempre sobre a conexão mTLS, e recebe o `grant_type` `client_credentials` no corpo:

```bash
curl --request POST \
     --url https://api.sandbox.payzu.io/v1/token \
     --user "$CLIENT_ID:$CLIENT_SECRET" \
     --header 'content-type: application/json' \
     --cert cliente.crt \
     --key cliente.key \
     --cacert ca.pem \
     --data '{ "grant_type": "client_credentials" }'
```

Em produção, troque a base URL para `https://api.payzu.io/v1`.

A resposta traz o token e o tempo de expiração:

```json
{
  "access_token": "string",
  "token_type": "string",
  "expires_in": 0
}
```

| Campo          | Para que serve                                             |
| -------------- | ---------------------------------------------------------- |
| `access_token` | Token JWT usado no header `Authorization` das demais rotas |
| `token_type`   | Tipo do token retornado                                    |
| `expires_in`   | Tempo de validade do token, em segundos                    |

## Chamadas autenticadas [#chamadas-autenticadas]

Depois de obter o token, toda rota da API recebe o header `Authorization: Bearer`, sempre sobre a mesma configuração de mTLS:

```bash
curl --request GET \
     --url https://api.sandbox.payzu.io/v1/charges \
     --header 'accept: application/json' \
     --header "Authorization: Bearer $ACCESS_TOKEN" \
     --cert cliente.crt \
     --key cliente.key \
     --cacert ca.pem
```

<Callout type="warn">
  Nunca exponha o `client_secret` nem a chave privada do certificado de cliente. Não os envie ao front-end, não os suba em repositório e guarde-os em um cofre de segredos. Se houver suspeita de comprometimento, entre em contato com a equipe PayZu para substituição.
</Callout>

## Próximos passos [#próximos-passos]

<QuickLinks>
  <QuickLink href="/docs/cartao/endpoints/token/post_token" title="Obter token de API" method="POST" path="/token" />

  <QuickLink href="/docs/cartao/endpoints/charges/post_charges" title="Criar cobrança" method="POST" path="/charges" />

  <QuickLink href="/docs/cartao/test-cards" title="Cartões de teste" />
</QuickLinks>
