API reference
Passwords vault
/ v1/ me/ vaultYour Passwords vault as stored: account (the keyset sealed under your master password and Secret Key, the Argon2id settings and salt, the public keys) or null, vaults with their wrapped keys and counters, devices, a pending reset and limits. Everything that says what's in the vault is encrypted on your devices. From the Authenticator app's sign-in only.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Passwords opens only in the Authenticator app.
curl 'https://api.cactive.com.au/v1/me/vault' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
account: null | {
createdAt: number
updatedAt: number
accountId: string
kdfSalt: string
keyset: string
keysetRevision: number
encryptionPublicKey: string
signingPublicKey: string
kdf: {
alg: "argon2id"
m: number
t: number
p: number
}
}
vaults: {
vaultId: string
kind: "personal"
role: "owner"
envelope: string
attrs: string
attrsRevision: number
revision: number
itemCount: number
createdAt: number
updatedAt: number
}[]
devices: {
deviceId: string
name: string
platform: string
createdAt: number
lastSeenAt: number
}[]
reset: null | {
requestedAt: number
at: number
}
limits: {
maxItems: number
maxDevices: 20
}
}/ v1/ me/ vaultMakes your vault: the account, a personal vault and the first device, all sealed on the device and signed with the new vault's own key (X-Vault-Signature). 409 (exists) when you have one, unless its reset is due, when the old vault is deleted first.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Request body (up to 16 KB)
accountIdstringrequiredkdfobjectrequiredkdf.alg"argon2id"requiredkdf.mintegerrequiredkdf.tintegerrequiredkdf.pintegerrequiredkdfSaltstringrequiredMatches
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$.keysetany JSONrequiredencryptionPublicKeystringrequiredMatches
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$.signingPublicKeystringrequiredMatches
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$.vaultobjectrequiredvault.vaultIdstringrequiredMatches
^[A-Za-z0-9_-]{22}$.vault.envelopeany JSONrequiredvault.attrsany JSONrequireddeviceobjectrequireddevice.deviceIdstringrequiredMatches
^[A-Za-z0-9_-]{22}$.device.namestringrequired1–80 characters. Trimmed.
device.platform"ios" | "android" | "web"required
Also checked: Unknown fields are rejected.
Errors
403Passwords opens only in the Authenticator app.409You already have a vault.413The request is too large.
curl -X POST 'https://api.cactive.com.au/v1/me/vault' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"accountId": "<accountId>",
"kdf": {
"alg": "argon2id",
"m": 1,
"t": 1,
"p": 1
},
"kdfSalt": "example",
"keyset": {},
"encryptionPublicKey": "example",
"signingPublicKey": "example",
"vault": {
"vaultId": "<vaultId>",
"envelope": {},
"attrs": {}
},
"device": {
"deviceId": "<deviceId>",
"name": "Example",
"platform": "ios"
}
}'Response 201
{
account: null | {
createdAt: number
updatedAt: number
accountId: string
kdfSalt: string
keyset: string
keysetRevision: number
encryptionPublicKey: string
signingPublicKey: string
kdf: {
alg: "argon2id"
m: number
t: number
p: number
}
}
vaults: {
vaultId: string
kind: "personal"
role: "owner"
envelope: string
attrs: string
attrsRevision: number
revision: number
itemCount: number
createdAt: number
updatedAt: number
}[]
devices: {
deviceId: string
name: string
platform: string
createdAt: number
lastSeenAt: number
}[]
reset: null | {
requestedAt: number
at: number
}
limits: {
maxItems: number
maxDevices: 20
}
}/ v1/ me/ vault/ keysetReplaces the sealed keyset after a new master password or Secret Key, if keysetRevision is still current (409 otherwise). Signed by the vault. Emails you.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Request body (up to 8 KB)
kdfobjectrequiredkdf.alg"argon2id"requiredkdf.mintegerrequiredkdf.tintegerrequiredkdf.pintegerrequiredkdfSaltstringrequiredMatches
^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$.keysetany JSONrequiredkeysetRevisionintegerrequired≥ 1.
Also checked: Unknown fields are rejected.
Errors
403Passwords opens only in the Authenticator app.409The vault changed on another device.413The request is too large.
curl -X PUT 'https://api.cactive.com.au/v1/me/vault/keyset' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"kdf": {
"alg": "argon2id",
"m": 1,
"t": 1,
"p": 1
},
"kdfSalt": "example",
"keyset": {},
"keysetRevision": 1
}'Response 200
{
account: {
createdAt: number
updatedAt: number
accountId: string
kdfSalt: string
keyset: string
keysetRevision: number
encryptionPublicKey: string
signingPublicKey: string
kdf: {
alg: "argon2id"
m: number
t: number
p: number
}
}
}/ v1/ me/ vaultSigned by the vault: deletes it now (items, vaults, devices and keys; the log stays). Without a signature (you can't open it any more): asks for a reset (202, reset), which may happen 7 days later unless a device that can open the vault cancels it. Emails you either way.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Passwords opens only in the Authenticator app.404There's no vault for this account.
curl -X DELETE 'https://api.cactive.com.au/v1/me/vault' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
deleted: true
}Response 202
{
reset: {
requestedAt: number
at: number
}
}/ v1/ me/ vault/ reset/ cancelCancels a pending reset. Signed by the vault.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Passwords opens only in the Authenticator app.
curl -X POST 'https://api.cactive.com.au/v1/me/vault/reset/cancel' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
reset: null
}/ v1/ me/ vault/ vaults/ :vaultId/ indexThe vault's counter (revision) and every item's itemId, revision and whether it was deleted, without ciphertext: devices compare it with their copy.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
vaultIdA Passwords vault's id: 22 base64url characters, made on the device.
Errors
403Passwords opens only in the Authenticator app.404That vault isn't yours.
curl 'https://api.cactive.com.au/v1/me/vault/vaults/{vaultId}/index' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
revision: number
items: {
itemId: string
revision: number
deleted: boolean
}[]
}/ v1/ me/ vault/ vaults/ :vaultId/ itemsUp to 100 items by id (ids, comma-separated): each item's sealed key, overview and details (absent for deleted ones), revision and times.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
vaultIdA Passwords vault's id: 22 base64url characters, made on the device.
Query parameters
idsstringDefault
"".
Errors
400Ask for up to 100 item ids.403Passwords opens only in the Authenticator app.404That vault isn't yours.
curl 'https://api.cactive.com.au/v1/me/vault/vaults/{vaultId}/items' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
items: {
itemId: string
revision: number
deleted: boolean
key?: string
overview?: string
details?: string
createdAt: number
updatedAt: number
}[]
}/ v1/ me/ vault/ vaults/ :vaultId/ itemsWrites up to 50 changes (a sealed key, overview and details, or deleted: true), each only if the item is still at its baseRevision (0: new; deletes go first). Per change: ok with the new revision, conflict with the item as it is now, or rejected (limit: the plan's item limit). Signed by the vault.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
vaultIdA Passwords vault's id: 22 base64url characters, made on the device.
Request body (up to 4,096 KB)
changesobject[]required1–50 items.
changes[].itemIdstringrequiredMatches
^[A-Za-z0-9_-]{22}$.changes[].baseRevisionintegerrequired≥ 0.
changes[].deletedtruechanges[].keyany JSONchanges[].overviewany JSONchanges[].detailsany JSON
Also checked: Unknown fields are rejected. Each item can change once per request.
Errors
403Passwords opens only in the Authenticator app.404That vault isn't yours.413Send fewer changes at once.
curl -X POST 'https://api.cactive.com.au/v1/me/vault/vaults/{vaultId}/items' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"changes": [
{
"itemId": "<itemId>",
"baseRevision": 1
}
]
}'Response 200
{
results: {
itemId: string
status: "ok"
revision: number
deleted: boolean
createdAt: number
updatedAt: number
} | {
itemId: string
status: "conflict"
current: null | {
itemId: string
revision: number
deleted: boolean
key?: string
overview?: string
details?: string
createdAt: number
updatedAt: number
}
} | {
itemId: string
status: "rejected"
code: "limit" | "invalid"
error: string
}[]
vault: {
revision: number
itemCount: number
}
}/ v1/ me/ vault/ devices/ :deviceIdRegisters this device (name, platform: ios, android or web) or renames it; signed by the vault with the device's own id. Up to 20 devices; a removed id can't come back. Emails you about a new device.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Request body (up to 4 KB)
namestringrequired1–80 characters. Trimmed.
platform"ios" | "android" | "web"required
Also checked: Unknown fields are rejected.
Errors
403Passwords opens only in the Authenticator app.403This device was removed from your vault.409Your vault is on 20 devices already. Remove one first.413The request is too large.
curl -X PUT 'https://api.cactive.com.au/v1/me/vault/devices/{deviceId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN" \
-H 'Content-Type: application/json' \
-d '{
"name": "Example",
"platform": "ios"
}'Response 200
{
device: {
deviceId: string
name: string
platform: string
createdAt: number
lastSeenAt: number
}
}/ v1/ me/ vault/ devices/ :deviceIdRemoves a device; it stops syncing and wipes its copy when it next connects. Signed by the vault.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Path parameters
deviceIdDevice id: an agent's (
dev_…); under/v1/me/notificationsa phone's install id; under/v1/me/sign-in-approvalsa phone that approves sign-ins (apd_…); under/v1/me/vaultthe id a device made for its vault (22 base64url characters).
Errors
400Not a device id.403Passwords opens only in the Authenticator app.
curl -X DELETE 'https://api.cactive.com.au/v1/me/vault/devices/{deviceId}' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
removed: boolean
}/ v1/ me/ vault/ activityYour vault's log, newest first, kept a year: made, devices added and removed, master password or Secret Key changes, resets, deletion, and counts of changed items. Never contents.
- Auth
- A person's token or an API key, as Authorization: Bearer.
Errors
403Passwords opens only in the Authenticator app.
curl 'https://api.cactive.com.au/v1/me/vault/activity' \
-H "Authorization: Bearer $CACTIVE_TOKEN"Response 200
{
events: {
at: number
counts?: {
[key: string]: number
}
deviceName?: string
deviceId?: string
activityId: string
action: string
}[]
}