Prove that Twilio SendGrid accepted the message and can deliver it. The processed event of this message states it. The 202 response does not: it carries no identifier and no promise.

Contract identity.
FactValue
Contract idsendgrid.email.processed
Version1.0.0
Hashe062c2cc31e5e1bd
Completion levelprocessed
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillTwilio SendGrid Mail API 0.1.0
Valid for provider API versionsv3

What is the intent?

Hand the message to Twilio SendGrid.

What is the subject and the action?

MemberValue
Subject typesendgrid.message
Subject identityprovely_operation_id = $action.result.provely_operation_id
Canonical effectmessaging.email_send
Provider operationPOST /v3/mail/send
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongprovely_operation_id from $action.result.provely_operation_idyes
fingerprintweakemail from $input.tono

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
processed_by_recipientE3provider eventwebhookThe processed events for this recipient since the operation started, whatever custom argument they carry. A count above one shows a second message. The verifier returns {events, count, latest, earliest, types, duplicates_dropped}.
processed_eventsE3provider eventwebhookThe processed events that carry the custom argument of this operation. Twilio SendGrid accepted the message and can deliver it. The verifier returns {events, count, latest, earliest, types, duplicates_dropped}.
dropped_eventsE3provider eventwebhookThe dropped events of this operation. Twilio SendGrid dropped the message, and it never reached a receiving server. The verifier returns {events, count, latest, earliest, types, duplicates_dropped}.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
processed_event_presentAt least one processed event of this operation arrived. Twilio SendGrid accepted the message and can deliver it.$observed.processed_events.countgte1processed_events
processed_event_present_in_windowThe provider clock of the earliest matched event is after the start of the operation. An older event belongs to another send.$observed.processed_events.earliest.provider_timestamptime_after$operation.created_atprocessed_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
wrong_recipientwrong subjectThe message went to a different recipient than the intent named.$observed.processed_events.latest.payload.emailne$input.to
message_predates_operationpre existing stateThe earliest event of this message is older than the operation. It proves nothing.$observed.processed_events.earliest.provider_timestamptime_before$operation.created_at
duplicate_message_presentduplicate side effectTwilio SendGrid processed more than one message for this recipient since the operation started. Do not retry.$observed.processed_by_recipient.countgt1

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
message_dropped$observed.dropped_events.count gte 1FAILEDTwilio SendGrid dropped the message. It never reached a receiving server.

How long does the runtime observe?

Timing memberValue
Initial delay2000 ms
Poll interval10000 ms
Backoffexponential factor 2, max 300000 ms
Maximum attempts60
Timeout3600000 ms
Stale read window30000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person

Where do these rules come from?

  • sendgrid.openapi#/paths/~1v3~1mail~1send/post: sendgrid.openapi, retrieved 2026-09-08
  • sendgrid.openapi#/paths/~1v3~1mail~1send/post/responses/202: sendgrid.openapi, retrieved 2026-09-08
  • sendgrid.docs.events#event-webhook/the-processed-event/p1: sendgrid.docs.events, retrieved 2026-09-08
  • sendgrid.docs.mail#the-v3-mail-send-resource/the-response-carries-no-identifier/p1: sendgrid.docs.mail, retrieved 2026-09-08
  • sendgrid.events#/events/processed: sendgrid.events, retrieved 2026-09-08
  • sendgrid.docs.events#event-webhook/custom-arguments/p1: sendgrid.docs.events, retrieved 2026-09-08
  • sendgrid.docs.events#event-webhook/the-event-time/p1: sendgrid.docs.events, retrieved 2026-09-08
  • sendgrid.docs.events#event-webhook/the-properties-of-a-delivery-event/p1: sendgrid.docs.events, retrieved 2026-09-08

Can sendgrid.email.processed return VERIFIED from the action response alone?

No. The minimum evidence level is E3. The action response is E1. The completion conditions read processed_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.