ConteoDocs

Inicio rápido

Envía tu primera factura en 5 minutos usando la API del Gateway G-Force.

Inicio rápido

Envía tu primera factura electrónica al entorno de desarrollo.

Requisitos previos

  • Credenciales de plataforma G-Force (GF_Company, GF_Token, Enterprise)
  • Credenciales del PAC (Company, Token) de tu proveedor PAC
  • Token JWT para el header Authorization

Paso 1: Enviar una factura

Envía una solicitud POST al endpoint SendDocument con un payload mínimo de factura:

curl -X POST \
  https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB/SendDocument \
  -H "Authorization: TU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "GF_Company": "tu_usuario_gforce",
    "GF_Token": "tu_contraseña_gforce",
    "Id_Pac": "EBI",
    "Enterprise": "1",
    "Company": "usuario_pac_contribuyente",
    "Token": "contraseña_pac_contribuyente",
    "identifierControlShipping": "1",
    "environment": "2",
    "document": {
      "codeBranchIssuer": "0000",
      "dataTransaction": {
        "typeEmission": "01",
        "typeDocument": "01",
        "numberDocumentFiscal": "0000000001",
        "pointBillingFiscal": "001",
        "dateBroadcast": "2024-01-15T10:00:00-05:00",
        "natureOperation": "01",
        "typeOperation": "1",
        "destinationOperation": "1",
        "formatCAFE": "3",
        "deliveryCAFE": "3",
        "shippingContainer": "1",
        "processGeneration": "1",
        "typeSale": "1",
        "client": {
          "typeClientEB": "02",
          "typeTaxpayer": "1",
          "numberRUC": "155596713-2-2016",
          "digitCheckRUC": "59",
          "businessName": "Cliente de Prueba",
          "address": "Ave. La Paz",
          "codeLocation": "1-1-1",
          "province": "Bocas del Toro",
          "district": "Bocas del Toro",
          "correction": "Bocas del Toro",
          "country": "PA"
        }
      },
      "listItems": [
        {
          "description": "Servicio de consultoria",
          "code": "SRV-001",
          "amount": "1.00",
          "priceUnit": "100.00",
          "priceUnitDiscount": "0.00",
          "priceItem": "100.00",
          "rateITBMS": "01",
          "valueITBMS": "7.00",
          "totalValue": "107.00",
          "codeGTIN": "0",
          "cantGTINCom": "1.00",
          "codeGTINInv": "0",
          "cantGTINComInv": "1.00"
        }
      ],
      "totalsSubTotals": {
        "totalPriceNet": "100.00",
        "totalITBMS": "7.00",
        "totalISC": "",
        "totalAmountTaxed": "7.00",
        "totalInvoice": "107.00",
        "totalValueReceived": "107.00",
        "timePayment": "1",
        "nroItems": "1",
        "totalAllItems": "107.00",
        "listFormPayment": [
          {
            "formPaymentInvoice": "02",
            "valueFeePaid": "107.00"
          }
        ]
      }
    }
  }'
const BASE_URL = 'https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB';
const JWT_TOKEN = 'TU_JWT_TOKEN';

