Moonborn — API · marketplace
Create + submit a listing for moderation review
Creates a `draft` listing, submits it for moderation, and synchronously returns the verdict. On `approved` the row becomes `published`; on `rejected` the listing is `unpublished` and a 422 is returned with the reason; on `flagged_for_review` the listing remains `in_review` and the caller surfaces a status banner.
POST/v1/marketplace/listingsscope · Bearer (API key or session JWT)
Request body
| Field | Type | Description |
|---|---|---|
| personaIdreq | string | |
| titlereq | string | |
| summaryreq | string | |
| description | string | |
| licensereq | string · "cc_by" | "cc_by_sa" | "cc_by_nc" | "cc_by_nd" | "commercial" | "proprietary" | |
| priceUsdMicros | number | |
| tags | string[] |
Responses
201Listing accepted (approved or flagged)
Body
| Field | Type | Description |
|---|---|---|
| listingreq | object | |
| listing.listingIdreq | string | |
| listing.slugreq | string | |
| listing.orgIdreq | string | |
| listing.personaIdreq | string | |
| listing.titlereq | string | |
| listing.summaryreq | string | |
| listing.licensereq | string · "cc_by" | "cc_by_sa" | "cc_by_nc" | "cc_by_nd" | "commercial" | "proprietary" | |
| listing.priceUsdMicrosreq | number | |
| listing.statusreq | string · "draft" | "in_review" | "published" | "unpublished" | "removed" | |
| listing.ratingsAvgreq | number | |
| listing.ratingsCountreq | number | |
| listing.installsreq | number | |
| listing.forksreq | number | |
| listing.tagsreq | string[] | |
| listing.publishedAtreq | string | |
| listing.updatedAtreq | string | |
| listing.descriptionreq | string | |
| listing.moderationFlags | string[] | |
| verdictreq | object | |
| verdict.kindreq | string · "approved" | "rejected" | "flagged_for_review" | |
| verdict.reasonreq | string |
401Unauthenticated
Body
| Field | Type | Description |
|---|---|---|
| errorreq | object | |
| error.codereq | string | |
| error.messagereq | string |
403Caller is not a member of the persona owner org
Body
| Field | Type | Description |
|---|---|---|
| errorreq | object | |
| error.codereq | string | |
| error.messagereq | string |
404Persona not found
Body
| Field | Type | Description |
|---|---|---|
| errorreq | object | |
| error.codereq | string | |
| error.messagereq | string |
422Validation error or moderation rejection
Body
| Field | Type | Description |
|---|---|---|
| errorreq | object | |
| error.codereq | string | |
| error.messagereq | string |
Examples
cURL
curl -X POST https://api.moonborn.co/v1/marketplace/listings \
-H "Authorization: Bearer $MOONBORN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"personaId": "<string>",
"title": "<string>",
"summary": "<string>",
"license": "cc_by"
}'TypeScript
import Moonborn from '@moonborn/sdk';
const client = new Moonborn({ apiKey: process.env.MOONBORN_API_KEY });
const result = await client.marketplace.publishListing({
personaId: "<string>",
title: "<string>",
summary: "<string>",
license: "cc_by",
});Python
import os
from moonborn import Moonborn
client = Moonborn(api_key=os.environ["MOONBORN_API_KEY"])
result = client.marketplace.publish_listing(
persona_id="<string>",
title="<string>",
summary="<string>",
license="cc_by",
)