No. HubSpot CRM API returns a 201 response with a deal object when it accepts the request. The deal then holds one of 2 states. Provely proves created, in_stage and logged as separate promises.

Skill facts from the signed manifest.
FactValue
Skill version0.1.0
PublisherBuilt and signed by Provely.
CertificationProvisional (score 49 of 100)
Last conformance run2026-09-05T12:00:00Z: 46 of 46 cases passed, 0 critical false VERIFIED
Provider API versions2026-03
Default provider API version2026-03
Compiled2026-09-05T12:00:00Z by compiler 0.1.0
Manifest hash51408ddccc5bfcdd
Manifest hash checkthe document hashes to the value the manifest states
Signaturevalid, key provely-skill-2026-09, trusted by this build

What does this page prove?

ClaimProven byEvidenceStatus
The record exists with the intended name in the intended pipeline. It does not prove the stage that the person asked for. Read the level in_stage for that.hubspot.deal.createdE2 + E3proven
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.hubspot.deal.in_stageE2 + E3proven
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.hubspot.engagement.loggedE2proven
An outcome outside HubSpot CRM API, such as a bank credit or a person who read a messagenot provenno E5 channelnot proven
The meaning of the in_pipeline_stage state of hubspot.dealnot provenno source states itnot proven
The agent report that the action workednever countsE0not proven

Which completion levels does the HubSpot CRM API skill expose?

Each level is one promise with one contract. An agent picks the level that matches the promise it makes. It cannot upgrade a level. Read the completion level definition.

LevelContractPromiseEvidenceCertification
createdhubspot.deal.created v1.0.0The record exists with the intended name in the intended pipeline. It does not prove the stage that the person asked for. Read the level in_stage for that.E2 + E3Provisional
in_stagehubspot.deal.in_stage v1.0.0A 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.E2 + E3Provisional
loggedhubspot.engagement.logged v1.0.0A 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.E2Provisional

What is the HubSpot CRM API lifecycle?

Which states can a hubspot.deal be in?

StateClassVerdictMeaningSource
in_pipeline_stageunknownUNVERIFIABLEThe deal sits in a stage of a pipeline. The published pages enumerate no stage identifier and state no meaning for one, because a portal defines its own stages.hubspot.docs.deals
archivedterminal neutralFAILEDAn archive removed the deal from the pipeline. The member archived is true, and the member archivedAt states the time.hubspot.docs.deals

Which states can a hubspot.note be in?

StateClassVerdictMeaningSource
loggedtransitionalPENDINGThe note exists on the timeline. The member archived is false. HubSpot states no further state for a note.hubspot.docs.notes
archivedterminal neutralFAILEDAn archive removed the note. The member archived is true.hubspot.docs.notes

How does Provely tie the evidence to this exact operation?

A matching state that already existed must not verify. Every contract names the correlation keys that bind the evidence to the operation, and the idempotency key that stops a duplicate side effect.

StrategyAssuranceKeysRequiredWindow
resource_idstrongdeal_id from $action.result.idyesnone
fingerprintweakdealname from $input.dealname; pipeline from $input.pipelineno600000 ms
resource_idstrongnote_id from $action.result.idyesnone
fingerprintweakdeal_id from $input.deal_id; hs_timestamp from $input.hs_timestampno600000 ms
The skill reads the channels below. It prefers the ones furthest from the action.
In words
  • E0 agent assertion: never sufficient.
  • E1 action response: the provider acknowledged the request.
  • E2 provider readback: the runtime read the resource back.
  • E3 provider event: the provider reported the change.
  • E4 independent system: a system outside the action path agrees.
  • E5 external outcome: the result is observable in the world.

Which evidence channels does the skill read?

The runtime prefers the channel that is more independent from the action path. Read the evidence level definition. An acknowledgement from HubSpot CRM API is E1 and never terminal success.

ChannelLevelIndependenceVerifierDeterministicTypical latency
deal_action_responseE1same responseaction_resultyesnot stated
deal_creation_eventsE3provider eventwebhookno5000 ms
deal_creation_events_in_accountE3provider eventwebhookno5000 ms
deal_readbackE2provider readbackhttpyes400 ms
engagement_creation_events_in_accountE3provider eventwebhookno5000 ms
engagement_readbackE2provider readbackhttpyes400 ms

Which ways can a HubSpot CRM API action look done and not be?

