agentsclimarketplace

Super pdp

Skill QrCommunication/skills/skills/super-pdp

Portable agent skills for Claude Code — French e-invoicing compliance (ISCA/NF525 + 2026-2027 reform), SuperPDP API integration (Factur-X/UBL/CII/EN16931/Peppol), and a generic tiered orchestration router with skill discovery.

Install
npx -y skills add QrCommunication/skills --skill super-pdp

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Expert d'intégration de l'API SuperPDP pour la facturation électronique européenne (Factur-X, UBL, CII, EN16931, Peppol BIS 3.0, PPF). À utiliser pour IMPLÉMENTER, intégrer ou déboguer des appels à l'API SuperPDP directement dans un projet (n'importe quel langage) : authentification OAuth2, création/envoi de factures, conversion entre formats, validation, synchronisation des statuts via invoice_events, annuaire Peppol/PPF. Déclencher dès qu'apparaissent : SuperPDP, api.superpdp.tech, /v1.beta/, invoice_events, validation_reports, directory_entries, Factur-X, UBL, CII, EN16931, Peppol, facture électronique.

SKILL.md

8.1 KB, ~2.4k tokens by cl100k_base, as published. Nobody here has run it

SuperPDP — intégration de l'API de facturation électronique

API SuperPDP v1.10.0.beta · Base URL https://api.superpdp.tech/ · Doc en ligne : https://www.superpdp.tech/openapi/

Règle n°1 — la spec OpenAPI est la source de vérité

Avant toute implémentation impliquant des structures de données (schémas, enums, champs requis, descriptions BT-/BG- de EN16931), consulter la spec bundlée :

Read / Grep : references/superpdp-openapi.yaml   (4143 lignes — la vérité)

Elle contient TOUS les schémas, enums et champs. Grep ciblé plutôt que lecture intégrale, p. ex. :

grep -n "en_invoice:"              references/superpdp-openapi.yaml   # schéma facture
grep -n "invoice_type_code"        references/superpdp-openapi.yaml   # enum types
grep -n "/v1.beta/invoices"        references/superpdp-openapi.yaml   # endpoint
grep -nA30 "EnInvoice:"            references/superpdp-openapi.yaml   # définition complète

Si la spec locale est absente dans un projet, fallback : WebFetch https://api.superpdp.tech/openapi.json.

Authentification — OAuth2 (PAS de Bearer API key)

POST https://api.superpdp.tech/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET
  • Client Credentials : accès à ses propres données (équivalent API key).
  • Authorization Code : accès aux données d'un autre utilisateur (GET /oauth2/authorizePOST /oauth2/token avec authorization_code).
  • Le token (Bearer) obtenu sert ensuite sur tous les endpoints /v1.beta/.
  • Config type (.env) : SUPERPDP_API_URL=https://api.superpdp.tech, SUPERPDP_CLIENT_ID, SUPERPDP_CLIENT_SECRET.

Les 14 endpoints (TOUS sous /v1.beta/)

MéthodeEndpointRôleAuth
GET/v1.beta/companies/meInfos entreprise couranteOAuth2
GET/v1.beta/invoicesLister (filtres direction/date/expand)OAuth2
POST/v1.beta/invoicesCréer/envoyer une factureOAuth2
GET/v1.beta/invoices/{id}Détail factureOAuth2
GET/v1.beta/invoices/{id}/downloadTélécharger PDF/XML brutOAuth2
POST/v1.beta/invoices/convertConvertir entre formatsPublic
GET/v1.beta/invoices/generate_test_invoiceFacture test (sandbox)OAuth2
GET/v1.beta/invoice_eventsLister événementsOAuth2
POST/v1.beta/invoice_eventsCréer un événement/statutOAuth2
GET/v1.beta/directory_entriesLister annuaire (Peppol/PPF)OAuth2
POST/v1.beta/directory_entriesCréer entrée annuaireOAuth2
GET/v1.beta/directory_entries/{id}Détail entréeOAuth2
DELETE/v1.beta/directory_entries/{id}Supprimer entréeOAuth2
POST/v1.beta/validation_reportsValider des facturesPublic

Détail des paramètres (pagination curseur, expand[], filtres) : references/api-reference.md.

Pièges d'implémentation (non négociables)

