Prove that the deal sits in the stage that the person authorised. A created deal is not a deal in the right stage. HubSpot sets the stage from the create request, so another stage is a wrong value.

Contract identity.
FactValue
Contract idhubspot.deal.in_stage
Version1.0.0
Hash66980b7c32bb3412
Completion levelin_stage
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillHubSpot CRM API 0.1.0
Valid for provider API versions2026-03

What is the intent?

Create the deal in the pipeline stage that I name.

What is the subject and the action?

MemberValue
Subject typehubspot.deal
Subject identitydeal_id = $action.result.id
Canonical effectcrm.deal_create
Provider operationPOST /crm/objects/2026-03/deals
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongdeal_id from $action.result.idyes
fingerprintweakdealname from $input.dealname; pipeline from $input.pipelineno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
deal_readbackE2provider readbackhttpRead the deal from the provider. A condition path is $observed.deal_readback.properties.dealstage.
deal_creation_eventsE3provider eventwebhookThe deal.creation notifications of this deal. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A condition reads $observed.deal_creation_events.count.
deal_creation_events_in_accountE3provider eventwebhookThe deal.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 deal, and HubSpot states no idempotency key to stop it.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
deal_presentThe provider holds the deal with the identifier of the answer.$observed.deal_readback.ideq$action.result.iddeal_readback
deal_name_matchesThe name of the deal equals the requested name.$observed.deal_readback.properties.dealnameeq$input.dealnamedeal_readback
deal_pipeline_matchesThe pipeline of the deal equals the requested pipeline.$observed.deal_readback.properties.pipelineeq$input.pipelinedeal_readback
deal_amount_matchesThe amount of the deal equals the requested amount. HubSpot states every property value as a string.$observed.deal_readback.properties.amounteq$input.amountdeal_readback
deal_created_in_windowThe provider created the deal after the operation started.$observed.deal_readback.createdAttime_after$operation.created_atdeal_readback
deal_creation_eventAt least one deal.creation notification names this deal. The duplicate guard reads the account channel, so an account with no event endpoint cannot verify and cannot miss a second deal either.$observed.deal_creation_events.countgte1deal_creation_events
deal_in_the_authorised_stageThe deal sits in the requested stage of the requested pipeline, and no archive removed it.all_ofThe rows below state the members.deal_readback
deal_stage_matchesThe stage identifier of the deal equals the requested identifier.$observed.deal_readback.properties.dealstageeq$input.dealstagedeal_readback
deal_stage_pipeline_matchesThe stage belongs to the requested pipeline.$observed.deal_readback.properties.pipelineeq$input.pipelinedeal_readback
deal_is_archived$observed.deal_readback.archivedeqtruedeal_readback

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
deal_in_wrong_pipelinewrong subjectThe deal sits in a different pipeline than the intent named.$observed.deal_readback.properties.pipelinene$input.pipeline
deal_with_another_namewrong subjectThe deal carries a different name than the intent named.$observed.deal_readback.properties.dealnamene$input.dealname
deal_with_another_amountwrong amountThe deal carries a different amount than the intent stated.$observed.deal_readback.properties.amountne$input.amount
deal_predates_operationpre existing stateThe deal is older than the operation. It proves nothing.$observed.deal_readback.createdAttime_before$operation.created_at
duplicate_deal_presentduplicate side effectHubSpot created more than one deal in the account since the operation started. Do not retry.$observed.deal_creation_events_in_account.countgt1
deal_in_another_stagewrong subjectThe deal sits in a different stage than the intent named. HubSpot sets the stage from the create request, so no wait changes it. Stop and ask a person.$observed.deal_readback.properties.dealstagene$input.dealstage

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
deal_archived$observed.deal_readback.archived eq trueCONTRADICTEDThe deal is archived. The record left the pipeline. 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#/components/schemas/Deal/properties/properties: hubspot.openapi, retrieved 2026-09-08
  • hubspot.docs.deals#deals/the-identifier-of-a-stage-and-of-a-pipeline: hubspot.docs.deals, retrieved 2026-09-08
  • hubspot.docs.deals#deals/the-properties-of-a-deal: hubspot.docs.deals, retrieved 2026-09-08
  • hubspot.docs.deals#deals/the-states-of-a-deal: hubspot.docs.deals, retrieved 2026-09-08
  • hubspot.openapi#/components/schemas/Deal/properties/id: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/paths/~1crm~1objects~12026-03~1deals~1{dealId}/get/responses/200: hubspot.openapi, retrieved 2026-09-08
  • hubspot.openapi#/components/schemas/Deal/properties/createdAt: hubspot.openapi, retrieved 2026-09-08
  • hubspot.events#/events/deal.creation: hubspot.events, retrieved 2026-09-08
  • hubspot.docs.webhooks#webhooks/subscription-types: hubspot.docs.webhooks, retrieved 2026-09-08

Can hubspot.deal.in_stage return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read deal_readback and deal_creation_events.

What happens after the timeout?

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