Security & trust

Your numbers are yours.
Here is how we keep them that way.

This page is written for the person who has to sign off on new software. It says what we do, what we don't have yet, and who to email. Nothing on it requires an NDA to read.

TLS on every connection Tenant isolation on every query Scoped, hashed API keys Signed webhooks
ControlStatusDetail
Encryption in transitYesHTTPS with HSTS on the web app, the API, the MCP server and device sync. Plain HTTP is redirected. Webhooks are only ever delivered to HTTPS endpoints.
Password storageYesSalted, iterated hashes (ASP.NET Core Identity). Minimum 8 characters with mixed case, a digit and a symbol.
API key storageYesShown once, stored as a salted PBKDF2-SHA512 hash. Only a short prefix is kept in the clear so you can tell keys apart in the list.
Multi-tenant isolationYesEvery record carries its organization; every query, API call and MCP tool is filtered by the caller's organization on the server. There is no "all organizations" mode outside our own system administration.
Roles and permissionsYesOrganization Admin, Manager and User roles, plus more than 30 fine-grained permissions (view/manage per area). API keys carry a subset of their creator's permissions and can never be granted more.
Audit historyYesJobs keep a timestamped history of every status change, assignment, note and edit with who did it; stock movements and payments record who made them. API and MCP requests are logged per key with method, path, status and timing.
Webhook integrityYesHMAC-SHA256 signature on every delivery; private, loopback and link-local destinations refused; redirects never followed.
Rate limitingYesPer key and per organization on the API and MCP server.
Device authorizationYesDesktop and Android installs are registered devices with their own tokens; an administrator can revoke a device and it stops syncing.
Payment card dataNever storedCard entry and storage happen at Stripe. Flex holds your plan, seat count and invoice history only.
Data exportYesEverything is reachable through the API; invoices export to CSV for QuickBooks; a full account export is available on request.
BackupsYesA database snapshot is taken before every production deployment and before any bulk data operation, and kept alongside the previous release for rollback. Schedule and retention details on request.
Two-factor authenticationNot yetOn the roadmap. Today: strong password policy, 30-day hard session expiry, device registration.
Single sign-on (SAML / OIDC)Not yetPlanned. Ask if it's a requirement for you — it moves up the list.
SOC 2 / ISO 27001NoWe are a small company and have not undergone a third-party audit. We would rather say so than imply one. We will complete a security questionnaire for any prospective customer.
How it's built

Boring choices, on purpose.

One tenant per key, per session, per device

An organization id is attached at sign-in, at key creation and at device registration, and the server applies it to every read and write. A bug in a page cannot widen the scope; the scope is decided before the page runs.

Least privilege for integrations

An API key or an AI agent gets the permissions you tick and nothing else. A key cannot be granted more than its creator holds. Give a reporting tool read-only keys; give a scheduling bot ManageJobs and nothing about invoices.

Nothing leaves without a signature

Outbound webhooks are signed so the receiver can prove they came from us. Destinations are validated when you subscribe and again at send time, so Flex can't be used to poke at someone's internal network.

Secrets are never in the code

Database credentials, signing keys and third-party tokens live in server configuration with restricted file permissions, outside the repository, and are rotated when staff or contractors change.

Offline-first, not offline-loose

The Windows desktop keeps a local copy so work continues without internet. That copy is tied to a registered device and a signed-in user; permissions are enforced locally the same way they are on the server, and a revoked device stops syncing.

We don't train on your data

Your business data is not used to train AI models, build marketing profiles or benchmark you against other customers. The MCP server exists so your chosen agent can act for you; we don't run one over your account. Details on the AI page.

Your data

Take it with you, any time.

Lock-in is not a retention strategy we're interested in.

  • Export: everything in your account is readable through the API; invoices export to CSV from the web app. Email us for a full export of your organization and we'll send one.
  • Deletion: ask and we delete the organization and its data from the live system; backups age out on their normal schedule.
  • Trial and lapsed accounts: when a trial or subscription ends the account goes read-only. Nothing is deleted without you asking.
  • Ownership: it's yours. We are a processor of it. See the privacy policy and terms.
Sub-processors

Who else touches it.

ProviderPurposeWhat they see
StripeBillingBilling contact, company name, plan; card details go straight to Stripe.
CloudflareDNS and inbound email routingDNS queries; mail sent to our @flexonthejob.com addresses.
Google Fonts / reCAPTCHAMarketing site onlyVisitor IP on flexonthejob.com; never loaded inside the app.

Hosting is on servers we operate ourselves, not on a shared multi-tenant SaaS platform. Region and provider details are available to customers on request. We'll tell you before adding a sub-processor that would see your business data.

Responsible disclosure

Found something? Tell us.

Email security@flexonthejob.com. A human reads it. We acknowledge within two business days, keep you updated while we fix it, and credit you if you'd like.

  • Please test only against your own trial account and don't access other customers' data.
  • No denial-of-service, spam or social engineering.
  • Give us reasonable time to fix before publishing.
  • We won't pursue action against good-faith research that follows these rules.

Machine-readable: /.well-known/security.txt

Questionnaires and contracts

Ask us the hard questions.

We'll complete your vendor security questionnaire, sign a data processing agreement, and walk your IT person through the architecture on a call.

Send a questionnaire Request a DPA
Questions

The ones IT asks.

Can an employee see everything?

Only if you give them the role for it. A User sees the jobs they're on and the stock they touch; a Manager sees the whole operation; an Organization Admin also manages users, keys and billing. Each role's permissions can be adjusted per organization.

What happens when someone leaves?

Deactivate the user in Settings. Their signed-in sessions end within five minutes, their devices stop syncing, and any API keys they created are listed so you can revoke them. Their name stays on the history they wrote.

Can I restrict which IPs can use an API key?

Not today. Keys are limited by permission, rate and revocation. IP allow-lists are on the list; tell us if it's a requirement.

Do you have penetration test results?

We run our own security reviews on every release that touches authentication, the API or sync, and fix findings before shipping. We have not commissioned an external penetration test yet; when we do, the summary will be here.

Where can I see the incident history?

There hasn't been a security incident affecting customer data. If there ever is, affected organizations are notified by email within 72 hours of confirmation, and a summary is posted on this page.

Still have a question?

Ask the people who built it. We'd rather answer now than surprise you later.

security@flexonthejob.com Developer docs