# Pb API

> Operate PocketBase via its REST API. Use for CRUD operations on collections, authentication, querying records with filters, and managing PocketBase data.

- Skill: `spinspire/pb-api` (Agent Skill)
- Install (CLI): `npx skillmds@latest add spinspire/pb-api`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spinspire/pb-api/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- License: MIT
- Author: spinspire (https://skillmd.com/u/spinspire)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/spinspire/pb-api

---


# PocketBase API

Reference: https://pocketbase.io/docs/

Operate PocketBase via its REST API.

## Credentials

Create `.env` from `.env.example` (never commit `.env`):

```bash
PB_URL=http://localhost:8090
PB_SUPERUSER_EMAIL=admin@example.com
PB_SUPERUSER_PASSWORD=your-password
```

If credentials aren't available via env vars, ask user explicitly before proceeding.

## Quick Start

```bash
# Auth
curl -X POST http://localhost:8090/api/collections/_superusers/auth \
  -H 'Content-Type: application/json' \
  -d '{"identity":"admin@example.com","password":"secret"}'

# List records
curl http://localhost:8090/api/collections/posts/records \
  -H 'Authorization: Bearer TOKEN'

# Filter records
curl "http://localhost:8090/api/collections/posts/records?filter=status='published'&sort=-created&expand=author"
```

## Key Endpoints

| Method | Endpoint | Purpose |
|--------|----------|---------|
| POST | `/api/collections/:collection/auth` | Auth with password |
| POST | `/api/collections/:collection/auth-with-password` | Login |
| GET | `/api/collections/:collection/records` | List records |
| POST | `/api/collections/:collection/records` | Create record |
| PATCH | `/api/collections/:collection/records/:id` | Update record |
| DELETE | `/api/collections/:collection/records/:id` | Delete record |

## Filter Syntax

```
status = 'published'
author.id = 'abc123'
created >= '2024-01-01'
user.name ~ 'john*'
```

Use `@collection.name.field` for cross-collection filters.

## SDK Usage

```typescript
import PocketBase from 'pocketbase'

const pb = new PocketBase('http://localhost:8090')
await pb.collection('posts').authWithPassword('user@test.com', 'secret')

// List with filter
const records = await pb.collection('posts').getList(1, 50, {
  filter: "status = 'published'",
  sort: '-created',
  expand: 'author,tags'
})
```

## API Rules

- `null` → superuser only
- `""` → public access
- Start locked, open selectively
- Use `@request.auth`, `@collection`, `@now` in rules
