Skip to content
Back to News
Changelog

getpeppr for PHP: send the UBL you already generate over Peppol

phplaunch

PHP developers already have good libraries to generate a Peppol UBL invoice: num-num/ubl-invoice and josemmo/einvoicing are widely used for that. What they leave open is the next step: sending that XML over the Peppol network.

getpeppr/getpeppr-php covers that step.

composer require getpeppr/getpeppr-php
use Getpeppr\Client;

$getpeppr = new Client((string) getenv('GETPEPPR_API_KEY'));

$sent = $getpeppr->importInvoice(
    $xml,                              // the UBL you generated
    'INV-2026-001.xml',
    '9925:BE0314595348',               // the recipient's Peppol id
    idempotencyKey: $operationId,      // one opaque id per logical send
);

echo $sent->providerDocumentId;

getpeppr validates the document against the official Peppol rulebooks and delivers it to the recipient's access point. The package never rewrites, repairs or regenerates it.

What version 0.1 does

  • Sends a UBL Invoice or CreditNote, for your own company or, with a master key, for one of your platform's customers.
  • Reads a document's status.
  • Creates, lists and reads your platform's customers (Legal Entities).
  • Verifies webhook signatures in constant time, and returns the event id you need to handle redeliveries once.
  • Tells you what to do when a call fails: each exception class says whether resending can succeed. A document that breaks a Peppol rule and an account that may not send yet both answer retryable: false, yet one must be fixed and the other kept: the package tells them apart from the Getpeppr-Remediation header, not from retryable.

It is a PSR-18 client: it uses the HTTP client your application already has, never retries on its own, writes no logs, and keeps your API key, the document and the invoice number out of every exception message. Version 0.1.0 needs PHP 8.2 or later and is tested up to 8.5.

What it does not do

It does not generate UBL, and it is not a port of the TypeScript SDK. To send invoices described as JSON, use the API directly or @getpeppr/sdk. Countries and document types are those of the getpeppr service: see Countries.

Get started