No. Twilio SendGrid Mail API returns a success response when it accepts the request. The message then holds one of 7 states. Only delivered is terminal success. Provely proves bounced, delivered and processed 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: 43 of 43 cases passed, 0 critical false VERIFIED
Provider API versionsv3
Default provider API versionv3
Compiled2026-09-05T12:00:00Z by compiler 0.1.0
Manifest hash19c7a63280020153
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
A bounce event with the type bounce states it. A block states the type blocked, and a block never satisfies this level.sendgrid.email.bouncedE3proven
The delivered event of this message states it. It is the first event that a system outside Twilio SendGrid decides.sendgrid.email.deliveredE3proven
The processed event of this message states it. The 202 response does not: it carries no identifier and no promise.sendgrid.email.processedE3proven
An outcome outside Twilio SendGrid Mail API, such as a bank credit or a person who read a messagenot provenno E5 channelnot proven
The agent report that the action workednever countsE0not proven

Which completion levels does the Twilio SendGrid Mail 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
bouncedsendgrid.email.bounced v1.0.0A bounce event with the type bounce states it. A block states the type blocked, and a block never satisfies this level.E3Provisional
deliveredsendgrid.email.delivered v1.0.0The delivered event of this message states it. It is the first event that a system outside Twilio SendGrid decides.E3Provisional
processedsendgrid.email.processed v1.0.0The processed event of this message states it. The 202 response does not: it carries no identifier and no promise.E3Provisional

What is the Twilio SendGrid Mail API lifecycle?

Which states can a sendgrid.message be in?

StateClassVerdictMeaningSource
acceptedtransitionalPENDINGThe service answered 202 and accepted the request. No event states more.sendgrid.openapi
processedtransitionalPENDINGTwilio SendGrid accepted the message and can deliver it. No receiving server saw it.sendgrid.docs.events
deferredtransitionalPENDINGThe receiving server rejected the message temporarily. Twilio SendGrid retries for 72 hours.sendgrid.docs.events
blockedtransitionalPENDINGThe receiving server denied the message temporarily. It can accept the message at a later time.sendgrid.docs.events
deliveredterminal successVERIFIEDTwilio SendGrid delivered the message to the receiving server, and the server accepted it.sendgrid.docs.events
bouncedterminal failureFAILEDThe receiving server denied the message permanently. The bounce event states type bounce.sendgrid.docs.events
droppedterminal failureFAILEDTwilio SendGrid dropped the message. The message never reached a receiving server.sendgrid.docs.events

In sendgrid.message under provider API version v3, delivered is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: sendgrid.docs.events · retrieved 2026-09-08

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_idstrongprovely_operation_id from $action.result.provely_operation_idyesnone
fingerprintweakemail from $input.tono600000 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 Twilio SendGrid Mail API is E1 and never terminal success.

ChannelLevelIndependenceVerifierDeterministicTypical latency
send_action_responseE1same responseaction_resultyesnot stated
delivered_eventsE3provider eventwebhookno5000 ms
dropped_eventsE3provider eventwebhookno5000 ms
hard_bounce_eventsE3provider eventwebhookno5000 ms
processed_by_recipientE3provider eventwebhookno5000 ms
processed_eventsE3provider eventwebhookno5000 ms

Which ways can a Twilio SendGrid Mail API action look done and not be?

