Client SDK
The @pindownai/client-js package is a pins-only TypeScript/JavaScript client for the Pindown v1 Pins API.
Requires a Workspace plan API key (pk_…).
Installation
npm install @pindownai/client-jsQuick Start
import { PindownClient } from '@pindownai/client-js'
import type { MarkdownPinConfig } from '@pindownai/client-js'
const client = new PindownClient({
apiKey: process.env.PINDOWN_API_KEY!,
})
const created = await client.pins.create({
pin_type: 'markdown',
pin_config: { content: '# Hello\n\nCreated via API.' },
metadata: { title: 'My doc', tags: ['docs'] },
})
const pin = await client.pins.get(created.id)
const content = (pin.metadata?.pin_config as MarkdownPinConfig | undefined)?.contentConfiguration
const client = new PindownClient({
apiKey: 'pk_live_...', // Required
baseURL: 'https://api.pindown.ai/v1', // Optional (default)
maxRetries: 3, // Optional
timeout: 30000, // Optional (ms)
})Pins API
client.pins.create(request)
client.pins.get(pinId)
client.pins.list({ limit, offset })
client.pins.update(pinId, request)
client.pins.delete(pinId)
client.pins.share(pinId, request)
client.pins.batchGet(pinIds)
client.pins.batchCreate(pins)
client.pins.batchUpdate(updates)
client.pins.batchDelete(pinIds)
// Helpers
client.pins.createMarkdown({ title, content, tags })
client.pins.createStatCards({ title, cards })
client.pins.createTable({ title, columns, rows })
client.pins.createEmbed({ title, url, type })View full Pins SDK documentation →
Rate Limits (server-enforced)
The server applies rolling 60-second buckets on /v1/pins*. When exceeded you get HTTP 429 with error code RATE_LIMITED, thrown as RateLimitError in the client.
There is no client-side token bucket — limits are enforced on the server only.
Error Handling
import {
AuthenticationError,
ForbiddenError,
NotFoundError,
ValidationError,
RateLimitError,
} from '@pindownai/client-js'
try {
await client.pins.get('p-invalid')
} catch (error) {
if (error instanceof NotFoundError) {
console.log('Pin not found')
} else if (error instanceof RateLimitError) {
console.log('Rate limited — retry later')
}
}TypeScript Support
Import typed pin configs per type:
import type {
PinTypeId,
PinConfigByType,
MarkdownPinConfig,
TablePinConfig,
StatCardsPinConfig,
CreatePinRequest,
} from '@pindownai/client-js'Next Steps
- Pins SDK Reference — All client methods
- Pins REST API — HTTP endpoint reference