Categories

The vault is organized into typed categories. All categories support the same four HTTP methods.

CategoryDescription
identityFull name, birth date, citizenship, gender, pronouns
birthBirth date, place, time, zodiac
emailEmail addresses with labels
phonePhone numbers with labels and primary flags
addressPhysical addresses (home, shipping, billing)
social-linksSocial media profiles
linksCurated personal links
external-identitiesOAuth connections (Google, GitHub, etc.)
documentsPassports, licenses, etc.
work-historyEmployment history
travel-documentsVisas, KTN, etc.
emergency-contactsPeople to contact in emergency
medical-basicsBlood type, organ donor, physician
dietaryRestrictions, allergies, cuisine
educationDegrees, certifications
vehiclesMake, model, vin, insurance
petsName, species, breed, vet info
payment-methodsPayment cards (CVC not stored)
preferencesSize preferences, style, budget band
locationCurrent/last-known location
profile-cssCustom CSS for the public profile page
secure-notesEnd-to-end encrypted notes (labels only via API)

Read All Vault Data

GET /api/v1/vault

Returns all vault categories in a single response. Requires JWT.

curl https://api.boxowl.me/api/v1/vault \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Response 200 OK:

{
  "identity": {
    "firstName": "Alice",
    "lastName": "Kira",
    "preferredName": "Ali"
  },
  "emails": [
    { "id": "eml_01h455...", "label": "personal", "address": "alice@example.com", "primary": true }
  ],
  "phones": [
    { "id": "phn_01h455...", "label": "mobile", "number": "+1-555-0100", "primary": true }
  ],
  "addresses": [
    { "id": "adr_01h455...", "label": "home", "street": "123 Oak St", "city": "Portland", "state": "OR", "postalCode": "97201", "country": "US", "shipping": true }
  ],
  "socialLinks": [],
  "links": [],
  "preferences": {
    "interests": ["tech", "hiking"],
    "clothingSizes": { "shirtSize": "M" }
  }
}

Read a Single Category

GET /api/v1/vault/{category}

Returns the specified category. Use identity, email, phone, address, profile, work, preference, payment, or profile-css.

curl https://api.boxowl.me/api/v1/vault/addresses \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Response 200 OK:

{
  "identity": {
    "firstName": "Alice",
    "lastName": "Kira",
    "preferredName": "Ali"
  },
  "emails": [
    { "id": "eml_01h455...", "label": "personal", "address": "alice@example.com", "primary": true }
  ],
  "phones": [
    { "id": "phn_01h455...", "label": "mobile", "number": "+1-555-0100", "primary": true }
  ],
  "addresses": [
    { "id": "adr_01h455...", "label": "home", "street": "123 Oak St", "city": "Portland", "state": "OR", "postalCode": "97201", "country": "US", "shipping": true }
  ],
  "socialLinks": [],
  "links": [],
  "preferences": {
    "interests": ["tech", "hiking"],
    "clothingSizes": { "shirtSize": "M" }
  }
}

Replace a Category

PUT /api/v1/vault/{category}

Replaces the entire category. For array categories (email, address, etc.), the full array must be included. Returns 200 OK.

curl -X PUT https://api.boxowl.me/api/v1/vault/addresses \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "id": "adr_new",
        "label": "home",
        "street": "456 Pine Ave",
        "city": "Portland",
        "state": "OR",
        "zip": "97210",
        "country": "US",
        "isShipping": true,
        "isBilling": true,
        "visibility": "public"
      }
    ]
  }'

Partial Update

PATCH /api/v1/vault/{category}/{itemId}

Updates specific fields on a single item. Only fields in the payload are modified.

curl -X PATCH https://api.boxowl.me/api/v1/vault/address/adr_01h455... \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{ "isPrimary": true, "zip": "97211" }'

Response 200 OK:

{
  "identity": {
    "firstName": "Alice",
    "lastName": "Kira",
    "preferredName": "Ali"
  },
  "emails": [
    { "id": "eml_01h455...", "label": "personal", "address": "alice@example.com", "primary": true }
  ],
  "phones": [
    { "id": "phn_01h455...", "label": "mobile", "number": "+1-555-0100", "primary": true }
  ],
  "addresses": [
    { "id": "adr_01h455...", "label": "home", "street": "123 Oak St", "city": "Portland", "state": "OR", "postalCode": "97201", "country": "US", "shipping": true }
  ],
  "socialLinks": [],
  "links": [],
  "preferences": {
    "interests": ["tech", "hiking"],
    "clothingSizes": { "shirtSize": "M" }
  }
}

Delete an Item

DELETE /api/v1/vault/{category}/{itemId}

Deletes a single item from a category. Returns 204 No Content.

curl -X DELETE https://api.boxowl.me/api/v1/vault/phone/ph_01h455... \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."

Profile CSS

PUT /api/v1/vault/profile-css

Update or remove your public profile's custom CSS. CSS is sanitized server-side (dangerous properties stripped). Returns 200 OK.

curl -X PUT https://api.boxowl.me/api/v1/vault/profile-css \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  -H "Content-Type: application/json" \
  -d '{ "css": "body { background: #1F1F1F; color: #fff; }" }'

← Back to API Reference