What we store, what we deliberately do not store, and how keys and money are handled. This page describes the system as it runs today.
Last updated 2026-11-08
API keys
A key is generated once and shown once. Only a SHA-256 hash and a short hint are stored, so a copy of the database cannot be replayed against the API.
Per-key scopes: model allowlist, RPM, spend limit, expiry
Revocation takes effect on the next request
Session tokens cannot call inference; API keys cannot manage the account
Prompts and responses
Request bodies and completions are not written to our database. The usage table records what billing needs: model, token counts, cost, latency, status and error code.
Request-body logging is disabled at the HTTP layer
Prompt text, attachments and outputs are not persisted
Network metadata is a one-way hash plus a country code, aged out after 90 days
Content is transmitted to the model provider that serves the request
Transport
Traffic reaches Selora through Cloudflare over TLS, with HSTS published at the edge and at the origin. The gateway and the console talk over loopback inside the host.
TLS 1.2+ with HSTS (one year, includeSubDomains)
No cross-origin calls to the gateway from the browser
Payment pages are hosted by the payment provider, not by us
Money and ledger
Money is stored as exact micro-units, never floating point. Credits are posted through one ledger path with an idempotency key, and a repeated callback cannot credit twice.
Payment webhooks are signature-checked before anything is credited
An unrecognised payment status is never credited
Corrections are separate audited rows; ledger entries are not edited
Accounts and access
Passwords are hashed with scrypt and a random per-password salt. Console sessions are signed tokens with an expiry; the free trial is bound to a verified Telegram account.
Email codes are single-use and time-limited
Admin actions are recorded against the operator account
Account deletion is available from the console
Operations
The API runs as an isolated service behind a reverse proxy, with health checks, restart supervision and structured logs that carry request metadata rather than payloads.
Provider credentials are read from a protected config file, never from the database
Provider keys are held per deployment, not per customer
Status and incident history are public on the status page
What we do not do
Sell or share your data
We do not sell customer data, and we do not use your prompts to train models.
Train on your traffic
Prompts and completions are not retained for training or evaluation.
Store card numbers
Card and wallet payments are handled on the payment provider’s hosted page.
Sub-processors
To answer a request, its content is sent to the model provider serving that model, and payment details are handled by the payment provider for the rail you choose. We keep a current list on request for teams that need it for their own review.
Report a vulnerability
Send a description and reproduction steps through the contact page. Include the affected endpoint and the impact you observed. We will confirm receipt, keep you updated while it is fixed, and credit you if you want to be named. Please do not test against other customers' accounts or run load tests without asking first.