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

# List disputes

> The disputes buyers opened on the store's payments, as their payment providers reported them: the ones that need an answer first, soonest deadline first, then the rest newest first. `status` is how it reads on the dashboard: `needs_response`, `under_review`, `won`, `lost`, `accepted` or `closed` (ended with no chargeback). `providerStatus` is the provider's own last word, `stage` is `inquiry`, `chargeback`, `claim` (a PayPal case), `pre_arbitration` or `arbitration`, and `dueAt` when the provider stops taking an answer, where it says. `answeredFrom` is where it is answered: `here` (through this API: Stripe's, Revolut's, Adyen's, and PayPal's where PayPal is connected with API keys), `provider` (in the provider's own dashboard, named in `answerPlace`) or `none`. `meta.figures` is the dashboard's four: how many need an answer and how many are due within three days, the money in the open ones in the store's currency, how many ended won and lost in the last 90 days, and the orders disputed beside those that took money in that time.

Needs the `disputes.read` permission (Read Disputes).



## OpenAPI

````yaml /api-reference/openapi.json get /stores/{storeId}/disputes
openapi: 3.1.0
info:
  title: Shoply API
  version: '1'
  description: >-
    Everything a store's own server can do with a secret API key: its catalogue,
    orders, customers, marketing, finance and the rest of what the dashboard
    does. And the Customer API, which a buyer's own device asks with a token of
    theirs.
servers:
  - url: https://api.shoply.gg/v1
security:
  - apiKey: []
tags:
  - name: API key
  - name: Store
  - name: Domain
  - name: Payment methods
  - name: Analytics
  - name: Storefronts
  - name: Storefront code
  - name: Payment Routing
  - name: Custom payment methods
  - name: Products
  - name: Product pictures
  - name: Stock
  - name: Categories
  - name: Upsells
  - name: Subscriptions
  - name: Orders
  - name: Invoices
  - name: Reviews
  - name: Coupons
  - name: Coupon categories
  - name: Coupon pop-up
  - name: Sales
  - name: Blog
  - name: Search settings
  - name: Redirects
  - name: Sitemap
  - name: Cart Recovery
  - name: Email Marketing
  - name: Email Templates
  - name: Customers
  - name: Affiliates
  - name: Support Tickets
  - name: Blacklist
  - name: Fraud protection
  - name: Disputes
  - name: Finance
  - name: Tax
  - name: Expenses
  - name: Expense setup
  - name: API requests
  - name: Webhook endpoints
  - name: Webhook deliveries
  - name: Customer API
paths:
  /stores/{storeId}/disputes:
    get:
      tags:
        - Disputes
      summary: List disputes
      description: >-
        The disputes buyers opened on the store's payments, as their payment
        providers reported them: the ones that need an answer first, soonest
        deadline first, then the rest newest first. `status` is how it reads on
        the dashboard: `needs_response`, `under_review`, `won`, `lost`,
        `accepted` or `closed` (ended with no chargeback). `providerStatus` is
        the provider's own last word, `stage` is `inquiry`, `chargeback`,
        `claim` (a PayPal case), `pre_arbitration` or `arbitration`, and `dueAt`
        when the provider stops taking an answer, where it says. `answeredFrom`
        is where it is answered: `here` (through this API: Stripe's, Revolut's,
        Adyen's, and PayPal's where PayPal is connected with API keys),
        `provider` (in the provider's own dashboard, named in `answerPlace`) or
        `none`. `meta.figures` is the dashboard's four: how many need an answer
        and how many are due within three days, the money in the open ones in
        the store's currency, how many ended won and lost in the last 90 days,
        and the orders disputed beside those that took money in that time.


        Needs the `disputes.read` permission (Read Disputes).
      operationId: disputes.list
      parameters:
        - name: storeId
          in: path
          required: true
          description: >-
            The store's ID. A key reaches the store it was made in: `GET /key`
            answers which.
          schema:
            type: string
        - name: q
          in: query
          required: false
          description: >-
            Part of the buyer's email, the order's ID or the provider's ID for
            the dispute.
          schema:
            type: string
        - name: show
          in: query
          required: false
          description: 'Only these: `open` is the two that have not ended.'
          schema:
            type: string
            enum:
              - all
              - open
              - needs_response
              - under_review
              - won
              - lost
              - accepted
              - closed
            default: all
        - name: provider
          in: query
          required: false
          description: Only disputes with this payment method, by its ID.
          schema:
            type: string
            example: stripe
        - name: page
          in: query
          required: false
          description: Which page of the list. The first is 1.
          schema:
            type: integer
            default: 1
        - name: perPage
          in: query
          required: false
          description: How many a page holds.
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: It worked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    nullable: true
                  code:
                    nullable: true
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        orderId:
                          type: string
                        email:
                          type: string
                        provider:
                          type: string
                        providerName:
                          type: string
                        externalId:
                          type: string
                        reason:
                          type: string
                        reasonText:
                          type: string
                        stage:
                          type: string
                        providerStatus:
                          type: string
                        status:
                          type: string
                        amount:
                          type: integer
                        currency:
                          type: string
                        dueAt:
                          type: string
                        answer:
                          type: object
                          properties:
                            state:
                              type: string
                            at:
                              nullable: true
                            by:
                              type: string
                            note:
                              type: string
                        answeredFrom:
                          type: string
                        answerPlace:
                          type: string
                        accessTaken:
                          type: boolean
                        dateCreated:
                          type: string
                        dateClosed:
                          nullable: true
                  pages:
                    type: integer
                  total:
                    type: integer
                  meta:
                    type: object
                    properties:
                      figures:
                        type: object
                        properties:
                          needs:
                            type: integer
                          dueSoon:
                            type: integer
                          atRisk:
                            type: integer
                          won:
                            type: integer
                          lost:
                            type: integer
                          disputed:
                            type: integer
                          orders:
                            type: integer
                          currency:
                            type: string
                          days:
                            type: integer
                      providers:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            name:
                              type: string
              example:
                success: true
                message: null
                code: null
                data:
                  - id: ae36fc25-3cea-4d17-acaa-4bdb43d84a0e
                    orderId: 71ed606f-3119-4f9f-b7f7-ecd25740e15b
                    email: mila@example.com
                    provider: stripe
                    providerName: Stripe
                    externalId: dp_1QdZ8x2eZvKYlo2C
                    reason: fraudulent
                    reasonText: Says they did not make the payment
                    stage: chargeback
                    providerStatus: needs_response
                    status: needs_response
                    amount: 49
                    currency: USD
                    dueAt: '2026-10-27T16:20:19Z'
                    answer:
                      state: ''
                      at: null
                      by: ''
                      note: ''
                    answeredFrom: provider
                    answerPlace: your Stripe Dashboard
                    accessTaken: false
                    dateCreated: '2026-10-22T16:20:19Z'
                    dateClosed: null
                  - id: 0f8aa05a-52c5-4fc5-8180-36aec2177869
                    orderId: cc9beefe-9e86-42db-8ef0-354c1ab48b0a
                    email: jonas@example.com
                    provider: paypal
                    providerName: PayPal
                    externalId: PP-D-27803
                    reason: merchandise_or_service_not_received
                    reasonText: Says it never arrived
                    stage: claim
                    providerStatus: waiting_for_seller_response
                    status: needs_response
                    amount: 10
                    currency: USD
                    dueAt: '2026-10-31T16:20:19Z'
                    answer:
                      state: ''
                      at: null
                      by: ''
                      note: ''
                    answeredFrom: provider
                    answerPlace: PayPal's Resolution Center
                    accessTaken: false
                    dateCreated: '2026-10-22T16:20:19Z'
                    dateClosed: null
                pages: 1
                total: 2
                meta:
                  figures:
                    needs: 2
                    dueSoon: 0
                    atRisk: 59
                    won: 0
                    lost: 0
                    disputed: 2
                    orders: 6
                    currency: USD
                    days: 90
                  providers:
                    - id: paypal
                      name: PayPal
                    - id: stripe
                      name: Stripe
        '401':
          $ref: '#/components/responses/NoKey'
        '403':
          $ref: '#/components/responses/NotAllowed'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooMany'
      x-codeSamples:
        - lang: javascript
          label: Node.js
          source: |
            import Shoply from "@shoplygg/node";

            const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });

            const page = await shoply.disputes.list();

            // Or every row of every page:
            for await (const row of shoply.disputes.list()) {
              console.log(row);
            }
        - lang: php
          label: PHP
          source: |
            <?php

            require 'vendor/autoload.php';

            $shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);

            $page = $shoply->disputes->list();

            // Or every row of every page:
            foreach ($shoply->disputes->list() as $row) {
                print_r($row);
            }
        - lang: python
          label: Python
          source: |
            import shoply

            client = shoply.Client()  # reads SHOPLY_API_KEY

            page = client.disputes.list()

            # Or every row of every page:
            for row in client.disputes.list():
                print(row)
components:
  responses:
    NoKey:
      description: >-
        No API key was sent, or the one sent is not a live key:
        `api_key_required`, `invalid_api_key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotAllowed:
      description: >-
        The key is real and may not do this: `missing_scope` (with
        `requiredScope`), `ip_not_allowed`, `account_unavailable`, or
        `dashboard_only` for something only a person in the dashboard may do.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotFound:
      description: >-
        There is no such thing in this store: `not_found`. A store that is not
        the key's own is answered the same way.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    TooMany:
      description: >-
        The key has used up its budget for now: `rate_limited`. `Retry-After`
        says how many seconds to wait.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
  schemas:
    Refusal:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          description: What is wrong, in words for a person.
        code:
          type: string
          description: What is wrong, as a word that does not change.
        data:
          nullable: true
        errors:
          type: object
          description: >-
            For `validation_failed`: what is wrong with each field, by the
            field's name.
          additionalProperties:
            type: string
      required:
        - success
        - message
        - code
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        A secret API key, made under Developers in the dashboard:
        `Authorization: Bearer shoply_sk_...`

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.