Developer Portal
Programmatic access to the developer surfaces: OAuth applications, webhook subscriptions and their delivery log, developer usage metrics, the live status page, the changelog, and the community forum.
The base URL for all requests is https://gullypay.xyz/api. Most endpoints require a valid JWT or API
key sent as Authorization: Bearer <token>. Three read endpoints are public (no auth): the status
page, the changelog, and listing community posts. Auth requirements are noted per endpoint below.
API key creation, listing, and revocation are handled by the Auth module — see
Getting Started for POST /auth/api-keys. This portal covers OAuth apps,
webhooks, usage, status, changelog, and community.
Endpoints
OAuth Applications
/oauth/applicationsCreate an OAuth application (auth required)/oauth/applicationsList your OAuth applications (auth required)Webhooks
/merchants/:merchantId/webhooksCreate a webhook subscription (auth required)/merchants/:merchantId/webhooksList webhook subscriptions (auth required)/merchants/:merchantId/webhooks/deliveriesRecent deliveries + 24h stats (auth required)Usage
/developer/usageDeveloper usage metrics for the authenticated user (auth required)Status, Changelog & Community
/statusLive platform status page (public)/changelogChangelog entries (public)/community/postsList forum posts (public)/community/postsCreate a forum post (auth required)/community/posts/:postId/repliesReply to a forum post (auth required)OAuth Applications
/oauth/applicationsCreate an OAuth application| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name of the application |
redirectUris | string[] | Yes | Allowed OAuth redirect URIs |
The response includes the generated clientId and a one-time clientSecret. Only a hash of the
secret is stored, so it is returned once at creation and cannot be retrieved again.
clientSecret is only returned in this response. If you lose it you must create a new application.
GET /oauth/applications lists the applications owned by the authenticated developer (without secrets).
Webhook Subscriptions
/merchants/:merchantId/webhooksCreate a webhook subscription| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | HTTPS endpoint to receive events |
events | string[] | Yes | Event types to subscribe to (use * for all) |
The response includes a one-time signing secret. Deliveries are signed with HMAC-SHA256 and sent
with an X-GullyPay-Signature header — see Webhooks for verification details.
Delivery Log
/merchants/:merchantId/webhooks/deliveriesRecent deliveries + 24h statsReturns the most recent delivery attempts plus 24-hour aggregates (total, success rate, average
response time), all from the real webhook_deliveries table. Pass ?limit=<n> (default 50).
| Query | Type | Required | Description |
|---|---|---|---|
limit | number | No | Max recent deliveries to return (default: 50) |
Each event is currently delivered once. The exponential-backoff retry schedule and manual re-delivery documented in Webhooks are still being rolled out — reconcile against this delivery log until then.
Developer Usage
/developer/usageDeveloper usage metrics for the authenticated userReturns real usage metrics for the authenticated developer over a rolling window. Pass ?days=<n>
(1–365, default 30). Counts are computed from live tables: non-revoked API keys, x402 payments on
the user's endpoints, active webhook subscriptions, recorded webhook deliveries, and logged API
requests — plus a daily time series.
| Query | Type | Required | Description |
|---|---|---|---|
days | number | No | Rolling window in days, 1–365 (default: 30) |
Status Page
/statusLive platform status page (public)Public endpoint. Runs a live database probe and combines it with unresolved incidents to report
per-service status. Overall status is one of operational, partial_outage, degraded, or
major_outage.
Changelog
/changelogChangelog entries (public)Public endpoint. Returns the most recent changelog entries (up to 50).
Community Forum
/community/postsList forum posts (public)Public. Returns forum posts; pass ?category=<slug> to filter by category.
/community/postsCreate a forum post| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | Post title |
body | string | Yes | Post body |
category | string | No | Category slug |
/community/posts/:postId/repliesReply to a forum post| Field | Type | Required | Description |
|---|---|---|---|
body | string | Yes | Reply body |
Next Steps
- Webhooks -- Event types, signature verification, and handler examples
- x402 Protocol -- Monetize APIs with pay-per-request billing
- Getting Started -- API keys and authentication