- Published on
 - An Avestura Project:
 
PasteBin
- Authors
 - ← Back to projects vitrine
 
- Name
 - Aryan Ebrahimpour
 - GitHub
 - @avestura
 
Paste Bin
Avestura's PasteBin is a modern paste bin with RESTful API
Visit Project Here: Avestura's Paste Bin
Stack used: React, Next, Blueprint, MinIO S3 Object Storage, and Redis for rate-limiting (fallbacks to memory if it fails)
Env Vars for Self-hosting
MINIO_ENDPOINT=
MINIO_ACCESS_KEY=
MINIO_SECRET_KEY=
REDIS_ENDPOINT=
REDIS_PORT=
REDIS_PASSWORD=
API
Submit a new Paste
Creates a new paste in the Avestura's Paste Bin
Body:
- name: string # Id of the paste that appears in the url
 - doc: string # Content of the paste
 - language: string # Programming language of the paste
 - owner?: optional uuid string # UUID of creator
 
POST /api/paste
{
    name: "my-paste",
    doc: "const id = x => x;",
    language: "javascript",
    owner: "5777c422-0ea1-4d07-8e8d-163f4484c9dc"
}
Delete a paste
Deletes the paste and frees the reserved paste name. The creator of the paste has 60 minutes to delete the paste after creation.
Body:
- pasteId: string # Id of the paste to be deleted
 - owner: uuid string # Owner Id
 
DELETE /api/paste
{
    name: "my-paste",
    owner: "5777c422-0ea1-4d07-8e8d-163f4484c9dc"
}
Name Availability
Checks if a name is already taken or not.
Query:
- name: string # A name to check availability
 
Returns:
- status: "taken" | "available" | "error" # The status of the input name
 
GET /api/paste/checkexists?name=INPUT_NAME
Get Paste with meta data
Get paste content, last modified data, language, and content size in bytes.
GET /api/paste/:pasteId
Output sample:
{
  "language": "javascript",
  "body": "const id = x => x;",
  "lastModified": "2021-08-20T09:28:04.000Z",
  "size": 18
}
Get paste raw content
Get paste's raw content, with text/plain content-type.
GET /api/paste/:pasteId?raw
Get paste as module
Get paste's raw content as module with accurate content-type if the programming language is one of the languages listed below. This will come in handy if you want to import the paste remotely in a runtime like Deno. Content type listing:
- JavaScript: 
text/javascript - TypeScript: 
application/typescript - Python: 
text/x-python - F#: 
text/fsharp - CSS: 
text/css - JSON: 
application/json - Yaml: 
text/x-yaml - Markdown: 
text/markdown - XML: 
application/xml 
For any other language, including HTML, content-type will be text/plain, so it's better to use ?raw instead of ?module for those pastes.
GET /api/paste/:pasteId?module
Usage sample:
import Something from "https://www.avestura.dev/api/paste/sample-paste?module"