const response = await fetch(`${BASE_URL}/SendDocument`, {
  method: 'POST',
  headers: {
    'Authorization': JWT_TOKEN,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    GF_Company: 'tu_usuario_gforce',
    GF_Token: 'tu_contraseña_gforce',
    Id_Pac: 'EBI',
    Enterprise: '1',
    Company: 'usuario_pac_contribuyente',
    Token: 'contraseña_pac_contribuyente',
    identifierControlShipping: '1',
    environment: '2',
    document: {
      codeBranchIssuer: '0000',
      dataTransaction: {
        typeEmission: '01',
        typeDocument: '01',
        numberDocumentFiscal: '0000000001',
        pointBillingFiscal: '001',
        dateBroadcast: '2024-01-15T10:00:00-05:00',
        natureOperation: '01',
        typeOperation: '1',
        destinationOperation: '1',
        formatCAFE: '3',
        deliveryCAFE: '3',
        shippingContainer: '1',
        processGeneration: '1',
        typeSale: '1',
        client: {
          typeClientEB: '02',
          typeTaxpayer: '1',
          numberRUC: '155596713-2-2016',
          digitCheckRUC: '59',
          businessName: 'Cliente de Prueba',
          address: 'Ave. La Paz',
          codeLocation: '1-1-1',
          province: 'Bocas del Toro',
          district: 'Bocas del Toro',
          correction: 'Bocas del Toro',
          country: 'PA',
        },
      },
      listItems: [
        {
          description: 'Servicio de consultoria',
          code: 'SRV-001',
          amount: '1.00',
          priceUnit: '100.00',
          priceUnitDiscount: '0.00',
          priceItem: '100.00',
          rateITBMS: '01',
          valueITBMS: '7.00',
          totalValue: '107.00',
          codeGTIN: '0',
          cantGTINCom: '1.00',
          codeGTINInv: '0',
          cantGTINComInv: '1.00',
        },
      ],
      totalsSubTotals: {
        totalPriceNet: '100.00',
        totalITBMS: '7.00',
        totalISC: '',
        totalAmountTaxed: '7.00',
        totalInvoice: '107.00',
        totalValueReceived: '107.00',
        timePayment: '1',
        nroItems: '1',
        totalAllItems: '107.00',
        listFormPayment: [
          { formPaymentInvoice: '02', valueFeePaid: '107.00' },
        ],
      },
    },
  }),
});

const data = await response.json();
console.log(data);
// { code: '200', cufe: 'FE012000...', qr: 'https://...', ... }
import requests

BASE_URL = "https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB"
JWT_TOKEN = "TU_JWT_TOKEN"

payload = {
    "GF_Company": "tu_usuario_gforce",
    "GF_Token": "tu_contraseña_gforce",
    "Id_Pac": "EBI",
    "Enterprise": "1",
    "Company": "usuario_pac_contribuyente",
    "Token": "contraseña_pac_contribuyente",
    "identifierControlShipping": "1",
    "environment": "2",
    "document": {
        "codeBranchIssuer": "0000",
        "dataTransaction": {
            "typeEmission": "01",
            "typeDocument": "01",
            "numberDocumentFiscal": "0000000001",
            "pointBillingFiscal": "001",
            "dateBroadcast": "2024-01-15T10:00:00-05:00",
            "natureOperation": "01",
            "typeOperation": "1",
            "destinationOperation": "1",
            "formatCAFE": "3",
            "deliveryCAFE": "3",
            "shippingContainer": "1",
            "processGeneration": "1",
            "typeSale": "1",
            "client": {
                "typeClientEB": "02",
                "typeTaxpayer": "1",
                "numberRUC": "155596713-2-2016",
                "digitCheckRUC": "59",
                "businessName": "Cliente de Prueba",
                "address": "Ave. La Paz",
                "codeLocation": "1-1-1",
                "province": "Bocas del Toro",
                "district": "Bocas del Toro",
                "correction": "Bocas del Toro",
                "country": "PA",
            },
        },
        "listItems": [
            {
                "description": "Servicio de consultoria",
                "code": "SRV-001",
                "amount": "1.00",
                "priceUnit": "100.00",
                "priceUnitDiscount": "0.00",
                "priceItem": "100.00",
                "rateITBMS": "01",
                "valueITBMS": "7.00",
                "totalValue": "107.00",
                "codeGTIN": "0",
                "cantGTINCom": "1.00",
                "codeGTINInv": "0",
                "cantGTINComInv": "1.00",
            }
        ],
        "totalsSubTotals": {
            "totalPriceNet": "100.00",
            "totalITBMS": "7.00",
            "totalISC": "",
            "totalAmountTaxed": "7.00",
            "totalInvoice": "107.00",
            "totalValueReceived": "107.00",
            "timePayment": "1",
            "nroItems": "1",
            "totalAllItems": "107.00",
            "listFormPayment": [
                {"formPaymentInvoice": "02", "valueFeePaid": "107.00"}
            ],
        },
    },
}

