> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eat-now.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Cancel a reservation

> Cancels a reservation on behalf of the restaurant and returns the updated reservation resource. Partner cancellations are recorded as restaurant-side cancellations. Repeating the call is safe and returns the canceled reservation again.



## OpenAPI

````yaml https://app.eat-now.io/api/partner/v1/openapi.json post /api/partner/v1/reservations/{id}/cancel
openapi: 3.0.3
info:
  title: EatNow Partner API
  version: v1
  description: >-
    Version 1 of the EatNow partner API.


    This API is designed for trusted partner integrations that need
    restaurant-scoped access to availability, reservation management, and
    operational reference data.


    Authentication

    - Use `Authorization: Bearer <token>` with a partner API token created from
    the EatNow dashboard.

    - Access is controlled by credential scopes and each request is resolved to
    a single restaurant.


    Base URL

    - The server URL in this document is the canonical base URL for the current
    environment.


    Errors

    - Errors follow a consistent envelope with `error.code`, `error.message`,
    and `error.request_id`.

    - Validation, authentication, authorization, conflicts, and not-found cases
    all use the same top-level error shape.


    Rate limits

    - Partner API traffic is rate limited. Clients should treat `429` responses
    as retryable and back off accordingly.


    Public endpoints

    - `GET /api/partner/v1` and `GET /api/partner/v1/openapi.json` are public.

    - All business endpoints require Bearer authentication.
servers:
  - url: https://app.eat-now.io
security: []
tags:
  - name: Meta
    description: Platform metadata and schema endpoints
  - name: Authentication
    description: Credential validation and auth context endpoints
  - name: Availability
    description: Bookable slot search and exact slot validation
  - name: Catalog
    description: Reference data for restaurant tables, rooms, prescribers, and discounts
  - name: Reservations
    description: Reservation lookup, search, update, and cancellation
  - name: Missed Calls
    description: Report missed calls and trigger WhatsApp follow-up templates
paths:
  /api/partner/v1/reservations/{id}/cancel:
    post:
      tags:
        - Reservations
      summary: Cancel a reservation
      description: >-
        Cancels a reservation on behalf of the restaurant and returns the
        updated reservation resource. Partner cancellations are recorded as
        restaurant-side cancellations. Repeating the call is safe and returns
        the canceled reservation again.
      operationId: cancelPartnerReservation
      parameters:
        - schema:
            type: string
            minLength: 1
            description: >-
              EatNow reservation identifier used as the canonical partner API
              resource id.
          required: true
          description: >-
            EatNow reservation identifier used as the canonical partner API
            resource id.
          name: id
          in: path
      requestBody:
        required: false
        description: >-
          Optional cancellation payload. Include a reason when the partner wants
          the cancellation reason persisted on the reservation.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PartnerApiReservationCancelRequest'
      responses:
        '200':
          description: Canceled reservation detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiReservationCancelResponse'
        '400':
          description: Request validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '401':
          description: Authentication failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '403':
          description: Scope is insufficient
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
        '404':
          description: Reservation not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerApiError'
      security:
        - PartnerBearerToken: []
