# Gravar segundo fator

`PUT /v1/cofre/certificados/{certificado_id}/autenticacoes`

Cadastra a chave do autenticador (o texto base32 do QR code) de um tribunal e sistema. No PJe o mesmo código vale para todos os tribunais PJe e para o Domicílio, então uma chave atualiza todos de uma vez — a resposta lista quais.

## Parâmetros

| Nome | Onde | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
| `certificado_id` | caminho | uuid | sim | Id do certificado |

## Corpo (`application/json`)

| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| `segredo` | texto | sim | Chave base32 do autenticador |
| `sistema` | texto | sim | Sistema do tribunal (ex.: `PJE`) |
| `tribunal` | texto | sim | Código do tribunal, como em `/v1/tribunais` (ex.: `8.05`) |

## Respostas

| HTTP | Significa |
|---|---|
| 200 | OK |
| 422 | Corpo ou parâmetros com formato inválido (`detail` lista os campos) |

### Exemplo de resposta

```json
{
  "autenticacoes_atualizadas": [
    "0.00:DOMICILIO",
    "8.05:PJE",
    "8.19:PJE"
  ]
}
```

## Erros

Recusas vêm como `{"detail": {"erro": "<código>", "mensagem": "…"}}`.

| HTTP | `erro` | Significa |
|---|---|---|
| 401 | — | Chave ausente ou inválida |
| 404 | `nao_encontrado` | A Conexão não existe nesta Conta (ou foi revogada) |
| 422 | `dados_invalidos` | Chave fora do formato base32 ou sistema sem segundo fator |
| 502 | `cofre_indisponivel` | O cofre não respondeu agora. Tente de novo em instantes |

## Exemplos de requisição

### Bash

```bash
curl -X PUT 'https://sync.lops.com.br/v1/cofre/certificados/5b1e7c2a-3f4d-4c8e-9a1b-2d6f0e8c7a15/autenticacoes' \
  -H "Authorization: Bearer $SYNC_CHAVE" \
  -H 'Content-Type: application/json' \
  -d '{"tribunal":"8.05","sistema":"PJE","segredo":"JBSWY3DPEHPK3PXP"}'
```

### JavaScript

```javascript
const resposta = await fetch("https://sync.lops.com.br/v1/cofre/certificados/5b1e7c2a-3f4d-4c8e-9a1b-2d6f0e8c7a15/autenticacoes", {
  method: "PUT",
  headers: {
    Authorization: `Bearer ${process.env.SYNC_CHAVE}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "tribunal": "8.05",
    "sistema": "PJE",
    "segredo": "JBSWY3DPEHPK3PXP"
  }),
});
console.log(resposta.status, await resposta.json());
```

### Python

```python
import os

import requests

resposta = requests.put(
    "https://sync.lops.com.br/v1/cofre/certificados/5b1e7c2a-3f4d-4c8e-9a1b-2d6f0e8c7a15/autenticacoes",
    headers={"Authorization": f"Bearer {os.environ['SYNC_CHAVE']}"},
    json={
        "tribunal": "8.05",
        "sistema": "PJE",
        "segredo": "JBSWY3DPEHPK3PXP",
    },
)
print(resposta.status_code, resposta.json())
```

### PHP

```php
<?php
$ch = curl_init('https://sync.lops.com.br/v1/cofre/certificados/5b1e7c2a-3f4d-4c8e-9a1b-2d6f0e8c7a15/autenticacoes');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST => 'PUT',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . getenv('SYNC_CHAVE'),
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'tribunal' => '8.05',
        'sistema' => 'PJE',
        'segredo' => 'JBSWY3DPEHPK3PXP',
    ]),
]);
$corpo = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
var_dump($status, json_decode($corpo, true));
```