response = requests.post(
    f"{BASE_URL}/SendDocument",
    json=payload,
    headers={
        "Authorization": JWT_TOKEN,
        "Content-Type": "application/json",
    },
)

data = response.json()
print(data)
# {'code': '200', 'cufe': 'FE012000...', 'qr': 'https://...', ...}
<?php

$baseUrl = 'https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB';
$jwtToken = 'TU_JWT_TOKEN';

$payload = [
    'GF_Company' => 'tu_usuario_gforce',
    'GF_Token' => 'tu_contraseña_gforce',
    'Id_Pac' => 'EBI',
    'Enterprise' => '1',
    'Company' => 'usuario_pac_contribuyente',
    'Token' => 'contraseña_pac_contribuyente',
    'identifierControlShipping' => '1',
    'environment' => '2',
    'document' => [
        'codeBranchIssuer' => '0000',
        'dataTransaction' => [
            'typeEmission' => '01',
            'typeDocument' => '01',
            'numberDocumentFiscal' => '0000000001',
            'pointBillingFiscal' => '001',
            'dateBroadcast' => '2024-01-15T10:00:00-05:00',
            'natureOperation' => '01',
            'typeOperation' => '1',
            'destinationOperation' => '1',
            'formatCAFE' => '3',
            'deliveryCAFE' => '3',
            'shippingContainer' => '1',
            'processGeneration' => '1',
            'typeSale' => '1',
            'client' => [
                'typeClientEB' => '02',
                'typeTaxpayer' => '1',
                'numberRUC' => '155596713-2-2016',
                'digitCheckRUC' => '59',
                'businessName' => 'Cliente de Prueba',
                'address' => 'Ave. La Paz',
                'codeLocation' => '1-1-1',
                'province' => 'Bocas del Toro',
                'district' => 'Bocas del Toro',
                'correction' => 'Bocas del Toro',
                'country' => 'PA',
            ],
        ],
        'listItems' => [
            [
                'description' => 'Servicio de consultoria',
                'code' => 'SRV-001',
                'amount' => '1.00',
                'priceUnit' => '100.00',
                'priceUnitDiscount' => '0.00',
                'priceItem' => '100.00',
                'rateITBMS' => '01',
                'valueITBMS' => '7.00',
                'totalValue' => '107.00',
                'codeGTIN' => '0',
                'cantGTINCom' => '1.00',
                'codeGTINInv' => '0',
                'cantGTINComInv' => '1.00',
            ],
        ],
        'totalsSubTotals' => [
            'totalPriceNet' => '100.00',
            'totalITBMS' => '7.00',
            'totalISC' => '',
            'totalAmountTaxed' => '7.00',
            'totalInvoice' => '107.00',
            'totalValueReceived' => '107.00',
            'timePayment' => '1',
            'nroItems' => '1',
            'totalAllItems' => '107.00',
            'listFormPayment' => [
                ['formPaymentInvoice' => '02', 'valueFeePaid' => '107.00'],
            ],
        ],
    ],
];

$ch = curl_init("$baseUrl/SendDocument");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: $jwtToken",
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($payload),
]);

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

$data = json_decode($response, true);
print_r($data);
// ['code' => '200', 'cufe' => 'FE012000...', 'qr' => 'https://...', ...]

Paso 2: Verificar la respuesta

Una respuesta exitosa devuelve:

{
  "code": "200",
  "result": "procesado",
  "message": "El documento se envio correctamente.",
  "cufe": "FE012000024961...",
  "qr": "https://dgi-fep.mef.gob.pa/Consultas/FacturasPorQR?chFE=...",
  "receptionDateDGI": "2024-01-15T10:00:06-05:00",
  "nroAuthorizationProtocol": "..."
}

