Detecno ClientGate — API REST Timbrado

Abrir Swagger Descargar PDF
Documentación para integradores

API REST Timbrado

Guía de integración para timbrado síncrono de CFDI 4.0 en producción.

Versión v1 · Detecno ClientGate · Junio 2026

Enlaces rápidos

Base URLhttps://<host>/timbrado-api
Esta guíahttps://<host>/timbrado-api/docs
HealthGET /timbrado-api/health
Importante: Todas las rutas llevan el prefijo /timbrado-api. No usar /api/v1/... en la raíz del dominio — esa ruta corresponde al portal web.

1. Descripción general

Equivalente HTTP/JSON del servicio WCF DetecnoPac.svc. Operaciones:

  • Timbrar CFDI 4.0 (síncrono)
  • Cancelar CFDI con XML de cancelación
  • Recuperar TFD por UUID
  • Recuperar acuse de envío
  • Consultar hora oficial del servidor PAC
CaracterísticaValor
ProtocoloHTTPS (TLS obligatorio)
RespuestaJSON (camelCase)
Envío timbrado/cancelaciónXML en el body
AutenticaciónHeaders X-Usuario / X-Password
Tamaño máximo CFDI100 MB (104 857 600 bytes)
CFDI grandesPreferir API Timbrado Async (/timbrado-api-async)

2. Autenticación

HeaderObligatorioDescripción
X-UsuarioUsuario de timbrado asignado por Detecno
X-PasswordContraseña de timbrado
X-OrigenSolo POST /timbradoIdentificador del sistema origen (ej. ERP-MiEmpresa)
X-Rfc-EmisorSolo cancelaciónRFC del emisor (alternativa a query rfcEmisor)

No se utiliza JWT, OAuth ni API Key. En Swagger use el botón Authorize para pruebas manuales.

3. Endpoints

OperaciónMétodoRuta (producción)Body / params
Timbrar CFDIPOST/timbrado-api/api/v1/timbradoXML + X-Origen
Cancelar CFDIPOST/timbrado-api/api/v1/cancelacionXML + rfcEmisor
Recuperar TFDGET/timbrado-api/api/v1/timbrado/{uuid}/tfd?docId=
Acuse de envíoPOST/timbrado-api/api/v1/acuse-envio?uuid=
Hora servidorGET/timbrado-api/api/v1/hora-servidorSin credenciales

4. Formato de respuestas

Timbrado (HTTP 200, incluso si el PAC rechaza)

{
  "success": true,
  "docId": "string",
  "xmlTfd": "<?xml version=\"1.0\"...>",
  "strQr": "string",
  "errCode": "string",
  "errDesc": "string",
  "serverTime": "2026-06-16T15:00:00Z",
  "correlationId": "abc123..."
}
CampoDescripción
successtrue si el timbrado fue exitoso
xmlTfdCFDI timbrado con Timbre Fiscal Digital
correlationIdID de trazabilidad — incluir en soporte
errCode / errDescError de negocio cuando success es false

Semántica HTTP

SituaciónHTTPAcción
Rechazo PAC / validación200Revisar success, errCode, errDesc
Headers o body inválidos400Revisar campo error
Error interno500Reintentar; reportar correlationId

5. Ejemplos

Timbrar CFDI (curl)

curl -s -X POST "https://mpn8.timbrame-factura-electronica.com/timbrado-api/api/v1/timbrado" \
  -H "Content-Type: application/xml; charset=utf-8" \
  -H "X-Usuario: SU_USUARIO" \
  -H "X-Password: SU_PASSWORD" \
  -H "X-Origen: mi-sistema-erp" \
  --data-binary "@cfdi.xml"

Cancelación

curl -s -X POST "https://mpn8.timbrame-factura-electronica.com/timbrado-api/api/v1/cancelacion?rfcEmisor=ABC010101ABC" \
  -H "Content-Type: application/xml" \
  -H "X-Usuario: SU_USUARIO" \
  -H "X-Password: SU_PASSWORD" \
  --data-binary "@cancelacion.xml"

C# (HttpClient)

using var client = new HttpClient {
    BaseAddress = new Uri("https://mpn8.timbrame-factura-electronica.com/timbrado-api")
};
var xml = await File.ReadAllTextAsync("cfdi.xml");
using var content = new StringContent(xml, Encoding.UTF8, "application/xml");
using var request = new HttpRequestMessage(HttpMethod.Post, "/api/v1/timbrado") { Content = content };
request.Headers.Add("X-Usuario", "SU_USUARIO");
request.Headers.Add("X-Password", "SU_PASSWORD");
request.Headers.Add("X-Origen", "mi-app");
var response = await client.SendAsync(request);

6. Migración desde WCF

WCF (DetecnoPac)REST
TimbrarCfdi(...)POST /timbrado-api/api/v1/timbrado
CancelacionCfdiConXML(...)POST /timbrado-api/api/v1/cancelacion
RecuperarTfd(...)GET /timbrado-api/api/v1/timbrado/{uuid}/tfd?docId=...
RecuperarAcuseEnvio(...)POST /timbrado-api/api/v1/acuse-envio?uuid=...
ObtenerHoraServidor()GET /timbrado-api/api/v1/hora-servidor

7. Buenas prácticas

  1. Evaluar siempre success en el JSON, no solo el HTTP status.
  2. Guardar correlationId para soporte y auditoría.
  3. Enviar CFDI como XML con Content-Type: application/xml.
  4. Timeout del cliente HTTP ≥ 120 segundos.
  5. No reintentar timbrados exitosos — evita duplicados.
  6. Usar X-Origen con valor estable por sistema.

8. Errores frecuentes

SíntomaCausaAcción
Swagger muestra Hash ValidatorSpec cargado desde /swagger raízUsar /timbrado-api/swagger
400 headers requeridosFalta X-Usuario o X-PasswordVerificar headers
404 en /api/v1/timbradoFalta prefijo /timbrado-apiUsar URL completa
success false, tamañoXML > 100 MBReducir XML o usar API Timbrado Async

9. Timbrado async (CFDI grandes, hasta 100 MB)

RecursoURL
Swaggerhttps://mpn8.timbrame-factura-electronica.com/timbrado-api-async/swagger
Enviar CFDIPOST /timbrado-api-async
Consultar estadoGET /timbrado-api-async/{transactionId}

10. Soporte

Al reportar incidencias incluir: correlationId, fecha/hora UTC, X-Usuario (sin password), X-Origen, endpoint, errCode/errDesc.