{
  "info": {
    "_postman_id": "6d1f0f2e-8c1a-4a57-9a8e-4f0b5d3c2a71",
    "name": "MiChemicalDataLab Facturación API",
    "description": "Colección oficial de la API de facturación electrónica de MiChemicalDataLab.\n\nDocumentación completa: https://michemicaldatalab.com/api-docs/\n\nConfiguración:\n1. En las variables de la colección complete api_token con un token de su panel (Tokens API). Nunca comparta el token.\n2. base_url ya viene configurada.\n3. Para las descargas, complete document_id con el data.id de \"Consultar documento\" y use Send and Download.\n\nEl token identifica automáticamente a su empresa: no envíe empresa_id, tenant ni db_name.\nLos datos de ejemplo son ficticios: ajuste series, números, fechas y clientes a sus documentos antes de enviar.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_token}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://facturacion.michemicaldatalab.com",
      "type": "string"
    },
    {
      "key": "api_token",
      "value": "",
      "type": "string"
    },
    {
      "key": "document_id",
      "value": "",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "01 - Autenticación",
      "description": "Todas las solicitudes usan \"Authorization: Bearer {{api_token}}\" (configurado en la colección). También se admite el header \"X-API-Token\". El token identifica automáticamente a la empresa: no envíe empresa_id, tenant ni db_name. Errores: 401 TOKEN_REQUERIDO / TOKEN_INVALIDO, 403 EMPRESA_NO_DISPONIBLE / EMPRESA_MISMATCH / TENANT_MISMATCH.",
      "item": [
        {
          "name": "Probar token (Authorization: Bearer)",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/portal/documents/exists?tipo_doc=01&serie=F001&correlativo=123",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "exists"
              ],
              "query": [
                {
                  "key": "tipo_doc",
                  "value": "01"
                },
                {
                  "key": "serie",
                  "value": "F001"
                },
                {
                  "key": "correlativo",
                  "value": "123"
                }
              ]
            },
            "description": "Consulta de solo lectura para comprobar el token. Respuesta 200 con \"exists\": true/false. Sin token: 401 TOKEN_REQUERIDO."
          }
        },
        {
          "name": "Probar token (X-API-Token)",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "X-API-Token",
                "value": "{{api_token}}"
              }
            ],
            "url": {
              "raw": "{{base_url}}/api/portal/documents/exists?tipo_doc=01&serie=F001&correlativo=123",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "exists"
              ],
              "query": [
                {
                  "key": "tipo_doc",
                  "value": "01"
                },
                {
                  "key": "serie",
                  "value": "F001"
                },
                {
                  "key": "correlativo",
                  "value": "123"
                }
              ]
            },
            "description": "Mismo request usando el header alternativo X-API-Token.",
            "auth": {
              "type": "noauth"
            }
          }
        }
      ]
    },
    {
      "name": "02 - Factura",
      "item": [
        {
          "name": "Emitir factura (01)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"codigo_tipo_documento\": \"01\",\n  \"serie_documento\": \"F001\",\n  \"numero_documento\": \"123\",\n  \"fecha_de_emision\": \"2026-09-24\",\n  \"hora_de_emision\": \"10:30:00\",\n  \"codigo_tipo_operacion\": \"0101\",\n  \"codigo_tipo_moneda\": \"PEN\",\n  \"datos_del_cliente_o_receptor\": {\n    \"codigo_tipo_documento_identidad\": \"6\",\n    \"numero_documento\": \"20999999991\",\n    \"apellidos_y_nombres_o_razon_social\": \"CLIENTE DEMO S.A.C.\",\n    \"direccion\": \"AV. DEMOSTRACION 123, LIMA\"\n  },\n  \"totales\": {\n    \"total_operaciones_gravadas\": 27.5,\n    \"total_operaciones_inafectas\": 0,\n    \"total_operaciones_exoneradas\": 0,\n    \"total_valor\": 27.5,\n    \"total_igv\": 4.95,\n    \"total_impuestos\": 4.95,\n    \"total_venta\": 32.45\n  },\n  \"items\": [\n    {\n      \"codigo_interno\": \"ERP-ABC-889\",\n      \"unidad_de_medida\": \"NIU\",\n      \"cantidad\": 2,\n      \"descripcion\": \"PRODUCTO DEL ERP DEL CLIENTE\",\n      \"valor_unitario\": 10,\n      \"precio_unitario\": 11.8,\n      \"total_base_igv\": 20,\n      \"porcentaje_igv\": 18,\n      \"total_igv\": 3.6,\n      \"total_impuestos\": 3.6,\n      \"codigo_tipo_afectacion_igv\": \"10\",\n      \"total_valor_item\": 20,\n      \"total_item\": 23.6\n    },\n    {\n      \"codigo_interno\": \"ERP-XYZ-010\",\n      \"unidad_de_medida\": \"KGM\",\n      \"cantidad\": 1.5,\n      \"descripcion\": \"PRODUCTO A GRANEL\",\n      \"valor_unitario\": 5,\n      \"precio_unitario\": 5.9,\n      \"total_base_igv\": 7.5,\n      \"porcentaje_igv\": 18,\n      \"total_igv\": 1.35,\n      \"total_impuestos\": 1.35,\n      \"codigo_tipo_afectacion_igv\": \"10\",\n      \"total_valor_item\": 7.5,\n      \"total_item\": 8.85\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents"
              ]
            },
            "description": "Factura electrónica (01). Se envía a SUNAT en el momento y la respuesta ya trae el estado.\n\n- Envío fiscal\n- Aceptación / estado SUNAT\n- XML / PDF / CDR\nTu sistema lleva el correlativo (numero_documento) sin saltos ni repeticiones. Si reenvías el mismo JSON, la API no emite otra vez: responde \"reused\": true.\n\nRespuesta 200: revise siempre data.estado (aceptada, pendiente_envio o rechazada)."
          }
        }
      ]
    },
    {
      "name": "03 - Boleta",
      "item": [
        {
          "name": "Emitir boleta (03)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"codigo_tipo_documento\": \"03\",\n  \"serie_documento\": \"B001\",\n  \"numero_documento\": \"123\",\n  \"fecha_de_emision\": \"2026-09-24\",\n  \"hora_de_emision\": \"10:45:00\",\n  \"codigo_tipo_operacion\": \"0101\",\n  \"codigo_tipo_moneda\": \"PEN\",\n  \"datos_del_cliente_o_receptor\": {\n    \"codigo_tipo_documento_identidad\": \"1\",\n    \"numero_documento\": \"12345678\",\n    \"apellidos_y_nombres_o_razon_social\": \"JUAN PEREZ DEMO\",\n    \"direccion\": \"\"\n  },\n  \"totales\": {\n    \"total_operaciones_gravadas\": 7.5,\n    \"total_operaciones_inafectas\": 0,\n    \"total_operaciones_exoneradas\": 0,\n    \"total_valor\": 7.5,\n    \"total_igv\": 1.35,\n    \"total_impuestos\": 1.35,\n    \"total_venta\": 8.85\n  },\n  \"items\": [\n    {\n      \"codigo_interno\": \"ERP-TEST-001\",\n      \"unidad_de_medida\": \"NIU\",\n      \"cantidad\": 3,\n      \"descripcion\": \"PRODUCTO DEMO C\",\n      \"valor_unitario\": 2.5,\n      \"precio_unitario\": 2.95,\n      \"total_base_igv\": 7.5,\n      \"porcentaje_igv\": 18,\n      \"total_igv\": 1.35,\n      \"total_impuestos\": 1.35,\n      \"codigo_tipo_afectacion_igv\": \"10\",\n      \"total_valor_item\": 7.5,\n      \"total_item\": 8.85\n    }\n  ]\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents"
              ]
            },
            "description": "Boleta de venta (03). Mismo endpoint y mismo formato que la factura, con codigo_tipo_documento: \"03\" y serie que empieza con B.\n\n- Boleta registrada\n- Queda pendiente\n- Resumen Diario automático\n- Aceptada / rechazada\nLa boleta puede quedar pendiente mientras la API procesa el Resumen Diario.\n\nDespués el estado cambia a aceptada o rechazada. Consulta el estado más tarde; tú no gestionas el Resumen Diario."
          }
        }
      ]
    },
    {
      "name": "04 - Nota de Crédito",
      "item": [
        {
          "name": "Nota de Crédito sobre factura (07)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"serie\": \"FC01\",\n  \"numero\": \"25\",\n  \"fecha_de_emision\": \"2026-09-25\",\n  \"hora_de_emision\": \"10:30:00\",\n  \"tipo_doc_referencia\": \"01\",\n  \"serie_referencia\": \"F001\",\n  \"numero_referencia\": \"100\",\n  \"codigo_motivo\": \"01\",\n  \"motivo\": \"Anulación de la operación\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/nota-credito",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "nota-credito"
              ]
            },
            "description": "Nota de crédito (tipo 07) sobre una factura 01 aceptada de tu empresa. Motivo soportado actualmente: 01 (Anulación de la operación). Serie de la NC con F (ej. FC01).\nEnvío a SUNAT: individual; la respuesta trae el estado final.\nLos datos del cliente, los items y los totales se toman del comprobante original: no los envíes."
          }
        },
        {
          "name": "Nota de Crédito sobre boleta (07)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"serie\": \"BC01\",\n  \"numero\": \"25\",\n  \"tipo_doc_referencia\": \"03\",\n  \"serie_referencia\": \"B001\",\n  \"numero_referencia\": \"100\",\n  \"codigo_motivo\": \"01\",\n  \"motivo\": \"Anulación de la operación\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/nota-credito",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "nota-credito"
              ]
            },
            "description": "Nota de crédito (tipo 07) sobre una boleta 03 aceptada de tu empresa. Motivo soportado actualmente: 01 (Anulación de la operación). Serie de la NC con B (ej. BC01) y serie_referencia con B.\nEnvío a SUNAT: queda pendiente y la API la informa en el Resumen Diario interno; tú no gestionas el Resumen Diario.\nEn boleta, fecha_de_emision debe ser la fecha de hoy (hora de Lima): la nota se informa en el Resumen Diario de ese día. Si no la envías, la API usa la fecha de hoy.\n\nLos datos del cliente, los items y los totales se toman del comprobante original: no los envíes.\n\nEn boleta, fecha_de_emision debe ser la fecha de hoy (hora de Lima). Este request la omite a propósito: la API usa la fecha de hoy."
          }
        }
      ]
    },
    {
      "name": "05 - Nota de Débito",
      "item": [
        {
          "name": "Nota de Débito sobre factura (08)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"serie\": \"FD01\",\n  \"numero\": \"25\",\n  \"fecha_de_emision\": \"2026-10-01\",\n  \"hora_de_emision\": \"11:00:00\",\n  \"tipo_doc_referencia\": \"01\",\n  \"serie_referencia\": \"F001\",\n  \"numero_referencia\": \"120\",\n  \"codigo_motivo\": \"02\",\n  \"motivo\": \"Ajuste de precio pactado\",\n  \"items\": [\n    {\n      \"codigo_interno\": \"AJ-001\",\n      \"descripcion\": \"AJUSTE DE PRECIO\",\n      \"unidad_de_medida\": \"NIU\",\n      \"cantidad\": 1,\n      \"valor_unitario\": 10,\n      \"precio_unitario\": 11.8,\n      \"codigo_tipo_afectacion_igv\": \"10\",\n      \"porcentaje_igv\": 18,\n      \"total_base_igv\": 10,\n      \"total_igv\": 1.8,\n      \"total_impuestos\": 1.8,\n      \"total_valor_item\": 10\n    }\n  ],\n  \"totales\": {\n    \"total_operaciones_gravadas\": 10,\n    \"total_valor\": 10,\n    \"total_igv\": 1.8,\n    \"total_impuestos\": 1.8,\n    \"total_venta\": 11.8\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/nota-debito",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "nota-debito"
              ]
            },
            "description": "Nota de débito (tipo 08) sobre una factura 01. Motivo soportado: 02 (Aumento en el valor). Serie Fxxx (ej. FD01). Envío a SUNAT: individual.\nLa Nota de Débito no anula el comprobante original.\n\nEnvías solo el importe adicional (items + totales, operación gravada con IGV 18 %)."
          }
        },
        {
          "name": "Nota de Débito sobre boleta (08)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"serie\": \"BD01\",\n  \"numero\": \"25\",\n  \"tipo_doc_referencia\": \"03\",\n  \"serie_referencia\": \"B001\",\n  \"numero_referencia\": \"450\",\n  \"codigo_motivo\": \"02\",\n  \"motivo\": \"Ajuste de precio pactado\",\n  \"items\": [\n    {\n      \"codigo_interno\": \"AJ-001\",\n      \"descripcion\": \"AJUSTE DE PRECIO\",\n      \"unidad_de_medida\": \"NIU\",\n      \"cantidad\": 1,\n      \"valor_unitario\": 10,\n      \"precio_unitario\": 11.8,\n      \"codigo_tipo_afectacion_igv\": \"10\",\n      \"porcentaje_igv\": 18,\n      \"total_base_igv\": 10,\n      \"total_igv\": 1.8,\n      \"total_impuestos\": 1.8,\n      \"total_valor_item\": 10\n    }\n  ],\n  \"totales\": {\n    \"total_operaciones_gravadas\": 10,\n    \"total_valor\": 10,\n    \"total_igv\": 1.8,\n    \"total_impuestos\": 1.8,\n    \"total_venta\": 11.8\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/nota-debito",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "nota-debito"
              ]
            },
            "description": "Nota de débito (tipo 08) sobre una boleta 03. Motivo soportado: 02 (Aumento en el valor). Serie Bxxx (ej. BD01). Queda pendiente y la API la informa en el Resumen Diario.\nEn boleta, fecha_de_emision debe ser la fecha de hoy (hora de Lima): la nota se informa en el Resumen Diario de ese día. Si no la envías, la API usa la fecha de hoy.\n\nLa Nota de Débito no anula el comprobante original.\n\nEnvías solo el importe adicional (items + totales, operación gravada con IGV 18 %).\n\nEn boleta, fecha_de_emision debe ser la fecha de hoy (hora de Lima). Este request la omite a propósito: la API usa la fecha de hoy."
          }
        }
      ]
    },
    {
      "name": "06 - Anulación",
      "item": [
        {
          "name": "Anular factura (RA gestionada por la API)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tipo_doc\": \"01\",\n  \"serie\": \"F001\",\n  \"numero\": \"123\",\n  \"motivo\": \"Anulación de la operación\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/anulacion",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "anulacion"
              ]
            },
            "description": "Solo solicitas la anulación con tipo, serie y número. Para una factura 01, la API gestiona la Comunicación de Baja (RA).\nNo construyas RA, RC, tickets ni CDR. La respuesta es 202 con anulacion_pendiente: confirma el resultado con \"Consultar documento\" (data.anulacion.estado)."
          }
        },
        {
          "name": "Anular boleta (RC3 gestionado por la API)",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json; charset=utf-8"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tipo_doc\": \"03\",\n  \"serie\": \"B001\",\n  \"numero\": \"123\",\n  \"motivo\": \"Anulación de la operación\",\n  \"confirmacion_no_otorgada\": true\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            },
            "url": {
              "raw": "{{base_url}}/api/portal/documents/anulacion",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "anulacion"
              ]
            },
            "description": "Solo solicitas la anulación con tipo, serie y número. Para una boleta 03, la API gestiona el Resumen Diario de anulación (RC condición 3).\nSolo si la boleta no fue entregada al cliente: envía \"confirmacion_no_otorgada\": true. Plazo SUNAT: 7 días.\nNo construyas RA, RC, tickets ni CDR. La respuesta es 202 con anulacion_pendiente: confirma el resultado con \"Consultar documento\" (data.anulacion.estado)."
          }
        }
      ]
    },
    {
      "name": "07 - Consulta",
      "item": [
        {
          "name": "Consultar documento",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/portal/documents/exists?tipo_doc=01&serie=F001&correlativo=123",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "portal",
                "documents",
                "exists"
              ],
              "query": [
                {
                  "key": "tipo_doc",
                  "value": "01"
                },
                {
                  "key": "serie",
                  "value": "F001"
                },
                {
                  "key": "correlativo",
                  "value": "123"
                }
              ]
            },
            "description": "ParámetroEjemploDescripción\ntipo_doc0101 factura · 03 boleta · 07 nota de crédito · 08 nota de débito\nserieF001Serie del documento\ncorrelativo123Número del documento\n\nLa respuesta trae:\n\n- exists y data.id (el ID para descargar archivos).\n- data.estado: aceptada, pendiente, pendiente_envio, rechazada, baja_aceptada (factura anulada), anulada (boleta anulada).\n- data.sunat_code / data.sunat_message: respuesta de SUNAT a la emisión.\n- data.resumen_estado: avance del Resumen Diario, en boletas y notas de boleta.\n- data.anulacion: estado de la anulación (pendiente, aceptada, rechazada, requiere_revision).\n- data.documento_referencia: en notas 07 y 08, el comprobante que modifican.\nDescargar documentos\nEl {id} es el data.id del documento consultado. Cada nota (07/08) tiene su propio ID, distinto del original: GET /api/facturas/{id}/pdf, GET /api/facturas/{id}/xml, GET /api/facturas/{id}/cdr.\nFactura y notas de factura: CDR individual. Boleta y notas de boleta (NC/ND): el CDR es el del Resumen Diario que las informó, y solo existe cuando ese resumen fue aceptado (antes responde 404 \"Archivo no encontrado en disco\").\n\nEvidencia de anulación: factura /api/facturas/{id}/baja (+ /xml, /cdr, /constancia) · boleta /api/facturas/{id}/anulacion (+ /xml, /cdr, /constancia)."
          }
        }
      ]
    },
    {
      "name": "08 - Descargas",
      "description": "Use el data.id de \"Consultar documento\" como document_id y \"Send and Download\". En boletas y sus NC/ND, el CDR es el del Resumen Diario que las informó.",
      "item": [
        {
          "name": "Descargar XML",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/facturas/{{document_id}}/xml",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "facturas",
                "{{document_id}}",
                "xml"
              ]
            },
            "description": "XML firmado del comprobante."
          }
        },
        {
          "name": "Descargar PDF",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/facturas/{{document_id}}/pdf",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "facturas",
                "{{document_id}}",
                "pdf"
              ]
            },
            "description": "Representación impresa (PDF)."
          }
        },
        {
          "name": "Descargar CDR",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{base_url}}/api/facturas/{{document_id}}/cdr",
              "host": [
                "{{base_url}}"
              ],
              "path": [
                "api",
                "facturas",
                "{{document_id}}",
                "cdr"
              ]
            },
            "description": "CDR de SUNAT (ZIP). En boletas y sus NC/ND, el CDR puede corresponder al Resumen Diario."
          }
        }
      ]
    }
  ]
}
