Marketplace API
The Marketplace API provides endpoints for browsing, reviewing, submitting, and managing plugins and themes.
All marketplace endpoints are prefixed with /marketplace.
Plugin Marketplace
Browse Plugins
GET /marketplace/browseReturns a paginated list of published plugins.
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 20 | Items per page (max 100) |
search | string | — | Search by name/description |
category | string | — | Filter by category slug |
sort | string | popular | Sort order: popular, recent, rating |
Response:
{
"data": [
{
"id": "uuid",
"name": "my-plugin",
"displayName": "My Plugin",
"description": "A useful plugin",
"version": "1.0.0",
"author": "developer",
"category": "ai",
"downloadCount": 1500,
"averageRating": 4.5,
"ratingCount": 23,
"isActive": true
}
],
"total": 42,
"page": 1,
"limit": 20
}Get Featured Plugins
GET /marketplace/plugins/featuredReturns plugins marked as featured by administrators.
Response: Array of plugin objects.
Get Plugin Categories
GET /marketplace/plugins/categoriesReturns a list of all unique plugin categories.
Response:
["ai", "analytics", "communication", "content", "security", "utilities"]Get Plugin Detail
GET /marketplace/plugins/:idReturns full details for a single plugin, including rating statistics.
Response:
{
"id": "uuid",
"name": "my-plugin",
"displayName": "My Plugin",
"description": "A useful plugin",
"version": "1.0.0",
"author": "developer",
"category": "ai",
"downloadCount": 1500,
"averageRating": 4.5,
"ratingCount": 23,
"isActive": true,
"homepage": "https://example.com",
"repository": "https://github.com/example/my-plugin",
"ratingStats": {
"averageRating": 4.5,
"totalReviews": 23,
"distribution": { "1": 0, "2": 1, "3": 2, "4": 5, "5": 15 }
}
}Plugin Reviews
Get Plugin Reviews
GET /marketplace/plugins/:id/reviewsReturns all reviews for a plugin.
Response: Array of review objects:
[
{
"pluginId": "uuid",
"userId": "uuid",
"rating": 5,
"title": "Excellent plugin",
"comment": "Works great!",
"createdAt": "2025-01-15T10:00:00Z"
}
]Submit Plugin Review
POST /marketplace/plugins/:id/reviewsAuth Required: Yes (JWT)
Reviews are upserted — submitting again updates your existing review.
Request Body:
{
"rating": 5,
"review": "Works great for my use case."
}Delete Plugin Review
DELETE /marketplace/plugins/:id/reviewsAuth Required: Yes (JWT) — deletes your own review for this plugin.
Plugin Versioning
Get Plugin Versions
GET /marketplace/plugins/:id/versionsReturns all published versions for a plugin, sorted by release date descending.
Response:
[
{
"pluginId": "uuid",
"version": "1.2.0",
"changelog": "Added new AI features",
"compatibility": {
"minPlatformVersion": "0.1.0",
"maxPlatformVersion": "1.0.0"
},
"downloadUrl": "https://cdn.agentbase.dev/plugins/my-plugin/1.2.0.tgz",
"fileSize": 45000,
"checksum": "sha256:abc123...",
"publishedBy": "uuid",
"releasedAt": "2025-02-01T12:00:00Z"
}
]Get Specific Version
GET /marketplace/plugins/:id/versions/:versionReturns details for a specific plugin version.
Publish Plugin Version
POST /marketplace/plugins/:id/versionsAuth Required: Yes (JWT)
Request Body:
{
"version": "1.2.0",
"changelog": "Added new AI features",
"downloadUrl": "https://cdn.agentbase.dev/plugins/my-plugin/1.2.0.tgz",
"fileSize": 45000,
"checksum": "sha256:abc123...",
"compatibility": {
"minPlatformVersion": "0.1.0",
"maxPlatformVersion": "1.0.0"
}
}All fields except version are optional.
Theme Marketplace
Browse Themes
GET /marketplace/themesReturns a paginated list of published themes.
Query Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 20 | Items per page |
search | string | — | Search by name/description |
category | string | — | Filter by category slug |
sort | string | popular | Sort order: popular, recent, rating |
Response:
{
"data": [
{
"id": "uuid",
"name": "modern-dark",
"displayName": "Modern Dark",
"description": "A sleek dark theme",
"version": "1.0.0",
"author": "designer",
"category": "dark",
"downloadCount": 3200,
"averageRating": 4.8,
"ratingCount": 48,
"previewUrl": "https://cdn.agentbase.dev/themes/modern-dark/preview.png"
}
],
"total": 15,
"page": 1,
"limit": 20
}Get Featured Themes
GET /marketplace/themes/featuredReturns themes marked as featured by administrators.
Get Theme Categories
GET /marketplace/themes/categoriesReturns all unique theme categories.
Get Theme Detail
GET /marketplace/themes/:idReturns full details for a single theme, including rating statistics.
Theme Reviews
Get Theme Reviews
GET /marketplace/themes/:id/reviewsSubmit Theme Review
POST /marketplace/themes/:id/reviewsAuth Required: Yes (JWT)
Reviews are upserted — submitting again updates your existing review.
Request Body:
{
"rating": 5,
"review": "Love the design!"
}Delete Theme Review
DELETE /marketplace/themes/:id/reviewsAuth Required: Yes (JWT) — deletes your own review for this theme.
Developer Submission
Submit Plugin
POST /marketplace/submit/pluginAuth Required: Yes (JWT)
Submit a new plugin for marketplace review. The plugin enters a review queue before being published.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Machine-readable name (slug) |
slug | string | ✓ | URL-friendly identifier |
version | string | ✓ | SemVer version (e.g. 1.0.0) |
description | string | Short description | |
author | string | Author display name | |
authorUrl | string | Author website URL | |
repositoryUrl | string | Source code repository URL | |
iconUrl | string | Plugin icon image URL | |
screenshots | string[] | Array of screenshot URLs | |
isPaid | boolean | Whether the plugin is a paid listing | |
price | number | Price in USD (required if isPaid) | |
manifest | object | Full plugin manifest JSON |
{
"name": "my-plugin",
"slug": "my-plugin",
"version": "1.0.0",
"description": "A useful AI plugin for Agentbase",
"author": "Your Name",
"authorUrl": "https://yoursite.com",
"repositoryUrl": "https://github.com/you/my-plugin",
"iconUrl": "https://yoursite.com/icon.png",
"screenshots": ["https://yoursite.com/screenshot1.png"],
"isPaid": false
}Submit Theme
POST /marketplace/submit/themeAuth Required: Yes (JWT)
Submit a new theme for marketplace review.
Request Body:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | ✓ | Machine-readable name |
slug | string | ✓ | URL-friendly identifier |
version | string | ✓ | SemVer version |
description | string | Short description | |
author | string | Author display name | |
authorUrl | string | Author website URL | |
previewUrl | string | Live preview URL | |
iconUrl | string | Theme icon image URL | |
screenshots | string[] | Array of screenshot URLs | |
category | string | Theme category slug | |
isPaid | boolean | Whether this is a paid listing | |
price | number | Price in USD (required if isPaid) | |
manifest | object | Full theme manifest JSON | |
defaultStyles | object | Default style variables |
{
"name": "my-theme",
"slug": "my-theme",
"version": "1.0.0",
"description": "A beautiful responsive theme",
"category": "business",
"previewUrl": "https://preview.example.com",
"isPaid": false
}Admin Approval
All admin endpoints require the admin role.
Get Pending Plugins
GET /marketplace/admin/pending/pluginsAuth Required: Yes (JWT + Admin role)
Returns plugins awaiting review. Supports page and limit query parameters.
Approve Plugin
POST /marketplace/admin/plugins/:id/approveAuth Required: Yes (JWT + Admin role)
Reject Plugin
POST /marketplace/admin/plugins/:id/rejectAuth Required: Yes (JWT + Admin role)
Get Pending Themes
GET /marketplace/admin/pending/themesAuth Required: Yes (JWT + Admin role)
Returns themes awaiting review. Supports page and limit query parameters.
Approve Theme
POST /marketplace/admin/themes/:id/approveAuth Required: Yes (JWT + Admin role)
Reject Theme
POST /marketplace/admin/themes/:id/rejectAuth Required: Yes (JWT + Admin role)
Plugin Updates
The platform automatically checks for updates to installed plugins once per day via a background job. The following endpoints expose update state to the UI.
Get Update Count
GET /marketplace/updates/countAuth Required: Yes (JWT)
Response:
{ "count": 3 }Get Available Updates
GET /marketplace/updatesAuth Required: Yes (JWT)
Returns installed plugins that have a newer version available on the marketplace.
Response:
[
{
"installedPluginId": "uuid",
"pluginId": "my-plugin",
"marketplacePluginId": "uuid",
"latestVersion": "1.2.0",
"currentVersion": "1.0.0",
"changelog": "Added new AI features, fixed bug Y"
}
]Mark Plugin as Updated
PATCH /marketplace/updates/:installedPluginId/mark-updatedAuth Required: Yes (JWT)
Called after a plugin upgrade completes successfully to clear the pending update flag.
Request Body:
{ "newVersion": "1.2.0" }Response:
{ "success": true }Error Responses
All marketplace endpoints return standard error responses:
{
"statusCode": 404,
"message": "Plugin not found",
"error": "Not Found"
}Common status codes:
| Code | Description |
|---|---|
| 200 | Success |
| 201 | Created (submit, publish) |
| 400 | Bad Request (validation error) |
| 401 | Unauthorized (missing JWT) |
| 403 | Forbidden (insufficient role) |
| 404 | Not Found |
| 409 | Conflict (duplicate version) |