ContractCaseRuleVerdict
sendgrid.email.bouncedwrong subjectThe message went to a different recipient than the intent named.CONTRADICTED
sendgrid.email.bouncedpre existing stateThe earliest event of this message is older than the operation. It proves nothing.CONTRADICTED
sendgrid.email.bouncedduplicate side effectTwilio SendGrid processed more than one message for this recipient since the operation started. Do not retry.CONTRADICTED
sendgrid.email.bouncedobserved stateThe receiving server accepted the message. It did not bounce.CONTRADICTED
sendgrid.email.bouncedobserved stateTwilio SendGrid dropped the message. It never reached a receiving server.FAILED
sendgrid.email.deliveredwrong subjectThe message went to a different recipient than the intent named.CONTRADICTED
sendgrid.email.deliveredpre existing stateThe earliest event of this message is older than the operation. It proves nothing.CONTRADICTED
sendgrid.email.deliveredduplicate side effectTwilio SendGrid processed more than one message for this recipient since the operation started. Do not retry.CONTRADICTED
sendgrid.email.deliveredobserved stateThe receiving server denied the message permanently.FAILED
sendgrid.email.deliveredobserved stateTwilio SendGrid dropped the message. It never reached a receiving server.FAILED
sendgrid.email.deliveredobserved stateTwilio SendGrid holds the message and no event states an end. The runtime observes again later.PENDING
sendgrid.email.processedwrong subjectThe message went to a different recipient than the intent named.CONTRADICTED
sendgrid.email.processedpre existing stateThe earliest event of this message is older than the operation. It proves nothing.CONTRADICTED
sendgrid.email.processedduplicate side effectTwilio SendGrid processed more than one message for this recipient since the operation started. Do not retry.CONTRADICTED
sendgrid.email.processedobserved stateTwilio SendGrid dropped the message. It never reached a receiving server.FAILED

What did the last conformance run show?

The six confidence dimensions of the signed manifest.
DimensionScoreMaximum
Documentation1420
Schema alignment015
Lifecycle certainty2020
Evidence strength1620
Causal correlation1515
Sandbox conformance1010
Raw score75100
Score after the caps49100

The raw score is 75. One hard cap applies, so the score is 49 and the level is Provisional.

Why the score is capped.
ReasonHighest score it allows
9 uncertainty records are open. The lowest cap is 49.49
The score and the level of each contract.
ContractRaw scoreScore after the capsCertification
sendgrid.email.bounced7549Provisional
sendgrid.email.delivered7549Provisional
sendgrid.email.processed7549Provisional

The weakest contract is sendgrid.email.bounced. 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 43 of 43 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 failure33
terminal success33
timeout after commit33
version mismatch33
webhook duplicate33
webhook out of order33
wrong subject33
wrong terminal state11

The conformance artifact digest is c5e289cd43907f74. 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. 9 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
sendgrid.activityopenapi2026-09-08trimmed
sendgrid.docs.activitydocs2026-09-08authored
sendgrid.docs.eventsdocs2026-09-08authored
sendgrid.docs.maildocs2026-09-08authored
sendgrid.docs.webhookdocs2026-09-08authored
sendgrid.eventsevent sample2026-09-08authored
sendgrid.openapiopenapi2026-09-08trimmed

How do I verify a Twilio SendGrid Mail API action?

Verify a Twilio SendGrid Mail API action with Provely

  1. Begin the operation.Call begin with the contract sendgrid.email.bounced and the input. Keep the operation id.
  2. Make the Twilio SendGrid Mail API call you make today.Send the request with the correlation metadata that begin returned.
  3. Submit the acknowledgement.Call action_result with the Twilio SendGrid Mail API response. This is evidence level E1. It is not completion.
  4. Verify.Call verify. The runtime reads send_action_response, delivered_events, dropped_events, hard_bounce_events, processed_by_recipient and processed_events 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 bounced level prove the processed level?

No. A bounce event with the type bounce states it. A block states the type blocked, and a block never satisfies this level. The processed event of this message states it. The 202 response does not: it carries no identifier and no promise. Use sendgrid.email.processed to prove processed.

What does the agent say while Twilio SendGrid Mail API reports accepted, processed, deferred and blocked?

It says: "The action is accepted but not yet verified. Operation: <id>." The verdict is PENDING. The runtime observes again on the contract timing policy.

Which Twilio SendGrid Mail API API versions does the skill support?

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

Does Provely need write access to Twilio SendGrid Mail API?

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