Shared Marketplace Content API
Create, manage, and share message templates and configuration presets with other SCNX users through your marketplace organization.
Your use of this API is subject to the following additional legal documents: SCNX Shared Marketplace Content - Terms of Service.
API requests might fail without prior agreement. Ensure your use of this API is compliant with these terms at all times.
Getting Started
Before you can use the Shared Content API, you need to complete a few setup steps in the SCNX dashboard.
Step 1: Create an Application
- Open your organization's page on the SCNX dashboard
- Navigate to Integrations in the sidebar
- Click Create Application and give it a name (e.g., "My Content Bot")
- Your application starts in
UNRELEASEDstatus — you'll need to publish it before the API token works
Step 2: Enable the Shared Content Feature
- Open your newly created application
- In the Features section, enable the Shared Content (
SHARED_CONTENT) feature flag - Save your changes
Step 3: Agree to the Shared Content Terms of Service
- Navigate to the Shared Content page in your organization's sidebar
- You'll be prompted to agree to the Shared Marketplace Content Terms of Service
- Accept the terms — this is a one-time action and applies to the whole organization
Step 4: Publish your Application
- Go back to your application in Integrations
- Enable Sudo Mode (required for sensitive operations)
- Change the application visibility from
UNRELEASEDtoPRIVATE(orPUBLICif you want it listed) - Copy your API Token from the application's token section — this is your authentication credential
You're now ready to use the API.
Authentication
Include your application's API token in the Authorization header of every request:
Authorization: <your-api-token>
Requirements
- Application visibility must be
PRIVATE,PUBLIC, orCUSTOM_SOLUTION(notUNRELEASED) - Application must have the
SHARED_CONTENTfeature flag enabled - Organization must have agreed to the Shared Marketplace Content ToS
Rate Limiting
- Authentication: 2 failed attempts per 15 hours. Successful requests do not count toward this limit.
- Creating content: 20 requests per 10 minutes.
- All other endpoints have no additional rate limits beyond authentication.
When rate-limited, the API returns 429 Too Many Requests. Standard RateLimit-* and Retry-After headers are included in responses.
Scoping
All endpoints are strictly scoped to your organization. Your API token can only access, modify, and delete shared content that belongs to your organization — never content from other organizations.
Message Data Format
The data field in content creation and update endpoints accepts SCNX message JSON. Every message object must include a _schema field indicating the schema version:
"v3"— v3 Message Schema Reference"v4"— v4 Message Schema Reference
Example: v3 message
{
"_schema": "v3",
"content": "Hello, world!",
"embeds": [
{
"title": "My Embed",
"description": "Some description text.",
"color": "#5865F2"
}
]
}
Example: v4 message
{
"_schema": "v4",
"components": [
{
"type": 17,
"accent_color": 5793266,
"components": [
{
"type": 10,
"content": "Welcome to the server!"
}
]
}
]
}
Content Types
The API supports two content types:
Messages
A standalone message template that users can import and use anywhere SCNX supports messages. The data field contains a single message object with _schema.
Configuration Templates
A pre-configured message (or set of messages) that users can apply directly into a specific module's configuration on their server. When a user imports a configuration template, SCNX writes the message data into the specified module and config file, overwriting only the targeted fields.
Configuration templates support two modes:
Single-field template
Targets one message field in a module config. Provide fieldName and a single message object (with _schema) as data.
{
"type": "CONFIGURATION_TEMPLATE",
"moduleName": "welcome",
"configFile": "config",
"fieldName": "welcomeMessage",
"data": {
"_schema": "v3",
"content": "Welcome, {user}!"
}
}
Multi-field template
Targets multiple message fields at once. Omit fieldName and pass data as an object where each key is a field name and each value is a message object with _schema.
{
"type": "CONFIGURATION_TEMPLATE",
"moduleName": "welcome",
"configFile": "config",
"data": {
"welcomeMessage": {
"_schema": "v3",
"content": "Welcome, {user}!"
},
"goodbyeMessage": {
"_schema": "v3",
"content": "Goodbye, {user}. We'll miss you!"
}
}
}
The import page will display each field as a separate message preview and apply all of them at once when the user imports the template.
The data format determines which mode is used: if data contains a _schema field at the top level, it's a single-field template. If data is an object without _schema, it's a multi-field template where each key maps to a message field.
Endpoints
Base URL: https://scnx.app/api/marketplace-api/shared-content
Create Shared Content
POST /marketplace-api/shared-content
Creates a new shared content item in your organization. Returns the created item including a ready-to-share shareURL.
Rate limit: 20 requests per 10 minutes.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
displayName | string | Yes | Display name shown to users when previewing and importing the content |
description | string | No | Short description of the content. Set to null or omit to leave empty. |
type | string | Yes | "MESSAGE" or "CONFIGURATION_TEMPLATE" |
visibility | string | No | "PUBLIC" or "PRIVATE". Public content is visible on your organization's page. Private content is only accessible via its direct share link. Defaults to "PRIVATE". |
data | object | Yes | The message data. See Message Data Format and Content Types for the expected structure. |
moduleName | string | Template only | Target module name (e.g., "welcome"). Required for CONFIGURATION_TEMPLATE. |
configFile | string | Template only | Target config file (e.g., "config"). Required for CONFIGURATION_TEMPLATE. |
fieldName | string | Template only | Target message field in the config. Required for single-field templates. Omit for multi-field templates. |
Response Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique content ID (UUID). Use this for update and delete operations. |
privateKey | string | Unique key used in share URLs |
type | string | "MESSAGE" or "CONFIGURATION_TEMPLATE" |
visibility | string | "PUBLIC" or "PRIVATE" |
displayName | string | Display name |
description | string | null | Description, or null if not set |
data | object | The message data as submitted |
moduleName | string | null | Module name (templates only) |
configFile | string | null | Config file (templates only) |
fieldName | string | null | Field name (single-field templates only) |
organizationID | number | Your organization's ID |
usageCount | number | Number of times this content has been imported. Starts at 0. |
createdAt | string | ISO 8601 timestamp |
updatedAt | string | ISO 8601 timestamp |
shareURL | string | Ready-to-share import link |
Example: Create a Shared Message
curl -X POST https://scnx.app/api/marketplace-api/shared-content \
-H "Authorization: your-api-token" \
-H "Content-Type: application/json" \
-d '{
"displayName": "Welcome Message",
"description": "A clean welcome embed for new members",
"type": "MESSAGE",
"visibility": "PUBLIC",
"data": {
"_schema": "v3",
"content": "Welcome to the server, {user}!",
"embeds": [
{
"title": "Welcome!",
"description": "Check out the rules in #rules and grab your roles in #roles.",
"color": "#5865F2"
}
]
}
}'
Response: 200 OK
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"privateKey": "clx1abc2def3ghi",
"type": "MESSAGE",
"visibility": "PUBLIC",
"displayName": "Welcome Message",
"description": "A clean welcome embed for new members",
"data": {
"_schema": "v3",
"content": "Welcome to the server, {user}!",
"embeds": [
{
"title": "Welcome!",
"description": "Check out the rules in #rules and grab your roles in #roles.",
"color": "#5865F2"
}
]
},
"moduleName": null,
"configFile": null,
"fieldName": null,
"organizationID": 123,
"usageCount": 0,
"createdAt": "2026-02-21T12:00:00.000Z",
"updatedAt": "2026-02-21T12:00:00.000Z",
"shareURL": "https://scnx.app/import/message?key=clx1abc2def3ghi&source=marketplace"
}
The shareURL is a ready-to-share link. Anyone with an SCNX account can open it to preview and import the message.