Authentication
para login
Authenticate with your Para developer account. Opens your browser for a secure OAuth flow with PKCE verification.
| Flag | Description |
|---|
--no-browser | Print a URL instead of opening the browser (for headless/CI environments) |
After login, the CLI automatically selects your first organization and project if none are configured.
Sessions are stored at ~/.config/para/credentials.json with 0600 file permissions. The session is validated server-side on each CLI invocation.
Sessions are shared across key environments — logging in once gives you access to both beta and prod keys.
para logout
Clear stored authentication credentials.
| Flag | Description |
|---|
--all | Clear all stored sessions |
The CLI sends a best-effort server-side session invalidation.
para auth status
Check whether your current session is valid. This performs a server-side validation, not just a local check.
Status: Authenticated
Email: dev@example.com
Expires: 3/10/2026, 12:00:00 PM
With --json:
{
"authenticated": true,
"email": "dev@example.com",
"userId": "usr_abc123",
"expiresAt": 1741608000000
}
para whoami
Show the current authenticated user and active context — organization, project, and environment.
Email: dev@example.com
User ID: usr_abc123
Key Environment: beta
Organization: My Company (admin)
Project: proj_def456
Session Expires: 3/10/2026, 12:00:00 PM
Organization shows the name and your role. Project shows the raw project ID. If the organization ID can’t be resolved to a name, the raw ID is shown instead.
Configuration
Configuration resolves from multiple sources: CLI flags, environment variables (PARA_ENVIRONMENT, PARA_ORG_ID, PARA_PROJECT_ID), .pararc, global config, then defaults. See Installation for the full resolution chain.
para config get
Read configuration values. Without a key, shows all values from both global and project config with their source.
defaultEnvironment (global): beta
environment (.pararc): beta
organizationId (.pararc): org_xyz789
projectId (.pararc): proj_def456
Read a specific key:
para config get defaultEnvironment
Project config (.pararc) takes precedence over global config (~/.config/para/config.json).
para config set
Set a configuration value.
para config set <key> <value>
| Flag | Description |
|---|
--local | Write to .pararc in the current directory instead of global config |
Valid Keys
| Key | Values |
|---|
defaultEnvironment | beta, prod |
defaultOrganizationId | Any valid organization ID |
defaultProjectId | Any valid project ID |
Examples
# Set global default key environment
para config set defaultEnvironment prod
# Set global default org
para config set defaultOrganizationId org_xyz789
para config set --local writes the key name as-is (e.g., defaultEnvironment) into .pararc, but para init uses different key names (environment, organizationId, projectId). Use para init to create project-level config — it ensures the correct key names are used.
para config unset
Remove a configuration value.
| Flag | Description |
|---|
--local | Remove from .pararc instead of global config |
para config unset defaultOrganizationId
para config unset environment --local
para init
Create a .pararc configuration file in the current directory. This pins the organization, project, and environment for anyone working in this directory.
| Flag | Description |
|---|
--force | Overwrite an existing .pararc file |
In interactive mode, you’ll be prompted to select a key environment (beta or prod). In non-interactive mode (--no-input), the current key environment from global config is used.
The resulting .pararc file:
{
"environment": "beta",
"organizationId": "org_xyz789",
"projectId": "proj_def456"
}
The .pararc writer rejects keys that contain sensitive terms (session, token, secret, credential, password, apikey, api_key) to prevent accidental credential storage in version-controlled files.
Organizations
para orgs list
List all organizations you belong to.
Name ID Plan
My Company org_xyz789 growth (active)
Side Project org_abc123 free
The (active) indicator shows which organization is currently selected. With --json, returns an array of organization objects.
para orgs switch
Set the active organization. This updates your global config so subsequent commands use this org.
para orgs switch [org-id]
Without an org-id, an interactive selector is shown:
◆ Select an organization
│ ○ My Company (org_xyz789) (current)
│ ● Side Project (org_abc123)
└
With a specific ID:
para orgs switch org_abc123
After switching organizations, your previous project ID remains in the config but may point to a project in the old org. Run para projects switch to select a project in the new organization.
Projects
All project commands require an active organization. Set one with para orgs switch if you haven’t already.
para projects list
List projects in your active organization.
| Flag | Description |
|---|
--include-archived | Include archived projects in the list |
Name ID Framework
my-app proj_def456 nextjs (active)
backend proj_ghi789 vite
para projects switch
Set the active project.
para projects switch [project-id]
Without a project-id, an interactive selector shows all active projects in the current organization.
para projects create
Create a new project in the active organization.
| Flag | Description |
|---|
-n, --name <name> | Project name |
-d, --description <desc> | Project description |
--framework <framework> | Framework (nextjs, vite, react-native, etc.) |
Without flags, you’ll be prompted interactively for a name.
para projects create -n "my-new-app" --framework nextjs
para projects update
Update a project’s name, description, or framework.
para projects update [project-id]
| Flag | Description |
|---|
-n, --name <name> | New project name |
-d, --description <desc> | New description |
--framework <framework> | Framework (REACT, NEXT, VITE, etc.) |
--package-manager <pm> | Package manager (NPM, YARN, PNPM) |
Uses the active project if no project-id is given. Without flags, prompts interactively.
para projects archive
Archive a project. Its API keys stop working immediately. This is reversible with restore.
para projects archive [project-id]
Uses the active project if no project-id is given.
| Flag | Description |
|---|
-y, --yes | Skip confirmation prompt |
Archiving a project immediately disables all of its API keys. Active users will lose access.
para projects restore
Restore a previously archived project.
para projects restore <project-id>
Use para projects list --include-archived to find the ID of archived projects.
API Keys
All key commands require an active organization and project. Set them with para orgs switch and para projects switch.
para keys list
List API keys for the active project.
| Flag | Description |
|---|
--include-archived | Include archived keys |
Name ID API Key Env Status
prod-key key_abc123 para_beta_a1b2... BETA active
test-key key_def456 para_beta_c3d4... BETA archived
para keys get
Get details of an API key. Without a key ID, the CLI auto-resolves the key from your active project and key environment.
| Flag | Description |
|---|
--show-secret | Show the full secret key (unmasked) |
--copy | Copy the public API key to clipboard |
--copy-secret | Copy the secret key to clipboard |
para keys get # Get the beta key (default)
para keys get -e prod # Get the prod key
para keys get abc-123 --copy # Copy a specific key
para keys create
Create a new API key in the active project.
| Flag | Description |
|---|
-n, --name <name> | Internal key name |
--display-name <name> | Display name shown to users |
The secret key is only shown once at creation time. Save it immediately.
para keys rotate
Rotate an API key. The old key stops working immediately. Without a key ID, the CLI auto-resolves the key from your active project and key environment.
para keys rotate [key-id]
| Flag | Description |
|---|
--secret | Rotate the secret key instead of the public key |
-y, --yes | Skip confirmation prompt |
para keys rotate # Rotate the beta key
para keys rotate -e prod # Rotate the prod key
para keys rotate --secret # Rotate the secret key
Key rotation is irreversible. The old key stops working immediately after rotation.
para keys archive
Archive (revoke) an API key. The key stops working immediately. Without a key ID, the CLI auto-resolves the key from your active project and key environment.
para keys archive [key-id]
| Flag | Description |
|---|
-y, --yes | Skip confirmation prompt |
para keys archive # Archive the beta key
para keys archive -e prod # Archive the prod key
para keys config
Configure settings for an API key. Without a sub-category, opens an interactive menu to browse all categories.
para keys config [key-id]
The CLI auto-resolves the key from your active project and key environment (-e beta or -e prod). If multiple keys exist for the same environment, you’ll be prompted to choose one.
Security
Configure auth methods, origins, session length, and IP restrictions.
para keys config security [key-id]
| Flag | Description |
|---|
--origins <urls> | Comma-separated allowed origins (empty string to clear) |
--auth-methods <methods> | Auth methods: PASSKEY, PASSWORD, PIN (comma-separated). PASSWORD and PIN cannot be enabled simultaneously |
--session-length <minutes> | Session length in minutes (5–43200) |
--transaction-popups | Enable transaction popups |
--no-transaction-popups | Disable transaction popups |
--ip-allowlist <cidrs> | Comma-separated CIDR blocks (empty string to clear) |
para keys config security --origins "https://myapp.com,https://staging.myapp.com" --auth-methods "PASSKEY,PASSWORD"
Branding
Configure colors, fonts, social links, and email settings.
para keys config branding [key-id]
| Flag | Description |
|---|
--foreground-color <hex> | Foreground color (#RGB or #RRGGBB) |
--fg-color <hex> | Foreground color (alias) |
--background-color <hex> | Background color |
--bg-color <hex> | Background color (alias) |
--accent-color <hex> | Accent color |
--font <font> | Font: Arial, Courier New, Georgia, Helvetica, Lucida Sans, Tahoma, Times New Roman, Trebuchet MS |
--homepage-url <url> | Homepage URL (HTTPS) |
--twitter-url <url> | Twitter/X profile URL |
--linkedin-url <url> | LinkedIn company URL |
--github-url <url> | GitHub URL |
--verify-url <url> | Verification email URL (HTTPS) |
--email-welcome / --no-email-welcome | Toggle welcome email |
--email-backup-kit / --no-email-backup-kit | Toggle backup kit email |
Setup / Networks
Configure wallet types and native passkey settings.
para keys config setup [key-id]
| Flag | Description |
|---|
--wallet-types <types> | Wallet types — prefix with ~ for optional: "EVM,~SOLANA,~COSMOS" |
--cosmos-prefix <prefix> | Cosmos address prefix |
--team-id <id> | Apple Team ID (10 chars) |
--bundle-id <id> | Apple bundle identifier |
--android-package <name> | Android package name |
--android-fingerprints <fps> | Comma-separated SHA256 fingerprints |
On/Off Ramps
Configure buy, receive, and withdraw settings.
para keys config ramps [key-id]
| Flag | Description |
|---|
--buy-enabled / --no-buy-enabled | Toggle buy |
--receive-enabled / --no-receive-enabled | Toggle receive |
--withdraw-enabled / --no-withdraw-enabled | Toggle withdraw |
--providers <list> | Comma-separated ordered providers: RAMP, STRIPE, MOONPAY |
--ramp-api-key <key> | Ramp API key |
--default-buy-amount <amount> | Default buy amount (0.0001–999999) |
--default-on-ramp-asset <asset> | Default on-ramp asset |
--default-on-ramp-network <network> | Default on-ramp network |
Webhooks
Configure webhook endpoints, events, and signing secrets.
para keys config webhooks [key-id]
| Flag | Description |
|---|
--url <url> | Webhook endpoint URL (HTTPS) |
--events <types> | Comma-separated events: user.created, wallet.created, transaction.signed, send.broadcasted, send.confirmed, send.failed, wallet.pregen_claimed, user.external_wallet_verified |
--enabled / --no-enabled | Toggle the webhook |
--status | Show current webhook configuration |
--test | Send a test webhook |
--rotate-secret | Rotate the webhook signing secret |
--delete | Remove webhook configuration |
-y, --yes | Skip confirmation for destructive operations |
para keys config webhooks --url "https://api.myapp.com/webhooks" --events "user.created,wallet.created" --enabled
See for event type details and signature verification.
Scaffold a Project
para create
Scaffold a new application with Para SDK pre-configured. The interactive wizard walks you through template, network, auth, and wallet selection.
| Flag | Description |
|---|
-t, --template <template> | Template: nextjs or expo |
--networks <networks> | Comma-separated: evm, solana, cosmos |
--email | Enable email authentication |
--phone | Enable phone authentication |
--oauth <providers> | Comma-separated: GOOGLE, APPLE, TWITTER, DISCORD, FACEBOOK, FARCASTER |
--wallets <wallets> | Comma-separated wallets: METAMASK, COINBASE, WALLETCONNECT, RAINBOW, ZERION, RABBY, PHANTOM, BACKPACK, SOLFLARE, GLOW, KEPLR, LEAP (case-insensitive) |
--bundle-id <id> | Bundle identifier (required for Expo) |
--package-manager <pm> | Package manager: npm, yarn, pnpm, bun |
--skip-install | Skip dependency installation |
-y, --yes | Accept all defaults (non-interactive) |
Interactive Flow
Without flags, para create walks you through each step:
- App name — lowercase, numbers, and hyphens only
- Template — Next.js or Expo
- Networks — EVM, Solana, Cosmos (Expo is EVM-only)
- Auth methods — Email, Phone/SMS, OAuth
- OAuth providers — Google, Apple, Twitter, Discord, Facebook, Farcaster (Expo supports Google and Apple only)
- External wallets — Varies by network:
- EVM: MetaMask, Coinbase, WalletConnect, Rainbow, Zerion, Rabby
- Solana: Phantom, Backpack, Solflare, Glow
- Cosmos: Keplr, Leap
- Expo-specific — Bundle identifier (e.g.,
com.mycompany.myapp)
Non-Interactive Mode
Non-interactive mode activates when an app name is provided along with --networks (for Next.js) or --bundle-id (for Expo). Email auth is enabled by default if no other auth method is specified.
para create my-app -t nextjs --networks evm,solana --oauth GOOGLE,APPLE -y
API Key Connection
If you’re authenticated, the CLI offers to connect a Para project after scaffolding. This creates or selects an organization, project, and API key, then writes the key to the app’s .env file.
Package Manager Detection
The CLI detects your package manager automatically:
--package-manager flag (highest priority)
- How you invoked the CLI (
npx, yarn dlx, pnpm dlx, bunx)
- Lock files in the current directory
- Falls back to
npm
Example
$ para create my-dapp
◆ Select a template
│ ● Next.js
│ ○ Expo (React Native)
└
◆ Select networks
│ ◼ EVM (Ethereum, Polygon, Base, ...)
│ ◻ Solana
│ ◻ Cosmos
└
◆ Select authentication methods
│ ◼ Email (recommended)
│ ◻ Phone / SMS
│ ◻ OAuth
└
✔ Created my-dapp from nextjs template
✔ Installed dependencies with npm
Next steps:
cd my-dapp
npm run dev
Diagnostics
para doctor
Scan your project for common Para SDK integration issues. Checks configuration, dependencies, setup patterns, and best practices.
| Argument | Description | Default |
|---|
[path] | Project path to diagnose | . (current directory) |
| Flag | Description |
|---|
--category <category> | Filter by category: configuration, dependencies, setup, best-practices |
--severity <severity> | Minimum severity: error, warning, info |
What It Checks
| Check | Category | What It Looks For |
|---|
| API key env var | Configuration | API key environment variable is set correctly |
| Env var prefix | Configuration | Env var prefix matches framework (NEXT_PUBLIC_, VITE_, EXPO_PUBLIC_) |
| CSS import | Setup | Required Para CSS import is present |
| ParaProvider | Setup | ParaProvider component wraps the app |
| QueryClient | Setup | QueryClient is set up (required by React SDK) |
"use client" directive | Setup | Next.js files using Para hooks have the directive |
| Version consistency | Dependencies | All @getpara/* packages are on the same version |
| Chain dependencies | Dependencies | Required chain packages are installed for selected networks |
| Deprecated packages | Dependencies | No deprecated @usecapsule/* packages are present |
Example Output
$ para doctor
Para Doctor — Diagnosing my-app
Project: my-app
Framework: nextjs
SDK: @getpara/react-sdk@2.1.0
Package Manager: npm
✔ API key environment variable configured
✔ Environment variable prefix matches framework
✔ Para CSS import found
✔ ParaProvider component detected
✔ QueryClient setup detected
✘ Missing "use client" directive in src/app/providers.tsx
⚠ @getpara/evm-wallet-connectors is on 2.0.9, expected 2.1.0
✔ Chain dependencies installed
✔ No deprecated packages found
7 passed · 1 failed · 1 warning
Filtering
Run only dependency checks:
para doctor --category dependencies
Show only errors (skip warnings and info):
para doctor --severity error
JSON Output
Use --json for CI/CD pipelines:
{
"projectInfo": {
"framework": "nextjs",
"sdkType": "@getpara/react-sdk",
"sdkVersion": "2.1.0",
"packageManager": "npm"
},
"results": [
{
"name": "use-client-directive",
"status": "fail",
"severity": "error",
"category": "setup",
"message": "Missing \"use client\" directive",
"recommendation": "Add \"use client\" to the top of src/app/providers.tsx"
}
],
"summary": {
"total": 9,
"passed": 7,
"failed": 1,
"warnings": 1
}
}
The command exits with code 1 if any error-severity checks fail, making it suitable for CI gates.