Guarda los valores cufe, qr, receptionDateDGI y nroAuthorizationProtocol.

Paso 3: Descargar el CAFE (PDF)

Inmediatamente después de un envío exitoso, obtén el PDF oficial de la factura:

curl -X POST \
  https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB/DownloadPDF \
  -H "Authorization: TU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "GF_Company": "tu_usuario_gforce",
    "GF_Token": "tu_contraseña_gforce",
    "Id_Pac": "EBI",
    "Enterprise": "1",
    "Company": "usuario_pac_contribuyente",
    "Token": "contraseña_pac_contribuyente",
    "Branch": "",
    "invoiceId": "",
    "documentData": {
      "codeBranchIssuing": "0000",
      "numberDocumentFiscal": "0000000001",
      "pointBillingFiscal": "001",
      "serialDevice": "",
      "typeDocument": "01",
      "typeEmission": "01"
    }
  }'
import { writeFile } from 'node:fs/promises';

const pdfResponse = await fetch(`${BASE_URL}/DownloadPDF`, {
  method: 'POST',
  headers: {
    'Authorization': JWT_TOKEN,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    GF_Company: 'tu_usuario_gforce',
    GF_Token: 'tu_contraseña_gforce',
    Id_Pac: 'EBI',
    Enterprise: '1',
    Company: 'usuario_pac_contribuyente',
    Token: 'contraseña_pac_contribuyente',
    Branch: '',
    invoiceId: '',
    documentData: {
      codeBranchIssuing: '0000',
      numberDocumentFiscal: '0000000001',
      pointBillingFiscal: '001',
      serialDevice: '',
      typeDocument: '01',
      typeEmission: '01',
    },
  }),
});

const pdfData = await pdfResponse.json();

if (pdfData.code === '200') {
  // Decodifica Base64 y guarda el CAFE PDF
  const pdfBuffer = Buffer.from(pdfData.document, 'base64');
  await writeFile('factura.pdf', pdfBuffer);
  console.log('CAFE guardado en factura.pdf');
}
import base64

pdf_response = requests.post(
    f"{BASE_URL}/DownloadPDF",
    json={
        "GF_Company": "tu_usuario_gforce",
        "GF_Token": "tu_contraseña_gforce",
        "Id_Pac": "EBI",
        "Enterprise": "1",
        "Company": "usuario_pac_contribuyente",
        "Token": "contraseña_pac_contribuyente",
        "Branch": "",
        "invoiceId": "",
        "documentData": {
            "codeBranchIssuing": "0000",
            "numberDocumentFiscal": "0000000001",
            "pointBillingFiscal": "001",
            "serialDevice": "",
            "typeDocument": "01",
            "typeEmission": "01",
        },
    },
    headers={
        "Authorization": JWT_TOKEN,
        "Content-Type": "application/json",
    },
)

pdf_data = pdf_response.json()

if pdf_data["code"] == "200":
    # Decodifica Base64 y guarda el CAFE PDF
    pdf_bytes = base64.b64decode(pdf_data["document"])
    with open("factura.pdf", "wb") as f:
        f.write(pdf_bytes)
    print("CAFE guardado en factura.pdf")
$pdfPayload = [
    'GF_Company' => 'tu_usuario_gforce',
    'GF_Token' => 'tu_contraseña_gforce',
    'Id_Pac' => 'EBI',
    'Enterprise' => '1',
    'Company' => 'usuario_pac_contribuyente',
    'Token' => 'contraseña_pac_contribuyente',
    'Branch' => '',
    'invoiceId' => '',
    'documentData' => [
        'codeBranchIssuing' => '0000',
        'numberDocumentFiscal' => '0000000001',
        'pointBillingFiscal' => '001',
        'serialDevice' => '',
        'typeDocument' => '01',
        'typeEmission' => '01',
    ],
];

$ch = curl_init("$baseUrl/DownloadPDF");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: $jwtToken",
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($pdfPayload),
]);

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

$pdfData = json_decode($pdfResponse, true);

if ($pdfData['code'] === '200') {
    // Decodifica Base64 y guarda el CAFE PDF
    $pdfBytes = base64_decode($pdfData['document']);
    file_put_contents('factura.pdf', $pdfBytes);
    echo "CAFE guardado en factura.pdf\n";
}

La respuesta contiene el PDF como string Base64 en el campo document. Decodifícalo y almacena el archivo PDF resultante. Este es el CAFE oficial -- el único documento de factura legalmente válido en Panamá.

Paso 4: Verificar el estado (opcional)

Comprueba que la factura fue autorizada por la DGI:

curl -X POST \
  https://gateway-eb-develop.gforceint.com/api/v1/GFGatewayEB/StatusDocument \
  -H "Authorization: TU_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "GF_Company": "tu_usuario_gforce",
    "GF_Token": "tu_contraseña_gforce",
    "Id_Pac": "EBI",
    "Enterprise": "1",
    "Company": "usuario_pac_contribuyente",
    "Token": "contraseña_pac_contribuyente",
    "documentData": {
      "codeBranchIssuing": "0000",
      "numberDocumentFiscal": "0000000001",
      "pointBillingFiscal": "001",
      "typeDocument": "01",
      "typeEmission": "01"
    }
  }'
const statusResponse = await fetch(`${BASE_URL}/StatusDocument`, {
  method: 'POST',
  headers: {
    'Authorization': JWT_TOKEN,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    GF_Company: 'tu_usuario_gforce',
    GF_Token: 'tu_contraseña_gforce',
    Id_Pac: 'EBI',
    Enterprise: '1',
    Company: 'usuario_pac_contribuyente',
    Token: 'contraseña_pac_contribuyente',
    documentData: {
      codeBranchIssuing: '0000',
      numberDocumentFiscal: '0000000001',
      pointBillingFiscal: '001',
      typeDocument: '01',
      typeEmission: '01',
    },
  }),
});

const statusData = await statusResponse.json();
console.log(statusData.statusDocument); // "Autorizada"
status_response = requests.post(
    f"{BASE_URL}/StatusDocument",
    json={
        "GF_Company": "tu_usuario_gforce",
        "GF_Token": "tu_contraseña_gforce",
        "Id_Pac": "EBI",
        "Enterprise": "1",
        "Company": "usuario_pac_contribuyente",
        "Token": "contraseña_pac_contribuyente",
        "documentData": {
            "codeBranchIssuing": "0000",
            "numberDocumentFiscal": "0000000001",
            "pointBillingFiscal": "001",
            "typeDocument": "01",
            "typeEmission": "01",
        },
    },
    headers={
        "Authorization": JWT_TOKEN,
        "Content-Type": "application/json",
    },
)

status_data = status_response.json()
print(status_data["statusDocument"])  # "Autorizada"
$statusPayload = [
    'GF_Company' => 'tu_usuario_gforce',
    'GF_Token' => 'tu_contraseña_gforce',
    'Id_Pac' => 'EBI',
    'Enterprise' => '1',
    'Company' => 'usuario_pac_contribuyente',
    'Token' => 'contraseña_pac_contribuyente',
    'documentData' => [
        'codeBranchIssuing' => '0000',
        'numberDocumentFiscal' => '0000000001',
        'pointBillingFiscal' => '001',
        'typeDocument' => '01',
        'typeEmission' => '01',
    ],
];

$ch = curl_init("$baseUrl/StatusDocument");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: $jwtToken",
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($statusPayload),
]);

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

$statusData = json_decode($statusResponse, true);
echo $statusData['statusDocument']; // "Autorizada"

Respuesta esperada:

{
  "code": "200",
  "statusDocument": "Autorizada",
  "messageDocument": "Autorizado el uso de la FE"
}

Siguientes pasos

On this page