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

# Create a dispute for a transaction

> File a dispute for a settled card transaction that belongs to your business. The transaction id is the id from GET /cards/transactions or the transactionId from a card.transaction webhook. The transaction must be completed, have a posted time, and have a non-zero amount. The disputed amount is the full transaction amount. When disputeType and disputeReasonCode are both sent, they must agree.



## OpenAPI

````yaml /openapi/openapi.json post /api/v1/cards/transactions/{transactionId}/dispute
openapi: 3.1.0
info:
  title: EasyOnRamp Business API
  description: >-
    The EasyOnRamp Business API lets your platform onboard users, issue cards,
    fund wallets, and receive event notifications. All requests use a Bearer JWT
    scoped to your business account.
  version: 0.0.1
servers:
  - url: https://b2b-api-sandbox.easyonramp.com
    description: Sandbox
  - url: https://b2b-api.easyonramp.com
    description: Production
security: []
tags:
  - name: Auth
    description: Rotate or revoke your API access token
  - name: Business
    description: Your business profile, KYB, and EasyCard application
  - name: Treasury
    description: Fund your business wallet with fiat deposits
  - name: Trading
    description: Convert fiat and crypto via instant buy and sell orders
  - name: Sub-accounts
    description: Optional groups for organizing end users
  - name: Users
    description: Create and manage end users and their identity verification
  - name: Cards
    description: Enroll users, issue, fund, and manage EasyCard payment cards
  - name: Webhooks
    description: >-
      Receive real-time notifications at your server. Subscribe with exact event
      names or wildcards: deposit.created, deposit.proof_submitted,
      deposit.approved, deposit.declined, deposit.expired, trade.created,
      trade.approved, trade.declined, card.transaction.pending,
      card.transaction.completed, card.transaction.declined,
      card.transaction.reversed, card.dispute.created, card.dispute.updated,
      card.status.changed, card.fund.completed, card.withdraw.completed,
      business.application.pending, business.application.needs_verification,
      business.application.approved, business.application.rejected,
      card.enrollment.pending, card.enrollment.needs_verification,
      card.enrollment.approved, card.enrollment.rejected, user.created,
      user.updated, user.deleted, user.kyc.pending, user.kyc.approved,
      user.kyc.declined, business.kyb.pending, business.kyb.approved,
      business.kyb.declined, *, deposit.*, trade.*, card.transaction.*,
      card.dispute.*, card.status.*, card.fund.*, card.withdraw.*,
      card.enrollment.*, user.*, user.kyc.*, business.kyb.*,
      business.application.*. See the Webhooks guide for payload shapes and
      signature verification.
  - name: Reports
    description: Summaries and trends for users, cards, spend, and treasury
paths:
  /api/v1/cards/transactions/{transactionId}/dispute:
    post:
      tags:
        - Cards
      summary: Create a dispute for a transaction
      description: >-
        File a dispute for a settled card transaction that belongs to your
        business. The transaction id is the id from GET /cards/transactions or
        the transactionId from a card.transaction webhook. The transaction must
        be completed, have a posted time, and have a non-zero amount. The
        disputed amount is the full transaction amount. When disputeType and
        disputeReasonCode are both sent, they must agree.
      operationId: CardController_createTransactionDispute
      parameters:
        - name: transactionId
          required: true
          in: path
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCardDisputeDto'
      responses:
        '200':
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardDisputeResponseDto'
      security:
        - bearer: []
components:
  schemas:
    CreateCardDisputeDto:
      type: object
      properties:
        disputeType:
          type: string
          enum:
            - fraud
            - creditNotProcessed
            - serviceNotReceived
            - merchandiseIssue
            - other
          description: >-
            Broad dispute category. When omitted, the card issuer derives it
            from disputeReasonCode.
          example: fraud
        disputeReasonCode:
          type: string
          enum:
            - emvLiabilityShiftCounterfeitFraud
            - emvLiabilityShiftNonCounterfeitFraud
            - otherFraudCardPresent
            - otherFraudCardAbsent
            - visaFraudMonitoringProgram
            - cardRecoveryBulletin
            - declinedAuthorization
            - noAuthorization
            - incorrectTransactionCode
            - incorrectCurrency
            - incorrectAccountNumber
            - incorrectAmount
            - duplicateProcessing
            - invalidData
            - merchandiseServicesNotReceived
            - cancelledRecurringTransaction
            - notAsDescribedOrDefective
            - counterfeitMerchandise
            - misrepresentation
            - creditNotProcessed
            - cancelledMerchandiseServices
            - originalCreditTransactionNotAccepted
            - nonReceiptOfCashAtm
          description: >-
            Reason code for the dispute. When both this and disputeType are
            sent, they must agree.
          example: otherFraudCardAbsent
        textEvidence:
          type: string
          description: Written evidence for the dispute
          maxLength: 65535
    CardDisputeResponseDto:
      type: object
      properties:
        id:
          type: string
          example: 880e8400-e29b-41d4-a716-446655440099
        transactionId:
          type: string
          description: Transaction id from the request path
          example: 770e8400-e29b-41d4-a716-446655440011
        status:
          type: string
          enum:
            - pending
            - inReview
            - accepted
            - rejected
            - canceled
            - resolvedByMerchant
        reviewedBy:
          type: string
          enum:
            - rain
            - network
        disputeType:
          type: string
          enum:
            - fraud
            - creditNotProcessed
            - serviceNotReceived
            - merchandiseIssue
            - other
        disputeReasonCode:
          type: string
          enum:
            - emvLiabilityShiftCounterfeitFraud
            - emvLiabilityShiftNonCounterfeitFraud
            - otherFraudCardPresent
            - otherFraudCardAbsent
            - visaFraudMonitoringProgram
            - cardRecoveryBulletin
            - declinedAuthorization
            - noAuthorization
            - incorrectTransactionCode
            - incorrectCurrency
            - incorrectAccountNumber
            - incorrectAmount
            - duplicateProcessing
            - invalidData
            - merchandiseServicesNotReceived
            - cancelledRecurringTransaction
            - notAsDescribedOrDefective
            - counterfeitMerchandise
            - misrepresentation
            - creditNotProcessed
            - cancelledMerchandiseServices
            - originalCreditTransactionNotAccepted
            - nonReceiptOfCashAtm
        textEvidence:
          type: string
        disputeAmount:
          type: number
          description: Disputed amount in cents
        currency:
          type: string
          description: Lowercase ISO-4217 currency code
        createdAt:
          type: string
        updatedAt:
          type: string
        resolvedAt:
          type: string
        filedWithNetworkAt:
          type: string
        hasFileEvidence:
          type: boolean
        attachmentCount:
          type: number
          minimum: 0
      required:
        - id
        - transactionId
        - status
        - disputeAmount
        - createdAt
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: JWT
      type: http
      description: Bearer JWT issued to your business account during onboarding

````

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