Öffentliches Register
Software-GesundheitsberichtSchema 0.26.0 · Metriken 1.13.0 · 2026-07-22 08:09 UTC

PaddleHQ / paddle-php-sdk

PHP SDK for working with the Paddle API in server-side apps.

PHPApache-2.0★ 56 Sterne⑂ 10 Forksseit Jan. 2024Auf GitHub ansehen ↗

PaddleHQ/paddle-php-sdk erreicht einen Gesundheitsindex von 68 von 100 und liegt damit im Bereich Mittel. Am stärksten schneidet es bei Sustainability & Governance (76/100) ab, am schwächsten bei Security (50/100). Zuletzt heute aktualisiert. 2 Mitwirkende tragen den Großteil der jüngsten Arbeit.

68
gesamt / 100
Mittel

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

68
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

PaddleOrganisation
171 Follower53 öffentliche Reposseit Feb. 2014

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
Packagistpaddlehq/paddle-php-sdkv1.17.117.34033vor 82 Tagenphpsdkpaddle

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

74Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 0 Tagen
7.6/36Commit-Rhythmus — 11/52 Wochen mit Commits
13/18Commit-Volumen — 27 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — 1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Verwendete Eingangsdaten
commits_last_year27
human_commit_share0,99
days_since_last_push0
active_weeks_last_year11

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 33 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 82 Tagen
27/27Release-Rhythmus — ein Release etwa alle 34,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count33
latest_release_tagv1.17.1
releases_from_tagsnein
days_since_latest_release82
mean_days_between_releases34,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

56Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
28.2/60Stars — 56 Stars
8/25Forks — 10 Forks
6/15Watcher — 13 Watcher
Verwendete Eingangsdaten
forks10
stars56
watchers13
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
18/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingja
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
56.5/80Downloads pro Monat — 17.340 Downloads/Monat über packagist
3.2/20Abhängige in der Registry — 2 Pakete hängen davon ab
Verwendete Eingangsdaten
packagespaddlehq/paddle-php-sdk
dependents2
ecosystemspackagist
total_downloads358.394
monthly_downloads17.340

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

76Gut · 24 % des Gesamtindex
Wie die Bewertung erfolgt
25.2/54Bus-Faktor — 2 Beitragende decken die Hälfte aller Commits ab
12/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 47 % der Commits
13.5/13.5Breite der Beitragenden — 10 Beitragende
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Verwendete Eingangsdaten
bus_factor2
contributors_sampled10
top_contributor_share0,467
Wie die Bewertung erfolgt
35.1/46.8Issue-Lösungsquote — 75 % der Issues geschlossen
34.3/38.3PR-Annahme — 123/137 entschiedene PRs gemergt
15/15OpenSSF Scorecard: Code-Review — all changesets reviewed
Verwendete Eingangsdaten
merged_prs123
open_issues6
closed_issues18
issue_closed_ratio0,75
closed_unmerged_prs14
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
16.1/25Reichweite des Inhabers — 171 Follower von PaddleHQ
24.6/25Kontohistorie — 53 öffentliche Repos, Kontoalter ca. 12 Jahre
Verwendete Eingangsdaten
followers171
owner_typeOrganization
is_verified
owner_loginPaddleHQ
public_repos53
account_age_days4.551

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf packagist
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 82 Tagen
20/20Versionshistorie — 33 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagespaddlehq/paddle-php-sdk
ecosystemspackagist
any_deprecatednein
min_days_since_publish82

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

76Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 3 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — .php-cs-fixer.php
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://developer.paddle.com/
10/10Repository-Beschreibung
10/10Topics — 4 Topics
0/10Wiki
Verwendete Eingangsdaten
topicsapi, paddle, php, sdk
has_wikinein
homepagehttps://developer.paddle.com/
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

50Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
2.5/2.5CI-Tests — 30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
7.5/7.5Code-Review — all changesets reviewed
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — 1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate5
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, dangerous_workflow, packaging, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

53Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 95 von 99 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,96
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — .php-cs-fixer.php
0/11Statische Typprüfung
10/10Reproduzierbare Umgebung — Dockerfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
5/8Automatisierte Wartung — Abhängigkeits-Automatisierung konfiguriert, in den erfassten Commits nicht beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfileja
typed_languagenein
bootstrap_filesMakefile
has_devcontainernein
has_linter_configja
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
0/45Typprüfbarer Code — PHP ohne Typprüfungs-Konfiguration
55/55Handhabbare Dateigrößen — 0/663 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languagePHP
largest_source_bytes57.572
source_files_sampled663
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

56GitHub-Sterne
10Mitwirkende
27Commits, letzte 12 Monate
0Tage seit letztem Push
33Releases
2Bus-Faktor
6offene Issues
PackagistPaket-Ökosysteme

Warnungen zur Datenerhebung

  • No resolved dependencies carried a version and a supported ecosystem

Weitere Details

Stern- und Fork-Verlauf 56 ★ / 10 ⇿
56Sterne
10Forks
33Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

0102030405060561042024-012025-032026-06
Major 1Minor 20Patch 12

Jeder Punkt umfasst 3 Tage.

