Skip to content

Security

Your delivery data, kept apart and kept private.

Porch Route keeps every business’s data separate on the server, locks the database down with row-level security, signs everything it sends to your systems, and hands out only links that expire. Here is exactly what that means — and what we don’t have yet.

Last updated

  • Every business kept apart

    Which business a request belongs to is checked on the server, on every request — never taken from the browser.

  • A locked-down database

    Row-level security is on for every table, so only Porch Route’s own server can read or write your data.

  • API keys stored as hashes

    A new key is shown once. After that, Porch Route keeps only a hash of it.

  • Signed webhooks

    Every webhook carries a signature made with your endpoint’s secret, so your system can check it came from Porch Route.

  • Private proof photos

    Delivery photos and signatures sit in private storage and are shared only through links that expire.

  • Safe to retry

    Writes carry an idempotency key, so a retried request never creates the same delivery twice.

How is each business kept apart?

Every request to the office app and its API is checked on the server: the signed-in person’s memberships decide which business they may act for, and the role they hold (owner, admin, dispatcher or driver) decides what they may do. Nothing in a request body can pick a business. Drivers see only their own routes.

Underneath, row-level security is enabled on every table and the database’s public API keys have no access to any of them. Only Porch Route’s own server, with its own credential, reads or writes your data.

What can each kind of credential reach?

Porch Route has four ways in, each scoped to as little as possible:

Credentials and their scope
SurfaceCredentialReaches
Office app and its APISigned-in sessionThe businesses that person belongs to, gated by role
Orders APIAPI key (stored as a hash)One business
Driver linkRandom token of 24+ bytesOne route, until two days after the route date; replaced when reissued, revocable
Tracking pageRandom token of 32 bytesOne stop, a thin payload, 30 days after the route date
Database APIPublic keysNothing — row-level security is on with no policies for them

How are API keys and webhooks protected?

  • API keys are shown once. After that Porch Route keeps only a SHA-256 hash and a short prefix, so a database copy never hands anyone a working key. Each key belongs to one business and can be revoked at any time.
  • Webhooks are signed. Every request carries X-PorchRoute-Signature: sha256=…, an HMAC-SHA256 of the raw body keyed on your endpoint’s secret, plus event and delivery ids. You verify it in constant time; rotating the secret invalidates the old one immediately.
  • Endpoints must be public HTTPS. Private, loopback and link-local addresses are refused, and the hostname is resolved and re-checked at send time so a DNS trick can’t point our server at an internal network.
  • Nothing goes missing quietly. Failed deliveries retry with backoff for a day, reconciliation reports anything still owed, and the delivery log shows every attempt with a way to send one again.
  • Writes are idempotent. An Idempotency-Key on order writes means a retried request never creates the same delivery twice.

Where do proof photos and signatures go?

Into private storage with no public address. The app, the customer’s tracking page and your webhooks receive signed links that expire — one hour for people viewing them, seven days for links sent to your systems — so a link that leaks stops working on its own. A tracking page shows only that stop’s own photo.

Is data encrypted?

In transit: every connection — browser, driver phone, API and webhook — uses TLS; webhook endpoints must be HTTPS. At rest: the database and file storage are encrypted by our hosting providers’ defaults (see the subprocessors page for who they are). Credentials that could act as a login — API keys, invitation tokens — are stored only as hashes.

What limits protect the service?

Every plane is rate-limited, sized well above what a person or integration does and low enough to stop a script: office API calls per user, integration calls per key, driver-link reads and GPS pings per link, tracking-page reads per link, invitations per network, and this site’s contact form (five an hour per network). Limits hold across server instances. Messaging has its own daily safety caps per business.

What we don’t have yet

Being straight about the gaps matters more than a long list of badges:

  • No SOC 2 report or ISO certification, and no third-party penetration test yet.
  • No formal bug-bounty programme. Good-faith reports are welcome and answered (below).
  • Database backups follow our hosting provider’s plan; a written recovery objective isn’t published yet.
  • No uptime commitment or service-level agreement. The status page shows live checks (app, database, geocoder, map tiles, the jobs tick); it doesn’t yet keep a history.

When any of these changes, this page changes with it — the date at the top is real.

How do I report a security issue?

Use the contact page and choose “Report a security issue”. Include steps to reproduce, the account or URL involved and what you observed. We acknowledge reports, keep you informed while we fix the issue and credit you if you’d like. Please don’t access or change data that isn’t yours, and give us a reasonable time to fix a problem before publishing it. Support is answered Mon–Fri 8am–5pm Mountain; a security report sent outside those hours is read the next working morning.

Our data commitments to businesses are in the data processing addendum; how personal data is handled is in the privacy policy.

Questions

Security, answered plainly.

Is Porch Route SOC 2 certified?

Not yet. Porch Route is a new product and hasn’t been through a SOC 2 audit or a third-party penetration test. This page describes the controls that are in place today, and we’ll say so here when an audit is done.

Can another business ever see my orders?

No. Which business a request belongs to is worked out on the server from the signed-in user’s memberships, an API key or a route or tracking token — never from anything in the request body — and the database enforces row-level security on every table.

Can a customer’s tracking link leak anything?

A tracking link opens one stop only, with a deliberately thin payload: the business’s name, the truck’s position while it’s on the way, a progress timeline and that stop’s proof photo. Never the full address, the customer’s phone, other stops or the driver’s phone number. Links stop working 30 days after the route date.

How do I report a vulnerability?

Use the contact page and choose “Report a security issue”, with steps to reproduce and the account or URL involved. Please don’t access data that isn’t yours and give us a reasonable time to fix the problem before publishing.

Questions a checklist doesn’t answer?

Send us your security questionnaire or ask about the data processing addendum. We answer in plain words.

Privacy policy · Data processing addendum