This section is only relevant to Enterprise customers who acquired an on-prem license.
Migrate from Permit Cloud to On-Premises
This guide explains how to export your existing Permit Cloud (SaaS) data and import it into your on-premises Permit Platform deployment, so you can switch environments without rebuilding your authorization model from scratch.
You run the migration yourself, end to end: you export your organization's data from Permit Cloud with your own API key (it downloads as a single migration data package), then import that package into your own deployment using the steps below. Your Permit account team is available to assist — and for very large organizations they can run the export for you — but no Permit involvement is required.
The migration has four phases: export your data (Step 0) → import (steps 1-9 below) → verify → point your applications at on-prem. Your on-prem platform is offline between import steps 2 and 9 - for a typical organization the import itself takes well under an hour. You are done when the row counts match the manifest and the UI checks in Verify the Import pass.
Step 0: Export Your Data from Permit Cloud
You export your organization's data yourself, using an Organization API key. The export streams
a single tar.gz migration data package (one CSV per table plus a manifest.json), scoped to
your organization only.
Generate an Organization API key
The export requires an Organization-level API key with management access — a read-only key is rejected, because the package includes your API-key secrets.
- In the Permit Cloud dashboard, open Settings → API Keys.
- Create an Organization API key (not a project- or environment-scoped one) with an admin/management access level.
- Copy the
permit_key_...value — you will pass it as a Bearer token below.
Download the package
The export runs as a background job: you start it, poll until it's ready, then download from a short-lived link. The organization is taken from the key, so you can only ever export your own organization.
KEY="permit_key_<your_org_api_key>"
# 1. Start the export — returns a task id
TASK=$(curl -fsS -X POST -H "Authorization: Bearer $KEY" \
"https://api.permit.io/v2/data-export" | jq -r .task_id)
# 2. Poll until "status" is "success" (it is "processing" while the package builds)
curl -fsS -H "Authorization: Bearer $KEY" \
"https://api.permit.io/v2/data-export/$TASK"
# -> {"status":"success","result":{"download_url":"https://…","expires_in_seconds":900, ...}}
# 3. Download the package from the (short-lived) URL in result.download_url
curl -fSL -o permit-migration.tar.gz "<download_url>"
Your package is permit-org-export-<org>-<timestamp>.tar.gz. Extract it to get the data/
directory and manifest.json referenced throughout this guide.
- The download link is short-lived and secret. It expires in a few minutes and grants access to your package (which includes your API-key secrets) — download promptly and don't share it. If it expires, poll the same task again for a fresh link.
- Freeze writes first (recommended). Pause changes to your Permit Cloud workspace right before exporting, so the package captures your final state. The archive is a single consistent snapshot, but anything written after the export won't be in it.
- Version alignment. The package's
manifest.jsonrecords the source schema version (saas_alembic_version); confirm your on-prem installer version matches it (your Permit contact can verify) before importing. - Very large organizations. If the poll returns
"status":"failure"because the export is too large, contact your account team — they run the export through an offline path and deliver the same package to you.
The package contains your API-key secrets. Store it securely, restrict access, and delete all copies once the import is verified.