Create a Share
This tutorial walks through creating a shareable content page with optional password protection, publishing it, and managing your shares.
Step 1: Draft the Share
Create a draft share page with a composition block. Shares are ideal for campaign reports, partner materials, or time-limited content.
Tool: share.draft
{
"tool": "share.draft",
"input": {
"composition": {
"blocks": [
{ "type": "heading", "text": "Q2 2026 Campaign Performance" },
{ "type": "paragraph", "text": "Email: 45,000 sends | 42% open rate | 8.5% click rate" },
{ "type": "paragraph", "text": "SMS: 12,000 sends | 15% click rate" },
{ "type": "paragraph", "text": "Top performing: BPC-157 launch sequence (58% open, 12% click)" }
]
},
"slug": "q2-2026-results",
"expires_in_days": 30
}
}Response:
{
"ok": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"slug": "q2-2026-results",
"host": "share.loop.health",
"preview_url": "https://share.loop.health/q2-2026-results"
}
}Step 2: Add Password Protection (Optional)
If the share contains sensitive data, add a password. Recipients will need to enter it to view the content. The password is bcrypt-hashed before storage.
Tool: share.set_password
{
"tool": "share.set_password",
"input": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"password": "LoopQ2Results!"
}
}Response:
{
"ok": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"slug": "q2-2026-results",
"host": "share.loop.health",
"has_password": true
}
}Step 3: Publish the Share
Publish the share to make it live. No ops gate — the creator self-publishes.
Tool: share.publish
{
"tool": "share.publish",
"input": {
"id": "550e8400-e29b-41d4-a716-446655440000"
}
}Response:
{
"ok": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"url": "https://share.loop.health/q2-2026-results",
"published_at": "2026-05-19T14:10:00Z"
}
}Share the URL with your recipients. If password-protected, they’ll see a password prompt before the content loads.
Step 4: Manage Your Shares
List all your shares to see their status and expiration.
Tool: share.list
{
"tool": "share.list",
"input": {
"limit": 10
}
}Response:
{
"ok": true,
"data": {
"shares": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"slug": "q2-2026-results",
"host": "share.loop.health",
"published_at": "2026-05-19T14:10:00Z",
"expires_at": "2026-06-18T14:00:00Z",
"view_count": 0
}
],
"count": 1
}
}What Happens Next
You can manage the share over its lifetime:
- Extend the expiration with share.extend if you need more time
- Update the password with share.set_password to rotate access (pass
nullto remove) - Expire early with share.expire — renderer returns 410 Gone
- Archive with share.archive to permanently remove (retained for audit)