Vault Endpoints
Full CRUD for all personal data categories. Auth: JWT Bearer token.
Categories
The vault is organized into typed categories. All categories support the same four HTTP methods.
| Category | Description |
|---|---|
identity | Full name, birth date, citizenship, gender, pronouns |
birth | Birth date, place, time, zodiac |
email | Email addresses with labels |
phone | Phone numbers with labels and primary flags |
address | Physical addresses (home, shipping, billing) |
social-links | Social media profiles |
links | Curated personal links |
external-identities | OAuth connections (Google, GitHub, etc.) |
documents | Passports, licenses, etc. |
work-history | Employment history |
travel-documents | Visas, KTN, etc. |
emergency-contacts | People to contact in emergency |
medical-basics | Blood type, organ donor, physician |
dietary | Restrictions, allergies, cuisine |
education | Degrees, certifications |
vehicles | Make, model, vin, insurance |
pets | Name, species, breed, vet info |
payment-methods | Payment cards (CVC not stored) |
preferences | Size preferences, style, budget band |
location | Current/last-known location |
profile-css | Custom CSS for the public profile page |
secure-notes | End-to-end encrypted notes (labels only via API) |
Read All Vault Data
/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
/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
/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
/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
/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
/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; }" }'