Reference

API reference

Use the OpenClawBundles API to integrate with the marketplace programmatically.

base_url = https://api.openclawbundles.com
auth = Bearer (JWT) · 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/reviewsBearer

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/:idBearer

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/replyBearer

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/productsBearer

List your products with pagination.

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

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/overviewBearer

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/revenueBearer

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/productsBearer

Get per-product performance metrics.

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

Checkout

POST/v1/checkout/createBearer

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-discountBearer

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/libraryBearer

List your purchased products.

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

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-keysBearer

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-keysBearer

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/:idBearer

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 a X-OCB-Timestamp.

POST/v1/creator/webhooksBearer

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/webhooksBearer

List your webhook endpoints.

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

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/:idBearer

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:readRead product data
  • products:writeCreate and update products
  • analytics:readView analytics data
  • downloads:readAccess download links and library
  • webhooks:writeManage webhooks
  • purchases:writeBuy products on behalf of the key owner

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