Tu primera factura en 5 minutos
Esta guia te lleva paso a paso desde cero hasta emitir y descargar tu primer CFDI timbrado en el sandbox de FactuLink. Al terminar tendras un PDF listo.
Prerrequisitos
- Una cuenta en FactuLink (regístrate en www.factulink.com.mx )
- Acceso al Dashboard con tu email y contraseña
- Un CSD de prueba (Certificado de Sello Digital) — si no tienes uno, el SAT provee archivos de prueba
Base URL:
https://api.factulink.com.mx/api/v1Todas las peticiones usan la misma URL base. El prefijo de tu API Key determina el ambiente:
sk_test_= sandbox,sk_live_= producción.
Paso 1 — Obtener tu API Key
1.1 Iniciar sesión con JWT
Primero obtén un token JWT con tus credenciales del dashboard:
curl -X POST https://api.factulink.com.mx/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "tu@email.com",
"password": "tu-password"
}'/api/v1/auth/login200{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 86400
}1.2 Crear una API Key
Usa el JWT para crear una API Key persistente. Esta clave es la que usarás en todas las llamadas siguientes — no necesitas repetir el login cada vez.
curl -X POST https://api.factulink.com.mx/api/v1/api-keys \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"name": "Mi primera API Key"
}'/api/v1/api-keys201{
"id": "ak_01HQ3KBXZ9N4WRCM8VDPG5T7EY",
"name": "Mi primera API Key",
"key": "sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b",
"created_at": "2026-04-05T10:30:00Z"
}Importante: La clave completa (
sk_test_...) solo se muestra una vez. Guárdala en un lugar seguro. Si la pierdes, tendrás que generar una nueva.
A partir de aquí, usa tu API Key como header de autenticación:
Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9bPaso 2 — Subir un CSD de prueba (sandbox)
Un CSD (Certificado de Sello Digital) es el par de archivos .cer y .key que
el SAT emite para que puedas firmar comprobantes fiscales. En el sandbox puedes usar
los CSD de prueba del SAT.
Sube los archivos via multipart/form-data:
curl -X POST https://api.factulink.com.mx/api/v1/csds \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-F "cer=@/ruta/a/certificado.cer" \
-F "key=@/ruta/a/llave.key" \
-F "password=12345678a"/api/v1/csds201{
"id": "csd_01HQ3KC8V2M5XNRP7WBTF6D3AH",
"rfc": "EKU9003173C9",
"serial_number": "30001000000500003456",
"valid_from": "2024-01-01T00:00:00Z",
"valid_to": "2028-01-01T00:00:00Z",
"status": "active",
"created_at": "2026-04-05T10:32:00Z"
}Paso 3 — Emitir tu primer CFDI
Ahora tienes todo lo necesario: API Key y CSD activo. Vamos a emitir un CFDI de tipo Ingreso para público en general con un concepto y IVA al 16%.
curl -X POST https://api.factulink.com.mx/api/v1/cfdis \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-H "Content-Type: application/json" \
-d '{
"tipo": "I",
"receptor": {
"rfc": "XAXX010101000",
"nombre": "PUBLICO EN GENERAL",
"regimen_fiscal": "616",
"domicilio_fiscal": "06600",
"uso_cfdi": "S01"
},
"conceptos": [
{
"descripcion": "Servicio de consultoría",
"clave_prod_serv": "80101500",
"clave_unidad": "E48",
"cantidad": 1,
"valor_unitario": 1000,
"objeto_imp": "02",
"impuestos": {
"traslados": [
{
"impuesto": "002",
"tipo_factor": "Tasa",
"tasa_o_cuota": "0.160000",
"base": 1000,
"importe": 160
}
]
}
}
]
}'/api/v1/cfdis201{
"tipo": "I",
"receptor": {
"rfc": "XAXX010101000",
"nombre": "PUBLICO EN GENERAL",
"regimen_fiscal": "616",
"domicilio_fiscal": "06600",
"uso_cfdi": "S01"
},
"conceptos": [{
"descripcion": "Servicio de consultoría",
"clave_prod_serv": "80101500",
"clave_unidad": "E48",
"cantidad": 1,
"valor_unitario": 1000,
"objeto_imp": "02",
"impuestos": {
"traslados": [{
"impuesto": "002",
"tipo_factor": "Tasa",
"tasa_o_cuota": "0.160000",
"base": 1000,
"importe": 160
}]
}
}]
}{
"id": "cfdi_01HQ3KD5R8N2YPTM4VBWG7E9CK",
"uuid": "6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d",
"tipo": "I",
"status": "vigente",
"emisor": {
"rfc": "EKU9003173C9",
"nombre": "EMPRESA DE PRUEBAS SA DE CV",
"regimen_fiscal": "601"
},
"receptor": {
"rfc": "XAXX010101000",
"nombre": "PUBLICO EN GENERAL"
},
"subtotal": 1000.00,
"total": 1160.00,
"fecha_timbrado": "2026-04-05T10:35:12Z",
"sello_sat": "dGhpcyBpcyBhIGZha2Ugc2VsbG8gZGVsIFNBVA==...",
"certificado_sat": "30001000000500003416",
"cadena_original_sat": "||1.1|6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d|2026-04-05T10:35:12|...",
"created_at": "2026-04-05T10:35:12Z"
}Tu CFDI ya está timbrado. El campo uuid es el identificador fiscal único que
necesitas para consultar, cancelar o descargar el comprobante.
Paso 4 — Descargar el PDF
Con el UUID del CFDI timbrado puedes descargar la representación impresa (PDF):
curl -X GET https://api.factulink.com.mx/api/v1/cfdis/6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d/pdf \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
--output factura.pdf/api/v1/cfdis/:uuid/pdf200Content-Type: application/pdf
Content-Disposition: attachment; filename="6128396f-c09c-4e3a-b4d7-8a5f2e1c9b3d.pdf"
(contenido binario del PDF)Siguientes pasos
Ya emitiste tu primer CFDI. Desde aquí puedes explorar:
- Autenticación — JWT, API Keys y permisos en detalle
- Sandbox — Limitaciones del entorno de pruebas y datos de prueba del SAT
- Guias — Cancelación de CFDI, complementos de pago, notas de crédito y más
- Referencia API — Documentación completa de todos los endpoints