pennylane-sdk-php¶
Le SDK PHP non officiel pour l'API Pennylane, la plateforme française de comptabilité et de facturation utilisée par des dizaines de milliers d'entreprises et de cabinets d'expertise comptable.
Non affilié
Ce projet est communautaire, il n'est pas affilié à Pennylane SAS. Un SDK Python sœur couvre la même API avec les mêmes contrats de conception, si cela correspond mieux à votre stack.
Pourquoi ce SDK¶
- Complet : les 213 opérations de la Company API v2 et de la Firm API v1 sont implémentées. La couverture est mesurée par rapport aux spécifications OpenAPI officielles grâce à un script d'audit exécuté en CI.
- Typé : chaque réponse est un objet PHP en lecture seule, hydraté de façon défensive pour que les champs inconnus ou ajoutés récemment par l'API ne cassent jamais votre code.
- L'argent en chaînes de caractères : les montants monétaires et les quantités transitent sous forme de chaînes numériques, jamais des flottants, conformément au contrat de l'API et sans risque d'erreur d'arrondi sur les données comptables.
- Sûr pour les données comptables : l'API Pennylane n'offre pas d'idempotence côté serveur, le SDK ne retente donc jamais un POST après une erreur serveur. Vous ne créerez pas de facture en double à cause d'un incident réseau.
- Conscient des limites de débit : les requêtes sont cadencées côté client selon les limites officielles (25 requêtes par 5 secondes pour les dossiers clients, 5 par seconde pour les cabinets), et les réponses 429 sont retentées en respectant
retry-after. Les exports en masse fonctionnent sans effort. - Une pagination qui s'efface : parcourez un appel de liste et le SDK récupère les pages suivantes pour vous, sous la limite de débit, en renvoyant vos filtres comme l'exige l'API.
Installation¶
composer require goatandcow7/pennylane-sdk
Nécessite PHP 8.2 ou supérieur. Le SDK dialogue avec l'API via PSR-18, il a donc besoin d'un client HTTP. Guzzle est suggéré et détecté automatiquement grâce à php-http/discovery :
composer require guzzlehttp/guzzle
php-http/discovery s'exécute comme un plugin Composer ; autorisez-le une fois dans composer.json :
"config": {
"allow-plugins": {
"php-http/discovery": true
}
}
Un aperçu¶
<?php
use Pennylane\Sdk\Pennylane;
use Pennylane\Sdk\Filter;
$client = new Pennylane(); // lit PENNYLANE_API_TOKEN
// Parcourt toutes les factures depuis janvier, les plus récentes en premier
foreach ($client->customerInvoices->list(
filter: [Filter::gte('date', '2026-01-01')],
sort: '-date',
) as $invoice) {
echo $invoice->invoiceNumber . ' ' . $invoice->currencyAmount . PHP_EOL;
}
// Crée et finalise une facture
$invoice = $client->customerInvoices->create(
date: '2026-07-08',
deadline: '2026-08-07',
customerId: 123,
invoiceLines: [['product_id' => 45, 'quantity' => '2']],
);
$client->customerInvoices->finalize($invoice->id);
$client->customerInvoices->sendByEmail($invoice->id);
Les cabinets d'expertise comptable peuvent opérer sur l'ensemble de leur portefeuille de dossiers clients :
<?php
use Pennylane\Sdk\PennylaneFirm;
$firm = new PennylaneFirm(); // lit PENNYLANE_FIRM_API_TOKEN
foreach ($firm->companies->list() as $company) {
$balance = $firm->trialBalance->list(
$company->id,
periodStart: '2026-01-01',
periodEnd: '2026-06-30',
);
}
Pour aller plus loin¶
- Bien démarrer : jetons, premier appel, gestion des erreurs de base.
- Guides : authentification, pagination, gestion des erreurs et des nouvelles tentatives.