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
- Lee la guía completa de Autenticación
- Consulta la referencia de Manejo de errores
- Revisa la Referencia Panamá para tasas de ITBMS, tipos de documento y métodos de pago