Update Api
134
Api.md
134
Api.md
@@ -1,5 +1,133 @@
|
|||||||
# API
|
# f0ckm Upload API Documentation
|
||||||
|
|
||||||
## Upload
|
This document describes how to programmatically upload files to the **f0ckm** instance using the API Key system.
|
||||||
|
|
||||||
`/api/v2/upload`
|
---
|
||||||
|
|
||||||
|
## Authentication
|
||||||
|
|
||||||
|
All API uploads require authentication via a custom header.
|
||||||
|
|
||||||
|
To authorize your request, include the `X-Api-Key` header with your personal API key. You can generate or revoke your API key under the **Settings** panel on the web interface.
|
||||||
|
|
||||||
|
```http
|
||||||
|
X-Api-Key: your_64_character_hex_api_key_here
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Endpoint: POST `/api/v2/upload`
|
||||||
|
|
||||||
|
Upload a file along with associated metadata.
|
||||||
|
|
||||||
|
* **URL:** `/api/v2/upload`
|
||||||
|
* **Method:** `POST`
|
||||||
|
* **Content-Type:** `multipart/form-data`
|
||||||
|
|
||||||
|
### Request Parameters (Form Fields)
|
||||||
|
|
||||||
|
| Parameter | Type | Required | Description |
|
||||||
|
| :--- | :--- | :---: | :--- |
|
||||||
|
| `file` | `File` (Binary) | **Yes** | The file to be uploaded. |
|
||||||
|
| `rating` | `String` | **Conditional** | Must be one of: `sfw`, `nsfw`, or `nsfl`. Required unless `is_shitpost` mode is active and the server allows it. |
|
||||||
|
| `tags` | `String` | **Conditional** | A comma-separated list of tags (e.g. `cats, funny, video`). Tags like `sfw`, `nsfw`, or `nsfl` should **not** be included here; use the `rating` parameter instead. Required depending on server tag requirements. |
|
||||||
|
| `comment` | `String` | *No* | An optional description or first comment to attach to the upload. |
|
||||||
|
| `is_oc` | `String` / `Number` | *No* | Set to `true` or `1` to mark the upload as Original Content (OC). |
|
||||||
|
| `is_shitpost` | `String` / `Number` | *No* | Set to `true` or `1` to bypass standard tagging rules (if shitpost mode is allowed/enabled on the server). |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### 1. Simple cURL Example
|
||||||
|
|
||||||
|
A standard SFW upload with tags and a comment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST https://yourdomain.com/api/v2/upload \
|
||||||
|
-H "X-Api-Key: 3c25f45bc5191610599ed3e83a62aa8eee92e013e432c097825cf312fe7a5d7e" \
|
||||||
|
-F "file=@/path/to/cat.jpg" \
|
||||||
|
-F "rating=sfw" \
|
||||||
|
-F "tags=cat, cute, feline" \
|
||||||
|
-F "comment=Look at this sleepy kitten!" \
|
||||||
|
-F "is_oc=1"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Shitpost Mode Upload (Optional Tags & Rating)
|
||||||
|
|
||||||
|
If the server has `shitpost_mode` enabled or you specify `is_shitpost=1`, you can upload with fewer restrictions (or omit tags/rating depending on configuration):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -X POST https://yourdomain.com/api/v2/upload \
|
||||||
|
-H "X-Api-Key: 3c25f45bc5191610599ed3e83a62aa8eee92e013e432c097825cf312fe7a5d7e" \
|
||||||
|
-F "file=@/path/to/meme.png" \
|
||||||
|
-F "is_shitpost=1" \
|
||||||
|
-F "comment=low quality meme"
|
||||||
|
```
|
||||||
|
---
|
||||||
|
|
||||||
|
## Response Formats
|
||||||
|
|
||||||
|
### Success Response (Live Upload)
|
||||||
|
|
||||||
|
When manual approval is not required, the upload is live immediately:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"msg": "Upload successful! Your upload is now live.",
|
||||||
|
"itemid": 12,
|
||||||
|
"manual_approval": false,
|
||||||
|
"redirect": "/12",
|
||||||
|
"url": "https://yourdomain.com/12"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Success Response (Pending Approval)
|
||||||
|
|
||||||
|
When administrative manual approval is enabled, the item is queued:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"msg": "Upload queued for manual approval.",
|
||||||
|
"itemid": 13,
|
||||||
|
"manual_approval": true,
|
||||||
|
"redirect": null,
|
||||||
|
"url": "https://yourdomain.com/"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error Responses
|
||||||
|
|
||||||
|
#### Missing File
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"msg": "No file provided"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Missing/Invalid Rating
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"msg": "Rating (sfw/nsfw/nsfl) is required"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Missing Tags (when minimum tag limit is unmet)
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"msg": "At least 3 tags are required"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Invalid/Banned API Key
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"success": false,
|
||||||
|
"msg": "Invalid or inactive API key"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user