OpenSSF Scorecard 5.0 / 10
5.0Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-22 08:08 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests30 out of 30 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
10Code-Reviewall changesets reviewed
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintained1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 7
RegistryPaketVersionsvorgabeManifest
Packagistmyclabs/php-enum^1.8composer.json
Packagistpsr/http-factory^1.0composer.json
Packagistpsr/http-factory-implementation^1.0composer.json
Packagistpsr/log^1.0 || ^2.0 || ^3.0composer.json
Packagistsymfony/property-access^5.4 || ^6.3 || ^7.0 || ^8.0composer.json
Packagistsymfony/serializer^5.4 || ^6.3 || ^7.0 || ^8.0composer.json
Packagistsymfony/uid^5.4 || ^6.3 || ^7.0 || ^8.0composer.json
Alle Abhängigkeiten 25

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 7 direkte und 18 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Packagistmyclabs/php-enumdirekt
Packagistpsr/http-factorydirekt
Packagistpsr/http-factory-implementationdirekt
Packagistpsr/logdirekt
Packagistsymfony/property-accessdirekt
Packagistsymfony/serializerdirekt
Packagistsymfony/uiddirekt
Packagistext-jsonindirekt
Packagistext-mbstringindirekt
Packagistfriendsofphp/php-cs-fixerindirekt
Packagistguzzlehttp/psr7indirekt
Packagistmonolog/monologindirekt
Packagistphpindirekt
Packagistphp-http/async-client-implementationindirekt
Packagistphp-http/client-commonindirekt
Packagistphp-http/curl-clientindirekt
Packagistphp-http/discoveryindirekt
Packagistphp-http/httplugindirekt
Packagistphp-http/logger-pluginindirekt
Packagistphp-http/messageindirekt
Packagistphp-http/mock-clientindirekt
Packagistphpstan/phpstanindirekt
Packagistphpunit/phpunitindirekt
Packagistrector/rectorindirekt
Packagistsymfony/var-dumperindirekt
Abhängigkeits-Advisories nicht bewertet

