Documentación API - Generador de PDFs

Guía completa para integrar el generador de PDFs en tu aplicación

Introducción

API REST para generar facturas y recibos en formato PDF con múltiples plantillas profesionales.

Características
  • 13 plantillas diferentes (8 facturas + 2 recibos + 3 especiales)
  • Certificación SAT Guatemala
  • Logo personalizable (Base64 o texto)
  • Cálculos automáticos
  • Productos/conceptos dinámicos
  • Respuesta en Base64 o descarga directa
Información Técnica
  • URL Base: https://pdf.mayansource.com/
  • Método: POST
  • Content-Type: application/json
  • Librería: FPDF
  • PHP: 8.2+
  • Encoding: UTF-8

Autenticación

Actualmente la API no requiere autenticación. Todas las peticiones son públicas.

Nota: Se recomienda implementar autenticación mediante API Key en producción.

Endpoint Principal

POST /generate_pdf.php

Genera un PDF basado en el template y datos proporcionados.

Parámetros del Body (JSON)
Parámetro Tipo Requerido Descripción
template string Requerido Nombre del template a usar. Ver lista completa abajo.
company_name string Requerido Nombre de la empresa emisora
company_address string Opcional Dirección de la empresa
logo_base64 string Opcional Logo en formato Base64 (data:image/png;base64,...)
logo_text string Opcional Texto alternativo si no se proporciona logo
products array Requerido Array de productos (para facturas)
concepts array Requerido Array de conceptos (para recibos)
Templates Disponibles
Facturas
  • invoice - Factura básica
  • invoice_certified - Factura certificada SAT
  • modern_invoice - Factura moderna
  • modern_certified - Factura moderna certificada
  • itech_invoice - Factura iTech
  • itech_certified - Factura iTech certificada
  • dual_color - Factura dual color
  • dual_color_certified - Factura dual color certificada
Recibos
  • receipt - Recibo simple (6 por página)
  • receipt2 - Recibo profesional
Especiales
  • borcelle - Template Borcelle
Ejemplo de Request
curl -X POST https://pdf.mayansource.com/generate_pdf.php \
  -H "Content-Type: application/json" \
  -d '{
    "template": "invoice",
    "company_name": "Mi Empresa S.A.",
    "company_address": "Calle Principal 123",
    "logo_text": "ME",
    "invoice_number": "001-2024",
    "date": "30/09/2025",
    "customer_name": "Cliente Ejemplo",
    "customer_nit": "12345678",
    "products": [
      {
        "description": "Producto 1",
        "quantity": 2,
        "unit_price": 100.00
      }
    ]
  }'
Respuesta Exitosa
{
  "success": true,
  "pdf_base64": "JVBERi0xLjMKJeLjz9MKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovUGFnZXMgMiAwIFIKPj4KZW5kb2JqCjIgMCBvYmoKPDwKL1R5cGUgL1BhZ2VzCi9LaWRzIFszIDAgUl0KL0NvdW50IDEKL01lZGlhQm94IFswIDAgNTk1LjI4IDg0MS44OV0KPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovUmVzb3VyY2VzIDw8Ci9Gb250IDw8Ci9GMSA0IDAgUgo+Pgo+PgovQ29udGVudHMgNSAwIFIKPj4KZW5kb2JqCjQgMCBvYmoKPDwKL1R5cGUgL0ZvbnQKL1N1YnR5cGUgL1R5cGUxCi9CYXNlRm9udCAvSGVsdmV0aWNhCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9MZW5ndGggNDQKPj4Kc3RyZWFtCkJUCi9GMSA0OCBUZgoxMDAgNzAwIFRkCihIZWxsbywgV29ybGQhKSBUagpFVAplbmRzdHJlYW0KZW5kb2JqCnhyZWYKMCA2CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAwMDAwOSAwMDAwMCBuIAowMDAwMDAwMDU4IDAwMDAwIG4gCjAwMDAwMDAxNDUgMDAwMDAgbiAKMDAwMDAwMDI2NiAwMDAwMCBuIAowMDAwMDAwMzQ1IDAwMDAwIG4gCnRyYWlsZXIKPDwKL1NpemUgNgovUm9vdCAxIDAgUgo+PgpzdGFydHhyZWYKNDM4CiUlRU9GCg==",
  "filename": "factura_001-2024.pdf",
  "timestamp": "2025-09-30 17:30:00"
}

Facturas Básicas

