POST /admin/migrations
Create a new migration / discovery job. KnoxCall runs a live probe against the provider before persisting — if the federation grant is broken, the request fails immediately with400 and nothing is stored.
Auth: requireOwnerOrAdmin — no step-up required.
Request body
| Field | Required | Description |
|---|---|---|
provider | ✅ | aws_sm | aws_ssm | azure_kv | gcp_sm |
mode | ✅ | pull (server-side pull), capture (agent-side intercept), or both |
credentials | ✅ | Provider-specific federation parameters (no static keys — see below) |
scope | — | Provider-specific scope constraints (regions, vaults, etc.) |
credentials by provider:
| Provider | Required fields |
|---|---|
aws_sm / aws_ssm | role_arn (IAM role ARN), optionally external_id |
azure_kv | tenant_id (Azure AD GUID), client_id (app registration GUID) — uses WIF, no client_secret |
gcp_sm | project_number, workload_identity_pool, workload_identity_provider, service_account_email |
access_key_id, secret_access_key, client_secret, private_key, service_account_json, etc.) are rejected at the API level with 400.
scope by provider:
| Provider | Optional scope fields |
|---|---|
aws_sm / aws_ssm | regions (array of region strings), arn_allowlist |
azure_kv | subscription_id (GUID), vault_names (array) — one of these is required |
gcp_sm | project_ids (array of GCP project ID strings) |