# API Reference ## Authentication All write operations require a Bearer token: ``` Authorization: Bearer YOUR_AUTH_KEY ``` ## Endpoints ### Create Paste POST /api #### JSON Request ```bash curl -X POST https://your-pbnj.workers.dev/api \ -H "Authorization: Bearer YOUR_AUTH_KEY" \ -H "Content-Type: application/json" \ -d '{ "code": "console.log(\"hello\")", "language": "javascript", "filename": "hello.js" }' ``` #### Form Data Request (File Upload) ```bash curl -X POST https://your-pbnj.workers.dev/api \ -H "Authorization: Bearer YOUR_AUTH_KEY" \ -F "file=@script.py" ``` #### Request Body (JSON) | Field | Type | Required | Description | |----------|---------|----------|--------------------------------------| | code | string | Yes | The content to paste | | language | string | No | Language for syntax highlighting | | filename | string | No | Display filename | | private | boolean | No | If true, not listed on homepage | | key | string/boolean | No | Secret key (true = auto-generate) | #### Response ```json { "id": "crunchy-peanut-butter-sandwich", "url": "https://your-pbnj.workers.dev/crunchy-peanut-butter-sandwich", "private": false } ``` With key: ```json { "id": "crunchy-peanut-butter-sandwich", "url": "https://your-pbnj.workers.dev/crunchy-peanut-butter-sandwich?key=abc123", "private": true } ``` ### List Pastes GET /api Returns recent public pastes. #### Query Parameters | Param | Type | Description | |--------|--------|--------------------------------| | cursor | number | Offset for pagination | #### Response ```json { "pastes": [ { "id": "crunchy-peanut-butter-sandwich", "language": "javascript", "updated": 1701648000000, "filename": "hello.js", "preview": "console.log(\"hello\")..." } ], "nextCursor": 20 } ``` ### Update Paste PUT /api/{id} Requires authentication. ```bash curl -X PUT https://your-pbnj.workers.dev/api/crunchy-peanut-butter-sandwich \ -H "Authorization: Bearer YOUR_AUTH_KEY" \ -H "Content-Type: application/json" \ -d '{ "code": "console.log(\"updated\")", "language": "javascript", "filename": "hello.js" }' ``` #### Request Body (JSON) | Field | Type | Required | Description | |----------|--------|----------|----------------------------------| | code | string | Yes | The new content | | language | string | No | Language for syntax highlighting | | filename | string | No | Display filename | #### Response ```json { "id": "crunchy-peanut-butter-sandwich", "url": "https://your-pbnj.workers.dev/crunchy-peanut-butter-sandwich" } ``` ### Delete Paste DELETE /api/{id} Requires authentication. ```bash curl -X DELETE https://your-pbnj.workers.dev/api/crunchy-peanut-butter-sandwich \ -H "Authorization: Bearer YOUR_AUTH_KEY" ``` ### Delete All Pastes DELETE /api Requires authentication. Deletes all pastes from the database. ```bash curl -X DELETE https://your-pbnj.workers.dev/api \ -H "Authorization: Bearer YOUR_AUTH_KEY" ``` #### Response ```json { "message": "All pastes deleted" } ``` ### View Paste (Web) GET /{id} Returns HTML page with syntax highlighting. For pastes with a key: GET /{id}?key=YOUR_KEY ### View Paste (Raw) GET /r/{id} Returns plain text content. For pastes with a key: GET /r/{id}?key=YOUR_KEY ## Error Responses ### 401 Unauthorized ```json { "error": "Unauthorized" } ``` ### 404 Not Found ```json { "error": "Not found" } ``` Note: Pastes with invalid keys also return 404 to prevent enumeration. ### 400 Bad Request ```json { "error": "Code is required" } ``` ### 500 Internal Server Error ```json { "error": "Internal server error" } ``` --- Next: 06_configuration.md - Configuration options