List Pins
Get all pins for the authenticated user (personal pin index — not dashboard workspace pins).
Endpoint
GET /v1/pinsAuthentication
Requires API key with pins:read scope.
Authorization: Bearer pk_live_your_api_keyQuery Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | No | Number of pins to return (max: 100, default: 50) |
offset | integer | No | Number of pins to skip (default: 0) |
Response
Success (200 OK)
{
"success": true,
"data": {
"items": [
{
"id": "p-abc123",
"title": "Sales Dashboard",
"data_type": "pin-card",
"is_public": false,
"created_at": 1730472600000,
"updated_at": 1730476200000
},
{
"id": "p-def456",
"title": "Monthly Trends",
"data_type": "markdown",
"is_public": true,
"created_at": 1730468400000,
"updated_at": 1730476200000
}
],
"total": 42,
"limit": 50,
"offset": 0
}
}List items are summaries — use Get Pin or Batch Get for full metadata.pin_config.
Example
Client-JS
import { PindownClient } from '@pindownai/client-js'
const client = new PindownClient({
apiKey: process.env.PINDOWN_API_KEY
})
const result = await client.pins.list({ limit: 20, offset: 0 })
console.log(`Total pins: ${result.total}`)
console.log(`Returned: ${result.items.length}`)
result.items.forEach((pin) => {
console.log(`- ${pin.title ?? pin.metadata?.title} (${pin.id})`)
})Error Responses
401 Unauthorized
{
"success": false,
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
}429 Too Many Requests
Rolling 60-second limit (120 reads/min for this endpoint). See Overview → Rate limits.
Pagination Tips
- Use
limitto control page size (max 100) - Use
offsetfor pagination:offset = page * limit - Check
totalin response to know total count - Stop when returned
items.length<limit
Next Steps
- Get Pin — Full pin details
- Create Pin — Create a new pin
- Overview — Pin types reference