Short answer
HubSpot's notes API: create a note with hs_timestamp (when it happened) and hs_note_body, and include an associations array to attach it to the contact in the same call, instead of a separate association request. HubSpot's developer blog uses this pattern from a workflow custom code action.
1. The request
POST /crm/v3/objects/notes
{ "properties": { "hs_timestamp": "2026-10-07T12:00:00Z", "hs_note_body": "Called, left voicemail" },
"associations": [ { "to": { "id": "CONTACT_ID" }, "types": [ { "associationCategory": "HUBSPOT_DEFINED", "associationTypeId": 202 } ] } ] }202 is the note-to-contact association type in HubSpot's default associations list; check it for other objects.
2. From a workflow
See custom code actions.