Certificados CSD
Los Certificados de Sello Digital (CSD) son archivos emitidos por el SAT y es el mecanismo que permiten firmar digitalmente las facturas CFDI. Cada certificado CSD se emite en pares, es decir un archivo de certificado (.cer
) y una llave privada (.key
) componen un par CSD, y ambos archivos deben ser cargados al emisor para poder firmar las facturas.
En fiscalapi, una emisor (persona) puede tener múltiples pares de certificados CSD asociados. Este modelo permite gestionar tanto la carga del certificado como su llave privada correspondiente.
Modelo TaxFile
El modelo TaxFile representa un componente individual de un par CSD - ya sea el certificado (.cer
) o la llave privada (.key
), pero no ambos al mismo tiempo. Cada TaxFile tiene un fileType
que indica si es un certificado o una llave privada, y un sequence
que se incrementa en uno por cada par de certificado y llave privada cargado al emisor.
Modelo
- Name
personId
- Type
- string
- required
- Description
Id de la persona propietaria del certificado.
- Name
tin
- Type
- string
- required
- Description
RFC del propietario del certificado. Debe coincidir con el RFC del certificado.
- Name
base64File
- Type
- string
- required
- Description
Archivo certificado o llave privada en formato base64. Para certificados debe ser el archivo .cer codificado en base64, para llaves privadas debe ser el archivo .key codificado en base64.
- Name
fileType
- Type
- integer
- required
- Description
Tipo de archivo que se está enviando.
- Type
- enum:
- Values
- 01
- Name
password
- Type
- string
- required
- Description
Contraseña de la llave privada. Independientemente si se envía un certificado o una llave privada, siempre se debe enviar la contraseña de la llave privada.
- Name
validFrom
- Type
- date?
- Description
Fecha de inicio de vigencia del certificado o llave privada. Calculado automáticamente.
- Name
validTo
- Type
- date?
- Description
Fecha de fin de vigencia del certificado o llave privada. Calculado automáticamente.
- Name
sequence
- Type
- integer?
- Description
Numero de secuencia que identifica el par entre certificado y llave privada. Sólo con fines informativos.
Listar certificados
Este endpoint te permite listar todos los certificados de todas las personas de su cuenta de fiscalapi.
Query parameters
- Name
pageNumber
- Type
- int
- required
- Description
El número de página que se desea recuperar.
Default:1
- Name
pageSize
- Type
- int
- required
- Description
Valor entre 1 y 50 inclusivo para indicar la cantidad de registros devueltos por página.
Default:10
Request
curl --location 'https://test.fiscalapi.com/api/v4/tax-files?PageNumber=1&PageSize=50' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>'
Response
{
"data": {
"items": [
{
"personId": "bfb7fc25-5b16-42d3-b67c-fd784e3e7461",
"tin": "EKU9003173C9",
"base64File": "base_64_file...",
"fileType": 0,
"password": "12345678a",
"validFrom": "2023-05-17T23:43:51.0000000",
"validTo": "2027-05-17T23:43:51.0000000",
"sequence": 1,
"id": "7626304b-47a9-4a42-82f7-43c7d4ed6081",
"createdAt": "2025-01-11T13:55:57.5333153",
"updatedAt": "2025-01-11T13:55:57.5333163"
},
{
"personId": "bfb7fc25-5b16-42d3-b67c-fd784e3e7461",
"tin": "EKU9003173C9",
"base64File": "base_64_file...",
"fileType": 1,
"password": "12345678a",
"validFrom": "2023-05-17T23:43:51.0000000",
"validTo": "2027-05-17T23:43:51.0000000",
"sequence": 1,
"id": "f09554bb-0289-42fd-96c0-46f35ecbc2f4",
"createdAt": "2025-01-11T13:56:05.8341325",
"updatedAt": "2025-01-11T13:56:05.8341328"
}
],
"pageNumber": 1,
"totalPages": 4,
"totalCount": 8,
"hasPreviousPage": false,
"hasNextPage": true
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Obtener certificado por ID
Este endpoint le permite obtener un certificado por su ID.
Request
curl --location 'https://test.fiscalapi.com/api/v4/tax-files/7626304b-47a9-4a42-82f7-43c7d4ed6081' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>'
Response
{
"data": {
"personId": "bfb7fc25-5b16-42d3-b67c-fd784e3e7461",
"tin": "EKU9003173C9",
"base64File": "base_64_file...",
"fileType": 0,
"password": "12345678a",
"validFrom": "2023-05-17T23:43:51.0000000",
"validTo": "2027-05-17T23:43:51.0000000",
"sequence": 1,
"id": "7626304b-47a9-4a42-82f7-43c7d4ed6081",
"createdAt": "2025-01-11T13:55:57.5333153",
"updatedAt": "2025-01-11T13:55:57.5333163"
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Obtener certificados por defecto
Este endpoint te devuelve el último par (.cer y .key) de certificados CSD cargados vigentes y válidos para una persona (emisor o receptor). Este par de certificados son los que se utilizarán por defecto para firmar las facturas cuando las peticiones se realizan por referencias.
Request
curl --location 'https://test.fiscalapi.com/api/v4/tax-files/123/default-values' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>'
Response
{
"data": [
{
"personId": "1",
"tin": "JUFA7608212V6",
"base64File": "base_64_file...",
"fileType": 0,
"password": "12345678a",
"validFrom": "2023-05-18T02:58:56.0000000",
"validTo": "2027-05-18T02:58:56.0000000",
"sequence": 5,
"id": "dc17bc3f-bc5c-4212-8192-99d778fb2bc4",
"createdAt": "2025-01-11T15:40:31.7585889",
"updatedAt": "2025-01-11T15:40:31.7585987"
},
{
"personId": "1",
"tin": "JUFA7608212V6",
"base64File": "base_64_file...",
"fileType": 1,
"password": "12345678a",
"validFrom": "2023-05-18T02:58:56.0000000",
"validTo": "2027-05-18T02:58:56.0000000",
"sequence": 5,
"id": "b4c2ac83-c82c-4e48-bcf3-a60f88fa9a58",
"createdAt": "2025-01-11T15:40:37.2208845",
"updatedAt": "2025-01-11T15:40:37.2208849"
}
],
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Subir certificados
Este endpoint te permite subir los certificados de una persona (emisor o receptor) a fiscalapi. Para completar la carga de certificados, debes enviar dos peticiones, una para el certificado (.cer) y otra para la llave privada (.key), ambas para la misma persona.
Modelo
- Name
personId
- Type
- string
- required
- Description
Id de la persona propietaria del certificado CSD (Certificado de Sello Digital).
- Name
tin
- Type
- string
- required
- Description
RFC del propietario del certificado. Debe coincidir con el RFC del certificado CSD.
- Name
base64File
- Type
- string
- required
- Description
Archivo en formato base64. Para certificados debe codificar el archivo
.cer
, para llaves privadas debe codificar el archivo.key
.
- Name
fileType
- Type
- int
- required
- Description
Tipo de archivo que se está enviando.
- Type
- enum:
- Values
- 01
- Name
password
- Type
- string
- required
- Description
Contraseña de la llave privada. Independientemente si sube un certificado o una llave privada, siempre se debe enviar la contraseña de la llave privada.
Request
curl --location 'https://test.fiscalapi.com/api/v4/tax-files' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api_key>' \
--data '{
"personId": "1",
"tin": "FUNK671228PH6",
"base64File": "base_64_file...",
"fileType": 0,
"password": "12345678a"
}'
Response
{
"data": {
"personId": "1",
"tin": "JUFA7608212V6",
"base64File": "base_64_file...",
"fileType": 0,
"password": "12345678a",
"validFrom": "2023-05-18T02:58:56.0000000",
"validTo": "2027-05-18T02:58:56.0000000",
"sequence": 5,
"id": "dc17bc3f-bc5c-4212-8192-99d778fb2bc4",
"createdAt": "2025-01-11T15:40:31.7585889",
"updatedAt": "2025-01-11T15:40:31.7585987"
},
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}
Eliminar certificado
Este endpoint te permite eliminar un certificado por su ID. Para completar la eliminación de un par de certificados CSD, debes enviar dos peticiones, una para el certificado (.cer) y otra para la llave privada (.key), ambas para la misma persona.
Request
curl --location --request DELETE 'https://test.fiscalapi.com/api/v4/tax-files/b14c7056-d5d3-49d2-97c9-db437b0b1204' \
--header 'X-TENANT-KEY: <tenant>' \
--header 'X-TIME-ZONE: America/Mexico_City' \
--header 'X-API-KEY: <api_key>'
Response
{
"data": true,
"succeeded": true,
"message": "",
"details": "",
"httpStatusCode": 200
}