Sharing Pinboards
Learn how to share pinboards and manage team collaboration on dashboards.
Overview
Pinboard sharing allows you to:
- Share entire dashboards - All pins in one share
- Team collaboration - Multiple editors on one board
- Public dashboards - Client-facing or embedded boards
- Role-based access - Control who can edit or view
Make Pinboard Public
Share a pinboard publicly:
Client-JS
import { PindownClient } from '@pindownai/client-js'
const client = new PindownClient({
apiKey: 'pk_live_your_api_key'
})
// Make pinboard public
const result = await client.pinboards.share('pb-abc123', {
is_public: true,
allow_comments: true,
require_sign_in: false
})
console.log(`Share URL: ${result.shareable_url}`)
// Output: https://pindown.ai/share/pinboard/pb-abc123Invite Team Members
Invite specific users to collaborate:
Client-JS
// Invite editor (can edit pins and layout)
await client.pinboards.inviteCollaborator('pb-abc123', {
email: 'teammate@example.com',
role: 'editor',
message: 'Let\'s work on this dashboard together'
})
// Invite viewer (read-only)
await client.pinboards.inviteCollaborator('pb-abc123', {
email: 'stakeholder@example.com',
role: 'viewer'
})
console.log('Invitations sent!')List Collaborators
View all collaborators on a pinboard:
Client-JS
const collaborators = await client.pinboards.listCollaborators('pb-abc123')
console.log(`Total collaborators: ${collaborators.length}`)
collaborators.forEach(collab => {
console.log(`- ${collab.email}: ${collab.role}`)
})Update Collaborator Role
Change a collaborator’s role:
Client-JS
// Upgrade viewer to editor
await client.pinboards.updateCollaborator('pb-abc123', 'user-xyz789', {
role: 'editor'
})
console.log('Role updated')Remove Collaborator
Revoke access from a collaborator:
Client-JS
await client.pinboards.removeCollaborator('pb-abc123', 'user-xyz789')
console.log('Access revoked')Complete Example
Create a team dashboard and share with team:
async function createTeamDashboard() {
const API_KEY = process.env.PINDOWN_API_KEY
const BASE_URL = 'https://api.pindown.ai/v1'
const headers = {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
}
// 1. Create pinboard
const pinboardRes = await fetch(`${BASE_URL}/pinboards`, {
method: 'POST',
headers,
body: JSON.stringify({
title: 'Q4 Sales Dashboard',
description: 'Real-time sales metrics for Q4',
metadata: {
tags: ['sales', 'q4', '2024']
}
})
})
const pinboard = await pinboardRes.json()
// 2. Create and add pins
const revenuePin = await fetch(`${BASE_URL}/pins`, {
method: 'POST',
headers,
body: JSON.stringify({
data_type: 'pin-card',
pin_type: 'stat-cards',
pin_layout: '1x1',
content: {
cards: [{
title: 'Q4 Revenue',
value: '$125,430',
change: '+18.2%',
trend: 'up'
}]
}
})
}).then(r => r.json())
await fetch(`${BASE_URL}/pinboards/${pinboard.data.id}/pins`, {
method: 'POST',
headers,
body: JSON.stringify({
pin_id: revenuePin.data.pin_id,
position: { x: 0, y: 0, w: 2, h: 1 }
})
})
// 3. Make public for stakeholders
await fetch(`${BASE_URL}/pinboards/${pinboard.data.id}/share`, {
method: 'POST',
headers,
body: JSON.stringify({
is_public: true,
require_sign_in: true, // Require login but share via link
allow_comments: false
})
})
// 4. Invite sales team as editors
const salesTeam = [
'sales.manager@company.com',
'sales.rep1@company.com',
'sales.rep2@company.com'
]
for (const email of salesTeam) {
await fetch(`${BASE_URL}/pinboards/${pinboard.data.id}/collaborators`, {
method: 'POST',
headers,
body: JSON.stringify({
email,
role: 'editor',
message: 'Please keep this dashboard updated with latest metrics'
})
})
}
// 5. Invite executives as viewers
const executives = ['ceo@company.com', 'cfo@company.com']
for (const email of executives) {
await fetch(`${BASE_URL}/pinboards/${pinboard.data.id}/collaborators`, {
method: 'POST',
headers,
body: JSON.stringify({
email,
role: 'viewer'
})
})
}
console.log('✅ Team dashboard created and shared')
console.log(`🔗 Public URL: ${pinboard.data.shareable_url}`)
}
createTeamDashboard()Permission Levels
| Role | View | Edit Pins | Edit Layout | Delete Board | Share | Invite |
|---|---|---|---|---|---|---|
| Owner | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Editor | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
| Viewer | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Use Cases
Client-Facing Dashboard
await client.pinboards.share('pb-abc123', {
is_public: true,
require_sign_in: false, // No login required
allow_comments: false
})Team Collaboration Dashboard
// Internal team only
await client.pinboards.share('pb-abc123', {
is_public: false // Invite-only
})
// Invite team
await client.pinboards.inviteCollaborator('pb-abc123', {
email: 'team@company.com',
role: 'editor'
})Executive Dashboard
// Public but requires login
await client.pinboards.share('pb-abc123', {
is_public: true,
require_sign_in: true,
allow_comments: false
})