Skip to content

Commit 9596d69

Browse files
committed
chore(orb-webhooks): integrate into README, providers.yaml, and marketplace.json
- README.md: add Orb row (alphabetically between OpenClaw and Paddle), linkified to official docs - providers.yaml: add orb entry with HMAC-SHA256/`v1:{ts}:{body}` scheme notes, common events, summary-webhooks variant, and `orb-billing` SDK declared for both npm and pip so the version-tracker covers it - .claude-plugin/marketplace.json: add `orb-webhooks` plugin entry (matching the per-skill pattern from PR #62) and append `./skills/orb-webhooks` to the `webhook-skills` bundle Skill content (skills/orb-webhooks/) landed in the previous commit via the generator. https://claude.ai/code/session_01NNTgQRJss1V7gyzzJ9rjnB
1 parent 1547281 commit 9596d69

3 files changed

Lines changed: 73 additions & 0 deletions

File tree

.claude-plugin/marketplace.json

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,31 @@
450450
"ai"
451451
]
452452
},
453+
{
454+
"name": "orb-webhooks",
455+
"description": "Verify Orb webhook signatures (HMAC-SHA256 over `v1:{X-Orb-Timestamp}:{raw-body}`, hex with `v1=` prefix), handle customer, subscription, invoice, and data-export events from this usage-based billing platform.",
456+
"source": "./skills/orb-webhooks",
457+
"strict": false,
458+
"skills": [
459+
"./"
460+
],
461+
"category": "integration",
462+
"license": "MIT",
463+
"author": {
464+
"name": "Hookdeck",
465+
"email": "phil@hookdeck.com"
466+
},
467+
"repository": "https://github.com/hookdeck/webhook-skills",
468+
"homepage": "https://github.com/hookdeck/webhook-skills/tree/main/skills/orb-webhooks",
469+
"keywords": [
470+
"webhooks",
471+
"orb",
472+
"billing",
473+
"usage-based-billing",
474+
"subscriptions",
475+
"invoices"
476+
]
477+
},
453478
{
454479
"name": "paddle-webhooks",
455480
"description": "Verify Paddle webhook signatures (HMAC-SHA256 with multi-signature rotation), handle subscription and billing events.",
@@ -896,6 +921,7 @@
896921
"./skills/notion-webhooks",
897922
"./skills/openai-webhooks",
898923
"./skills/openclaw-webhooks",
924+
"./skills/orb-webhooks",
899925
"./skills/paddle-webhooks",
900926
"./skills/paypal-webhooks",
901927
"./skills/postmark-webhooks",

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ Skills for receiving and verifying webhooks from specific providers. Each includ
4848
| [Notion](https://developers.notion.com/reference/webhooks) | [`notion-webhooks`](skills/notion-webhooks/) | Verify Notion webhook signatures (HMAC-SHA256, `X-Notion-Signature`), complete handshake, handle page and comment events |
4949
| [OpenAI](https://platform.openai.com/docs/guides/webhooks) | [`openai-webhooks`](skills/openai-webhooks/) | Verify OpenAI webhooks for fine-tuning, batch, and realtime async events |
5050
| [OpenClaw](https://docs.openclaw.ai/automation/webhook) | [`openclaw-webhooks`](skills/openclaw-webhooks/) | Verify OpenClaw Gateway webhook tokens, handle agent hook and wake event payloads |
51+
| [Orb](https://docs.withorb.com/integrations-and-exports/webhooks) | [`orb-webhooks`](skills/orb-webhooks/) | Verify Orb webhook signatures (HMAC-SHA256 over `v1:{X-Orb-Timestamp}:{body}`), handle customer, subscription, and invoice events |
5152
| [Paddle](https://developer.paddle.com/webhooks/overview) | [`paddle-webhooks`](skills/paddle-webhooks/) | Verify Paddle webhook signatures, handle subscription and billing events |
5253
| [PayPal](https://developer.paypal.com/api/rest/webhooks/) | [`paypal-webhooks`](skills/paypal-webhooks/) | Verify PayPal webhook signatures (RSA-SHA256 with cert), handle payment, subscription, and order events |
5354
| [Postmark](https://postmarkapp.com/developer/webhooks/webhooks-overview) | [`postmark-webhooks`](skills/postmark-webhooks/) | Authenticate Postmark webhooks (Basic Auth/Token), handle email delivery, bounce, open, click, and spam events |

providers.yaml

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,52 @@ providers:
378378
- agent hook
379379
- wake hook
380380

381+
- name: orb
382+
displayName: Orb
383+
docs:
384+
webhooks: https://docs.withorb.com/integrations-and-exports/webhooks
385+
summary_webhooks: https://docs.withorb.com/integrations-and-exports/summary-webhooks
386+
api: https://docs.withorb.com/api-reference
387+
notes: >
388+
Usage-based billing platform (Orb / withorb.com). Uses HMAC-SHA256 in hex with
389+
a `v1=` prefix in the `X-Orb-Signature` header (e.g. `X-Orb-Signature: v1=<hex>`).
390+
Timestamp delivered separately in `X-Orb-Timestamp` (ISO 8601). Signed content
391+
format is the literal string `v1:{X-Orb-Timestamp}:{raw-body}` — concatenate
392+
version literal "v1", colon, ISO timestamp, colon, raw body bytes; HMAC-SHA256
393+
with the per-endpoint signing secret (configured in Orb dashboard, one secret
394+
per webhook endpoint, NOT the account API key). Always pass the raw request
395+
body — don't JSON.parse and re-stringify before verifying.
396+
397+
No documented replay tolerance — Orb recommends comparing X-Orb-Timestamp to a
398+
threshold the integrator picks. Recommend a 5-minute window in handlers plus
399+
idempotency keyed on the event `id` field for at-least-once delivery safety.
400+
401+
Common events span customer lifecycle (`customer.created`,
402+
`customer.credit_balance_dropped`, `customer.accounting_sync_succeeded`),
403+
subscriptions (`subscription.created`, `subscription.started`,
404+
`subscription.ended`, `subscription.plan_changed`, `subscription.edited`,
405+
`subscription.usage_exceeded`), invoices (`invoice.issued`,
406+
`invoice.payment_succeeded`, `invoice.payment_failed`, `invoice.edited`),
407+
and data exports (`data_exports.transfer_success`).
408+
409+
"Summary webhooks" are an opt-in variant covering the same event types with
410+
smaller payloads (line_items omitted from invoices; customer/plan minified
411+
to identification fields only). Same signature scheme; consumers should fetch
412+
full resources via API when detail is needed.
413+
414+
Official SDKs: orb-billing (npm + PyPI; same package name on both registries).
415+
Neither SDK exposes a Stripe-style unwrap()/constructEvent() helper at the
416+
time of writing — manual HMAC verification is the canonical path.
417+
sdks:
418+
npm:
419+
- orb-billing
420+
pip:
421+
- orb-billing
422+
testScenario:
423+
events:
424+
- invoice.payment_succeeded
425+
- subscription.created
426+
381427
- name: paddle
382428
displayName: Paddle
383429
docs:

0 commit comments

Comments
 (0)