Informe JSON sin procesar legible por máquina
{
"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"
}