Reschedule booking
reschedule_bookingAtomically moves one grant-authorized booking to a real open time after explicit user confirmation. Reusing idempotency_key makes retries safe. Failure leaves the original booking unchanged; success returns a rotated grant.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| grant | Yes | The capability token from this booking's create_booking response (confirmation.grant). Required: without it there is no way to establish that you are the agent that made this booking. It must carry the `booking:reschedule` scope. Tampered, wrong-booking, wrong-tenant, revoked and insufficiently-scoped grants all answer invalid_grant, indistinguishably; an authentic grant past the appointment start answers expired_grant. These are the GRANT codes, not the payment page's invalid_token/expired_token — through contract 2.11 this action answered the latter, whose prose wrongly told callers their payment link was broken. | |
| tenant | Yes | The tenant to operate on: the provider.tenant_slug value from the tenant's /.well-known/kirah.json manifest (the tenant's full domain, e.g. <slug>.kirah.ai). | |
| start_iso | Yes | The exact ISO 8601 instant to move the appointment to. Natural-language times are not accepted. You may supply it DIRECTLY — calling get_reschedule_options first is optional, not required — because the instant is validated against real availability by the same slot engine create_booking uses. A time that is not genuinely open answers slot_taken with the original booking untouched; a time further ahead than this business books answers beyond_booking_horizon. | |
| booking_ref | Yes | The reference create_booking returned for the booking you want to MOVE. It must be the SAME booking the supplied grant was issued for; a mismatch answers invalid_grant, indistinguishably from a forged grant. A successful move does not change it. | |
| provider_id | No | OPTIONAL. Move the booking to a different provider. Omit it and the booking keeps the provider it is already on — the customer booked a person, not a room. An explicit provider is honored only when that provider exists in this tenant's catalog (else unknown_provider) AND performs the booked service (else provider_service_mismatch). The service and its duration never change. | |
| agent_metadata | No | ||
| idempotency_key | Yes | REQUIRED — unlike create_booking, this action cannot derive one, because "move booking X to time T" is byte-identical whether it is a retry or a deliberate second move. Omitting it answers missing_idempotency_key. Reuse the SAME key when retrying the SAME move: the replay returns the original result with idempotent_replay:true and moves nothing. The same key with a different start_iso or provider_id answers idempotency_conflict. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | ||
| grant | No | ||
| detail | No | ||
| reason | No | ||
| end_iso | No | ||
| missing | No | ||
| outcome | Yes | ||
| notified | No | ||
| start_iso | No | ||
| policy_fee | No | ||
| request_id | No | ||
| booking_ref | No | ||
| booking_url | No | ||
| demo_notice | No | ||
| intake_form | No | ||
| payment_url | No | ||
| confirmation | No | ||
| service_name | No | ||
| deposit_cents | No | ||
| provider_name | No | ||
| status_reason | No | ||
| appointment_id | No | ||
| policy_message | No | ||
| retry_after_sec | No | ||
| cancel_fee_cents | No | ||
| already_cancelled | No | ||
| idempotent_replay | No |