Skip to content

PUT /v3/user/addresses/:id — update

PUT
/v3/user/addresses/{addressId}
curl --request PUT \
--url https://api-ha-prod-p8.handbid.dev/v3/user/addresses/%7B%7BaddressId%7D%7D \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: */*' \
--data '"{\n \"addressType\": \"Work\",\n \"street1\": \"500 S Buena Vista St\",\n \"city\": \"Burbank\",\n \"province\": \"CA\",\n \"postalCode\": \"91521\",\n \"country\": \"US\",\n \"isPrimary\": true\n}"'

NEW (HAN-2041, 2026-06-05). Update one of the authenticated user’s own addresses. Auth required. Ownership is enforced by an isDeleted-scoped lookup — an id the user doesn’t own (or that is missing / soft-deleted) → 404.

Same body contract as POST (addressType required). Setting isPrimary=true promotes this address (and bridge-syncs users.shippingAddress).

Response (204 No Content): empty body.

Errors:

  • 422 validation_error — attempting to demote the current primary (isPrimary=false on the primary). Set another address primary first.
  • 404 not_found — id not owned / missing / soft-deleted.
  • 400 validation_error — missing/unknown addressType or per-field errors (fields).
  • 401 anonymous.

Side-effects: drops the address-list cache; async event.address ({action:"update"}) to room:{usersGuid}.

Rate limit: userAddressWrite.

addressId
required
string

AddressId from GET /v3/user/addresses.

Example
{{addressId}}
Media type */*
string
Example
"{\n \"addressType\": \"Work\",\n \"street1\": \"500 S Buena Vista St\",\n \"city\": \"Burbank\",\n \"province\": \"CA\",\n \"postalCode\": \"91521\",\n \"country\": \"US\",\n \"isPrimary\": true\n}"

Successful response

Media type application/json