Agent experience is coming to Jam. Join early access →
Security

Your site stays yours

How Jam handles your code, your accounts and your data, and what we are still working on.

Pull requests only
Jam never pushes to your main branch or merges.
Repositories you pick
Short-lived access, limited to what you select.
Encrypted tokens
Connected account tokens are encrypted before storage.
Hashed API keys
Shown once, stored as a hash, revocable any time.

Your code

Jam only touches your repository if you install the Jam GitHub App, and only the repositories you select when you install it. You can change that list or uninstall the app from GitHub at any time.

Jam writes each article to a new branch and opens a pull request against your base branch. It never pushes to your main branch and never merges. Nothing reaches your site until someone on your team merges it.

Branches
Every change goes on its own new branch, named jam-geo/.
Merging
Always yours. Jam never merges a pull request.
Access tokens
Short-lived, about an hour, and limited to the repositories you selected.
Without GitHub
Every draft is Markdown you copy or download. Jam needs no repository access at all.

Connected accounts

When you connect Google Search Console, Jam reads your sites, your search performance and URL inspection results. It does not change anything in Search Console.

Tokens for the accounts you connect, such as Slack or Discord, are encrypted with AES-256-GCM before they are written to the database.

Where data lives

Your workspace data is stored in a Postgres database run by Supabase, in the United States. The Jam app and its background workers run on Railway.

In transit
Every page and API call is served over HTTPS.
Stored secrets
OAuth tokens and webhook secrets are encrypted in the application before storage.
Card details
Handled by Stripe Checkout. Card numbers never reach Jam.

Access controls

You sign in with Google or with a one-time link sent to your email, through Supabase Auth. Every request is checked against the workspace it belongs to on the server.

Row-level security is turned on for the database as a backstop, so the browser cannot read tables directly. A daily check confirms it is still on.

Support access
Limited to Jam admins, ends after eight hours, and every session is written to an audit log.
During support
An admin cannot connect or disconnect your integrations.

API keys and agents

API keys are shown once, when you create them. Jam stores only a keyed hash, so a key cannot be read back, even by us. Each key belongs to one workspace and can be revoked from Settings at any time.

A key cannot create other keys, so a leaked key cannot mint its own replacement. When Claude or ChatGPT connects over MCP, you sign in and approve it on a Jam page, and the connection shows up in Settings as a key you can revoke.

Webhooks
Every delivery is signed. Payloads carry ids and a dashboard link, never drafts or pull request contents.
Webhook URLs
Public https only. Private, loopback and cloud metadata addresses are refused.
Inbound events
Events from GitHub and Stripe are rejected unless their signature checks out.

Subprocessors

The services that process data so Jam can do its work.

ProviderWhat it does for JamWhen
SupabaseDatabase and sign-inAlways
RailwayHosts the Jam app and its workersAlways
InngestRuns scheduled scans and background workAlways
StripeBilling and checkoutWhen you pay
AnthropicAI models, and Claude trackingAlways
OpenAIAI models, and ChatGPT checksAlways
GoogleGemini models and checksAlways
PerplexityPerplexity checksAlways
cloroCollects AI answers for the prompts you trackAlways
DataForSEOSearch keyword dataAlways
TavilyWeb search during researchAlways
E2BIsolated sandboxes for work on your repositoryWhen Jam works on your repository
ResendEmailAlways
AxiomLogs and tracesAlways
PostHogProduct analyticsAlways
GitHubBranches and pull requestsWhen you install the app
ComposioHolds the Google Search Console connectionWhen you connect it
Slack, Discord, Telegram, SendblueDelivers messages to the apps you chooseWhen you connect them

Retention and deletion

Your data stays while your workspace is active. An owner can delete a workspace from its settings; Jam then removes its data in the background.

Notifications are deleted after 90 days. To delete your account, or for any other data request, email [email protected].

Compliance

Jam is not certified yet. This is the work underway, and this page will change as each item is done.

  • SOC 2 Type IIIndependent audit of our security controls.
    In progress
  • ISO 27001Certified information security management.
    In progress
  • GDPR DPAA data processing agreement you can sign.
    In progress
  • Penetration testingA test by an outside firm.
    In progress
  • Trust centreOne place for reports and policies.
    In progress

Reporting a vulnerability

If you find a security issue, email us with the details and steps to reproduce it. We will reply and keep you posted while we fix it. Please give us time to fix it before you share it.

[email protected]

FAQ

Can Jam change my live site without me?

No. Jam opens pull requests and never merges them. Your site only changes when someone on your team merges.

Do I have to give Jam access to my code?

No. GitHub is optional. Without it, every draft is Markdown you copy or download and publish yourself.

Is Jam SOC 2 certified?

Not yet. SOC 2 Type II is in progress, along with ISO 27001, a GDPR DPA and a penetration test. We will update this page as each one is done.

Where is my data stored?

In a Postgres database run by Supabase, in the United States.

How do I delete my data?

A workspace owner can delete the workspace from its settings. For anything else, email [email protected].

How do I report a security issue?

Email [email protected] with the details and steps to reproduce it.

Ship more, with nothing merged behind your back.