API Reference

Use the OpenClawBundles API to integrate with the marketplace programmatically.

Base URL: https://api.openclawbundles.com

Authentication: Bearer token (JWT) or X-API-Key header

Products

GET
/v1/products

List products with filtering, sorting, and pagination.

Response

{
  "products": [...],
  "page": 1,
  "per_page": 12,
  "total": 42,
  "total_pages": 4
}

Example

curl "https://api.openclawbundles.com/v1/products?page=1&per_page=12&sort=popular&type=skill"
GET
/v1/products/:slug

Get detailed product information including versions, images, and creator info.

Response

{
  "product": {
    "id": "...",
    "title": "My Awesome Skill",
    "slug": "my-awesome-skill",
    "price_cents": 999,
    "avg_rating": 4.5,
    ...
  }
}

Example

curl "https://api.openclawbundles.com/v1/products/my-awesome-skill"

Reviews

GET
/v1/products/:slug/reviews

List reviews for a product with pagination.

Response

{
  "reviews": [
    {
      "id": "...",
      "rating": 5,
      "title": "Great product!",
      "body": "Works perfectly.",
      "creator_reply": null,
      "profiles": { "username": "buyer1" }
    }
  ],
  "total": 3
}

Example

curl "https://api.openclawbundles.com/v1/products/my-skill/reviews?page=1"
POST
/v1/products/:slug/reviews
Bearer

Create a review. Requires a completed purchase. One review per product.

Request Body

{
  "rating": 5,
  "title": "Great product!",
  "body": "Works perfectly for my use case."
}

Example

curl -X POST "https://api.openclawbundles.com/v1/products/my-skill/reviews" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rating": 5, "title": "Great!", "body": "Works perfectly."}'
PATCH
/v1/products/:slug/reviews/:id
Bearer

Edit your own review.

Request Body

{ "rating": 4, "body": "Updated review." }

Example

curl -X PATCH "https://api.openclawbundles.com/v1/products/my-skill/reviews/REVIEW_ID" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"rating": 4}'
POST
/v1/products/:slug/reviews/:id/reply
Bearer

Reply to a review as the product creator. One reply per review.

Request Body

{ "reply": "Thanks for the feedback!" }

Example

curl -X POST "https://api.openclawbundles.com/v1/products/my-skill/reviews/REVIEW_ID/reply" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"reply": "Thanks for the feedback!"}'

Creator

GET
/v1/creator/products
Bearer

List your products with pagination.

Example

curl "https://api.openclawbundles.com/v1/creator/products" \
  -H "Authorization: Bearer YOUR_TOKEN"
POST
/v1/creator/products
Bearer

Create a new product (starts in draft status).

Request Body

{
  "title": "My New Skill",
  "description": "A useful OpenClaw skill.",
  "type": "skill",
  "price_cents": 999,
  "tags": ["automation", "productivity"]
}

Example

curl -X POST "https://api.openclawbundles.com/v1/creator/products" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title": "My New Skill", "type": "skill", "price_cents": 999}'
GET
/v1/creator/analytics/overview
Bearer

Get KPIs: revenue, sales count, views, and conversion rate.

Response

{
  "revenue": 15000,
  "sales": 12,
  "views": 340,
  "conversion_rate": 3.53
}

Example

curl "https://api.openclawbundles.com/v1/creator/analytics/overview?period=30d" \
  -H "Authorization: Bearer YOUR_TOKEN"
GET
/v1/creator/analytics/revenue
Bearer

Get revenue time series data grouped by day.

Response

{
  "series": [
    { "date": "2026-04-01", "revenue": 1500, "sales": 2 },
    { "date": "2026-04-03", "revenue": 999, "sales": 1 }
  ]
}

Example

curl "https://api.openclawbundles.com/v1/creator/analytics/revenue?period=30d" \
  -H "Authorization: Bearer YOUR_TOKEN"
GET
/v1/creator/analytics/products
Bearer

Get per-product performance metrics.

Example

curl "https://api.openclawbundles.com/v1/creator/analytics/products" \
  -H "Authorization: Bearer YOUR_TOKEN"

Checkout

POST
/v1/checkout/create
Bearer

Create a Stripe Checkout session to purchase a product.

Request Body

{
  "product_id": "PRODUCT_UUID",
  "discount_code": "SAVE20"
}

