Prove that Calendar holds the event at the requested instant. The event exists with the intended title, start and end. It does not prove that a guest is on it, was told, or comes.

Contract identity.
FactValue
Contract idgoogle_calendar.event.created
Version1.0.0
Hash4182cf3a94b3e409
Completion levelcreated
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillGoogle Calendar API 0.1.0
Valid for provider API versionsv3.20260826

What is the intent?

Put the meeting on the calendar at the stated time.

What is the subject and the action?

MemberValue
Subject typegoogle_calendar.event
Subject identityevent_id = $action.result.id
Canonical effectcalendar.event_create
Provider operationPOST /calendar/v3/calendars/{calendarId}/events
Idempotencynone, retry is not safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongevent_id from $action.result.idno
resource_idweakcalendar_id from $input.calendar_idno
fingerprintweakcalendar_id from $input.calendar_id; summary from $input.summaryno

Which evidence does the contract require?

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

ChannelLevelIndependenceVerifierDescription
event_readbackE2provider readbackhttpRead the new event from the provider. A condition path is $observed.event_readback.start.dateTime. Google returns the instant in the time zone of the calendar, so a condition compares instants and never two strings.
calendar_change_eventsE3provider eventwebhookThe notifications of a channel that watches the events collection of the calendar, since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. The body is empty, so a count names no event.

Which conditions must all hold for VERIFIED?

ConditionMeaningPathOperatorExpectedEvidence
event_presentThe provider holds the event with the identifier of the insert answer.$observed.event_readback.ideq$action.result.idevent_readback
event_title_matchesThe title of the event equals the title that the person named.$observed.event_readback.summaryeq$input.summaryevent_readback
event_status_confirmedThe status of the event is confirmed. The published description names that value the default status.$observed.event_readback.statuseqconfirmedevent_readback
event_starts_at_the_requested_instantThe stored start names the instant that the person named.all_ofThe rows below state the members.event_readback
event_starts_at_the_requested_instant_not_beforeThe stored instant is not before the instant that the person named.$observed.event_readback.start.dateTimetime_after$input.start_timeevent_readback
event_starts_at_the_requested_instant_not_afterThe stored instant is not after the instant that the person named.$observed.event_readback.start.dateTimetime_before$input.start_timeevent_readback
event_ends_at_the_requested_instantThe stored end names the instant that the person named.all_ofThe rows below state the members.event_readback
event_ends_at_the_requested_instant_not_beforeThe stored instant is not before the instant that the person named.$observed.event_readback.end.dateTimetime_after$input.end_timeevent_readback
event_ends_at_the_requested_instant_not_afterThe stored instant is not after the instant that the person named.$observed.event_readback.end.dateTimetime_before$input.end_timeevent_readback
event_created_in_windowThe provider created the event after the operation started.$observed.event_readback.createdtime_after$operation.created_atevent_readback
calendar_changedAt least one notification says that the events collection of the calendar changed since the operation started. The published page states that a small percentage of messages drop, so a lost message leaves this level unproven and never verified.$observed.calendar_change_events.countgte1calendar_change_events

Which conditions give CONTRADICTED?

ConditionClassReasonPathOperatorExpected
event_title_differswrong subjectThe event carries a different title than the person named.$observed.event_readback.summaryne$input.summary
event_starts_too_earlywrong subjectThe event starts before the instant that the person named.$observed.event_readback.start.dateTimetime_before$input.start_time
event_starts_too_latewrong subjectThe event starts after the instant that the person named.$observed.event_readback.start.dateTimetime_after$input.start_time
event_ends_too_earlywrong subjectThe event ends before the instant that the person named.$observed.event_readback.end.dateTimetime_before$input.end_time
event_ends_too_latewrong subjectThe event ends after the instant that the person named.$observed.event_readback.end.dateTimetime_after$input.end_time
event_predates_operationpre existing stateThe event is older than the operation. It proves nothing about this operation.$observed.event_readback.createdtime_before$operation.created_at
duplicate_calendar_changeduplicate side effectThe calendar changed more than once since the operation started. A second insert mails every guest a second time. Do not retry.$observed.calendar_change_events.countgt1

Which observed states map to a verdict before completion?

RuleMatchVerdictReason
event_is_cancelled$observed.event_readback.status eq "cancelled"CONTRADICTEDThe event is cancelled. The published description states that a cancelled event is a deleted event. The API reports no failure for this end.
event_is_a_locked_copy$observed.event_readback.locked eq trueCONTRADICTEDThe event is a locked copy. The published description states that nobody can change its title, its start or its end. Ask a person.
event_is_all_day$observed.event_readback.start.date exists undefinedCONTRADICTEDThe agent created an all-day event. This level promises a timed event, and an all-day event carries no dateTime, so no later read can prove the instant.

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?

  • google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events/post: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events/post/responses/200: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.docs.events#create-an-event-and-invite-guests/an-event-needs-a-start-and-an-end: google_calendar.docs.events, retrieved 2026-09-09
  • google_calendar.docs.times#events-times-and-the-change-of-a-time/a-read-chooses-the-spelling-of-the-answer: google_calendar.docs.times, retrieved 2026-09-09
  • google_calendar.openapi#/components/schemas/Event/properties/id: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events~1{eventId}/get/responses/200: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.openapi#/components/schemas/Event/properties/summary: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events/post/requestBody: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.openapi#/components/schemas/Event/properties/status: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.docs.times#events-times-and-the-change-of-a-time/the-status-of-an-event: google_calendar.docs.times, retrieved 2026-09-09
  • google_calendar.openapi#/components/schemas/Event/properties/created: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.docs.times#events-times-and-the-change-of-a-time/the-two-times-that-calendar-publishes-about-an-event: google_calendar.docs.times, retrieved 2026-09-09
  • google_calendar.events#/events/calendar.events.exists: google_calendar.events, retrieved 2026-09-09
  • google_calendar.docs.push#push-notifications/one-resource-state-covers-three-different-changes: google_calendar.docs.push, retrieved 2026-09-09
  • google_calendar.openapi#/paths/~1calendar~1v3~1calendars~1{calendarId}~1events~1watch/post: google_calendar.openapi, retrieved 2026-09-09
  • google_calendar.docs.push#push-notifications/what-the-page-refuses-to-promise: google_calendar.docs.push, retrieved 2026-09-09

Can google_calendar.event.created return VERIFIED from the action response alone?

No. The minimum evidence level is E2. The action response is E1. The completion conditions read event_readback and calendar_change_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.