tessera

Describes a share to whoever manages it: the owning account, or the holder of the management token from creation, sent as `X-Share-Management-Token`.

GET
/api/v1/shares/{code}/manage

Unlike GET /shares/{code}, it answers for a disabled, expired or password-protected share, and says what the malware scanner made of it, so an uploader can tell a share switched off for a threat from one that ran out.

Errors

404 when no share the caller manages has that code.

cookietessera_session<token>

Set by POST /auth/login. A browser sends it automatically; it is HttpOnly, so page scripts cannot read or set it.

code*string

The retrieval code, normalised as for GET /shares/{code}.

X-Share-Management-Token?|

For an anonymous share, the token handed out at creation

The share as its manager sees it

application/json
  1. response

A share as the API describes it. Never carries the content.

code*string

The retrieval code, as a person reads it.

copy_count*integer

How many times a client reported it being copied.

Formatint32
Range0 <= value
created_at*string

When it was created, RFC 3339.

disabled*boolean

Whether it has been switched off, by an operator or because the scanner found a threat. A disabled share answers 404 to everyone else.

encryption?|

link or password for an end-to-end encrypted share, null for one the server can read.

expires_at?|

When it stops being served, RFC 3339, or null to live until deleted.

files*array<>

Every file this share holds. Empty for text and for a locked share.

has_password*boolean

Whether a password must be presented to retrieve it.

id*string

Stable identifier.

key_salt?|

The salt a password-derived key was stretched with, for password.

kind*string

text, file or link.

language?|

Syntax-highlighting hint.

last_accessed_at?|

When it was last retrieved, RFC 3339.

Answers the question people ask of their own share: has it been picked up yet?

management_token?|

Token that lets an anonymous uploader delete this share.

Shown once, at creation, and only for an anonymous upload. Only its digest is stored. Without it, a mistaken anonymous upload could never be taken back.

path*string

Where the share lives, relative to this instance's origin.

Relative by design. The server does not know what host it is reached through, and guessing wrong behind a reverse proxy produces broken links. The caller already knows the origin it called.

scan_detail?|

The threat's name for infected; encrypted or too_large for skipped.

scan_state?|

The malware scanner's verdict, the most significant across its files: pending, clean, infected, skipped or deferred. null when it was never sent to a scanner. See docs/scanning.md.

scanning*boolean

Whether it is waiting for the malware scanner. Until it is done, downloads answer 423 with Retry-After.

sealed_details?|

The title and a note's language, sealed, on an encrypted share.

size_bytes*integer

Size of the content in bytes.

Formatint64
Range0 <= value
title?|

Display name.

use_count*integer

How many times it has been retrieved.

Counted by the server on the transfer path, so this is the number to trust. The two below are what a client reported.

Formatint32
Range0 <= value
uses_remaining?|

How many retrievals remain, or null for unlimited.

Formatint32
Range0 <= value
view_count*integer

How many times a client reported showing it.

Formatint32
Range0 <= value
curl -X GET 'https://example.com/api/v1/shares/string/manage'
{  "code": "string",  "copy_count": 0,  "created_at": "string",  "disabled": true,  "encryption": "string",  "expires_at": "string",  "files": [    {      "filename": "string",      "position": 0,      "sealed_name": "string",      "size_bytes": 0    }  ],  "has_password": true,  "id": "string",  "key_salt": "string",  "kind": "string",  "language": "string",  "last_accessed_at": "string",  "management_token": "string",  "path": "string",  "scan_detail": "string",  "scan_state": "string",  "scanning": true,  "sealed_details": "string",  "size_bytes": 0,  "title": "string",  "use_count": 0,  "uses_remaining": 0,  "view_count": 0}