GET List Containers
List the containers (1Password vaults, Azure Key Vaults) a connected identity source can read
https://api.anakin.io/v1/wire/identity-sources/{id}/containersLists the containers a connected identity source can read. A container is a provider's top-level grouping of secrets:
| Provider | A container is | An entry is |
|---|---|---|
1password | a vault | a login item |
azure_key_vault | a Key Vault | a secret |
This endpoint is provider-agnostic — the source's provider decides what gets listed, and the response shape is the same either way. Use a container's id as the \{container_id\} path segment in GET /v1/wire/identity-sources/{id}/containers/{container_id}/entries to browse what's inside.
This is a live call to the provider — the engine uses the source's stored credential to enumerate containers at request time, so the result always reflects the current state of the connected account.
Requires an X-API-Key. The source must belong to the authenticated user.
Path Parameters
| Parameter | Type | Description |
|---|---|---|
id required | string (UUID) | The connected source's ID. Get it from GET /v1/wire/identity-sources |
Response
200 OK{
"status": "ok",
"containers": [
{
"id": "abcd1234",
"name": "Engineering"
}
]
}| Field | Type | Description |
|---|---|---|
containers[].id | string | Container ID. Use this as \{container_id\} in the entries endpoint, and as container in a source_ref |
containers[].name | string | Display name |
containers[].item_count | number | How many entries the container holds. Optional — omitted when the provider doesn't report it |
Container IDs are not always opaque. A 1Password vault ID is a short alphanumeric string, but an Azure Key Vault container ID is the vault's URL —
https://my-vault.vault.azure.net. Percent-encode it when you put it in the entries path.
Error Responses
All errors return JSON of the form { "status": "error", "error": { "code": "...", "message": "..." } }.
| Code | HTTP | When |
|---|---|---|
SOURCE_AUTH_FAILED | 400 | The provider rejected the stored credential — rotate or reconnect the source (it is now marked revoked) |
SOURCE_FORBIDDEN | 400 | The credential is valid but has no access to the container. Grant it access at the provider, then retry |
SOURCE_INACTIVE | 400 | The source is not active |
SOURCE_THROTTLED | 429 | The provider is rate-limiting us. Retry shortly |
SOURCE_UNREACHABLE | 502 | Could not reach the provider. If the vault restricts network access, allow our egress addresses |
SOURCE_UPSTREAM_ERROR | 502 | The provider failed for an unclassified reason |
PROVIDER_NOT_SUPPORTED | 400 | No source is registered for this provider in this engine version |
PROVIDER_NOT_BROWSABLE | 400 | The provider doesn't support browsing |
SOURCE_NOT_AVAILABLE | 503 | The source resolver isn't configured on this engine |
NOT_FOUND | 404 | Source not found |
FORBIDDEN | 403 | The source belongs to another user |
SOURCE_AUTH_FAILEDis the only failure that revokes the source. A permission failure against one container leaves the connection healthy — every other container on it still works.
Code Examples
curl https://api.anakin.io/v1/wire/identity-sources/f1e2d3c4-b5a6-7890-1234-56789abcdef0/containers \
-H "X-API-Key: your_api_key"import requests
source_id = 'f1e2d3c4-b5a6-7890-1234-56789abcdef0'
response = requests.get(
f'https://api.anakin.io/v1/wire/identity-sources/{source_id}/containers',
headers={'X-API-Key': 'your_api_key'}
)
data = response.json()
if data['status'] == 'ok':
for container in data['containers']:
print(f"{container['id']} {container['name']}")
else:
print(f"Error: {data['error']['code']} — {data['error']['message']}")const sourceId = 'f1e2d3c4-b5a6-7890-1234-56789abcdef0';
const response = await fetch(
`https://api.anakin.io/v1/wire/identity-sources/${sourceId}/containers`,
{ headers: { 'X-API-Key': 'your_api_key' } }
);
const data = await response.json();
if (data.status === 'ok') {
for (const container of data.containers) {
console.log(`${container.id} ${container.name}`);
}
} else {
console.error(`Error: ${data.error.code} — ${data.error.message}`);
}Rate limit
30 requests per minute per user (each call makes a live request to the provider).
Related
- GET /v1/wire/identity-sources/{id}/containers/{container_id}/entries — browse entries in a container
- GET /v1/wire/identity-sources — list connected sources
- POST /v1/wire/login — sign in using an entry from a source