GET List Providers

List the vault providers this engine can connect to, each with the connect form it needs and the vocabulary it uses

GEThttps://api.anakin.io/v1/wire/identity-sources/providers

Lists every vault provider this engine can connect, each describing itself: the fields its connect form needs, the ways it can authenticate, and the nouns its hierarchy uses. Read this before connecting a source rather than hardcoding a provider's fields — a provider added later shows up here with no client change.

Not user-specific, and it makes no upstream calls. Requires an X-API-Key.

This is a static index route. It is matched before /identity-sources/{id}, so providers is a reserved source ID that can never collide with a real one.


Response

200 OK

Providers are sorted by type.

{
  "status": "ok",
  "providers": [
    {
      "type": "1password",
      "display_name": "1Password",
      "auth_type": "credentials",
      "browsable": true,
      "summary": "Sign in using a saved vault item — no password stored in Wire.",
      "container_label": "Vault",
      "entry_label": "Login item",
      "methods": [
        {
          "id": "service_account",
          "label": "Service Account",
          "instructions": "Create a Service Account in 1Password (Developer Tools → Service Accounts) with read access to the vaults you want Anakin to use, then paste its token below.",
          "docs_url": "https://developer.1password.com/docs/service-accounts/get-started",
          "fields": [
            {
              "name": "token",
              "label": "Service Account Token",
              "type": "password",
              "secret": true,
              "placeholder": "ops_...",
              "pattern": "^ops_",
              "help": "Starts with “ops_”. Encrypted at rest; never displayed again.",
              "required": true
            }
          ]
        }
      ],
      "connect": { "fields": ["…same as methods[0].fields…"] }
    },
    {
      "type": "azure_key_vault",
      "display_name": "Azure Key Vault",
      "auth_type": "credentials",
      "browsable": true,
      "summary": "Sign in using a secret from your Key Vault — no password stored in Wire.",
      "container_label": "Vault",
      "entry_label": "Secret",
      "methods": [
        {
          "id": "service_principal",
          "label": "Service principal (client secret)",
          "caution": "On each Key Vault, assign the app the \"Key Vault Secrets User\" role (or a get+list access policy). This is the step most often missed — without it the connection authenticates but can't read anything.",
          "docs_url": "https://learn.microsoft.com/en-us/azure/key-vault/general/rbac-guide",
          "fields": ["…tenant_id, client_id, client_secret, vault_urls…"]
        }
      ],
      "connect": { "fields": ["…same as methods[0].fields…"] }
    }
  ]
}
FieldTypeDescription
providers[].typestringRegistry key. Send this as provider when connecting, and it's what provider filters on in list sources
providers[].display_namestringHuman label, e.g. 1Password
providers[].auth_typestringThe catalog auth_type this provider's credentials feed. A catalog must list this in its auth_types for a binding to be accepted
providers[].browsablebooleanWhether containers / entries can be browsed. When false, bind by reference instead of picking
providers[].summarystringOne line on what connecting this provider does. Optional
providers[].container_labelstringThe provider's noun for a container — Vault for both current providers. Defaults to Container
providers[].entry_labelstringThe provider's noun for an entry — Login item for 1Password, Secret for Azure Key Vault. Defaults to Entry
providers[].methodsarrayThe ways to authenticate to this provider, each with its own field set. Providers with one way return exactly one
providers[].connectobjectMirrors methods[0] — present so single-method clients keep working. Prefer methods

methods[]

FieldTypeDescription
idstringStable key. Send this as auth_method when connecting. Omit auth_method to get methods[0]
labelstringShown when a provider offers a choice
instructionsstringSetup guidance to render above the fields. Optional
cautionstringThe one step that most often goes wrong for this provider, kept out of instructions so a client can give it its own weight. Render it prominently — for Azure Key Vault it names the per-vault role assignment, whose omission fails silently: the credential authenticates and then reads nothing. Optional
docs_urlstringLink to the provider's own setup guide. Optional
fieldsarrayThe inputs this method needs — see below

methods[].fields[]

FieldTypeDescription
namestringThe key to send in the connect body. Values are top-level, not nested
labelstringShown to the user
typestringtext, password or textarea
secretbooleanMask the input; never echoed back by any endpoint
placeholderstringExample value. Optional
helpstringHint text under the field. Optional
patternstringValidation regex, e.g. ^ops_. Optional
requiredbooleanWhether connect fails without it

Unknown field names are rejected, not ignored. Sending a field the chosen method doesn't declare returns UNKNOWN_CONNECT_FIELD — a typo'd name fails as a typo rather than surfacing later as a confusing upstream auth error.

If the engine has no providers registered, providers is an empty array.


Code Examples

curl https://api.anakin.io/v1/wire/identity-sources/providers \
  -H "X-API-Key: your_api_key"

Rate limit

60 requests per minute per user.