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

# Counter an order dispute as seller

> Seller-only: respond to the buyer's dispute with a counter-proposal and optional evidence.

Evidence URLs are fetched asynchronously from the provided public URLs. Supported types: JPEG, PNG, GIF, WEBP, MP4, MOV, OGG, WEBM, PDF, TXT, CSV. Maximum 5 files, 20MB each.



## OpenAPI

````yaml /api/openapi.json post /v2/order-disputes/{orderDisputeCase}/counter
openapi: 3.1.0
info:
  title: GameBoost
  version: 2.0.0
servers:
  - url: https://api.gameboost.com
    description: GameBoost API
security:
  - BearerTokenSecurityScheme: []
tags:
  - name: Games
    description: Games
  - name: Seller Breaks
    description: Seller Breaks
  - name: Payments
    description: Payments
  - name: Payouts
    description: Payouts
  - name: Account Offers
    description: Account Offers
  - name: Account Orders
    description: Account Orders
  - name: Item Offers
    description: Item Offers
  - name: Item Orders
    description: Item Orders
  - name: Currency Offers
    description: Currency Offers
  - name: Currency Orders
    description: Currency Orders
  - name: Webhooks
    description: Webhook events sent to your endpoints when specific actions occur
  - name: Gift Card Offers
    description: Gift Card Offers
  - name: Gift Card Orders
    description: Gift Card Orders
paths:
  /v2/order-disputes/{orderDisputeCase}/counter:
    post:
      tags:
        - Order Disputes
      summary: Counter an order dispute as seller
      description: >-
        Seller-only: respond to the buyer's dispute with a counter-proposal and
        optional evidence.


        Evidence URLs are fetched asynchronously from the provided public URLs.
        Supported types: JPEG, PNG, GIF, WEBP, MP4, MOV, OGG, WEBM, PDF, TXT,
        CSV. Maximum 5 files, 20MB each.
      parameters:
        - name: orderDisputeCase
          in: path
          description: The ID of the order dispute case.
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - message
                - counter_resolution
              properties:
                message:
                  description: >-
                    Explanation shared with the buyer as part of the counter
                    response.
                  type: string
                  maxLength: 1200
                  example: Order was delivered as described, see attached screenshots.
                counter_resolution:
                  description: Resolution the seller is proposing to the buyer.
                  enum:
                    - other
                    - refund
                  type: string
                counter_resolution_note:
                  description: >-
                    Required when counter_resolution is "other". Free-text note
                    describing the proposed resolution.
                  type: string
                  maxLength: 500
                  nullable: true
                evidence_urls:
                  description: >-
                    Up to 5 publicly accessible URLs (JPEG, PNG, GIF, WEBP, MP4,
                    MOV, OGG, WEBM, PDF, TXT, CSV) to attach as evidence. Files
                    are fetched server-side and stored on the dispute event.
                  type: array
                  items:
                    format: uri
                    type: string
                    maxLength: 2048
                  maxItems: 5
                  nullable: true
      responses:
        '200':
          description: A single order dispute case
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/OrderDisputeCaseWithEvents'
                  message:
                    description: Optional success message
                    type: string
                    nullable: true
        '401':
          $ref: '#/components/responses/ErrorUnauthenticated'
        '403':
          $ref: '#/components/responses/ErrorForbidden'
        '404':
          $ref: '#/components/responses/ErrorNotFound'
        '422':
          $ref: '#/components/responses/ErrorValidation'
        '429':
          $ref: '#/components/responses/ErrorRateLimited'
      security:
        - BearerToken: []
