paperless-search

from nicolaischmid/agent-skills

always wanted to search your signal history? your emails? all packaged into a neat set of skills!

0 stars0 forksUpdated Jan 26, 2026
npx skills add https://github.com/nicolaischmid/agent-skills --skill paperless-search

SKILL.md

Paperless Document Search

Search your Paperless-ngx document archive via the REST API.

Configuration

Config file: ~/.config/paperless-search/config.json

{
  "url": "https://paperless.example.com",
  "token": "your-api-token-here"
}

Getting an API token

  1. Log into your Paperless web UI
  2. Click your username (top right) → "My Profile"
  3. Click the circular arrow button to generate/regenerate a token

Troubleshooting config

If requests fail, verify the config:

# Check config exists and is valid JSON
cat ~/.config/paperless-search/config.json | jq .

# Test connection
curl -s -H "Authorization: Token $(jq -r .token ~/.config/paperless-search/config.json)" \
  "$(jq -r .url ~/.config/paperless-search/config.json)/api/documents/?page_size=1" | jq '.count'

Common issues:

  • 401 Unauthorized: Token is invalid/expired → regenerate in web UI
  • Connection refused: URL is wrong or server is down
  • null or parse error: Config file is missing or malformed

If config is broken, guide the user to provide:

  1. Their Paperless-ngx URL (e.g., https://paperless.example.com)
  2. A valid API token from their profile page

Then create/update the config:

mkdir -p ~/.config/paperless-search
cat > ~/.config/paperless-search/config.json << 'EOF'
{
  "url": "USER_PROVIDED_URL",
  "token": "USER_PROVIDED_TOKEN"
}
EOF

API Examples

# Load config into variables
PAPERLESS_URL=$(jq -r .url ~/.config/paperless-search/config.json)
PAPERLESS_TOKEN=$(jq -r .token ~/.config/paperless-search/config.json)

# Full-text search
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/documents/?query=invoice+january+2025" | jq '.results[] | {id, title, created}'

# Get document with full OCR content
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/documents/123/" | jq -r '.content'

# List correspondents
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/correspondents/" | jq '.results[] | {id, name}'

# Filter by correspondent
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/documents/?correspondent__id=5" | jq

# Filter by date range
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/documents/?created__date__gte=2024-01-01&created__date__lte=2024-12-31" | jq

# List tags
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/tags/" | jq '.results[] | {id, name}'

# List document types
curl -s -H "Authorization: Token $PAPERLESS_TOKEN" \
  "$PAPERLESS_URL/api/document_types/" | jq '.results[] | {id, name}'

API Reference

EndpointDescription
/api/documents/List/search documents
/api/documents/{id}/Get single document with full content
/api/tags/List all tags
/api/correspondents/List all correspondents
/api/document_types/List all document types

Query Parameters for /api/documents/

ParameterExampleDescription
queryquery=contract+2022Full-text search
correspondent__idcorrespondent__id=5Filter by correspondent
tags__id__alltags__id__all=1,2Must have all tags
document_type__iddocument_type__id=3Filter by type
created__date__gtecreated__date__gte=2024-01-01Created after
created__date__ltecreated__date__lte=2024-12-31Created before
orderingordering=-createdSort order
page_sizepage_size=50Results per page

Document URL format

When linking to documents, always use the base URL from the config file:

PAPERLESS_URL=$(jq -r .url ~/.config/paperless-search/config.json)
echo "$PAPERLESS_URL/documents/{id}/details"

Do NOT hardcode or guess the URL - always read it from the config.

Repository Stats

Stars0
Forks0
LicenseMIT License