Empresas
Vincular certificado digital
Envia o certificado digital A1 (.pfx / .p12) e a senha da empresa; aceita JSON + Base64 ou multipart.
/openapi/v1/empresas/{empresaId}/certificadoDigitaltoken, timestamp e sign, veja Autenticação.O mesmo caminho aceita duas formas de requisição, selecionadas pelo Content-Type: use JSON + Base64 (esta página) quando você só tem os bytes do certificado; use multipart (seção abaixo) quando tem o certificado como arquivo. Validação e resultado são idênticos nas duas formas. Um envio bem-sucedido substitui o certificado anterior da empresa.
Cabeçalhos
Content-Type* | string | Tipo do corpo |
* Campo obrigatório
Parâmetros de caminho
empresaId* | string | Identificador da empresa |
* Campo obrigatório
Corpo da requisição
senha* | string | Senha do certificado |
arquivoBase64* | string | Certificado em Base64 |
* Campo obrigatório
Sem corpo de resposta
Na forma JSON o corpo participa da assinatura: corpo bruto com CR/LF removidos, como em todo endpoint JSON. Gere Base64 padrão sem quebras de linha.
APP_SECRET="sk_live_9f8e7d6c5b4a"P="/openapi/v1/empresas/1934811222334455/certificadoDigital"TS=$(date +%s)BODY=$(printf '{"senha":"certpass123","arquivoBase64":"%s"}' "$(base64 -w0 uploaded-cert.pfx)")SIGN=$(printf '%s' "${APP_SECRET}${P}${BODY}${TS}" | md5sum | cut -d' ' -f1)curl -X POST "https://api.v2.tffiscal.com${P}" \-H "token: ${APP_SECRET}" -H "timestamp: ${TS}" -H "sign: ${SIGN}" \-H "Content-Type: application/json" --data-binary "${BODY}"
Envie Content-Type: multipart/form-data com os dois campos de formulário abaixo. Na assinatura o corpo é a string vazia: sign = MD5(token + path + timestamp).
APP_SECRET="sk_live_9f8e7d6c5b4a"P="/openapi/v1/empresas/1934811222334455/certificadoDigital"TS=$(date +%s)SIGN=$(printf '%s' "${APP_SECRET}${P}${TS}" | md5sum | cut -d' ' -f1)curl -X POST "https://api.v2.tffiscal.com${P}" \-H "token: ${APP_SECRET}" -H "timestamp: ${TS}" -H "sign: ${SIGN}" \-F "senha=certpass123" -F "arquivo=@uploaded-cert.pfx"
Campos do formulário
senha* | text | Senha do certificado |
arquivo* | file | Arquivo do certificado |
* Campo obrigatório
Sucesso é HTTP 200 sem corpo. Nenhum endpoint devolve o conteúdo do certificado nem a senha.
A empresa só passa a emitir quando, além do certificado, a aprovação da operação estiver concluída; veja o ciclo de vida em Empresas.
Content-TypeForma da requisição
| Valores | Significado |
|---|---|
| application/json | JSON + Base64: senha e arquivoBase64 no corpo; o corpo entra na assinatura |
| multipart/form-data | Multipart: campos de formulário senha e arquivo; o corpo é a string vazia na assinatura |
| Código | HTTP | |
|---|---|---|
| 10003000 | 404 | empresaId não existe ou não pertence a esta aplicação. |
| 10003035 | 400 | Base64 inválido ou arquivo acima de 1MB após decodificar. Só na forma JSON. |
| 10003008 | 400 | Senha do certificado não confere. Verifique a senha. |
| 10003010 | 400 | CNPJ do certificado não corresponde ao da empresa. Use o certificado correto. |
| 10003011 | 400 | Certificado expirado. Use um certificado válido. |
| 10003012 | 400 | Certificado idêntico ao atualmente ativo na empresa. |