Der Advisory-Abgleich konnte für diesen Bericht nicht ausgeführt werden: No resolved dependencies carried a version and a supported ecosystem

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "api",
        "paddle",
        "php",
        "sdk"
      ],
      "is_fork": false,
      "size_kb": 855,
      "has_wiki": false,
      "homepage": "https://developer.paddle.com/",
      "languages": {
        "PHP": 1139295,
        "Makefile": 687,
        "Dockerfile": 344
      },
      "pushed_at": "2026-07-22T08:04:26Z",
      "created_at": "2024-01-11T09:15:28Z",
      "owner_type": "Organization",
      "updated_at": "2026-06-14T03:41:12Z",
      "description": "PHP SDK for working with the Paddle API in server-side apps.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "PHP",
      "significant_languages": [
        "PHP"
      ]
    },
    "owner": {
      "blog": "https://paddle.com",
      "name": "Paddle",
      "type": "Organization",
      "login": "PaddleHQ",
      "company": null,
      "location": "London, UK",
      "followers": 171,
      "avatar_url": "https://avatars.githubusercontent.com/u/6573820?v=4",
      "created_at": "2014-02-03T10:53:53Z",
      "is_verified": null,
      "public_repos": 53,
      "account_age_days": 4551
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.17.1",
          "kind": "patch",
          "published_at": "2026-04-30T08:25:29Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-03-30T15:19:15Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-02-04T09:30:04Z"
        },
        {
          "tag": "v1.15.0",
          "kind": "minor",
          "published_at": "2026-01-29T15:31:26Z"
        },
        {
          "tag": "v1.14.0",
          "kind": "minor",
          "published_at": "2025-11-12T14:27:56Z"
        },
        {
          "tag": "v1.13.1",
          "kind": "patch",
          "published_at": "2025-11-03T11:52:47Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2025-11-03T09:56:29Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2025-10-07T14:08:25Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2025-09-15T09:56:10Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2025-06-27T09:32:27Z"
        },
        {
          "tag": "v1.9.1",
          "kind": "patch",
          "published_at": "2025-02-18T17:07:33Z"
        },
        {
          "tag": "v1.9.0",
          "kind": "minor",
          "published_at": "2025-01-30T17:10:12Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2024-12-19T09:44:39Z"
        },
        {
          "tag": "v1.7.2",
          "kind": "patch",
          "published_at": "2024-12-17T10:54:34Z"
        },
        {
          "tag": "v1.7.1",
          "kind": "patch",
          "published_at": "2024-12-13T09:18:12Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2024-12-11T15:40:38Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2024-12-05T10:54:05Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2024-11-18T15:56:29Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2024-10-17T16:07:29Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2024-09-30T17:32:59Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2024-09-30T17:00:45Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2024-09-18T11:16:24Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2024-08-23T13:49:43Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2024-08-21T08:13:45Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2024-05-01T07:59:53Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2024-03-13T14:48:03Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2024-02-20T15:28:10Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2024-02-13T11:55:59Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2024-01-29T13:54:19Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2024-01-24T11:53:45Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2024-01-23T14:09:10Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2024-01-15T15:19:43Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2024-01-11T12:13:15Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "ae0cb621cf67210cd48b7df4a4205a4761dc39fd",
          "body": null,
          "is_bot": false,
          "headline": "fix: Subscription one time charge for non-catalog products (#158)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-04-30T08:24:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55ffc79ceefc7f1f79a87b27b199846e13b64123",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for metrics (#156)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-03-30T15:18:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c7f82c058855eee8c03669a06669631fd572211",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md (#155)",
          "author_name": "Michael McGovern",
          "author_login": "heymcgovern",
          "committed_at": "2026-03-03T14:35:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a82d76116eb1011fa71604b73f510abfdab87f0",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): 1.16.0 (#154)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-02-04T09:29:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16ec48ce07a0b5c3f9ce4cd5cd19704248382234",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support for WeChat Pay payment method type (#153)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-02-03T11:32:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b066c8ade94b3e0dadc654f50caa1736982bae12",
          "body": "… (#152)",
          "is_bot": false,
          "headline": "feat: Added grand_total_tax to transaction totals and adjusted totals…",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-02-03T10:43:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91c5e40b332c6be5ce3b4c88b3cd664160eedd92",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for payout_reconciliation report (#150)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-02-03T09:53:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a5b0ad3ccffeb2ef942a263088a8be8fcb37d41",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added api_key_exposure.created event support (#151)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2026-02-03T09:29:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26836cefac833258044d5e2b5dbfcc1e9ba4bf97",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): 1.15.0 (#149)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2026-01-29T15:31:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e0f4c16fd1be491821ce8fa182011db0a225569",
          "body": null,
          "is_bot": false,
          "headline": "feat: support installation within Symfony 8 (#148)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2026-01-29T15:16:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc5948b9ce867a68de3d44fabb8c50201864bddf",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.14.0 (#146)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-11-12T14:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "412ac4a9a539e4f2d4382e485168fc885dd51da0",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added additional support for local Korean payment methods (#145)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-11-12T09:32:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2f4f4c8df007107c5a91cf17c3a6bcb80bb26c9",
          "body": "…ence and location value for price.tax_mode (#144)",
          "is_bot": false,
          "headline": "feat: Add support for payout reconciliation reports, remittance_refer…",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-11-11T14:28:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ea4e0cbb91f9b7f50325666a4d2ab1bcc7c8e46",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): 1.13.1 (#143)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2025-11-03T11:52:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a835f5059832c03f0c64a7b0f297ca6779876969",
          "body": "* fix: Null coalesce next link to prevent type error\n* docs(release): v1.12.1",
          "is_bot": false,
          "headline": "fix: Null coalesce next link to prevent type error (#142)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2025-11-03T09:56:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74851d439874449e4e15e85d9b9dfe509e00b32b",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.12.0 (#139)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-10-07T14:08:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c89bcdbea04a750e2c70b1a990801c454d8e3b5",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support for retained_fee in adjustment totals (#138)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-10-07T13:29:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "975d397cb1ee9ffa05a1cb34f09f352ec9b2b8fd",
          "body": null,
          "is_bot": false,
          "headline": "feat: Support new payment methods including BLIK and MB WAY (#137)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-10-07T11:15:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5aaa70c05a65f7aec580c08b4c6eab56fef8b05f",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for non-catalog discounts (#136)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-10-07T10:24:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3ac44411246d2f641d421278b93c9d83e906f4e",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add `retryAfter` property to `ApiError` (#135)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-10-07T09:27:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "255e258d60582f806fc0931898d0126f38f63464",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.11.0 (#133)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-09-15T09:55:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbabebf68f57a6a9acd7a1b72d66fc281ab3178b",
          "body": null,
          "is_bot": false,
          "headline": "feat: Client Token Support (#132)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-09-12T16:15:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c578ec717832b43236343891b313f6aac9367279",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add exchange_rate and fee_rate to payout totals (#131)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-09-12T08:28:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c20bb1f1223861fc7f8c8f3a950451c0b9b04163",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support to fetch and update discount groups (#130)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-09-11T15:56:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f5dd1b6233a8a1b41ec8ec9fa714df18d5b79d7",
          "body": "…operation (#129)",
          "is_bot": false,
          "headline": "feat: Added support for filtering events by event_type in event list …",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-09-11T15:51:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c160b903fee92ab151a4de507bb9364fa13ea28",
          "body": null,
          "is_bot": false,
          "headline": "Use script to check semver, instead of docker image (#127)",
          "author_name": "Alec Sammon",
          "author_login": "alecsammon",
          "committed_at": "2025-07-25T07:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e35e09cc2f8605f0b74ec3bd41704d99664acdd8",
          "body": "Signed-off-by: StepSecurity Bot <bot@stepsecurity.io>\nCo-authored-by: stepsecurity-app[bot] <188008098+stepsecurity-app[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "[StepSecurity] Apply security best practices (#126)",
          "author_name": "stepsecurity-app[bot]",
          "author_login": "stepsecurity-app[bot]",
          "committed_at": "2025-07-24T09:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb27377416333f66c9e5d4eadf6cad3d4dca4633",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.10.0 (#125)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-27T09:32:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36c61cef40c2fe66248b0f234014d6071c110636",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for discount group include and mode filter (#124)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-26T08:13:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d193d084979293b953d5a9e564ddcfce0c95b3a7",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support for Korean payment methods (#122)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T14:59:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dde48a713875d07f0c2b8ceed12927567ec4581",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support for balance reports (#121)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T10:40:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57515801f76c2481baa9ef616fa53ec042fcd001",
          "body": null,
          "is_bot": false,
          "headline": "feat: Added support for API key events (#123)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T10:17:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c307bb8496bcdf0a7770365a27ce9e2772350267",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add discount group and mode support (#119)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T10:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f4998b90d07e9b40ba8dfe009384cd5f05ff5d0",
          "body": "* feat: Add tax_mode to adjustment create operation\n\n* feat: Add chargeback_warning_reverse adjustment action",
          "is_bot": false,
          "headline": "feat: Add tax_mode to adjustment create operation (#118)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T10:03:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0d303d2c7319fad8694185fbcd89f4fb0428545",
          "body": null,
          "is_bot": false,
          "headline": "feat: Support Simulation Config (#117)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-06-25T09:53:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c327b04d8b10499ca4eeb9b62b90c76be94e3ae9",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.9.1 (#116)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2025-02-18T17:07:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e45ddfc3d9c2f99af314515f5b0970aa3980d2e5",
          "body": null,
          "is_bot": false,
          "headline": "Fix undefined array key error on stored_payment_method_id (#115)",
          "author_name": "Benjamin Santi",
          "author_login": "Hakadel",
          "committed_at": "2025-02-18T16:50:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "622451be9087bf19fb9645e024576ac02895d053",
          "body": null,
          "is_bot": false,
          "headline": "docs: Release 1.9.0 (#114)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-01-30T17:09:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9cf681d0242b72f5b788c70a6354e7b33bab6f5",
          "body": null,
          "is_bot": false,
          "headline": "feat: Support partial simulation payloads (#113)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-01-30T12:19:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02596affb805e86c50718cfa6be7b94d92afb8fa",
          "body": null,
          "is_bot": false,
          "headline": "feat: Support transaction revisions (#112)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2025-01-29T10:11:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d11512af34a25eb3197d4025e65edfcc5e3ce3f",
          "body": "…ns (#111)",
          "is_bot": false,
          "headline": "feat: Add on_resume support to subscription resume and pause operatio…",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-19T09:44:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "31b5cc0494d732285a644865aacd4f7baad31c8c",
          "body": null,
          "is_bot": false,
          "headline": "fix: Adjustment items can be omitted when adjustment type is full (#110)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-17T10:54:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f5191ea54e646e41ec9cd77a6f03693a73edad8",
          "body": null,
          "is_bot": false,
          "headline": "fix: Subscription discount now supports null starts_at (#109)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-13T09:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26ad12cf119f98cecad8ba2149b0b7d930077ef0",
          "body": null,
          "is_bot": false,
          "headline": "Feat: Adding support for adjustment type and VND currency (#108)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-12-11T15:40:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba065b7e2aae853d69a2b390c5ccc03e6ef75d33",
          "body": null,
          "is_bot": false,
          "headline": "docs: Release 1.6.0 (#106)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-05T10:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "871479e0178aa8a5e55fa7e4e18e6118f3cacb92",
          "body": null,
          "is_bot": false,
          "headline": "fix: Add proration to transation line items (#105)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-04T16:16:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00054434511ea22ed94dfd358f5c4a8feab0c2c3",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for customer portal sessions (#103)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-04T09:36:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de511be680723252f8b1164847147fcd99f0b52c",
          "body": null,
          "is_bot": false,
          "headline": "fix: Notification replay now calls correct endpoint (#104)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-12-04T09:24:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3807a1343ad4db535061aaadf0e83d8d15f8107",
          "body": null,
          "is_bot": false,
          "headline": "fix: Apply Rector fixes (#101)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-11-25T14:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df58df8de76276696f25be4bd88809a663939061",
          "body": null,
          "is_bot": false,
          "headline": "fix: Use stable Rector version (#100)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-11-25T13:57:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7f588a01936c35d91bbf249c73357bad8c45f34",
          "body": null,
          "is_bot": false,
          "headline": "docs: Release 1.5.0 (#99)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-11-18T15:56:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df53ce8c385e9b1a950c5bbe79bc46135d092c86",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for saved payment methods (#97)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-11-18T15:21:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3be3d43cc98549652e2959180226b435fb62aa6",
          "body": null,
          "is_bot": false,
          "headline": "test: Correction to transaction create and update tests (#96)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-25T14:33:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cdbbe6664a7c7793f17b41bd00b33d4eb1c30bc",
          "body": null,
          "is_bot": false,
          "headline": "fix: Increase PHPStan memory limit (#94)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-21T11:08:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "428961df33d69e4db7a05853d219387857de3267",
          "body": null,
          "is_bot": false,
          "headline": "docs: Release v1.4.0 (#93)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-17T16:07:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d370f6c748da81fb084c0cf280a1a9307d41b459",
          "body": "Co-authored-by: davidgrayston-paddle <david.grayston@paddle.com>",
          "is_bot": false,
          "headline": "feat: Simulator API (#84)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-10-17T14:53:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bdd4ab8ebb86d0c401c457ed5c525999194d2c5",
          "body": null,
          "is_bot": false,
          "headline": "fix: Handle empty custom data (#91)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-17T08:20:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4549fcf123fbc3a889966b5545da09b7905cf11",
          "body": null,
          "is_bot": false,
          "headline": "fix: Allow null product IDs in transaction preview responses (#90)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-11T16:37:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "807fd31630692ec4eeff74180b2db8c3c83650c0",
          "body": "* fix: Separate transaction preview operations and nullable preview price IDs\r\n\r\n* fix: Add TransactionPreviewPrice with nullable ID\r\n\r\n* fix Add support for transaction update items with optional properties",
          "is_bot": false,
          "headline": "fix: Transaction Preview Price (#89)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-10-09T11:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29b183e934f00564a43c788c583f52a307845be0",
          "body": null,
          "is_bot": false,
          "headline": "feat/Adding new payment methods notifications (#86)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-10-03T14:49:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f0774d568ce81067f54b38cea8de93f3a5d7849",
          "body": null,
          "is_bot": false,
          "headline": "feat: API sync (#85)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-10-03T14:42:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d373b564bf142bad6d06f056fd64448c9c589694",
          "body": null,
          "is_bot": false,
          "headline": "feat:Add traffic_source for Notification Settings (#83)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-10-02T09:51:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbd7270b1711e9a33aa0a51d7b65da3dc5fafdcf",
          "body": null,
          "is_bot": false,
          "headline": "fix: Reference released version 1.3.1 (#82)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-09-30T17:32:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4da706bbeab99ac8b79a7ebe43a27e75cab3a6e5",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add support for Adjustment Credit Note (#81)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-09-30T17:00:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "21cfb6873dcd57c0d91712c4bedcdff07e3791f9",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): v1.2.0 (#79)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-18T11:16:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "750cac77fddf5715d41c81b3095ecf474186cb36",
          "body": null,
          "is_bot": false,
          "headline": "feat: Add optional notification ID to events (#74)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-18T09:52:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc1d6839c1c85f20f882f49cb227f2f2206c84d8",
          "body": "…#78)",
          "is_bot": false,
          "headline": "fix: Add test coverage and changelog for nullable payment_method_id (…",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-18T09:01:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3935bf3645fa01880f53e44b33b956d4b218879a",
          "body": "The API docs state that the payment_method_id can be a `string` or `null` - but the PHP code only expects a string.\r\n\r\nThe value is `null` when the payment amount has been reduced to zero by a discount.",
          "is_bot": false,
          "headline": "fix: payment_method_id can be string or null (#77)",
          "author_name": "Tobias Petry",
          "author_login": "tpetry",
          "committed_at": "2024-09-18T08:57:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20a3d117b5f7fa971c634eca6b50484ee8590087",
          "body": null,
          "is_bot": false,
          "headline": "fix: Remove import_meta from transaction (#76)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-17T09:38:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af2dfb033846c1003835660a73303f49a9e7e84a",
          "body": "* Feature: Support disposition query parameter\r\n\r\n* Feature: Support custom prices when updating and previewing subscriptions\r\n\r\n* Fix: Add validation for pricing preview items\r\n\r\n* Feature: Support notification settings pagination and active filter",
          "is_bot": false,
          "headline": "Feature: API Sync (#70)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-13T15:45:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a148262e283d532031a7844f567422ba3810a62f",
          "body": "…tion prices (#71)",
          "is_bot": false,
          "headline": "Feature: Support for createdAt and updatedAt on Subscription notifica…",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-13T14:43:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f51f7ffd60115853cfa868f15a32d1ed3938694",
          "body": null,
          "is_bot": false,
          "headline": "Fix README badges - use https (#66)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-12T10:33:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b723763098e0efc2510e4c1518eaf335d4aa6dab",
          "body": null,
          "is_bot": false,
          "headline": "Feature: Add import_meta to transaction (#64)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-11T08:37:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4bc0496380369614b09b8c08a2024a1e0513a9a0",
          "body": null,
          "is_bot": false,
          "headline": "Feature: Add product to subscription.items (#63)",
          "author_name": "davidgrayston-paddle",
          "author_login": "davidgrayston-paddle",
          "committed_at": "2024-09-11T08:30:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "efba3151dc90991a6e50e0777e2b5b6e8ba60532",
          "body": null,
          "is_bot": false,
          "headline": "docs(release):v1.1.2 (#62)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-08-23T13:49:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92634f6abc54c5834bc617f75b371d490bf7ee7b",
          "body": "…? #60 (#61)",
          "is_bot": false,
          "headline": "Fixes issues: TransactionTimePeriod - should it be public constructor…",
          "author_name": "dutypro",
          "author_login": "dutypro",
          "committed_at": "2024-08-23T13:12:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73892e423cb21a187a0895615301da2460dd4a36",
          "body": null,
          "is_bot": false,
          "headline": "docs(release):v1.1.1 (#59)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-08-21T08:13:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acb176bb8daf255141f52cbf2a492b28695ac421",
          "body": null,
          "is_bot": false,
          "headline": "CreateDiscount and UpdateDiscount Ops are missing Custom Data #57 (#58)",
          "author_name": "dutypro",
          "author_login": "dutypro",
          "committed_at": "2024-08-21T06:09:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f02bd79f49866e1ae5e29d516e98634b60383364",
          "body": null,
          "is_bot": false,
          "headline": "CI/Introduce label checker & Auto release (#54)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-05-30T10:47:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95491538135ab2317b5b210866e4fb44799b5b1a",
          "body": "…support PSR7 (#53)",
          "is_bot": false,
          "headline": "Docs: New example of how to verify a webhook when framework does not …",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-05-01T09:04:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb0339f4e9095c44c5e71faa9277e94c929f764a",
          "body": null,
          "is_bot": false,
          "headline": "feat/New error code for payments (#52)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-05-01T07:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10bdc72eb0dce9d4a0517d52b91ec218cf5f93b0",
          "body": null,
          "is_bot": false,
          "headline": "Fix/Code style (#50)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-03-20T12:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4d9112236e4f4385dbf6ab0e3b2396732531b9a",
          "body": null,
          "is_bot": false,
          "headline": "docs/release 1.0.1 (#47)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-03-13T14:46:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f70f6fe360c027fc9e07d8ed2e36e591338d15b",
          "body": null,
          "is_bot": false,
          "headline": "Feature: SDK-API sync (#44)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-03-13T14:37:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79c1c5cf6c15ebfc8bea063c475e965f5d98cf6a",
          "body": null,
          "is_bot": false,
          "headline": "Add support for new report type (#46)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-03-13T08:00:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f5c6ef0c469b906d6346b4f6da21c80e2fb0a41f",
          "body": "…ntities (#45)",
          "is_bot": false,
          "headline": "Feature: SDK - API Sync include customer id in address and business e…",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-03-12T08:42:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3066721de2c16d384c4b90e9bb6a726b66bd31ad",
          "body": null,
          "is_bot": false,
          "headline": "docs: Drop early access references (#43)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-20T15:26:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "559e22350fba462e296b64058d7565603950c11e",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): 1.0.0 (#42)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-20T15:17:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f8fba97ddaf08b7d46aa97026253af35d8d2c700",
          "body": null,
          "is_bot": false,
          "headline": "fix: Notification payment method enum naming (#41)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-20T12:21:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b9f1ff1f374b2068c7f7570dec6fbe67fa042a2",
          "body": "- Most entities are private constructors\r\n  - Request shared classes are public\r\n- Removed `@internal` to prevent IDE warnings\r\n- Made Events use their respective Event class\r\n  - These are correctly made private while Event is `@internal`\r\n- Made enums final where they previously were not\r\n\r\nBREAKI\n[…]\nms was not intended this is\r\nnow removed, any reliance on this will break\r\n\r\nBREAKING CHANGE: Most entities are now private constructors, using\r\nthese was not intended API, reliance on this will break",
          "is_bot": false,
          "headline": "fix!: Privatise entities and improve typing (#40)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-20T12:14:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edc73c9a5f66fe8694cbba9493d3165fe6abbe8e",
          "body": "- Subscription Item uses main Price Entity\r\n- Subscription notification supports new Price fields\r\n\r\nBREAKING CHANGE: The class type for a subscription item price property\r\nhas changed to the main Price entity. Any reliance on the old type will\r\nneed to be refactored accordingly.",
          "is_bot": false,
          "headline": "fix!: Align subscription price with Price entity (#39)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-16T15:52:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eaee8514ba87c3ba3324395ab70f17581ac5061",
          "body": "Allows long term backwards compatibility with notifications whilst not\r\nreducing the type safety of API entities\r\n\r\nBREAKING CHANGE: Any existing notification handling will result in\r\ndifferent types for objects but their behaviour/functionality remains the same",
          "is_bot": false,
          "headline": "feat!: Split Notification objects from API Entities (#38)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-16T14:39:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b608605a6e9d9c4610d36c84d5ab569c7f0302c",
          "body": null,
          "is_bot": false,
          "headline": "Entites should use array instead of collections (#37)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-02-16T13:40:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6faf65883635662f0cb633219f67ed30c5f424b",
          "body": null,
          "is_bot": false,
          "headline": "Update resume subscription options (#36)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-02-15T10:47:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd61f88427297aa1d7bd22ce3485a9efab55bc3d",
          "body": null,
          "is_bot": false,
          "headline": "Fix!: Replacing native enums by custom enums (#35)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-02-15T10:37:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1481d1ce5792664a84387fbb0a2f6fcb36a21465",
          "body": null,
          "is_bot": false,
          "headline": "docs(release): 0.3.0 release (#34)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-13T11:49:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07bbac56372bfb705a0b089c91480373a6c79e85",
          "body": "BREAKING CHANGE: Any existing typing for TotalAdjustments will cause  a class not found error until refactored to AdjustmentTotals",
          "is_bot": false,
          "headline": "fix!: Consistent naming for Adjustment totals obj (#33)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-13T11:29:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97f8baa70a3dc2ff4f0768b9cad040289817897e",
          "body": "- `immediate_transaction`\r\n- `next_transaction`\r\n- `recurring_transaction_details`",
          "is_bot": false,
          "headline": "fix: transaction fields for subscription preview optional (#32)",
          "author_name": "Víctor Fernández Saborit",
          "author_login": "vifer",
          "committed_at": "2024-02-08T16:19:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "349485efb35f01651fd2dc272f107e22310c38ff",
          "body": "fix: Map subscription transaction adjustments\r\nfix: Remove unused subscription classes\r\nfix: Ensure Adjustment items are mapped\r\nfix!: Transaction include to use core Adjustment\r\nfix!: Refactor Adjustments and related entities\r\n  - CreateAdjustment now has a write specific AdjustmentItem\r\n  - Adjust\n[…]\nEAKING CHANGE: See below\r\n\r\n- To create an Adjustment you must now use `\\Paddle\\SDK\\Resources\\Adjustments\\Operations\\Create\\AdjustmentItem`\r\n- Adjustment entities sub objects now utilise shared models",
          "is_bot": false,
          "headline": "fix!: Adjustment mapping and model sharing",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-08T14:53:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "917968fcebfed1967aee14a5de11278ace9b6dac",
          "body": "StatusAdjustment -> AdjustmentStatus\r\nStatusTransaction -> TransactionStatus\r\nStatusPaymentAttempt -> PaymentAttemptStatus\r\n\r\nBREAKING CHANGE: The above classes have moved this will result in a\r\nclass does not exist error",
          "is_bot": false,
          "headline": "fix!: Use consistent naming for status enums (#30)",
          "author_name": "Michael Woodward",
          "author_login": "mikeymike",
          "committed_at": "2024-02-07T12:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 33,
      "commits_last_year": 27,
      "latest_release_at": "2026-04-30T08:25:29Z",
      "latest_release_tag": "v1.17.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 82,
      "mean_days_between_releases": 34.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "paddlehq/paddle-php-sdk",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "php",
            "sdk",
            "paddle"
          ],
          "ecosystem": "packagist",
          "matches_repo": true,
          "registry_url": "https://packagist.org/packages/paddlehq/paddle-php-sdk",
          "is_deprecated": false,
          "latest_version": "v1.17.1",
          "repository_url": "https://github.com/PaddleHQ/paddle-php-sdk",
          "versions_count": 33,
          "total_downloads": 358394,
          "dependents_count": 2,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": 17340,
          "first_published_at": null,
          "latest_published_at": "2026-04-30T08:24:52Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 82
        }
      ]
    },
    "popularity": {
      "forks": 10,
      "stars": 56,
      "watchers": 13,
      "fork_history": {
        "days": [
          {
            "date": "2024-01-18",
            "count": 1
          },
          {
            "date": "2024-01-25",
            "count": 1
          },
          {
            "date": "2024-07-12",
            "count": 1
          },
          {
            "date": "2024-08-20",
            "count": 1
          },
          {
            "date": "2024-09-18",
            "count": 1
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2025-02-07",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-07-24",
            "count": 1
          },
          {
            "date": "2025-12-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 10,
        "total_forks": 10
      },
      "star_history": {
        "days": [
          {
            "date": "2024-01-11",
            "count": 2
          },
          {
            "date": "2024-01-12",
            "count": 1
          },
          {
            "date": "2024-01-13",
            "count": 1
          },
          {
            "date": "2024-01-15",
            "count": 1
          },
          {
            "date": "2024-01-23",
            "count": 1
          },
          {
            "date": "2024-02-15",
            "count": 2
          },
          {
            "date": "2024-02-19",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 2
          },
          {
            "date": "2024-02-24",
            "count": 1
          },
          {
            "date": "2024-03-10",
            "count": 1
          },
          {
            "date": "2024-03-13",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-03-31",
            "count": 1
          },
          {
            "date": "2024-04-12",
            "count": 1
          },
          {
            "date": "2024-04-19",
            "count": 1
          },
          {
            "date": "2024-04-25",
            "count": 1
          },
          {
            "date": "2024-05-13",
            "count": 1
          },
          {
            "date": "2024-05-21",
            "count": 1
          },
          {
            "date": "2024-06-20",
            "count": 1
          },
          {
            "date": "2024-06-21",
            "count": 1
          },
          {
            "date": "2024-07-25",
            "count": 1
          },
          {
            "date": "2024-08-02",
            "count": 1
          },
          {
            "date": "2024-08-06",
            "count": 1
          },
          {
            "date": "2024-11-03",
            "count": 1
          },
          {
            "date": "2024-12-01",
            "count": 1
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2024-12-06",
            "count": 1
          },
          {
            "date": "2024-12-13",
            "count": 1
          },
          {
            "date": "2024-12-21",
            "count": 1
          },
          {
            "date": "2025-01-09",
            "count": 1
          },
          {
            "date": "2025-01-16",
            "count": 1
          },
          {
            "date": "2025-01-23",
            "count": 1
          },
          {
            "date": "2025-02-06",
            "count": 1
          },
          {
            "date": "2025-04-16",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-05-12",
            "count": 1
          },
          {
            "date": "2025-05-26",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 1
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-07-21",
            "count": 1
          },
          {
            "date": "2025-08-06",
            "count": 1
          },
          {
            "date": "2025-08-10",
            "count": 1
          },
          {
            "date": "2025-11-16",
            "count": 1
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-22",
            "count": 1
          },
          {
            "date": "2026-01-04",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-04-07",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 2
          },
          {
            "date": "2026-06-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 56,
        "total_stars": 56
      },
      "open_issues_and_prs": 10
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 57572,
      "source_files_sampled": 663,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "composer.json"
      ],
      "advisories": {
        "error": "No resolved dependencies carried a version and a supported ecosystem",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 25,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "packagist"
      ],
      "dependencies": [
        {
          "name": "myclabs/php-enum",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.8"
        },
        {
          "name": "psr/http-factory",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.0"
        },
        {
          "name": "psr/http-factory-implementation",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.0"
        },
        {
          "name": "psr/log",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^1.0 || ^2.0 || ^3.0"
        },
        {
          "name": "symfony/property-access",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^5.4 || ^6.3 || ^7.0 || ^8.0"
        },
        {
          "name": "symfony/serializer",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^5.4 || ^6.3 || ^7.0 || ^8.0"
        },
        {
          "name": "symfony/uid",
          "manifest": "composer.json",
          "ecosystem": "packagist",
          "version_constraint": "^5.4 || ^6.3 || ^7.0 || ^8.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "myclabs/php-enum",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-factory",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/http-factory-implementation",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "psr/log",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/property-access",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/serializer",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/uid",
            "direct": true,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "ext-json",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "ext-mbstring",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "friendsofphp/php-cs-fixer",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "guzzlehttp/psr7",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "monolog/monolog",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/async-client-implementation",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/client-common",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/curl-client",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/discovery",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/httplug",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/logger-plugin",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/message",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "php-http/mock-client",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpstan/phpstan",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "phpunit/phpunit",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "rector/rector",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          },
          {
            "name": "symfony/var-dumper",
            "direct": false,
            "version": null,
            "ecosystem": "packagist"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 25,
        "direct_count": 7,
        "indirect_count": 18
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 4,
        "merged_prs": 123,
        "open_issues": 6,
        "closed_ratio": 0.75,
        "closed_issues": 18,
        "closed_unmerged_prs": 14
      },
      "bus_factor": 2,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "davidgrayston-paddle",
          "commits": 57,
          "avatar_url": "https://avatars.githubusercontent.com/u/169155061?v=4"
        },
        {
          "type": "User",
          "login": "mikeymike",
          "commits": 27,
          "avatar_url": "https://avatars.githubusercontent.com/u/2174476?v=4"
        },
        {
          "type": "User",
          "login": "vifer",
          "commits": 25,
          "avatar_url": "https://avatars.githubusercontent.com/u/17689985?v=4"
        },
        {
          "type": "User",
          "login": "Invincibear",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/6895337?v=4"
        },
        {
          "type": "User",
          "login": "N-M",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/781417?v=4"
        },
        {
          "type": "User",
          "login": "dutypro",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/38077637?v=4"
        },
        {
          "type": "User",
          "login": "alecsammon",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/304636?v=4"
        },
        {
          "type": "User",
          "login": "Hakadel",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1576847?v=4"
        },
        {
          "type": "User",
          "login": "heymcgovern",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/25659933?v=4"
        },
        {
          "type": "User",
          "login": "tpetry",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/315686?v=4"
        }
      ],
      "contributors_sampled": 10,
      "top_contributor_share": 0.467
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "check-semver.yml",
        "ci.yml",
        "release-on-push.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".php-cs-fixer.php"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 10,
            "reason": "all changesets reviewed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "ae0cb621cf67210cd48b7df4a4205a4761dc39fd",
        "ran_at": "2026-07-22T08:08:46Z",
        "aggregate_score": 5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T08:08:06Z",
      "oldest_open_prs": [
        {
          "number": 49,
          "created_at": "2024-03-15T14:26:51Z",
          "last_comment_at": "2024-03-27T02:14:47Z",
          "last_comment_author": "Invincibear"
        },
        {
          "number": 55,
          "created_at": "2024-06-18T12:42:31Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 164,
          "created_at": "2026-06-01T09:46:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 165,
          "created_at": "2026-07-22T08:04:27Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-04-30T08:24:52Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 48,
          "created_at": "2024-03-15T09:41:01Z",
          "last_comment_at": "2024-03-19T09:58:40Z",
          "last_comment_author": "MaxMelcher"
        },
        {
          "number": 80,
          "created_at": "2024-09-27T09:43:10Z",
          "last_comment_at": "2024-09-27T14:02:57Z",
          "last_comment_author": "mikeymike"
        },
        {
          "number": 128,
          "created_at": "2025-08-03T18:29:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 159,
          "created_at": "2026-04-27T06:04:13Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 160,
          "created_at": "2026-05-11T03:12:06Z",
          "last_comment_at": "2026-05-11T09:27:58Z",
          "last_comment_author": "mikeymike"
        },
        {
          "number": 162,
          "created_at": "2026-05-13T10:19:49Z",
          "last_comment_at": "2026-05-26T21:21:12Z",
          "last_comment_author": "Ravizaum"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/PaddleHQ/paddle-php-sdk",
    "host": "github.com",
    "name": "paddle-php-sdk",
    "owner": "PaddleHQ"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 50,
        "vitality": 74,
        "community": 56,
        "governance": 76,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 74,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "commits_last_year": 27,
              "human_commit_share": 0.99,
              "days_since_last_push": 0,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "11/52 weeks with commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "27 commits in the last year",
                "points": 13,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 27
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 33,
              "latest_release_tag": "v1.17.1",
              "releases_from_tags": false,
              "days_since_latest_release": 82,
              "mean_days_between_releases": 34.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "33 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 33
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 82 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 82
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~34.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 34.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 82,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 82 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 82
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 56,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "forks": 10,
              "stars": 56,
              "watchers": 13,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "56 stars",
                "points": 28.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 56
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "10 forks",
                "points": 8,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "13 watchers",
                "points": 6,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "packages": [
                "paddlehq/paddle-php-sdk"
              ],
              "dependents": 2,
              "ecosystems": "packagist",
              "total_downloads": 358394,
              "monthly_downloads": 17340
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "17,340 downloads/month across packagist",
                "points": 56.5,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 17340,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "2 packages depend on it",
                "points": 3.2,
                "status": "partial",
                "details": [
                  {
                    "code": "registry_dependents",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "good",
        "name": "Sustainability & Governance",
        "value": 76,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "moderate",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 57,
            "inputs": {
              "bus_factor": 2,
              "contributors_sampled": 10,
              "top_contributor_share": 0.467
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "2 contributor(s) cover half of all commits",
                "points": 25.2,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 47% of commits",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 47
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "10 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "merged_prs": 123,
              "open_issues": 6,
              "closed_issues": 18,
              "issue_closed_ratio": 0.75,
              "closed_unmerged_prs": 14
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "75% of issues closed",
                "points": 35.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 75
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "123/137 decided PRs merged",
                "points": 34.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 123,
                      "decided": 137
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "all changesets reviewed",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "followers": 171,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "PaddleHQ",
              "public_repos": 53,
              "account_age_days": 4551
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "171 followers of PaddleHQ",
                "points": 16.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 171,
                      "login": "PaddleHQ"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "53 public repos, account ~12 yr old",
                "points": 24.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 53
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "paddlehq/paddle-php-sdk"
              ],
              "ecosystems": "packagist",
              "any_deprecated": false,
              "min_days_since_publish": 82
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on packagist",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "packagist"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 82 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 82
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "33 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 33
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".php-cs-fixer.php",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".php-cs-fixer.php"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "api",
                "paddle",
                "php",
                "sdk"
              ],
              "has_wiki": false,
              "homepage": "https://developer.paddle.com/",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://developer.paddle.com/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 50,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "30 out of 30 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "all changesets reviewed",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "1 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 5
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 53,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.96,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "95 of 99 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 95,
                      "sampled": 99
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": true,
              "typed_language": false,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".php-cs-fixer.php",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".php-cs-fixer.php"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "moderate",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "primary_language": "PHP",
              "largest_source_bytes": 57572,
              "source_files_sampled": 663,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "PHP without a type-check config",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_typecheck_config_language",
                    "params": {
                      "language": "PHP"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/663 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 663,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "No resolved dependencies carried a version and a supported ecosystem"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T08:09:08.622149Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/p/PaddleHQ/paddle-php-sdk.svg",
  "full_name": "PaddleHQ/paddle-php-sdk",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.26.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenPackagist.