Saltar a contenido

Inicio Rápido

Antes de emitir su primer CFDI desde la API REST de CSPlug, recomendamos leer los primeros pasos de la emisión en CSFacturación..

Timbrar un CFDI

Emitir una factura mediante la API REST de CSPlug es un proceso sencillo que implica enviar un objeto JSON a nuestro endpoint de emisión.

Estructura JSON

Para facturar, asegúrese de que la estructura del objeto JSON cumpla con las especificaciones detalladas en la referencia JSON.

  1. Identifique el endpoint de emisión: https://csplug.csfacturacion.com/cfdi (Producción) o https://csplug.csfacturacion.com/demo/cfdi (Demo).

  2. Implemente un cliente HTTP en su lenguaje de programación:

    curl -X POST https://csplug.csfacturacion.com/cfdi \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -u "USUARIO:CONTRASEÑA" \
    -d @request.json
    
    <?php
    $client = new \GuzzleHttp\Client();
    $response = $client->request('POST', 'https://csplug.csfacturacion.com/cfdi', [
        'auth' => ['USUARIO', 'CONTRASEÑA'],
        'headers' => [
            'Accept' => 'application/json',
            'Content-Type' => 'application/json',
        ],
        'json' => $datos_cfdi // Array asociativo con la estructura del CFDI
    ]);
    
    echo $response->getBody();
    
    const response = await fetch('https://csplug.csfacturacion.com/cfdi', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json',
            'Authorization': 'Basic ' + btoa('USUARIO:CONTRASEÑA')
        },
        body: JSON.stringify(datosCfdi)
    });
    
    const data = await response.json();
    console.log(data);
    
    import requests
    import json
    
    url = "https://csplug.csfacturacion.com/cfdi"
    payload = json.dumps(datos_cfdi)
    headers = {
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
    
    response = requests.request("POST", url, auth=('USUARIO', 'CONTRASEÑA'), headers=headers, data=payload)
    
    print(response.text)
    
  3. Construya el payload JSON. Puede consultar un ejemplo completo de la estructura JSON a continuación o en la referencia.

Ejemplo de petición
{
  "Version": "4.0",
  "Serie": "A",
  "Folio": "100",
  "FormaPago": "01",
  "Moneda": "MXN",
  "TipoDeComprobante": "I",
  "Exportacion": "01",
  "MetodoPago": "PUE",
  "LugarExpedicion": "20000",
  "Receptor": {
    "Rfc": "XAXX010101000",
    "Nombre": "AL PUBLICO EN GENERAL",
    "DomicilioFiscalReceptor": "20000",
    "RegimenFiscalReceptor": "616",
    "UsoCFDI": "S01"
  },
  "Emisor": {
    "Nombre": "EMPRESA DE PRUEBA",
    "RegimenFiscal": "601",
    "Rfc": "AAA010101AAA"
  },
  "Conceptos": {
    "Concepto": {
      "0": {
        "ClaveProdServ": "01010101",
        "NoIdentificacion": "001",
        "Cantidad": "1.00",
        "ClaveUnidad": "H87",
        "Descripcion": "Producto de prueba",
        "ValorUnitario": "100.00",
        "Importe": "100.00",
        "ObjetoImp": "02",
        "Impuestos": {
          "Traslados": {
            "Traslado": [
              {
                "Base": "100.00",
                "Impuesto": "002",
                "TipoFactor": "Tasa",
                "TasaOCuota": "0.160000",
                "Importe": "16.00"
              }
            ]
          }
        }
      }
    }
  }
}

Interpretando la respuesta

La API REST utiliza códigos de estado HTTP estándar.

  • 201 Created: El CFDI fue timbrado exitosamente. La respuesta contendrá los archivos en Base64.
  • 422 Unprocessable Entity: Hubo errores de validación en los datos enviados. La respuesta detallará los campos con error.
  • 401 Unauthorized: Las credenciales son incorrectas.

Ejemplo de respuesta exitosa:

Ejemplo de respuesta
{
  "message": "Factura timbrada correctamente",
  "data": {
    "xml": "PD94bW... (Base64)",
    "pdf": "JVBERi... (Base64)",
    "qr": "iVBORw... (Base64)"
  }
}

Para más información consulte la referencia completa.