personal activity index (bluesky, leaflet, substack) pai.desertthunder.dev
rss bluesky
at main 110 lines 3.2 kB view raw
1{ 2 "name": "Personal Activity Index API", 3 "version": "0.0.0", 4 "description": "Aggregate and query your personal activity across multiple platforms", 5 "endpoints": [ 6 { 7 "method": "GET", 8 "path": "/", 9 "description": "API documentation", 10 "response": "This documentation in JSON format" 11 }, 12 { 13 "method": "GET", 14 "path": "/status", 15 "description": "Health check and version information", 16 "response": { 17 "status": "ok", 18 "version": "string" 19 } 20 }, 21 { 22 "method": "GET", 23 "path": "/api/feed", 24 "description": "List items from all sources with optional filtering", 25 "parameters": [ 26 { 27 "name": "source_kind", 28 "type": "string", 29 "required": false, 30 "description": "Filter by source type", 31 "values": ["substack", "bluesky", "leaflet", "bearblog"] 32 }, 33 { 34 "name": "source_id", 35 "type": "string", 36 "required": false, 37 "description": "Filter by specific source identifier (domain or handle)" 38 }, 39 { 40 "name": "limit", 41 "type": "integer", 42 "required": false, 43 "default": 20, 44 "description": "Maximum number of items to return" 45 }, 46 { 47 "name": "since", 48 "type": "string", 49 "required": false, 50 "description": "ISO 8601 timestamp - only return items published after this time" 51 }, 52 { 53 "name": "q", 54 "type": "string", 55 "required": false, 56 "description": "Search query - matches against title and summary" 57 } 58 ], 59 "response": { 60 "items": [ 61 { 62 "id": "string", 63 "source_kind": "bluesky|substack|leaflet|bearblog", 64 "source_id": "string", 65 "author": "string?", 66 "title": "string?", 67 "summary": "string?", 68 "url": "string", 69 "content_html": "string?", 70 "published_at": "ISO 8601 timestamp", 71 "created_at": "ISO 8601 timestamp" 72 } 73 ] 74 } 75 }, 76 { 77 "method": "GET", 78 "path": "/api/item/:id", 79 "description": "Get a single item by its unique ID", 80 "parameters": [ 81 { 82 "name": "id", 83 "type": "string", 84 "required": true, 85 "description": "The unique identifier of the item" 86 } 87 ], 88 "response": "Single item object or 404 if not found" 89 }, 90 { 91 "method": "POST", 92 "path": "/api/sync", 93 "description": "Manually trigger synchronization from all configured sources", 94 "response": { 95 "status": "success", 96 "message": "Sync completed successfully" 97 } 98 } 99 ], 100 "sources": { 101 "substack": "RSS feeds from Substack publications", 102 "bluesky": "Posts from Bluesky via AT Protocol API", 103 "leaflet": "Publications from Leaflet (Bluesky-based blogging)", 104 "bearblog": "Posts from Bear Blog RSS feeds" 105 }, 106 "scheduled_sync": { 107 "description": "Automatic synchronization runs on a scheduled basis", 108 "schedule": "Configured via cron triggers in wrangler.toml" 109 } 110}