components:
  schemas:
    PartnerApiReservationCancelRequest:
      type: object
      properties:
        reason:
          type: string
          minLength: 1
          description: Optional plain-text cancellation reason stored on the reservation.
      description: >-
        Optional cancellation payload. Provide a reason when the integrating
        partner wants to persist one.
    PartnerApiReservationCancelResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/PartnerApiReservationDetail'
      required:
        - data
    PartnerApiError:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              $ref: '#/components/schemas/PartnerApiErrorCode'
            message:
              type: string
            request_id:
              type: string
            details:
              type: object
              additionalProperties:
                nullable: true
          required:
            - code
            - message
            - request_id
      required:
        - error
    PartnerApiReservationDetail:
      type: object
      properties:
        id:
          type: string
        external_id:
          type: string
          nullable: true
        status:
          type: string
          enum:
            - PENDING
            - PENDING_PAYMENT
            - CANCELED_BY_USER
            - CONFIRMED
            - CONFIRMED_PENDING_PAYMENT
            - MANUALLY_CONFIRMED
            - DOUBLE_CONFIRMED
            - REJECTED
            - CANCELED_BY_RESTAURANT
            - SHOWED_UP
            - NO_SHOW
            - SEATED
            - PARTIALLY_SEATED
            - DONE
            - SEATED_FOR_DRINKS
        start_at:
          type: string
          format: date-time
        party_size:
          type: integer
          minimum: 1
        source:
          type: string
          enum:
            - WALK_IN
            - WEBSITE
            - PHONE
            - EMAIL
            - RESERVE_WITH_GOOGLE
            - TRAVEL_AGENCIES
            - OTHER
            - INSTAGRAM
            - FACEBOOK
            - TIKTOK
            - SNAPCHAT
            - WHATSAPP
            - TRIPADVISOR
            - PRIVATIZATION
            - MISSED_CALL
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        customer:
          $ref: '#/components/schemas/PartnerApiCustomer'
        room:
          $ref: '#/components/schemas/PartnerApiRoom'
        tables:
          type: array
          items:
            $ref: '#/components/schemas/PartnerApiTable'
        waiter:
          $ref: '#/components/schemas/PartnerApiWaiter'
        shift:
          $ref: '#/components/schemas/PartnerApiShift'
        discount:
          $ref: '#/components/schemas/PartnerApiDiscount'
        prescriber:
          $ref: '#/components/schemas/PartnerApiPrescriber'
        custom_message:
          type: string
          nullable: true
        allergies:
          type: string
          nullable: true
        metadata:
          type: object
          nullable: true
          additionalProperties:
            $ref: '#/components/schemas/PartnerApiMetadataField'
        feedback:
          $ref: '#/components/schemas/PartnerApiFeedback'
        cancellation_reason:
          type: string
          nullable: true
        attached_files:
          type: array
          items:
            type: string
        tags:
          type: array
          items:
            type: string
        send_followup_email:
          type: boolean
        is_table_definitive:
          type: boolean
        is_force_inserted:
          type: boolean
        total_amount_paid:
          type: integer
          nullable: true
        payment_summary:
          $ref: '#/components/schemas/PartnerApiPaymentSummary'
        payments:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/PartnerApiPayment'
        seated_at:
          type: string
          nullable: true
          format: date-time
        left_at:
          type: string
          nullable: true
          format: date-time
        sensitive_data_included:
          type: boolean
      required:
        - id
        - external_id
        - status
        - start_at
        - party_size
        - source
        - created_at
        - updated_at
        - customer
        - room
        - tables
        - waiter
        - shift
        - discount
        - prescriber
        - custom_message
        - allergies
        - metadata
        - feedback
        - cancellation_reason
        - attached_files
        - tags
        - send_followup_email
        - is_table_definitive
        - is_force_inserted
        - total_amount_paid
        - payment_summary
        - payments
        - seated_at
        - left_at
        - sensitive_data_included
    PartnerApiErrorCode:
      type: string
      enum:
        - AUTHENTICATION_REQUIRED
        - INVALID_AUTHENTICATION
        - INSUFFICIENT_SCOPE
        - VALIDATION_ERROR
        - RESOURCE_NOT_FOUND
        - RESOURCE_CONFLICT
        - RATE_LIMITED
        - INTERNAL_ERROR
    PartnerApiCustomer:
      type: object
      nullable: true
      properties:
        id:
          type: string
          nullable: true
        name:
          type: string
          nullable: true
        email:
          type: string
          nullable: true
          format: email
        phone_number:
          type: string
          nullable: true
        lang:
          type: string
          nullable: true
          enum:
            - FR
            - EN
            - IT
            - ES
            - DE
            - PT
            - null
      required:
        - id
        - name
        - email
        - phone_number
        - lang
    PartnerApiRoom:
      type: object
      nullable: true
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
    PartnerApiTable:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        min_pax:
          type: integer
        max_pax:
          type: integer
      required:
        - id
        - name
        - min_pax
        - max_pax
    PartnerApiWaiter:
      type: object
      nullable: true
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
    PartnerApiShift:
      type: object
      nullable: true
      properties:
        id:
          type: string
        name:
          type: string
        start_time:
          type: string
          nullable: true
        end_time:
          type: string
          nullable: true
      required:
        - id
        - name
        - start_time
        - end_time
    PartnerApiDiscount:
      type: object
      nullable: true
      properties:
        id:
          type: string
        value:
          type: number
        message:
          type: string
          nullable: true
      required:
        - id
        - value
        - message
    PartnerApiPrescriber:
      type: object
      nullable: true
      properties:
        id:
          type: string
        name:
          type: string
        phone_number:
          type: string
          nullable: true
      required:
        - id
        - name
        - phone_number
    PartnerApiMetadataField:
      type: object
      properties:
        name:
          type: string
        value:
          anyOf:
            - type: string
            - type: number
            - type: boolean
            - nullable: true
            - type: array
              items:
                type: string
      required:
        - name
        - value
    PartnerApiFeedback:
      type: object
      nullable: true
      properties:
        rating:
          type: integer
        comment:
          type: string
          nullable: true
        answer:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        answered_at:
          type: string
          nullable: true
          format: date-time
      required:
        - rating
        - comment
        - answer
        - created_at
        - answered_at
    PartnerApiPaymentSummary:
      type: object
      properties:
        currency:
          type: string
          nullable: true
          enum:
            - MAD
            - EUR
            - USD
            - XOF
            - null
        total_amount:
          type: integer
        paid_amount:
          type: integer
        authorized_amount:
          type: integer
        pending_amount:
          type: integer
        refunded_amount:
          type: integer
        statuses:
          type: array
          items:
            type: string
            enum:
              - FREE
              - PENDING
              - PAID
              - EXPIRED
              - REFUNDED
              - CANCELED
              - AUTHORIZED
              - CAPTURED
              - CAPTURE_FAILED
              - VOIDED
              - DECLINED
      required:
        - currency
        - total_amount
        - paid_amount
        - authorized_amount
        - pending_amount
        - refunded_amount
        - statuses
    PartnerApiPayment:
      type: object
      properties:
        id:
          type: string
        provider_id:
          type: string
          nullable: true
        payment_type:
          type: string
          enum:
            - DEPOSIT
            - PREPAYMENT
            - EXTRA
        payment_mode:
          type: string
          enum:
            - SOFT_PREAUTH
            - PREAUTH
            - POSTAUTH
        provider:
          type: string
          enum:
            - PAYZONE
            - CMI
            - STRIPE
            - CASH
            - WIRE_TRANSFER
            - DEBTOR
            - CREDIT_CARD
        status:
          type: string
          enum:
            - FREE
            - PENDING
            - PAID
            - EXPIRED
            - REFUNDED
            - CANCELED
            - AUTHORIZED
            - CAPTURED
            - CAPTURE_FAILED
            - VOIDED
            - DECLINED
        amount:
          type: integer
        quantity:
          type: integer
        unit_price:
          type: integer
        percent_of_total:
          type: number
        currency:
          type: string
          enum:
            - MAD
            - EUR
            - USD
            - XOF
        is_refundable:
          type: boolean
        expiration_date:
          type: string
          nullable: true
          format: date-time
        max_cancellation_date:
          type: string
          nullable: true
          format: date-time
        authorized_at:
          type: string
          nullable: true
          format: date-time
        capture_deadline:
          type: string
          nullable: true
          format: date-time
        captured_at:
          type: string
          nullable: true
          format: date-time
        voided_at:
          type: string
          nullable: true
          format: date-time
        linked_product:
          $ref: '#/components/schemas/PartnerApiPaymentProduct'
        linked_variant:
          $ref: '#/components/schemas/PartnerApiPaymentProduct'
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
      required:
        - id
        - provider_id
        - payment_type
        - payment_mode
        - provider
        - status
        - amount
        - quantity
        - unit_price
        - percent_of_total
        - currency
        - is_refundable
        - expiration_date
        - max_cancellation_date
        - authorized_at
        - capture_deadline
        - captured_at
        - voided_at
        - linked_product
        - linked_variant
        - created_at
        - updated_at
    PartnerApiPaymentProduct:
      type: object
      nullable: true
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
  securitySchemes:
    PartnerBearerToken:
      type: http
      scheme: bearer
      bearerFormat: API Token
      description: >-
        Restaurant-scoped partner API token passed as `Authorization: Bearer
        <token>`.
      x-default: your_token_here

````