Moov Disputes API

Manage card payment disputes including evidence submission, acceptance, and lifecycle tracking for chargeback resolution.

OpenAPI Specification

moov-disputes-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Moov Accounts Disputes API
  description: The Moov API is a RESTful financial infrastructure platform that enables developers to integrate money movement capabilities into their applications. The API supports a full range of financial operations including account management, payment method onboarding, transfers, sweeps, refunds, dispute resolution, card issuing, and payment links. It provides capabilities for accepting payments, storing funds in digital wallets, sending money between accounts, and issuing cards for spend management. Authentication uses OAuth2 access tokens with permission scopes, and the API returns JSON responses using standard HTTP response codes.
  version: 2026.01.00
  contact:
    name: Moov Support
    url: https://docs.moov.io/
  termsOfService: https://moov.io/legal/platform-agreement/
servers:
- url: https://api.moov.io
  description: Production Server
security:
- bearerAuth: []
tags:
- name: Disputes
  description: Manage card payment disputes including evidence submission, acceptance, and lifecycle tracking for chargeback resolution.
paths:
  /accounts/{accountID}/disputes:
    get:
      operationId: listDisputes
      summary: List disputes
      description: Retrieve all card payment disputes for a Moov account, including their status, disputed amount, and reason codes.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/CountParam'
      - $ref: '#/components/parameters/SkipParam'
      responses:
        '200':
          description: Disputes returned successfully.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Dispute'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts/{accountID}/disputes/{disputeID}:
    get:
      operationId: getDispute
      summary: Retrieve a dispute
      description: Fetch the full details of a specific card dispute, including reason codes, amounts, deadlines for evidence submission, and current status.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/DisputeIDParam'
      responses:
        '200':
          description: Dispute details returned successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dispute'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /accounts/{accountID}/disputes/{disputeID}/accept:
    post:
      operationId: acceptDispute
      summary: Accept a dispute
      description: Accept a card dispute without contesting it. Use this when the dispute is valid and you wish to return the funds to the cardholder without going through the evidence submission process.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/DisputeIDParam'
      responses:
        '200':
          description: Dispute accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dispute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /accounts/{accountID}/disputes/{disputeID}/evidence-file:
    post:
      operationId: uploadDisputeEvidenceFile
      summary: Upload evidence file
      description: Upload a file as evidence for contesting a card dispute. Accepted file types include images and PDFs of receipts, correspondence, and other relevant documentation.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/DisputeIDParam'
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The evidence file to upload.
                evidenceType:
                  type: string
                  description: Classification of the evidence type.
      responses:
        '200':
          description: Evidence file uploaded successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisputeEvidence'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts/{accountID}/disputes/{disputeID}/evidence-text:
    post:
      operationId: uploadDisputeEvidenceText
      summary: Upload evidence text
      description: Submit a text-based statement as evidence when contesting a card dispute. Use this for written explanations that supplement file-based evidence.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/DisputeIDParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisputeEvidenceText'
      responses:
        '200':
          description: Evidence text uploaded successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisputeEvidence'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /accounts/{accountID}/disputes/{disputeID}/evidence/submit:
    post:
      operationId: submitDisputeEvidence
      summary: Submit dispute evidence
      description: Finalize and submit all uploaded evidence for a dispute to the card network for review. Once submitted, no additional evidence can be added.
      tags:
      - Disputes
      parameters:
      - $ref: '#/components/parameters/AccountIDParam'
      - $ref: '#/components/parameters/DisputeIDParam'
      responses:
        '200':
          description: Evidence submitted for dispute review.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dispute'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  parameters:
    CountParam:
      name: count
      in: query
      description: Maximum number of results to return per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
    AccountIDParam:
      name: accountID
      in: path
      required: true
      description: Unique identifier for the Moov account.
      schema:
        type: string
        format: uuid
    DisputeIDParam:
      name: disputeID
      in: path
      required: true
      description: Unique identifier for the dispute.
      schema:
        type: string
        format: uuid
    SkipParam:
      name: skip
      in: query
      description: Number of results to skip for pagination.
      schema:
        type: integer
        minimum: 0
        default: 0
  schemas:
    Error:
      type: object
      description: Standard error response returned by the Moov API.
      properties:
        error:
          type: string
          description: Human-readable description of the error.
        code:
          type: string
          description: Machine-readable error code.
    Amount:
      type: object
      description: A monetary amount with currency denomination.
      properties:
        currency:
          type: string
          description: ISO 4217 three-letter currency code.
          default: USD
          minLength: 3
          maxLength: 3
        value:
          type: integer
          description: Amount in the smallest currency unit (e.g., cents for USD).
          minimum: 0
    Dispute:
      type: object
      description: A card payment dispute (chargeback) initiated by a cardholder through their card issuer. Disputes require evidence submission or acceptance.
      properties:
        disputeID:
          type: string
          format: uuid
          description: Unique identifier for the dispute.
        transferID:
          type: string
          format: uuid
          description: The transfer associated with this dispute.
        phase:
          type: string
          description: Current phase of the dispute lifecycle.
          enum:
          - new
          - pre-arbitration
          - arbitration
          - won
          - lost
        status:
          type: string
          description: Current status of the dispute.
          enum:
          - new
          - responded
          - under-review
          - waiting-for-customer
          - closed
        amount:
          $ref: '#/components/schemas/Amount'
        reason:
          type: string
          description: Card network reason code for the dispute.
        networkReasonCode:
          type: string
          description: Specific reason code from the card network.
        respondBy:
          type: string
          format: date-time
          description: ISO 8601 deadline for submitting evidence to contest the dispute.
        createdOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the dispute was created.
        updatedOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the dispute was last updated.
    DisputeEvidenceText:
      type: object
      description: Request body for submitting text-based dispute evidence.
      required:
      - text
      - evidenceType
      properties:
        text:
          type: string
          description: The written statement or explanation for contesting the dispute.
        evidenceType:
          type: string
          description: Classification of the text evidence.
          enum:
          - customer-communication
          - refund-policy
          - service-documentation
          - other
    DisputeEvidence:
      type: object
      description: A piece of evidence submitted in response to a card dispute.
      properties:
        evidenceID:
          type: string
          format: uuid
          description: Unique identifier for the evidence item.
        disputeID:
          type: string
          format: uuid
          description: The dispute this evidence is associated with.
        evidenceType:
          type: string
          description: Classification of the evidence type.
          enum:
          - customer-communication
          - customer-signature
          - receipt
          - refund-policy
          - service-documentation
          - shipping-documentation
          - shipping-tracking
          - other
        text:
          type: string
          description: Text content for text-based evidence submissions.
        createdOn:
          type: string
          format: date-time
          description: ISO 8601 timestamp when the evidence was submitted.
  responses:
    Unauthorized:
      description: Authentication failed. Ensure a valid Bearer token is provided with the required scopes for this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: The request was malformed or contained invalid parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: OAuth2 bearer token obtained from the /oauth2/token endpoint. Include in the Authorization header as "Bearer {token}".
externalDocs:
  description: Moov API Documentation
  url: https://docs.moov.io/api/