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

# Quickstart

> Registra la empresa, carga el P12, confirma un rango e-NCF y envía un e-CF de prueba (ejemplo E31; aplica a E31–E47).

Cuatro pasos contra **TesteCF**. El host es siempre `https://api.emite.do`.

<Steps>
  <Step title="Registra la empresa">
    Usa el [asistente de registro](https://www.emite.do/signup) o pide a soporte que deje la empresa `is_active` con API key.

    La API key se muestra **una vez**. Guárdala como `EMITE_API_KEY`.
  </Step>

  <Step title="Carga el certificado P12">
    TesteCF admite el certificado de pruebas. Producción exige el P12 del emisor.

    ```bash theme={null}
    curl -X POST https://api.emite.do/api/v1/client/certificates \
      -H "X-API-Key: $EMITE_API_KEY" \
      -F "certificate=@certificado.p12" \
      -F "pin=$P12_PIN" \
      -F "environment=TesteCF"
    ```
  </Step>

  <Step title="Confirma rangos e-NCF">
    El e-NCF lo trae el payload. Debe existir un rango activo para ese tipo y ambiente.

    ```bash theme={null}
    curl "https://api.emite.do/api/v1/client/sequences?active_only=true" \
      -H "X-API-Key: $EMITE_API_KEY"
    ```
  </Step>

  <Step title="Envía un E31">
    `idempotency_key` es obligatorio. `FechaEmision` va en `Emisor` con formato **DD-MM-YYYY**.

    ```bash theme={null}
    curl -X POST https://api.emite.do/api/v1/ecf \
      -H "X-API-Key: $EMITE_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
        "idempotency_key": "demo-e31-001",
        "external_id": "INV/2026/0001",
        "ecf_type": "31",
        "environment": "TesteCF",
        "payload": {
          "Encabezado": {
            "Version": "1.0",
            "IdDoc": {
              "TipoeCF": "31",
              "eNCF": "E310000000001",
              "FechaVencimientoSecuencia": "31-12-2028",
              "IndicadorMontoGravado": 0,
              "TipoIngresos": "01",
              "TipoPago": "1"
            },
            "Emisor": {
              "RNCEmisor": "130478031",
              "RazonSocialEmisor": "EMPRESA DEMO SRL",
              "DireccionEmisor": "AV. DEMO 1",
              "FechaEmision": "15-08-2026"
            },
            "Comprador": {
              "RNCComprador": "131098193",
              "RazonSocialComprador": "CLIENTE DEMO SRL"
            },
            "Totales": {
              "MontoGravadoTotal": 10000.0,
              "MontoGravadoI1": 10000.0,
              "MontoExento": 0.0,
              "ITBIS1": 18,
              "TotalITBIS": 1800.0,
              "TotalITBIS1": 1800.0,
              "MontoTotal": 11800.0
            }
          },
          "DetallesItems": {
            "Item": [
              {
                "NumeroLinea": 1,
                "IndicadorFacturacion": 1,
                "NombreItem": "SERVICIO DEMO",
                "IndicadorBienoServicio": 2,
                "CantidadItem": 1.0,
                "UnidadMedida": "43",
                "PrecioUnitarioItem": 10000.0,
                "MontoItem": 10000.0
              }
            ]
          }
        }
      }'
    ```

    Respuesta inmediata (`201` o `200` si reenvías la misma key):

    ```json theme={null}
    {
      "public_id": "01J2XB4A...",
      "idempotency_key": "demo-e31-001",
      "status": "received",
      "encf": "E310000000001",
      "environment": "TesteCF"
    }
    ```
  </Step>
</Steps>

<Note>
  Guarda `public_id`. Es el identificador para consultas, artefactos y soporte. `external_id` no lo sustituye.
</Note>

El mismo `POST /api/v1/ecf` vale para **E31–E47**. Este E31 es solo el ejemplo: cambia `ecf_type`, `IdDoc.TipoeCF` y un e-NCF del tipo (`E32…`, `E34…`, `E47…`, …) con su rango activo.

Siguiente: [webhooks](/guides/webhooks) o [primer documento](/guides/first-document).