ContractCaseRuleVerdict
hubspot.deal.createdwrong subjectThe deal sits in a different pipeline than the intent named.CONTRADICTED
hubspot.deal.createdwrong subjectThe deal carries a different name than the intent named.CONTRADICTED
hubspot.deal.createdwrong amountThe deal carries a different amount than the intent stated.CONTRADICTED
hubspot.deal.createdpre existing stateThe deal is older than the operation. It proves nothing.CONTRADICTED
hubspot.deal.createdduplicate side effectHubSpot created more than one deal in the account since the operation started. Do not retry.CONTRADICTED
hubspot.deal.createdobserved stateThe deal is archived. The record left the pipeline. Ask a person.CONTRADICTED
hubspot.deal.in_stagewrong subjectThe deal sits in a different pipeline than the intent named.CONTRADICTED
hubspot.deal.in_stagewrong subjectThe deal carries a different name than the intent named.CONTRADICTED
hubspot.deal.in_stagewrong amountThe deal carries a different amount than the intent stated.CONTRADICTED
hubspot.deal.in_stagepre existing stateThe deal is older than the operation. It proves nothing.CONTRADICTED
hubspot.deal.in_stageduplicate side effectHubSpot created more than one deal in the account since the operation started. Do not retry.CONTRADICTED
hubspot.deal.in_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.CONTRADICTED
hubspot.deal.in_stageobserved stateThe deal is archived. The record left the pipeline. Ask a person.CONTRADICTED
hubspot.engagement.loggedwrong subjectThe engagement is associated with a different deal than the intent named.CONTRADICTED
hubspot.engagement.loggedpartial completionHubSpot wrote the note and associated it with no deal. The engagement is not on the timeline of the deal. Ask a person.CONTRADICTED
hubspot.engagement.loggedpre existing stateThe note is older than the operation. It proves nothing.CONTRADICTED
hubspot.engagement.loggedduplicate side effectHubSpot created more than one record in the account since the operation started. Do not retry.CONTRADICTED
hubspot.engagement.loggedobserved stateThe note is archived. It is not on the timeline of the deal. Ask a person.CONTRADICTED

What did the last conformance run show?

The six confidence dimensions of the signed manifest.
DimensionScoreMaximum
Documentation1420
Schema alignment11.4515
Lifecycle certainty1520
Evidence strength1220
Causal correlation1515
Sandbox conformance1010
Raw score77.45100
Score after the caps49100

The raw score is 77.45. 3 hard caps apply, so the score is 49 and the level is Provisional.

Why the score is capped.
ReasonHighest score it allows
A lifecycle state has unknown semantics. The compiler cannot prove the end state.49
14 uncertainty records are open. The lowest cap is 49.49
3 mandatory cases are missing. Example: hubspot.deal.created:terminal_failure.74
The score and the level of each contract.
ContractRaw scoreScore after the capsCertification
hubspot.deal.created77.549Provisional
hubspot.deal.in_stage78.1349Provisional
hubspot.engagement.logged78.549Provisional

The weakest contract is hubspot.deal.created. It scores 49 and reaches Provisional. The package level is Provisional, because a package level never rises above its weakest contract. Read the level of the contract you use.

The last conformance run on 2026-09-05T12:00:00Z passed 46 of 46 cases with 0 critical false VERIFIED. One critical false VERIFIED rejects a skill.

The conformance result by case class.
Case classPassedTotal
duplicate side effect33
error after execution33
error before execution33
evidence unavailable33
pre existing state33
stale readback33
still transitional33
terminal success44
timeout after commit33
version mismatch33
webhook duplicate33
webhook out of order33
wrong amount22
wrong subject44
wrong terminal state33

The conformance artifact digest is c9281160c47982e2. The harness signs the run, so a reader can check that these numbers come from that run.

What remains uncertain?

The level is Provisional because of it. A lifecycle state has unknown semantics. The compiler cannot prove the end state. 14 uncertainty records are open. The lowest cap is 49. Provely does not guess a rule that a source does not state.

Where do these facts come from?

Every claim above cites a source assertion in the skill provenance. The compiler records the source, its hash, and the retrieval date. A page never states a provider rule without one.

SourceKindRetrievedExcerpt
hubspot.docs.dealsdocs2026-09-08authored
hubspot.docs.notesdocs2026-09-08authored
hubspot.docs.versionsdocs2026-09-08authored
hubspot.docs.webhooksdocs2026-09-08authored
hubspot.eventsevent sample2026-09-08authored
hubspot.openapiopenapi2026-09-08authored

How do I verify a HubSpot CRM API action?

Verify a HubSpot CRM API action with Provely

  1. Begin the operation.Call begin with the contract hubspot.deal.created and the input. Keep the operation id.
  2. Make the HubSpot CRM API call you make today.Send the request with the correlation metadata that begin returned.
  3. Submit the acknowledgement.Call action_result with the HubSpot CRM API response. This is evidence level E1. It is not completion.
  4. Verify.Call verify. The runtime reads deal_action_response, deal_creation_events, deal_creation_events_in_account, deal_readback, engagement_creation_events_in_account and engagement_readback and evaluates the contract.
  5. Report the verdict exactly as returned.VERIFIED comes with a signed receipt. PENDING comes with the operation id. CONTRADICTED and UNVERIFIABLE are not success.

Questions developers ask

Does the created level prove the logged level?

No. The record exists with the intended name in the intended pipeline. It does not prove the stage that the person asked for. Read the level in_stage for that. 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. Use hubspot.engagement.logged to prove logged.

Which HubSpot CRM API API versions does the skill support?

2026-03. An operation on another version returns UNVERIFIABLE with the reason version_unsupported. The runtime never guesses.

Does Provely need write access to HubSpot CRM API?

No. The agent keeps its write key. The verifier reads with a separate read-only credential where HubSpot CRM API permits it, and it never shares that credential with the agent.