Response

{ "url": "https://checkout.stripe.com/..." }

Example

curl -X POST "https://api.openclawbundles.com/v1/checkout/create" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"product_id": "PRODUCT_UUID"}'
POST
/v1/checkout/validate-discount
Bearer

Validate a discount code without consuming it.

Request Body

{ "code": "SAVE20", "product_id": "PRODUCT_UUID" }

Example

curl -X POST "https://api.openclawbundles.com/v1/checkout/validate-discount" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code": "SAVE20", "product_id": "PRODUCT_UUID"}'

Library

GET
/v1/library
Bearer

List your purchased products.

Example

curl "https://api.openclawbundles.com/v1/library" \
  -H "Authorization: Bearer YOUR_TOKEN"
GET
/v1/library/:purchaseId/download
Bearer

Get a presigned download URL (expires in 15 minutes).

Response

{ "url": "https://...", "expires_in": 900 }

Example

curl "https://api.openclawbundles.com/v1/library/PURCHASE_UUID/download" \
  -H "Authorization: Bearer YOUR_TOKEN"

API Keys

POST
/v1/creator/api-keys
Bearer

Create an API key. The plaintext key is returned only once.

Request Body

{
  "name": "Production",
  "scopes": ["products:read", "analytics:read"]
}

Response

{
  "api_key": {
    "id": "...",
    "name": "Production",
    "key": "ocb_live_abc123...",
    "scopes": ["products:read"]
  }
}

Example

curl -X POST "https://api.openclawbundles.com/v1/creator/api-keys" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Production", "scopes": ["products:read"]}'
GET
/v1/creator/api-keys
Bearer

List your API keys (without the key value).

Example

curl "https://api.openclawbundles.com/v1/creator/api-keys" \
  -H "Authorization: Bearer YOUR_TOKEN"
DELETE
/v1/creator/api-keys/:id
Bearer

Revoke an API key permanently.

Example

curl -X DELETE "https://api.openclawbundles.com/v1/creator/api-keys/KEY_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

Webhooks

Webhooks deliver real-time notifications via HTTPS POST. Each delivery includes an X-OCB-Signature header (HMAC-SHA256 of timestamp.body) and X-OCB-Timestamp.

POST
/v1/creator/webhooks
Bearer

Create a webhook endpoint. Max 5 per creator. Signing secret returned once.

Request Body

{
  "url": "https://your-server.com/webhook",
  "events": ["sale.completed", "product.review.created"]
}

Response

{
  "webhook": {
    "id": "...",
    "url": "https://example.com/hook",
    "events": ["sale.completed"],
    "signing_secret": "abc123..."
  }
}

Example

curl -X POST "https://api.openclawbundles.com/v1/creator/webhooks" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hook", "events": ["sale.completed"]}'
GET
/v1/creator/webhooks
Bearer

List your webhook endpoints.

Example

curl "https://api.openclawbundles.com/v1/creator/webhooks" \
  -H "Authorization: Bearer YOUR_TOKEN"
PATCH
/v1/creator/webhooks/:id
Bearer

Update webhook URL, events, or active status.

Request Body

{ "active": false }

Example

curl -X PATCH "https://api.openclawbundles.com/v1/creator/webhooks/WEBHOOK_ID" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"active": false}'
DELETE
/v1/creator/webhooks/:id
Bearer

Delete a webhook endpoint.

Example

curl -X DELETE "https://api.openclawbundles.com/v1/creator/webhooks/WEBHOOK_ID" \
  -H "Authorization: Bearer YOUR_TOKEN"

Using API Keys

Instead of a Bearer token, you can authenticate with an API key using the X-API-Key header. API keys have scoped permissions — only endpoints matching your key's scopes will be accessible.

curl "https://api.openclawbundles.com/v1/creator/products" \ -H "X-API-Key: ocb_live_your_key_here"

Available Scopes:

  • products:read — Read product data
  • products:write — Create and update products
  • analytics:read — View analytics data
  • downloads:read — Access download links
  • webhooks:write — Manage webhooks

Webhook Event Types

EventDescription
sale.completedA buyer has completed a purchase of your product
product.review.createdA buyer has left a review on your product
product.version.publishedA new version of your product has been published
payout.sentA payout has been sent to your Stripe account