facturapi/facturapi-php

Facturapi's PHP client library

Maintainers

๐Ÿ‘ javorosas

Package info

github.com/FacturAPI/facturapi-php

Homepage

Issues

Documentation

pkg:composer/facturapi/facturapi-php

Statistics

Installs: 49โ€‰334

Dependents: 1

Suggesters: 0

Stars: 15

4.5.0 2026-06-09 17:13 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 31dc7298337d444f4a247a2e3999542228561e5d

  • Jhonatan Laguna
  • Javier Rosas
  • Raรบl Sรกnchez

apimexicosatcfdifacturafacturapi

This package is auto-updated.

Last update: 2026-06-09 17:14:02 UTC


README

Official PHP SDK for Facturapi.

Language: English | Espaรฑol

๐Ÿ‘ Latest Version
๐Ÿ‘ PHP Version
๐Ÿ‘ Total Downloads
๐Ÿ‘ License

Installation โšก

composer require facturapi/facturapi-php

Without Composer (supported workaround):

require_once __DIR__ . '/path/to/facturapi-php/src/Facturapi.php';

Requirements:

  • PHP >=8.2

Backward Compatibility With Older PHP Versions

Since version 4.0.0, the SDK requires PHP >= 8.2.

  • If your project already runs on PHP 8.2+, no extra changes are needed.
  • If your project runs on PHP 8.1 or lower, pin to version 3.7.0 (latest compatible release before PHP 8.2 requirement).

Quick Start ๐Ÿš€

<?php

require_once __DIR__ . '/vendor/autoload.php';

use Facturapi\Facturapi;

$apiKey = getenv('FACTURAPI_KEY') ?: 'YOUR_API_KEY';
$facturapi = new Facturapi($apiKey);

$customer = $facturapi->Customers->create([
 'email' => 'walterwhite@gmail.com',
 'legal_name' => 'Walter White',
 'tax_id' => 'WIWA761018',
 'address' => [
 'zip' => '06800',
 'street' => 'Av. de los Rosales',
 'exterior' => '123',
 'neighborhood' => 'Tepito',
 ],
]);

Client Configuration โš™๏ธ

Constructor signature:

new Facturapi(string $apiKey, ?array $config = null)

Supported config keys:

  • apiVersion (string, default: v2)
  • timeout (int|float, default: 360 seconds)
  • httpClient (Psr\Http\Client\ClientInterface, advanced)

Example:

use Facturapi\Facturapi;

$facturapi = new Facturapi($apiKey, [
 'apiVersion' => 'v2',
 'timeout' => 420,
]);

Custom HTTP Client (Advanced)

The SDK works out of the box with its internal Guzzle-based client.

If you provide httpClient, pass any PSR-18 compatible client and configure its timeout values in that client:

use Facturapi\Facturapi;
use GuzzleHttp\Client;

$httpClient = new Client([
 'timeout' => 420,
]);

$facturapi = new Facturapi($apiKey, [
 'httpClient' => $httpClient,
]);

Common Usage ๐Ÿงพ

Create a Product

$product = $facturapi->Products->create([
 'product_key' => '4319150114',
 'description' => 'Apple iPhone 8',
 'price' => 345.60,
]);

Create an Invoice

$invoice = $facturapi->Invoices->create([
 'customer' => 'YOUR_CUSTOMER_ID',
 'items' => [[
 'quantity' => 1,
 'product' => 'YOUR_PRODUCT_ID',
 ]],
 'payment_form' => \Facturapi\PaymentForm::EFECTIVO,
 'folio_number' => '581',
 'series' => 'F',
]);

Download Files

$zipBytes = $facturapi->Invoices->downloadZip('INVOICE_ID');
$pdfBytes = $facturapi->Invoices->downloadPdf('INVOICE_ID');
$xmlBytes = $facturapi->Invoices->downloadXml('INVOICE_ID');

downloadPdf() returns raw PDF bytes (binary string), not base64.

file_put_contents('invoice.pdf', $pdfBytes);

Send by Email

$facturapi->Invoices->sendByEmail('INVOICE_ID');

Comercio Exterior Catalogs

$results = $facturapi->ComercioExteriorCatalogs->searchTariffFractions([
 'q' => '0101',
 'page' => 0,
 'limit' => 10,
]);

Organizations: Set Default Series

$result = $facturapi->Organizations->updateDefaultSeries(
 'ORGANIZATION_ID',
 [
 'type' => 'I',
 'series' => 'A',
 ]
);

Error Handling โš ๏ธ

On non-2xx responses, the SDK throws Facturapi\Exceptions\FacturapiException.

The exception includes:

  • getMessage(): API error message when present.
  • getStatusCode(): HTTP status code.
  • getErrorData(): decoded JSON error payload (full API shape).
  • getRawBody(): raw response body string.
use Facturapi\Exceptions\FacturapiException;

try {
 $facturapi->Invoices->create($payload);
} catch (FacturapiException $e) {
 $status = $e->getStatusCode();
 $error = $e->getErrorData(); // Full API error shape when body is valid JSON.
 $firstDetail = $error['details'][0] ?? null; // e.g. ['path' => 'items.0.quantity', 'message' => '...', 'code' => '...']
}

Migration Notes (v4) ๐Ÿ”„

  • Minimum PHP version is now >=8.2.
  • Removed support for the positional apiVersion constructor argument.
  • Composer projects: no loader changes needed; keep using vendor/autoload.php.
  • Non-Composer projects can keep using the SDK by loading src/Facturapi.php directly.
  • Snake_case method aliases are deprecated in v4 and will be removed in v5.
  • Facturapi\\Exceptions\\Facturapi_Exception is deprecated in v4 and will be removed in v5.
  • Use Facturapi\\Exceptions\\FacturapiException.

Documentation ๐Ÿ“š

Full docs: https://docs.facturapi.io

Support ๐Ÿ’ฌ

  • Issues: open a GitHub issue
  • Email: contacto@facturapi.io