Provisioning Profiles
Variant-keyed config templates with required tokens and provisioning scripts for the production line
Last updated: 2026-05-26
Provisioning Profiles define what data a device needs to be flashed with on the production line, scoped per variant. The same physical hardware can ship as multiple SKUs (US / EU / OEM, dev / prod, customer A / customer B) with different endpoint URLs, API keys, calibration values, or feature flags - the profile captures the per-variant configuration so the operator on the line doesn't have to type it by hand.
Open it from any project: sidebar -> Protocol -> Provisioning Profiles, or visit /projects/.
When you need it
You need a Provisioning Profile when:
- You manufacture more than one variant of the same hardware and each variant gets a different runtime config.
- Your devices need secrets (API keys, certificates, signed tokens) injected at flash time, not baked into the firmware binary.
- Your line operators provision dozens to thousands of devices and you cannot afford typos.
Concepts
| Term | What it means |
|---|---|
| Profile | One named provisioning recipe, attached to a specific Production Variant. |
| Config field | One key in the recipe: name + type + required flag + default value + description. |
| Field types | string, number, boolean, url, secret. The secret type pulls its value from Security Tokens instead of being plaintext on the profile. |
| Required token | A reference to a Security Token (e.g. API_KEY_PROD). The profile cannot be used unless this token is set on the project. |
| Provisioning script | Optional shell or Python script the line tool runs to flash the device. Has access to the resolved config field values. |
| Active flag | Inactive profiles are hidden from the line tooling. Use to retire an old recipe without deleting it. |
Quick start: define your first profile (10 minutes)
1. Make sure the variant exists
The profile is keyed by variant. Before creating a profile, the variant must exist:
- Open your project
- Go to Manufacturing -> Production Variants
- Confirm the variant you want to profile is there (e.g. "Mainboard Rev B - US")
2. Open Provisioning Profiles
- Sidebar -> Protocol -> Provisioning Profiles
- The page shows existing profiles for the project grouped by variant
3. Create the profile
- Click New Profile
- Fill in:
- Add config fields one at a time:
endpointUrl, apiKey, region)
- Label - human-readable name shown to the line operator (e.g. "Cloud endpoint")
- Type - one of: string, number, boolean, url, secret
- Required - whether the field must be filled at provision time
- Default value - optional default for the operator to accept or change
- Description - hint shown next to the field in the line tool
- Add required tokens:
API_KEY_PROD)
- The profile will refuse to activate if the token isn't defined - this catches missing-secret mistakes early
- (Optional) Paste a provisioning script - the shell or Python the line tool runs after the operator confirms the config. The script reads the resolved config keys as environment variables or stdin JSON.
- Toggle Active when ready
- Click Create
4. Test it
Hand the profile to the line tooling (the desktop app picks up active profiles automatically) and walk through provisioning a test device. Verify:
- All required fields show up
- Defaults pre-fill correctly
- The provisioning script runs and the device boots with the right config
Workflow: rotate a secret without re-deploying the profile
- Go to Settings -> Security Tokens (or your project's token panel)
- Update the token value (e.g.
API_KEY_PRODgets rotated) - The profile picks up the new value on the next provision - no changes needed on the profile itself
required token references, never plaintext on the profile.
Workflow: ship a new variant with a different endpoint
- Create the new variant in Manufacturing -> Production Variants (e.g. "Mainboard Rev B - EU")
- Open Protocol -> Provisioning Profiles
- Click New Profile, scoped to the new variant
- Copy the config field list from your US profile (re-type or use the duplicate-from action if available)
- Change endpoint URL default, region code, any compliance flags
- Reference the EU-specific token (e.g.
API_KEY_EU) - Activate
Workflow: retire an old profile
You cannot delete a provisioning profile that has been used (audit trail). Retire by:
- Open the profile
- Toggle Active off
- The profile drops out of the line-tool selection but stays visible in the dashboard for audit
Reference
Field types
| Type | UI in the line tool | Use for |
|---|---|---|
string | Free-text input | Names, identifiers, free-text config |
number | Numeric input | Quantities, calibration values, port numbers |
boolean | Toggle | Feature flags, debug mode on/off |
url | URL input with validation | Endpoint URLs, OTA hosts |
secret | Pulled from Security Token (operator does not see value) | API keys, signing certs, anything sensitive |
Required tokens
Provisioning profiles reference Security Tokens by name. Tokens themselves are stored encrypted at the project level (see Security & Access). The profile only stores the token name; the actual value is resolved at provision time from the project's token store. If a referenced token doesn't exist, the profile won't activate and the operator gets a clear error.
Provisioning script
If the script field is non-empty, the line tool runs it after the operator confirms config:
- Available to the script: every config field as an environment variable (or as stdin JSON, depending on the script header).
- The script's exit code is captured. Non-zero = provisioning failed; the device record is marked accordingly.
- Logs from the script are saved alongside the device record so you can debug a stuck provision later.
Common pitfalls
- "My field type is
secretbut the operator can see the value." Check that the field is referencing a token, not storing a literal. Plaintext on the profile defeats the purpose. - "The profile activated but no device receives the config." Confirm the device's lot is tied to the right variant - the profile is variant-keyed, not project-keyed.
- "My required-token check passes but the script gets undefined." Token names are case-sensitive.
API_KEY_PRODandapi_key_prodare different tokens.
Related docs
- Device Protocol (S3 Protocol) - the broader device communication story; provisioning is the on-line step that bootstraps device identity
- Security & Access - Security Tokens, the encrypted secret store provisioning profiles reference
- Manufacturing Suite - variants and lots that profiles attach to
- Desktop App - the line tool that consumes active profiles