Template: invoice

Factura básica con datos de empresa, cliente, productos y totales automáticos.

Ejemplo JSON:
{
  "template": "invoice",
  "company_name": "Mi Empresa S.A.",
  "company_address": "Calle Principal 123, Zona 10",
  "company_phone": "2345-6789",
  "company_email": "info@miempresa.com",
  "logo_text": "ME",
  "invoice_number": "001-2024",
  "date": "30/09/2025",
  "customer_name": "Cliente Ejemplo",
  "customer_nit": "12345678-9",
  "customer_address": "Dirección del cliente",
  "products": [
    {
      "description": "Producto 1",
      "quantity": 2,
      "unit_price": 100.00
    },
    {
      "description": "Producto 2",
      "quantity": 1,
      "unit_price": 250.00
    }
  ],
  "notes": "Gracias por su compra"
}

Template: invoice_certified

Factura certificada con campos SAT Guatemala (NIT, Serie, DTE, Autorización).

Campos adicionales requeridos:
  • nit_emisor - NIT del emisor
  • nit_comprador - NIT del comprador
  • serie - Serie del DTE
  • numero_dte - Número del DTE
  • numero_autorizacion - Número de autorización SAT
  • fecha_certificacion - Fecha de certificación

Facturas Modernas

Templates Modernos Disponibles
  • modern_invoice - Factura moderna
  • modern_certified - Factura moderna certificada SAT
  • itech_invoice - Factura iTech
  • itech_certified - Factura iTech certificada SAT
  • dual_color - Factura dual color
  • dual_color_certified - Factura dual color certificada SAT
Template: modern_invoice

Diseño minimalista y contemporáneo con layout de dos columnas. Incluye elementos visuales modernos, colores accent y tipografía limpia.

Características:
  • Diseño minimalista moderno
  • Layout de dos columnas
  • Colores accent personalizables
  • Logo circular elegante
Ejemplo JSON:
{
  "template": "modern_invoice",
  "company_name": "Tech Solutions S.A.",
  "company_address": "Avenida Reforma 10-00, Zona 10",
  "company_phone": "2345-6789",
  "company_email": "info@techsolutions.com",
  "logo_text": "TS",
  "invoice_number": "INV-2024-001",
  "date": "30/09/2025",
  "customer_name": "Cliente Corporativo",
  "customer_nit": "12345678-9",
  "customer_address": "Ciudad de Guatemala",
  "products": [
    {
      "description": "Desarrollo de Software",
      "quantity": 1,
      "unit_price": 5000.00
    },
    {
      "description": "Soporte Técnico Mensual",
      "quantity": 3,
      "unit_price": 500.00
    }
  ],
  "notes": "Pago a 30 días"
}

Template: itech_invoice

Diseño tecnológico con estilo corporativo. Ideal para empresas de tecnología y servicios digitales.

Características:
  • Estilo tecnológico
  • Diseño corporativo
  • Layout profesional
  • Colores oscuros elegantes

Template: dual_color

Diseño vibrante con degradados de color. Perfecto para empresas creativas y modernas.

Características:
  • Degradados de color
  • Diseño vibrante
  • Estilo creativo
  • Colores personalizables
Versiones Certificadas

Todos los templates modernos tienen su versión certificada SAT. Solo agrega _certified al nombre del template y los campos SAT requeridos (nit_emisor, nit_comprador, serie, numero_dte, numero_autorizacion, fecha_certificacion).

Recibos de Caja

Template: receipt

Recibo simple con formato desprendible (6 recibos por página).

Ejemplo JSON:
{
  "template": "receipt",
  "receipt_number": "000488",
  "date": "30/09/2025",
  "received_from": "Irving Lorenzana",
  "amount": 1500.00,
  "concept": "Pago de cuota de mantenimiento",
  "payment_method": "Efectivo",
  "received_by": "Administración"
}

Template: receipt2

Recibo profesional con tabla de conceptos, métodos de pago y sección administrativa.

