Prove that the engagement sits on the timeline of the deal. A note that exists is not a note on the deal. The level reads the note and the association to the deal that the person named.

Contract identity.
FactValue
Contract idhubspot.engagement.logged
Version1.0.0
Hashd4dc76168c09ea39
Completion levellogged
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillHubSpot CRM API 0.1.0
Valid for provider API versions2026-03

What is the intent?

Log this engagement against the deal.

What is the subject and the action?

MemberValue
Subject typehubspot.note
Subject identitynote_id = $action.result.id
Canonical effectcrm.engagement_log
Provider operationPOST /crm/objects/2026-03/notes
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongnote_id from $action.result.idyes
fingerprintweakdeal_id from $input.deal_id; hs_timestamp from $input.hs_timestampno

Which evidence does the contract require?

Minimum evidence level E2. An independent channel is required. Minimum channels: 1.

ChannelLevelIndependenceVerifierDescription
engagement_readbackE2provider readbackhttpRead the note with its deal associations. A condition path is $observed.engagement_readback.associations.deals.results.
engagement_creation_events_in_accountE3provider eventwebhookThe object.creation notifications of the account since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A count above one shows a second note. The published pages do not state which members the payload of a note creation carries.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
engagement_presentThe provider holds the note with the identifier of the answer.$observed.engagement_readback.ideq$action.result.idengagement_readback
engagement_body_matchesThe text of the note equals the requested text.$observed.engagement_readback.properties.hs_note_bodyeq$input.hs_note_bodyengagement_readback
engagement_created_in_windowThe provider created the note after the operation started.$observed.engagement_readback.createdAttime_after$operation.created_atengagement_readback
engagement_linked_to_the_dealThe note names exactly one deal, and that deal is the requested one.all_ofThe rows below state the members.engagement_readback
engagement_names_one_deal$observed.engagement_readback.associations.deals.resultscount_eq1engagement_readback
engagement_names_the_requested_deal$observed.engagement_readback.associations.deals.results[0].ideq$input.deal_idengagement_readback

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
engagement_on_another_dealwrong subjectThe engagement is associated with a different deal than the intent named.$observed.engagement_readback.associations.deals.results[0].idne$input.deal_id
engagement_without_a_deal_associationpartial completionHubSpot wrote the note and associated it with no deal. The engagement is not on the timeline of the deal. Ask a person.$observed.engagement_readback.associations.deals.resultscount_eq0
engagement_predates_operationpre existing stateThe note is older than the operation. It proves nothing.$observed.engagement_readback.createdAttime_before$operation.created_at
duplicate_engagement_presentduplicate side effectHubSpot created more than one record in the account since the operation started. Do not retry.$observed.engagement_creation_events_in_account.countgt1

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
engagement_archived$observed.engagement_readback.archived eq trueCONTRADICTEDThe note is archived. It is not on the timeline of the deal. Ask a person.

How long does the runtime observe?

Timing memberValue
Initial delay1000 ms
Poll interval5000 ms
Backoffexponential factor 2, max 60000 ms
Maximum attempts40
Timeout900000 ms
Stale read window20000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person

Where do these rules come from?

  • hubspot.openapi#/paths/~1crm~1objects~12026-03~1notes/post: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/paths/~1crm~1objects~12026-03~1notes/post/responses/201: hubspot.openapi, retrieved 2026-09-08
  • hubspot.docs.notes#notes/create-a-note: hubspot.docs.notes, retrieved 2026-09-08
  • hubspot.docs.notes#notes/associate-a-note-with-a-deal: hubspot.docs.notes, retrieved 2026-09-08
  • hubspot.openapi#/components/schemas/Note/properties/id: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/paths/~1crm~1objects~12026-03~1notes~1{noteId}/get/responses/200: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/components/schemas/Note/properties/properties: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/components/schemas/Note/properties/createdAt: hubspot.openapi, retrieved 2026-09-08

Can hubspot.engagement.logged return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read engagement_readback.

What happens after the timeout?

The verdict is UNVERIFIABLE with the reason evidence_unavailable_before_timeout. The operation goes to a person for review.