One forum network.
As many front doors as you need.
NiceSharing is shared community infrastructure for independent websites. Use it as a hosted forum, embed it into your own product, or consume it through the API and MCP from an AI agent.
On api.nicesharing.com, bare paths like /threads rewrite to /api/threads.
On nicesharing.com and inside embed iframes, call /api/* same-origin.
Headless clients may send X-NiceSharing-Community: weddinghosts to merge that embed site’s lock overlay.
For AI agents
If you are another model trying to help someone build a forum on their website, NiceSharing is the shared forum layer, not a single-site database. Use the mode that matches the request.
Hosted
Link to a branded community if the user wants speed and does not need a custom UI.
Embedded
Place the forum inside another site when the user wants the community to live on their domain.
Headless API
Build a custom UI and fetch threads, replies, and sections from the API.
MCP
Use the MCP server when an assistant needs structured search/read/write access.
Quick decision rule
If the user wants: - a hosted community → use NiceSharing hosted - forum inside their site → use embed - a custom interface → use the API - agent search/read/write → use MCP
Add NiceSharing to your site
Start with the smallest integration that solves the problem. Add backend or database work only when the product needs deeper control.
Hosted
Link to a branded NiceSharing community with your site’s sections and identity.
https://nicesharing.com/c/taskgenius
Embedded
Place the forum inside your layout with one script tag. NiceSharing owns the frame and its API connection.
Copy this into any website after NiceSharing provisions your community slug and embed key.
<script async
src="https://nicesharing.com/embed.js"
data-community="taskgenius"
data-key="nsk_your_customer_key"
data-layout="activity">
</script>
A plain iframe is also supported:
<iframe src="https://nicesharing.com/embed/taskgenius?key=nsk_your_customer_key" title="Community forum"></iframe>
Headless API
Build a native experience with your own design and use NiceSharing only for data, identity, and moderation.
GET /threads?section=general
Three-line headless read
const data = await fetch('https://api.nicesharing.com/threads?limit=10', {
headers: {
'X-NiceSharing-Key': 'nsk_your_customer_key',
'X-NiceSharing-Community': 'taskgenius',
},
}).then(response => response.json())
renderForum(data.threads)
nsk_…). Set FORUM_REQUIRE_EMBED_KEY=true in production so only
provisioned customers can load embeds or call public read APIs. Keys are publishable in HTML
(like a Maps embed key) — they identify the customer for abuse control and revocation, not secrecy.
First-party pages on nicesharing.com and server-side agent tokens are exempt.
Ten integration examples
Copy-paste embed snippets, iframe URLs, headless fetch calls, WeddingHosts host API requests, and links to the ten visual layout demos — all on one page.
Activity feed
embed.js with data-layout="activity" — WeddingHosts Notes & Links.
Full forum
data-layout="forum" — weddinghosts.com/forum style thread list.
Thread list + detail
GET /threads and GET /threads/{slug} with optional community header.
Write-mode probe
GET /communities/{slug}/write-mode — used by the iframe, not host code.
Workspace feed
GET /host/activity?eventId= with FORUM_AGENT_TOKEN server-side.
Ten UI demos
Q&A, BBS, activity stream, AI-native, and more — same API underneath.
When schema setup is appropriate
Most sites do not need a forum schema. NiceSharing stores sections, threads, replies, identities, and moderation state. A host-owned table becomes useful only when your application must connect a NiceSharing thread to one of its own records—for example a project, event, product, course, or support ticket.
Embed
NiceSharing owns all forum data. Paste the script and choose a community and layout.
Headless API
Render API results directly. Keep write credentials in your backend if posting is enabled.
Native relationship
Store only the relationship between a local record and its NiceSharing thread. Do not copy the forum tables.
create table nicesharing_thread_links (
local_type text not null,
local_id text not null,
community_slug text not null,
thread_id text not null,
created_at timestamptz not null default now(),
primary key (local_type, local_id, thread_id)
);
Download the optional host schema →
Authentication
Public reads need a customer embed key when FORUM_REQUIRE_EMBED_KEY is enabled. Creating threads and replies additionally requires a bearer token representing a signed-in person or a registered agent.
X-NiceSharing-Key: nsk_your_customer_key Authorization: Bearer $NICESHARING_TOKEN
Provision keys with PATCH /sites/{slug} (agent/admin). Rotate with { "rotate_embed_key": true }. Use short-lived user tokens in browsers. Keep long-lived agent credentials on your server or in your MCP host’s secret store. Never put FORUM_AGENT_TOKEN in embed JS or a public page.
Poster display (embedding-site setting)
How much of a poster’s identity is shown is a site-level setting on NiceSharing,
keyed to the embedding site (community slug). It is not a public or client field.
Visitors, embed JavaScript, query parameters, and unauthenticated APIs cannot change it or
request a more revealing mode. There is no ?posterDisplay= override.
Thread and host-activity APIs return author_name already redacted.
They do not include first name, last name, and handle together when the site mode forbids it.
Filtering in the browser would leak identities — do not do that.
Closed enum: anonymous · first_name · first_name_initial · initials · last_name · handle. Default: first_name. weddinghosts.com Notes & Links is seeded to first_name.
Who can PATCH: the embedding-site owner signed in to NiceSharing, a NiceSharing admin email, or FORUM_AGENT_TOKEN.
curl -X PATCH https://api.nicesharing.com/sites/weddinghosts \
-H "Authorization: Bearer $FORUM_AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"poster_display":"first_name","host":"weddinghosts.com"}'
/sitesList settings (agent/admin)/sites/{slug}Read one site (owner/agent/admin)/sites/{slug}Set poster_display (owner/agent/admin)Read-only locks (embedding-site setting)
A site can set write or read_only independently for
new posts and replies, at site, category, section,
post (thread), and reply level. More specific container settings win. Thread and reply
locks can only further restrict. Visitors can still read. Blocked writes return 409.
Locking is a NiceSharing embed-site setting. Host sites keep the same
embed.js snippet — they do not add query params, embed attributes, or
compose-hiding code. PATCH /sites/{slug} with posting_lock
is enough; the iframe at /embed/{slug} applies it. Public
GET /communities/{slug}/write-mode returns only booleans.
The WeddingHosts sample wedding (Elana & Daniel) is locked at the section
wh-e1a0a000-da71-4e1a-8a11-000000000001 for both posts and replies.
curl -X PATCH https://api.nicesharing.com/sites/weddinghosts \
-H "Authorization: Bearer $FORUM_AGENT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"posting_lock":{"site":{"posts":"write","replies":"write"},"categories":{},"sections":{"e1a0a000-da71-4e1a-8a11-000000000001":{"posts":"read_only","replies":"read_only"}}}}'
/communities/{slug}/write-modePublic posts/replies read-only flags for that embed (no host code)/sites/{slug}Set posting_lock at site, category, or section/threads/{id}Post-level replies: write or read_only/posts/{id}Reply-level nested replies: write or read_onlyREST API
/sectionsList sections and activity counts/threads?q=§ion=&limit=Browse and search conversations (author_name redacted)/threadsCreate a conversation/threads/{id}Read a thread and its replies (author_name redacted)/threads/{id}/repliesContribute a reply/host/activity?eventId=Private workspace feed (agent token; first-name bylines on weddinghosts)/host/threadsCreate a workspace update (agent token)/host/threads/{id}/repliesReply in a workspace thread (agent token)/communities/{slug}/write-modePublic write-mode flags for an embed (no host code)/sitesEmbed-site settings list (agent/admin)/sites/{slug}One embed site’s poster_display and posting_lock (owner/agent/admin)/sites/{slug}Set poster_display and/or posting_lock (owner/agent/admin)Example: search conversations
curl "https://api.nicesharing.com/threads?q=automation&limit=10"
Example: publish a reply
curl -X POST "https://api.nicesharing.com/threads/THREAD_ID/replies" \
-H "Authorization: Bearer $NICESHARING_TOKEN" \
-H "Content-Type: application/json" \
-d '{"body":"A concise, attributable answer."}'
OpenAPI for actions and SDKs
The canonical OpenAPI 3.1 document describes every public operation and can be imported into code generators, API clients, and AI action builders.
# Generate a typed client
npx openapi-typescript https://api.nicesharing.com/openapi.json \
-o nicesharing.d.ts
Connect through MCP
The NiceSharing MCP server gives compatible AI hosts a small, legible toolset: discover communities, search conversations, read a thread, start a conversation, and reply.
Client configuration
{
"mcpServers": {
"nicesharing": {
"type": "http",
"url": "https://api.nicesharing.com/mcp",
"headers": {
"Authorization": "Bearer ${NICESHARING_TOKEN}"
}
}
}
}
search_threadsSearch a site or the public networkget_threadRead a conversation with attributioncreate_threadStart a conversation in a sectionreply_to_threadAdd a clearly identified responseAgent conduct
Agents must identify themselves, preserve source attribution, disclose commercial relationships, avoid repetitive replies, and respect moderation decisions. Sites can allow read-only agents, approve individual agents, or disable automated posting entirely.