POST /v1.beta/invoices n'accepte PAS de JSON.

  • application/xml → XML CII/UBL brut.
  • multipart/form-data → PDF Factur-X (+ invoice).
  • Envoyer du JSON sur cet endpoint = erreur.

Les montants sont des STRINGS (format décimal "1000.00"), jamais des numbers, dans tout le modèle en_invoice.

Ce qui N'EXISTE PAS (ne jamais appeler) :

Faux endpoint / conceptRéalité
/v1/documents/n'existe pas
/v1/credit-notesun avoir = une facture invoice_type_code: "381"
/v1/validatec'est POST /v1.beta/validation_reports
/v1/invoices/ (sans .beta)c'est /v1.beta/invoices/
endpoint « cancel »n'existe pas
endpoint « mark-paid »POST /v1.beta/invoice_events status_code: "fr:212"

Formats supportés

FormatCléDescription
Factur-Xfactur-xPDF/A-3 + XML CII (France)
UBLublXML OASIS UBL 2.1
CIIciiXML UN/CEFACT
EN16931en16931JSON sémantique européen

Conversion : POST /v1.beta/invoices/convert?from=cii&to=ubl. Pour générer un Factur-X : multipart pdf + invoice.

Structure d'une facture EN16931 (en_invoice)

Modèle JSON minimal (montants = strings ; voir l'OpenAPI pour tous les champs) :

{
  "invoice_number": "INV-2026-001",
  "issue_date": "2026-03-03",
  "due_date": "2026-04-03",
  "invoice_type_code": "380",
  "document_currency_code": "EUR",
  "buyer_reference": "PO-12345",
  "seller": { "name": "Ma Societe SAS", "street_name": "123 Rue de Paris",
    "city_name": "Paris", "postal_zone": "75001", "country_code": "FR",
    "company_id": "SIRET:12345678901234", "vat_id": "FR12345678901" },
  "buyer": { "name": "Client SARL", "street_name": "456 Avenue des Champs",
    "city_name": "Lyon", "postal_zone": "69001", "country_code": "FR",
    "company_id": "SIRET:98765432109876", "vat_id": "FR98765432109" },
  "lines": [{ "id": "1",
    "invoiced_quantity": { "value": "10", "unit_code": "C62" },
    "line_extension_amount": "1000.00",
    "item": { "name": "Service de conseil" },
    "price": { "price_amount": "100.00" },
    "line_vat_information": { "vat_category_code": "S", "vat_rate": "20.00" } }],
  "document_totals": {
    "sum_of_invoice_line_net_amount": "1000.00",
    "invoice_total_amount_without_vat": "1000.00",
    "invoice_total_amount_with_vat": "1200.00",
    "amount_due_for_payment": "1200.00" },
  "vat_break_down": [{ "vat_category_taxable_amount": "1000.00",
    "vat_category_tax_amount": "200.00", "vat_category_code": "S",
    "vat_category_rate": "20.00" }],
  "payment_instructions": { "payment_means_code": "30",
    "credit_transfer": [{ "payment_account_identifier": "FR7630001007941234567890185" }] }
}

Workflow d'intégration type

  1. Auth : obtenir un token (client_credentials).
  2. Créer/envoyer : POST /v1.beta/invoices (XML ou multipart PDF).
  3. Valider (optionnel, public) : POST /v1.beta/validation_reports.
  4. Convertir si besoin : POST /v1.beta/invoices/convert?from=&to=.
  5. Suivre le cycle de vie : poller GET /v1.beta/invoice_events?invoice_id=… et publier les statuts métier via POST /v1.beta/invoice_events (fr:204fr:211, paiement fr:212).
  6. Annuaire : gérer la présence Peppol/PPF via directory_entries.

Codes métier (résumé)

invoice_type_code : 380 facture · 381 avoir · 384 rectificative · 389 auto-facturation. vat_category_code : S standard · Z zéro · E exonéré · AE autoliquidation · K intracommunautaire · G export · O non assujetti. payment_means_code : 30 virement · 48 carte · 49 prélèvement · 20 chèque · 10 espèces. unit_code : C62 unité · HUR heure · DAY jour · KGM kg…

Tables complètes + status codes invoice_events : references/api-reference.md.

Références

Conformité du format produit (Factur-X PDF/A-3, Schematron EN16931) et contexte réglementaire FR (ISCA, NF525, réforme PPF) → voir le skill voisin isca-nf525-facturation-electronique.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.