components:
  schemas:
    OrderDisputeCaseWithEvents:
      allOf:
        - $ref: '#/components/schemas/OrderDisputeCase'
        - type: object
          properties:
            events:
              description: Chronological timeline of dispute events
              type: array
              items:
                $ref: '#/components/schemas/OrderDisputeEvent'
    OrderDisputeCase:
      description: Order dispute case
      type: object
      properties:
        id:
          description: Unique identifier for the dispute case
          type: integer
        orderable_type:
          description: Type of order under dispute
          enum:
            - account_order
            - item_order
            - currency_order
          type: string
        orderable_id:
          description: ID of the order under dispute
          type: integer
        buyer_id:
          description: User ID of the buyer who opened the dispute
          type: integer
        status:
          description: Current status in the dispute workflow
          enum:
            - waiting_for_seller
            - waiting_for_buyer
            - pending_admin_resolution
            - escalated
            - closed
          type: string
        progress_path:
          description: Position within the dispute progression flow
          enum:
            - waiting_for_seller
            - waiting_for_buyer
            - pending_admin_resolution_after_seller_accepted
            - pending_admin_resolution_after_buyer_accepted_counter
            - escalated_by_seller
            - escalated_by_seller_timeout
            - escalated_by_buyer
            - escalated_by_buyer_timeout
            - closed_seller_accepted
            - closed_buyer_accepted_counter
            - closed_manually_after_seller_accepted_review
            - closed_manually_after_buyer_accepted_counter_review
            - closed_manually_from_seller_stage
            - closed_manually_from_buyer_stage
            - closed_manually_after_seller_review
            - closed_manually_after_seller_timeout_review
            - closed_manually_after_buyer_review
            - closed_manually_after_buyer_timeout_review
          type: string
          nullable: true
        reason:
          description: Buyer-selected reason for opening the dispute
          enum:
            - account_not_as_described
            - account_not_delivered
            - account_invalid_login_details
            - account_access_recovery_or_ban_issue
            - account_seller_unresponsive_or_uncooperative
            - item_not_delivered
            - item_not_as_described
            - item_access_recovery_or_ban_issue
            - item_seller_unresponsive_or_uncooperative
            - currency_topup_not_delivered
            - currency_topup_not_as_described
            - currency_topup_access_recovery_or_ban_issue
            - currency_topup_seller_unresponsive_or_uncooperative
          type: string
          nullable: true
        explanation:
          description: Buyer-provided free-text explanation
          type: string
          nullable: true
        preferred_resolution:
          description: Buyer-preferred resolution
          enum:
            - other
            - refund
          type: string
          nullable: true
        preferred_resolution_note:
          description: Buyer-provided note clarifying the preferred resolution
          type: string
          nullable: true
        escalation_reason:
          description: Reason the dispute was escalated to GameBoost
          enum:
            - seller_requested
            - buyer_requested
            - seller_timeout
            - buyer_timeout
          type: string
          nullable: true
        closure_reason:
          description: Reason the dispute was closed
          enum:
            - seller_accepted
            - buyer_accepted_counter
            - manual_close
            - seller_provided_valid_replacement
            - seller_proved_delivery
            - seller_proved_description_accurate
            - issue_could_not_be_verified
            - buyer_claim_accepted
            - seller_admitted_issue
            - technical_failure_confirmed
            - buyer_error_confirmed
            - mutual_agreement_reached
            - insufficient_evidence_from_buyer
            - insufficient_evidence_from_seller
            - duplicate_dispute
            - policy_exception
            - other
          type: string
          nullable: true
        outcome:
          description: Final outcome of the dispute
          enum:
            - refund
            - buyer_win
            - seller_win
          type: string
          nullable: true
        seller_response_due_at:
          description: Unix timestamp when the seller response deadline expires
          type: integer
          nullable: true
        buyer_response_due_at:
          description: Unix timestamp when the buyer response deadline expires
          type: integer
          nullable: true
        active_due_at:
          description: Unix timestamp of the currently active deadline (if any)
          type: integer
          nullable: true
        is_active_deadline_expired:
          description: Whether the currently active deadline has expired
          type: boolean
        seller_response_hours:
          description: Configured response window (hours) for the seller on this dispute
          type: integer
          nullable: true
        buyer_response_hours:
          description: Configured response window (hours) for the buyer on this dispute
          type: integer
          nullable: true
        locked_at:
          description: Unix timestamp when the order was locked by the dispute
          type: integer
          nullable: true
        closed_at:
          description: Unix timestamp when the dispute was closed
          type: integer
          nullable: true
        created_at:
          description: Unix timestamp when the dispute was created
          type: integer
        updated_at:
          description: Unix timestamp of the last modification
          type: integer
    OrderDisputeEvent:
      description: A single immutable event on the order dispute timeline.
      type: object
      properties:
        id:
          description: Unique identifier for the event
          type: integer
        type:
          description: Type of event (dispute transition, note, closure, etc.)
          enum:
            - dispute_created
            - order_locked
            - seller_notified
            - seller_response_deadline_started
            - buyer_response_deadline_started
            - seller_accepted
            - seller_countered
            - seller_escalated
            - buyer_accepted_counter
            - buyer_escalated
            - seller_timeout_escalated
            - buyer_timeout_escalated
            - admin_refunded
            - admin_buyer_won
            - admin_seller_won
            - dispute_closed
          type: string
        actor_id:
          description: >-
            User ID of the actor who triggered this event, or null if system
            generated
          type: integer
          nullable: true
        actor_username:
          description: Username of the actor, or null if system generated
          type: string
          nullable: true
        payload:
          description: >-
            Event-specific payload (message, resolution details, evidence count,
            etc.)
          type: object
        evidence_urls:
          description: Direct URLs to evidence files attached to this event
          type: array
          items:
            format: uri
            type: string
        created_at:
          description: Unix timestamp when the event was recorded
          type: integer
  responses:
    ErrorUnauthenticated:
      description: >-
        User is not authenticated, happens when the API key is missing, expired
        or invalid
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Unauthenticated.
    ErrorForbidden:
      description: >-
        User is not authorized to perform this action, happens when you try to
        access a resource you do not have permission to access
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: This action is unauthorized.
    ErrorNotFound:
      description: Resource not found, happens when the requested resource does not exist
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Resource not found.
    ErrorValidation:
      description: Validation errors, happens when the request data is invalid
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: The given data was invalid.
              errors:
                type: object
                additionalProperties:
                  type: array
                  items:
                    type: string
                example:
                  field:
                    - Something is wrong with this field!
    ErrorRateLimited:
      description: >-
        Rate limit exceeded, happens when you exceed the rate limit for the
        endpoint
      content:
        application/json:
          schema:
            type: object
            properties:
              message:
                type: string
                example: Too many requests.
  securitySchemes:
    BearerToken:
      type: http
      scheme: bearer
      bearerFormat: JWT

````