PHP
Install factuarea/factuarea-php with Composer, authenticate, and create your first invoice. PSR-4, Guzzle-based, PHP 8.2+.
The official PHP SDK is factuarea/factuarea-php
on Packagist — PSR-4, Guzzle-based. Source:
github.com/factuarea/factuarea-php.
It wraps the v1 REST API with automatic retries, idempotency keys, cursor
auto-pagination, a typed error hierarchy and webhook verification — covered in
the SDK overview.
Install
composer require factuarea/factuarea-phpRequires PHP 8.2 or newer with the json and mbstring extensions (both
bundled with standard PHP builds).
Authenticate
Pass your API key. The key prefix selects the environment — there is no
separate flag: a fact_test_… key always runs against the isolated
sandbox, a fact_live_… key against production.
<?php
require 'vendor/autoload.php';
use Factuarea\Sdk\Custom\FactuareaClient;
// The key prefix selects the environment:
// fact_test_… → sandbox fact_live_… → production
$factuarea = FactuareaClient::create(getenv('FACTUAREA_API_KEY'));FactuareaClient::create() is the recommended entry point: it wires Bearer
authentication and registers the automatic Idempotency-Key behaviour for you.
For advanced configuration (custom Guzzle client, custom retry policy, staging
base URL) the generated builder is still available:
use Factuarea\Sdk\Factuarea;
use Factuarea\Sdk\Models\Components\Security;
$factuarea = Factuarea::builder()
->setSecurity(new Security(bearerAuth: getenv('FACTUAREA_API_KEY')))
->setServerURL('https://api.factuarea.com/v1')
->build();Server-side only. Your API key is a secret. Never ship the SDK with a live key to a public client — use it from your backend.
Quickstart
Create a client and an invoice, then download its PDF. Every operation is
reachable as ->{resource}->publicApiV1{Resource}{Action}; the per-endpoint
snippets in the API reference show the exact call for each
operation.
<?php
require 'vendor/autoload.php';
use Factuarea\Sdk\Custom\FactuareaClient;
use Factuarea\Sdk\Models\Components;
use Brick\DateTime\LocalDate;
$factuarea = FactuareaClient::create(getenv('FACTUAREA_API_KEY'));
// 1. Create a client.
$client = $factuarea->clients->publicApiV1ClientsCreate(
new Components\CreateClientRequest(
name: 'Cliente Demo SL',
taxId: 'B98765432',
),
);
// 2. Create an invoice (the API computes the totals).
$invoice = $factuarea->invoices->publicApiV1InvoicesCreate(
new Components\CreateInvoiceRequest(
clientId: $client->object->data->id,
seriesId: '01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0e',
issuedOn: LocalDate::parse('2026-06-05'),
dueOn: LocalDate::parse('2026-07-05'),
lines: [
new Components\CreateInvoiceRequestLine(
description: 'Consultoría — junio 2026',
quantity: 10,
unitPrice: 100,
taxRateId: '01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a0f',
),
],
),
);
// 3. Download the PDF.
$pdf = $factuarea->invoices->publicApiV1InvoicesPdf($invoice->object->data->id);
file_put_contents('invoice.pdf', $pdf->bytes ?? '');Run everything with a fact_test_ key first — sandbox effects (VeriFactu →
AEAT, FACe, email, webhooks) are switched off. When your flow works end-to-end, swap
the prefix to fact_live_. See Test mode & sandbox.
Next steps
The runtime behaviour — retries, idempotency, cursor auto-pagination, the typed error hierarchy and webhook verification — is shared across both SDKs and documented once in the SDK overview:
TypeScript
Install @factuarea/sdk for Node.js, authenticate, and create your first invoice. Dual ESM + CommonJS, full type declarations, Node 20+.
Overview
Connect AI agents to Factuarea over the Model Context Protocol — 232 tools across invoicing, catalog, compliance and webhooks, with OAuth 2.1 and API-key auth.