Security

Precisely, not reassuringly.

Paperplane is closed source, so this page states the encryption model exactly rather than asking you to take "secure" on faith.

Encryption

Data is encrypted on your device using a local key, and ticket text — titles, notes, checklist items, tag labels — is encrypted at rest on the server. Both protect against a stolen device or a raw database read.

This is not end-to-end encryption. The at-rest key is held by Paperplane's backend, which can decrypt what it stores. If you need a guarantee that nobody but you can ever read a message, Paperplane does not provide it.

Endpoint keys

A channel can require an X-Paperplane-Endpoint-Key header on every event, so only systems you've configured can post to it. Keys are per-channel and rotatable from the app.

Personal access tokens

A token used by a script, CI job, or MCP connector is scoped and revocable, and is not your sign-in. Six scopes exist: events:write, channels:read, messages:read, messages:write, tickets:read, tickets:write. No token — however many scopes it holds — can create or delete a channel, rotate an endpoint key, manage members, or mint or revoke another token. Tokens are stored server-side only as a SHA-256 hash; the raw value is shown once.

The one exception worth naming: an ask sent through a token cannot be answered by that same token. Answering requires a signed-in human tapping in the app, so an agent cannot approve its own question.

Callbacks

A callback only calls http(s) endpoints, times out, and has a per-endpoint cooldown so a stray tap can't loop a webhook. Every trigger is logged with the response it got back.

Hosting

Paperplane is a hosted service. There is no self-hosting option, so there's no separate deployment to secure on your end — but it also means you're trusting Paperplane's infrastructure, not your own.