API v1

A link from your terminal, in one command.

Simple text/plain for daily work and a JSON contract for full access control.

01 / text/plain

Quick paste

The request body becomes an unlisted paste. Pass language and expiry as query parameters. No account is required.

curl --data-binary @main.go 'https://paste.maralys.com/api/v1/pastes?language=go&expires=1d'

02 / application/json

Full contract

JSON exposes format, visibility, password, burn-after-reading, and E2E fields.

curl 'https://paste.maralys.com/api/v1/pastes' \ -H 'Content-Type: application/json' \ --data '{"content":"console.log(42)","kind":"code","language":"javascript","visibility":"unlisted","access":"open","expires_in":"1h","burn_after_read":false}'

03 / Response

Short URL and expiry

{
  "slug": "4n8Kx2RjQ7Wa",
  "url": "https://paste.maralys.com/4n8Kx2RjQ7Wa",
  "expires_at": "2026-07-14T12:00:00Z",
  "revision": 1,
  "manage_token": "shown-once-for-guests"
}

The guest manage_token is returned only on creation. Maralys Paste stores its HMAC, so a lost key cannot be recovered.

04 / Endpoints

Public REST API

POST/api/v1/pastes

Create a paste

GET/api/v1/pastes/{slug}

Get metadata and accessible content

POST/api/v1/pastes/{slug}/reveal

Explicitly reveal protected or one-time content

GET/api/v1/pastes/{slug}/raw

Safe text/plain output

PATCH/api/v1/pastes/{slug}

Update with the current revision

DELETE/api/v1/pastes/{slug}

Delete a paste

GET/api/v1/catalog

Browse the public catalog

05 / Updates

No lost updates

Send X-Paste-Manage-Token for a guest paste and the current revision or If-Match. If it changed already, the API returns 409 Conflict. Revision history is not stored.