Prove that the recipient mail server accepted the email. The delivered level proves the delivered state on the email record and the email.delivered event. It does not prove that a person read the message. This level needs the email.delivered webhook.

Contract identity.
FactValue
Contract idresend.email.delivered
Version1.0.0
Hash62f92acbd9f8b6fd
Completion leveldelivered
CertificationCommunity
SkillResend 0.1.0
Valid for provider API versions1.5.1

What is the intent?

Deliver the email to the recipient mailbox.

What is the subject and the action?

MemberValue
Subject typeresend.email
Subject identityemail_id = $action.result.id
Canonical effectmessage.send
Provider operationPOST /emails
Idempotencyidempotency_key through Idempotency-Key, retry is safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongemail_id from $action.result.idyes
idempotency_keystrongidempotency_key from $operation.idno
fingerprintweakto from $input.to; subject from $input.subjectno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
email_readbackE2provider readbackhttpRead the email record. The http verifier returns the parsed Email object, so a condition path is $observed.email_readback.last_event.
sent_events_by_intentE3provider eventwebhookThe email.sent events for the same recipient and subject since the operation started. A count above one shows a second send. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}, so a condition reads the count.
delivered_eventsE3provider eventwebhookThe email.delivered events of this email. The resource id is the data.email_id of the payload. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}, so a condition reads the count.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
record_created_in_windowThe provider created the email record after the operation started.$observed.email_readback.created_attime_after$operation.created_atemail_readback
readback_shows_deliveredThe record shows the delivered state or a later engagement state.$observed.email_readback.last_eventin["delivered","opened","clicked"]email_readback
delivery_event_presentAt least one email.delivered event of this email arrived.$observed.delivered_events.countgte1delivered_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
wrong_recipientwrong subjectThe message went to a different recipient.$observed.email_readback.tone$input.to
record_predates_operationpre existing stateThe provider record is older than the operation. It proves nothing.$observed.email_readback.created_attime_before$operation.created_at
more_than_one_recipientpartial completionThe record lists more than one recipient. This contract proves the outcome for one recipient. Use one operation per recipient.$observed.email_readback.toarray_length{"min":2}
duplicate_email_presentduplicate side effectResend sent more than one email for this recipient and subject since the operation started. Do not retry.$observed.sent_events_by_intent.countgt1

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
terminal_failure$observed.email_readback.last_event in ["bounced","failed","suppressed"]FAILEDThe provider reports that the message failed, bounced, or was suppressed.
still_transitional$observed.email_readback.last_event in ["queued","scheduled","sent","delivery_delayed"]PENDINGThe message is on the way. The runtime observes again later.
canceled$observed.email_readback.last_event eq "canceled"CONTRADICTEDThe schedule of the message was canceled. The provider will not send it.
recipient_complained$observed.email_readback.last_event eq "complained"UNVERIFIABLEThe recipient marked the message as spam. The record no longer states the delivery state.

How long does the runtime observe?

Timing memberValue
Initial delay2000 ms
Poll interval10000 ms
Backoffexponential factor 2, max 120000 ms
Maximum attempts60
Timeout3600000 ms
Stale read window30000 ms
On timeoutUNVERIFIABLE (evidence_unavailable_before_timeout)

Where do these rules come from?

  • resend.openapi#/paths/~1emails/post: resend.openapi, retrieved 2026-09-05
  • resend.openapi#/components/schemas/Email/properties/last_event: resend.openapi, retrieved 2026-09-05
  • resend.openapi#/webhooks/email.delivered: resend.openapi, retrieved 2026-09-05
  • resend.openapi#/components/schemas/Email/properties/created_at: resend.openapi, retrieved 2026-09-05
  • resend.docs.webhooks#webhooks/event-types/p2: resend.docs.webhooks, retrieved 2026-09-05
  • resend.openapi#/components/schemas/OutboundEmailEventData/properties/email_id: resend.openapi, retrieved 2026-09-05

Can resend.email.delivered return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read email_readback and delivered_events.

What happens after the timeout?

The verdict is UNVERIFIABLE with the reason evidence_unavailable_before_timeout. The operation ends.