Ejemplo JSON:
{
  "template": "receipt2",
  "company_name": "Vecinos de Burgos S.A.",
  "company_address": "Avenida Las Americas 7-62 Zone 3",
  "company_office": "Oficina 803",
  "company_phone": "Teléfono: 7930-4280",
  "company_whatsapp": "WhatsApp: 4034-2532",
  "company_city": "Quetzaltenango",
  "logo_text": "VB",
  "receipt_number": "000488",
  "date": ["30", "09", "2025"],
  "received_from": "Irving Lorenzana",
  "address": "Ciudad",
  "total": 1500.00,
  "concepts": [
    {
      "code": "001",
      "concept": "CUOTA DE MANTENIMIENTO",
      "lot": "15-B",
      "amount": 1000.00
    },
    {
      "code": "002",
      "concept": "SERVICIO DE AGUA",
      "lot": "15-B",
      "amount": 300.00
    },
    {
      "code": "003",
      "concept": "MORA",
      "lot": "15-B",
      "amount": 200.00
    }
  ],
  "checks": [
    {
      "number": "12345678",
      "bank": "Banco Industrial",
      "amount": 1000.00
    }
  ],
  "cash": 500.00,
  "ticket_number": "BOL-2024-0250"
}

Ejemplos de Código

PHP con cURL
<?php
$data = [
    'template' => 'receipt2',
    'company_name' => 'Vecinos de Burgos S.A.',
    'receipt_number' => '000488',
    'date' => ['30', '09', '2025'],
    'received_from' => 'Irving Lorenzana',
    'total' => 1500.00,
    'concepts' => [
        [
            'code' => '001',
            'concept' => 'CUOTA DE MANTENIMIENTO',
            'lot' => '15-B',
            'amount' => 1000.00
        ]
    ]
];

$ch = curl_init('https://pdf.mayansource.com/generate_pdf.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$result = json_decode($response, true);

if ($result['success']) {
    // Guardar PDF
    file_put_contents('recibo.pdf', base64_decode($result['pdf_base64']));
    echo "PDF generado exitosamente!";
}
?>
JavaScript con Fetch API
const data = {
  template: 'receipt2',
  company_name: 'Vecinos de Burgos S.A.',
  receipt_number: '000488',
  date: ['30', '09', '2025'],
  received_from: 'Irving Lorenzana',
  total: 1500.00,
  concepts: [
    {
      code: '001',
      concept: 'CUOTA DE MANTENIMIENTO',
      lot: '15-B',
      amount: 1000.00
    }
  ]
};

fetch('https://pdf.mayansource.com/generate_pdf.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
  if (result.success) {
    // Descargar PDF
    const link = document.createElement('a');
    link.href = 'data:application/pdf;base64,' + result.pdf_base64;
    link.download = result.filename;
    link.click();
  }
})
.catch(error => console.error('Error:', error));
Python con Requests
import requests
import base64

data = {
    'template': 'receipt2',
    'company_name': 'Vecinos de Burgos S.A.',
    'receipt_number': '000488',
    'date': ['30', '09', '2025'],
    'received_from': 'Irving Lorenzana',
    'total': 1500.00,
    'concepts': [
        {
            'code': '001',
            'concept': 'CUOTA DE MANTENIMIENTO',
            'lot': '15-B',
            'amount': 1000.00
        }
    ]
}

response = requests.post(
    'https://pdf.mayansource.com/generate_pdf.php',
    json=data,
    headers={'Content-Type': 'application/json'}
)

result = response.json()

if result['success']:
    # Guardar PDF
    pdf_data = base64.b64decode(result['pdf_base64'])
    with open('recibo.pdf', 'wb') as f:
        f.write(pdf_data)
    print("PDF generado exitosamente!")

Manejo de Errores

Respuesta de Error
{
  "error": true,
  "message": "Descripción del error",
  "timestamp": "2025-09-30 17:30:00"
}
Códigos de Error Comunes
Error Descripción Solución
JSON inválido El JSON enviado tiene errores de sintaxis Verificar que el JSON esté bien formado. No usar números con ceros a la izquierda.
Plantilla no válida El template especificado no existe Usar uno de los templates disponibles en la lista
Faltan campos requeridos No se proporcionaron todos los campos obligatorios Revisar la documentación del template y agregar los campos faltantes
Error al generar PDF Error interno al crear el PDF Verificar que los datos sean válidos y contactar soporte

Colección Postman

Descarga la colección completa de Postman con todos los endpoints pre-configurados.

Descargar Colección

Incluye 13 requests pre-configurados con ejemplos

Descargar JSON
Cómo Importar
  1. Abre Postman
  2. Click en "Import"
  3. Selecciona el archivo JSON descargado
  4. La colección aparecerá en tu workspace
  5. Configura la URL base si es necesario
Tip

La colección incluye variables de entorno para facilitar el cambio entre desarrollo y producción.