Zero-Knowledge API for encrypted notes, subjects, and Markdown payloads
| Method | Endpoint | What it does |
|---|---|---|
| POST | /api/pastes |
Create a new encrypted paste. The server generates a short id unless you pass one in the body. |
| POST | /api/pastes/{id} |
Create a new encrypted paste with a custom short id in the URL path. |
| GET | /api/pastes/{id} |
Fetch the encrypted payload plus metadata. Burn-after-read pastes are deleted after the first successful read. |
| GET | /api/pastes/{id}/meta |
Read metadata only without consuming the encrypted payload. |
| GET | /api/options |
Return limits, presets, supported formats, and the endpoint map. |
| GET | /api/health |
Simple health check for uptime monitoring. |
Legacy routes /api/create and /api/get/{id} still work for backward compatibility.
{
"encryptedData": {
"iv": [12, 83, 144, 221],
"data": [167, 44, 222, 1]
},
"expiresIn": 86400,
"customExpiresAt": 0,
"burnAfterRead": true,
"hasPassword": true
}
encryptedData.curl -X POST https://share.plotify.shop/api/pastes \
-H "Content-Type: application/json" \
-d '{
"encryptedData": {
"iv": [12, 83, 144, 221],
"data": [167, 44, 222, 1]
},
"expiresIn": 86400,
"customExpiresAt": 0,
"burnAfterRead": true,
"hasPassword": true
}'
curl -X POST https://share.plotify.shop/api/pastes/customPasteId123 \
-H "Content-Type: application/json" \
-d '{
"ivBase64": "A1Jz4Q",
"dataBase64": "m6xK4w8t...",
"expiresIn": 3600,
"burnAfterRead": false,
"hasPassword": false
}'
{
"success": true,
"apiVersion": "1.2",
"id": "customPasteId123",
"expiresAt": 1770000000,
"expiresIn": 3600,
"burnAfterRead": false,
"hasPassword": false,
"url": "https://share.plotify.shop/p/customPasteId123",
"retrieveUrl": "https://share.plotify.shop/api/pastes/customPasteId123",
"metaUrl": "https://share.plotify.shop/api/pastes/customPasteId123/meta",
"docsUrl": "https://share.plotify.shop/api/docs"
}
{
"success": true,
"apiVersion": "1.2",
"id": "customPasteId123",
"encryptedData": {
"iv": [12, 83, 144, 221],
"data": [167, 44, 222, 1],
"ivBase64": "A1Jz4Q",
"dataBase64": "m6xK4w8t..."
},
"data": {
"iv": [12, 83, 144, 221],
"data": [167, 44, 222, 1]
},
"burnAfterRead": false,
"hasPassword": false,
"created": 1769990000000,
"expiresAt": 1770000000,
"views": 1
}
{
"success": true,
"service": "Secure Pastebin API",
"apiVersion": "1.2",
"baseUrl": "https://share.plotify.shop",
"docsUrl": "https://share.plotify.shop/api/docs",
"limits": {
"minExpirySeconds": 300,
"maxExpirySeconds": 31536000,
"maxEncryptedPayloadBytes": 4194304
},
"capabilities": [
"create encrypted pastes",
"create with custom id",
"fetch encrypted pastes",
"fetch paste metadata without consuming the payload",
"custom expiration",
"burn after read",
"password-aware flag"
]
}
/api/pastes/{id} removes it after the first successful response.const payload = {
encryptedData: {
iv: Array.from(ivBytes),
data: Array.from(cipherBytes)
},
expiresIn: 86400,
customExpiresAt: 0,
burnAfterRead: false,
hasPassword: false
};
const createRes = await fetch('https://share.plotify.shop/api/pastes', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload)
});
const created = await createRes.json();
const readRes = await fetch(created.retrieveUrl);
const encryptedPaste = await readRes.json();
<?php
$payload = [
'encryptedData' => [
'iv' => [12, 83, 144, 221],
'data' => [167, 44, 222, 1],
],
'expiresIn' => 86400,
'burnAfterRead' => false,
'hasPassword' => false,
];
$ch = curl_init('https://share.plotify.shop/api/pastes');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
/api/pastes or /api/pastes/{id}.result.url#keyFragment with the recipient./api/pastes/{id}, then decrypts locally.