Empresas
Vincular certificado digital
Envía el certificado digital A1 (.pfx / .p12) y la contraseña de la empresa; acepta JSON + Base64 o multipart.
/openapi/v1/empresas/{empresaId}/certificadoDigitaltoken, timestamp y sign, vea Autenticación.La misma ruta acepta dos formas de solicitud, seleccionadas por Content-Type: use JSON + Base64 (esta página) cuando solo tenga los bytes del certificado; use multipart (sección más abajo) cuando tenga el certificado como archivo. La validación y el resultado son idénticos en ambas formas. Un envío exitoso reemplaza el certificado anterior de la empresa.
Cabeceras
Content-Type* | string | Tipo del cuerpo |
* Campo obligatorio
Parámetros de ruta
empresaId* | string | Identificador de la empresa |
* Campo obligatorio
Cuerpo de la petición
senha* | string | Contraseña del certificado |
arquivoBase64* | string | Certificado en Base64 |
* Campo obligatorio
Sin cuerpo de respuesta
En la forma JSON el cuerpo forma parte de la firma: cuerpo bruto con CR/LF eliminados, como en todo endpoint JSON. Genere Base64 estándar sin saltos de línea.
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}"
Envíe Content-Type: multipart/form-data con los dos campos de formulario siguientes. En la firma el cuerpo es la cadena vacía: 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 del formulario
senha* | text | Contraseña del certificado |
arquivo* | file | Archivo del certificado |
* Campo obligatorio
El éxito es HTTP 200 sin cuerpo. Ningún endpoint devuelve el contenido del certificado ni la contraseña.
La empresa solo pasa a emitir cuando, además del certificado, la aprobación de operaciones esté completa; vea el ciclo de vida en Empresas.
Content-TypeForma de la solicitud
| Valores | Significado |
|---|---|
| application/json | JSON + Base64: senha y arquivoBase64 en el cuerpo; el cuerpo entra en la firma |
| multipart/form-data | Multipart: campos de formulario senha y arquivo; el cuerpo es la cadena vacía en la firma |
| Código | HTTP | |
|---|---|---|
| 10003000 | 404 | empresaId no existe o no pertenece a esta aplicación. |
| 10003035 | 400 | Base64 inválido o archivo mayor de 1MB tras decodificar. Solo forma JSON. |
| 10003008 | 400 | La contraseña del certificado no coincide. Verifique la contraseña. |
| 10003010 | 400 | El CNPJ del certificado no corresponde a la empresa. Use el certificado correcto. |
| 10003011 | 400 | Certificado expirado. Use un certificado válido. |
| 10003012 | 400 | Certificado idéntico al actualmente activo en la empresa. |
