Short answer
Records store their owner in hubspot_owner_id, which takes an owner ID, not a user ID. HubSpot's docs note three different IDs: the user's ID in one account, hs_internal_user_id across accounts, and the owner ID. Get the owner ID from the read-only /crm/v3/owners/ endpoint, then set it like any other property.
1. Look up the owner
GET https://api.hubapi.com/crm/v3/owners/?email=rep@example.com
2. Assign it
PATCH https://api.hubapi.com/crm/v3/objects/contacts/CONTACT_ID
{ "properties": { "hubspot_owner_id": "OWNER_ID" } }
3. Notes
- Owners are created automatically when users are added or synced from Salesforce.
- Custom HubSpot user properties also take owner IDs.
- For importing owners from a spreadsheet instead, see bulk assigning owners.