> ## Documentation Index
> Fetch the complete documentation index at: https://developers.ipsofactura.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tu primera factura

> Del registro al primer CFDI de prueba en cuatro pasos: API key, emisor, CSD de prueba y un curl.

Esta guía te lleva de una cuenta recién creada a tu primer CFDI timbrado en el
[sandbox](/sandbox). Todo lo que timbres aquí es simulado: no tiene validez fiscal ni costo.
La tarjeta **Primeros pasos** del Panel de la Console te va marcando el avance:

<Frame caption="Panel de la Console: la tarjeta Primeros pasos con el paso 2 como paso actual.">
  <img src="https://mintcdn.com/palenca/RkhzvFnIESUXGg2I/images/primera-factura/panel-primeros-pasos.png?fit=max&auto=format&n=RkhzvFnIESUXGg2I&q=85&s=480c26982ba8ac5899a20b4c1a881e35" alt="Tarjeta Primeros pasos en el Panel de la Console" width="1920" height="1480" data-path="images/primera-factura/panel-primeros-pasos.png" />
</Frame>

<Steps>
  <Step title="Crea tu API key de sandbox">
    En la Console entra a [API keys](https://console.ipsofactura.com/api-keys?env=sandbox),
    elige el ambiente **Sandbox** y crea una key. Cópiala en ese momento: el valor completo
    se muestra una sola vez.

    <Frame>
      <img src="https://mintcdn.com/palenca/RkhzvFnIESUXGg2I/images/primera-factura/api-keys-sandbox.png?fit=max&auto=format&n=RkhzvFnIESUXGg2I&q=85&s=46e61f8195957490b915e34b2e47e5e6" alt="Sección API Keys de la Console con el ambiente Sandbox seleccionado y el botón Nueva API key" width="2048" height="920" data-path="images/primera-factura/api-keys-sandbox.png" />
    </Frame>
  </Step>

  <Step title="Registra un emisor de prueba">
    En [Emisores](https://console.ipsofactura.com/emisores?env=sandbox), con el ambiente
    **Sandbox** seleccionado, pulsa **Nuevo emisor** y captura los datos del CSD de prueba
    del SAT:

    <Frame>
      <img src="https://mintcdn.com/palenca/RkhzvFnIESUXGg2I/images/primera-factura/emisores-sandbox.png?fit=max&auto=format&n=RkhzvFnIESUXGg2I&q=85&s=f236f583e87f43485ba0dced3f2e4f0b" alt="Sección Emisores de la Console en el ambiente Sandbox, sin emisores todavía, con el botón Nuevo emisor" width="2048" height="1120" data-path="images/primera-factura/emisores-sandbox.png" />
    </Frame>

    | Campo | Valor |
    | - | - |
    | RFC | `EKU9003173C9` |
    | Razón social | `ESCUELA KEMPER URGATE` |
    | Régimen fiscal | `601` — General de Ley Personas Morales |
    | Código postal | `26015` |

    <Frame caption="El formulario Nuevo emisor con los datos del CSD de prueba.">
      <img src="https://mintcdn.com/palenca/RkhzvFnIESUXGg2I/images/primera-factura/nuevo-emisor.png?fit=max&auto=format&n=RkhzvFnIESUXGg2I&q=85&s=b316da7e78116f15a39328052d922dfd" alt="Formulario Nuevo emisor lleno con RFC EKU9003173C9, razón social ESCUELA KEMPER URGATE, régimen 601 y código postal 26015" width="420" data-path="images/primera-factura/nuevo-emisor.png" />
    </Frame>

    <Note>
      El RFC del emisor debe coincidir con el del CSD que subas en el siguiente paso, y la
      razón social va **sin** el sufijo de régimen de capital (`ESCUELA KEMPER URGATE`, no
      `... SA DE CV`).
    </Note>
  </Step>

  <Step title="Sube el CSD de prueba">
    Descarga el [kit de CSD de prueba (.zip)](https://assets.palenca.com/ipsofactura/docs/csd-pruebas.zip)
    y, en la fila del emisor que acabas de crear, pulsa **Subir CSD**:

    | Campo | Valor |
    | - | - |
    | Certificado (.cer) | `EKU9003173C9.cer` |
    | Llave privada (.key) | `EKU9003173C9.key` |
    | Contraseña de la llave | `12345678a` |

    Acepta la autorización de custodia y envía. El emisor debe quedar con el CSD en estado
    **Válido**. Si prefieres hacerlo por API, el paso a paso está en [Sandbox](/sandbox#registrar-el-csd).
  </Step>

  <Step title="Envía el curl de tu primera factura">
    Sustituye `TU_API_KEY_SANDBOX` por la key del paso 1 y ejecuta:

    ```bash cURL theme={null}
    curl -X POST https://sandbox.api.ipsofactura.com/cfdi/timbrar \
      -H "x-api: TU_API_KEY_SANDBOX" \
      -H "Content-Type: application/json" \
      -d '{
        "rfc_emisor": "EKU9003173C9",
        "tipo_comprobante": "I",
        "forma_pago": "03",
        "metodo_pago": "PUE",
        "moneda": "MXN",
        "subtotal": 1000.00,
        "total": 1160.00,
        "receptor": { "rfc": "URE180429TM6", "nombre": "UNIVERSIDAD ROBOTICA ESPAÑOLA", "domicilio_fiscal": "65000", "regimen_fiscal": "601", "uso_cfdi": "G03" },
        "conceptos": [ { "clave_prod_serv": "01010101", "cantidad": 1, "clave_unidad": "H87", "descripcion": "Servicio", "valor_unitario": 1000.00, "importe": 1000.00, "objeto_imp": "02", "impuestos": { "traslados": [ { "base": 1000.00, "impuesto": "002", "tipo_factor": "Tasa", "tasa_o_cuota": "0.160000", "importe": 160.00 } ] } } ],
        "impuestos": { "total_impuestos_trasladados": 160.00, "traslados": [ { "base": 1000.00, "impuesto": "002", "tipo_factor": "Tasa", "tasa_o_cuota": "0.160000", "importe": 160.00 } ] }
      }'
    ```

    Es un ingreso PUE en MXN con IVA 16 %, el mismo ejemplo del [Quickstart](/quickstart).
    La respuesta trae el folio fiscal y la marca del sandbox:

    ```json theme={null}
    {
      "id": "41e82875-0537-4ccc-8ef4-4f0af9e3957f",
      "uuid": "da023a58-6d46-4451-8bab-813d6a35127e",
      "folio": "1",
      "sello_cfdi": "SANDBOX_sello_cfdi_...",
      "sandbox": true
    }
    ```
  </Step>
</Steps>

Al recargar el Panel de la Console, el paso "Timbra tu primera factura de prueba" queda marcado.

## Si algo falla

| Respuesta | Causa habitual | Qué hacer |
| - | - | - |
| `401 INVALID_API_KEY` | Key de producción, o no sustituiste `TU_API_KEY_SANDBOX`. | Usa la key de **Sandbox** creada en el paso 1. |
| `404` con `rfc_emisor` | El emisor no existe en el sandbox. | Revisa que lo creaste con el ambiente **Sandbox** seleccionado. |
| Error de certificado | El emisor no tiene CSD, o el RFC no coincide con el del `.cer`. | Repite el paso 3 con `EKU9003173C9`. |
| `402 TRIAL_LIMIT_EXCEEDED` | Agotaste los 100 timbres de prueba de la cuenta. | Escríbenos para pasar a producción. |

Para otros códigos, consulta [Errores](/errores).

## Qué sigue

<CardGroup cols={2}>
  <Card title="Guía de timbrado" icon="file-invoice" href="/guia-timbrado">
    Campos del CFDI, PUE y PPD, retenciones, moneda extranjera.
  </Card>

  <Card title="Sandbox" icon="flask" href="/sandbox">
    Qué valida el sandbox y qué no, y cómo registrar el CSD por API.
  </Card>
</CardGroup>
