Lithic Chargeback API

The Chargeback API from Lithic — 4 operation(s) for chargeback.

OpenAPI Specification

lithic-chargeback-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  contact:
    email: support@lithic.com
  description: 'The Lithic Developer API is designed to provide a predictable programmatic interface for accessing your Lithic account through an API and transaction webhooks.

    Note that your API key is a secret and should be treated as such. Don''t share it with anyone, including us. We will never ask you for it.

    '
  termsOfService: https://lithic.com/legal/terms
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.txt
  title: Lithic Developer 3DS Chargeback API
  version: 1.0.0
servers:
- description: Sandbox environment that provides key functionality mirroring production
  url: https://sandbox.lithic.com
security:
- ApiKeyAuth: []
tags:
- name: Chargeback
paths:
  /v1/disputes:
    get:
      description: List chargeback requests.
      operationId: getDisputes
      parameters:
      - description: Filter by status.
        in: query
        name: status
        required: false
        schema:
          enum:
          - ARBITRATION
          - CASE_CLOSED
          - CASE_WON
          - NEW
          - PENDING_CUSTOMER
          - PREARBITRATION
          - REPRESENTMENT
          - SUBMITTED
          type: string
      - description: Transaction tokens to filter by.
        explode: false
        in: query
        name: transaction_tokens
        required: false
        schema:
          items:
            format: uuid
            type: string
          maxItems: 50
          type: array
        style: form
      - $ref: '#/components/parameters/beginTime'
      - $ref: '#/components/parameters/endTime'
      - $ref: '#/components/parameters/endingBefore'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/startingAfter'
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: '#/components/schemas/dispute-v1'
                    type: array
                  has_more:
                    description: More data exists.
                    type: boolean
                required:
                - data
                - has_more
                type: object
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: List chargeback requests
      tags:
      - Chargeback
    post:
      description: Request a chargeback.
      operationId: postDisputes
      requestBody:
        content:
          application/json:
            examples:
              initiateDispute:
                summary: Request chargeback
                value:
                  amount: 10000
                  customer_filed_date: '2021-06-28T22:53:15Z'
                  reason: FRAUD_CARD_PRESENT
                  transaction_token: 12345624-aa69-4cbc-a946-30d90181b621
            schema:
              properties:
                amount:
                  description: Amount for chargeback
                  type: integer
                customer_filed_date:
                  description: Date the customer filed the chargeback request
                  format: date-time
                  type: string
                customer_note:
                  description: Customer description
                  maximum: 5000
                  type: string
                reason:
                  description: Reason for chargeback
                  enum:
                  - ATM_CASH_MISDISPENSE
                  - CANCELLED
                  - DUPLICATED
                  - FRAUD_CARD_NOT_PRESENT
                  - FRAUD_CARD_PRESENT
                  - FRAUD_OTHER
                  - GOODS_SERVICES_NOT_AS_DESCRIBED
                  - GOODS_SERVICES_NOT_RECEIVED
                  - INCORRECT_AMOUNT
                  - MISSING_AUTH
                  - OTHER
                  - PROCESSING_ERROR
                  - RECURRING_TRANSACTION_NOT_CANCELLED
                  - REFUND_NOT_PROCESSED
                  type: string
                transaction_token:
                  description: Transaction for chargeback
                  format: uuid
                  type: string
              required:
              - amount
              - reason
              - transaction_token
              type: object
        required: true
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-v1'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Request chargeback
      tags:
      - Chargeback
  /v1/disputes/{dispute_token}:
    delete:
      description: Withdraw chargeback request.
      operationId: deleteDisputeByToken
      parameters:
      - $ref: '#/components/parameters/disputeToken'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-v1'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Withdraw chargeback request
      tags:
      - Chargeback
    get:
      description: Get chargeback request.
      operationId: getDisputeByToken
      parameters:
      - $ref: '#/components/parameters/disputeToken'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-v1'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Get chargeback request
      tags:
      - Chargeback
    patch:
      description: Update chargeback request. Can only be modified if status is `NEW`.
      operationId: updateDisputeByToken
      parameters:
      - $ref: '#/components/parameters/disputeToken'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                amount:
                  description: Amount for chargeback
                  type: integer
                customer_filed_date:
                  description: Date the customer filed the chargeback request
                  format: date-time
                  type: string
                customer_note:
                  description: Customer description
                  type: string
                reason:
                  description: Reason for chargeback
                  enum:
                  - ATM_CASH_MISDISPENSE
                  - CANCELLED
                  - DUPLICATED
                  - FRAUD_CARD_NOT_PRESENT
                  - FRAUD_CARD_PRESENT
                  - FRAUD_OTHER
                  - GOODS_SERVICES_NOT_AS_DESCRIBED
                  - GOODS_SERVICES_NOT_RECEIVED
                  - INCORRECT_AMOUNT
                  - MISSING_AUTH
                  - OTHER
                  - PROCESSING_ERROR
                  - RECURRING_TRANSACTION_NOT_CANCELLED
                  - REFUND_NOT_PROCESSED
                  type: string
              type: object
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-v1'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Update chargeback request
      tags:
      - Chargeback
  /v1/disputes/{dispute_token}/evidences:
    get:
      description: List evidence for a chargeback request.
      operationId: getDisputeEvidences
      parameters:
      - $ref: '#/components/parameters/beginTime'
      - $ref: '#/components/parameters/disputeToken'
      - $ref: '#/components/parameters/endTime'
      - $ref: '#/components/parameters/endingBefore'
      - $ref: '#/components/parameters/pageSize'
      - $ref: '#/components/parameters/startingAfter'
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    items:
                      $ref: '#/components/schemas/dispute-evidence'
                    type: array
                  has_more:
                    description: More data exists.
                    type: boolean
                required:
                - data
                - has_more
                type: object
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: List evidence
      tags:
      - Chargeback
    post:
      description: 'Use this endpoint to upload evidence for a chargeback request. It will return a URL to upload your documents to. The URL will expire in 30 minutes.


        Uploaded documents must either be a `jpg`, `png` or `pdf` file, and each must be less than 5 GiB.

        '
      operationId: postEvidenceDocument
      parameters:
      - $ref: '#/components/parameters/disputeToken'
      requestBody:
        content:
          application/json:
            schema:
              properties:
                filename:
                  description: Filename of the evidence.
                  type: string
              type: object
        required: false
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-evidence'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Upload evidence
      tags:
      - Chargeback
  /v1/disputes/{dispute_token}/evidences/{evidence_token}:
    delete:
      description: Soft delete evidence for a chargeback request. Evidence will not be reviewed or submitted by Lithic after it is withdrawn.
      operationId: deleteDisputeEvidenceByToken
      parameters:
      - $ref: '#/components/parameters/disputeEvidenceToken'
      - $ref: '#/components/parameters/disputeToken'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-evidence'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Delete evidence
      tags:
      - Chargeback
    get:
      description: Get evidence for a chargeback request.
      operationId: getDisputeEvidenceByToken
      parameters:
      - $ref: '#/components/parameters/disputeEvidenceToken'
      - $ref: '#/components/parameters/disputeToken'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/dispute-evidence'
          description: OK
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      summary: Get evidence
      tags:
      - Chargeback
components:
  parameters:
    startingAfter:
      description: A cursor representing an item's token after which a page of results should begin. Used to retrieve the next page of results after this item.
      in: query
      name: starting_after
      required: false
      schema:
        type: string
    endingBefore:
      description: A cursor representing an item's token before which a page of results should end. Used to retrieve the previous page of results before this item.
      in: query
      name: ending_before
      required: false
      schema:
        type: string
    disputeEvidenceToken:
      examples:
        disputeEvidenceExample:
          summary: A sample evidence token
          value: 73ca53a1-ae89-491a-97d9-f64788f8b2ab
      in: path
      name: evidence_token
      required: true
      schema:
        format: uuid
        type: string
    endTime:
      description: Date string in RFC 3339 format. Only entries created before the specified time will be included. UTC time zone.
      in: query
      name: end
      schema:
        format: date-time
        type: string
    pageSize:
      description: Page size (for pagination).
      in: query
      name: page_size
      schema:
        default: 50
        maximum: 100
        minimum: 1
        type: integer
    disputeToken:
      examples:
        disputeTokenExample:
          summary: A sample chargeback request token
          value: 73ca53a1-ae89-491a-97d9-f64788f8b2ab
      in: path
      name: dispute_token
      required: true
      schema:
        format: uuid
        type: string
    beginTime:
      description: Date string in RFC 3339 format. Only entries created after the specified time will be included. UTC time zone.
      in: query
      name: begin
      schema:
        format: date-time
        type: string
  schemas:
    error:
      type: object
      properties:
        debugging_request_id:
          type: string
          format: uuid
          description: Identifier to help debug an error.
        message:
          type: string
          description: Explanation of error response.
      required:
      - debugging_request_id
      - message
    dispute-evidence:
      title: Dispute Evidence
      description: Dispute evidence.
      properties:
        created:
          description: Timestamp of when dispute evidence was created.
          format: date-time
          type: string
        dispute_token:
          description: Dispute token evidence is attached to.
          format: uuid
          type: string
        download_url:
          description: URL to download evidence. Only shown when `upload_status` is `UPLOADED`.
          type: string
        filename:
          description: File name of evidence. Recommended to give the dispute evidence a human-readable identifier.
          type: string
        token:
          description: Globally unique identifier.
          format: uuid
          type: string
        upload_status:
          description: 'Upload status types:

            * `DELETED` - Evidence was deleted.

            * `ERROR` - Evidence upload failed.

            * `PENDING` - Evidence is pending upload.

            * `REJECTED` - Evidence was rejected.

            * `UPLOADED` - Evidence was uploaded.

            '
          enum:
          - DELETED
          - ERROR
          - PENDING
          - REJECTED
          - UPLOADED
          type: string
        upload_url:
          description: URL to upload evidence. Only shown when `upload_status` is `PENDING`.
          type: string
      required:
      - created
      - dispute_token
      - token
      - upload_status
      type: object
    dispute-v1:
      title: Dispute
      description: Dispute.
      properties:
        amount:
          description: Amount under dispute. May be different from the original transaction amount.
          type: integer
        arbitration_date:
          description: Date dispute entered arbitration.
          format: date-time
          type:
          - string
          - 'null'
        created:
          description: Timestamp of when first Dispute was reported.
          format: date-time
          type: string
        customer_filed_date:
          description: Date that the dispute was filed by the customer making the dispute.
          format: date-time
          type:
          - string
          - 'null'
        customer_note:
          description: End customer description of the reason for the dispute.
          maxLength: 10000
          type:
          - string
          - 'null'
        network_claim_ids:
          description: Unique identifiers for the dispute from the network.
          oneOf:
          - type: array
            items:
              type: string
          - type: 'null'
        network_filed_date:
          description: Date that the dispute was submitted to the network.
          format: date-time
          type:
          - string
          - 'null'
        network_reason_code:
          description: Network reason code used to file the dispute.
          type:
          - string
          - 'null'
        prearbitration_date:
          description: Date dispute entered pre-arbitration.
          format: date-time
          type:
          - string
          - 'null'
        primary_claim_id:
          description: Unique identifier for the dispute from the network. If there are multiple, this will be the first claim id set by the network
          type:
          - string
          - 'null'
        reason:
          description: 'Dispute reason:

            * `ATM_CASH_MISDISPENSE`: ATM cash misdispense.

            * `CANCELLED`: Transaction was cancelled by the customer.

            * `DUPLICATED`: The transaction was a duplicate.

            * `FRAUD_CARD_NOT_PRESENT`: Fraudulent transaction, card not present.

            * `FRAUD_CARD_PRESENT`: Fraudulent transaction, card present.

            * `FRAUD_OTHER`: Fraudulent transaction, other types such as questionable merchant activity.

            * `GOODS_SERVICES_NOT_AS_DESCRIBED`: The goods or services were not as described.

            * `GOODS_SERVICES_NOT_RECEIVED`: The goods or services were not received.

            * `INCORRECT_AMOUNT`: The transaction amount was incorrect.

            * `MISSING_AUTH`: The transaction was missing authorization.

            * `OTHER`: Other reason.

            * `PROCESSING_ERROR`: Processing error.

            * `REFUND_NOT_PROCESSED`: The refund was not processed.

            * `RECURRING_TRANSACTION_NOT_CANCELLED`: The recurring transaction was not cancelled.

            '
          enum:
          - ATM_CASH_MISDISPENSE
          - CANCELLED
          - DUPLICATED
          - FRAUD_CARD_NOT_PRESENT
          - FRAUD_CARD_PRESENT
          - FRAUD_OTHER
          - GOODS_SERVICES_NOT_AS_DESCRIBED
          - GOODS_SERVICES_NOT_RECEIVED
          - INCORRECT_AMOUNT
          - MISSING_AUTH
          - OTHER
          - PROCESSING_ERROR
          - RECURRING_TRANSACTION_NOT_CANCELLED
          - REFUND_NOT_PROCESSED
          type: string
        representment_date:
          description: Date the representment was received.
          format: date-time
          type:
          - string
          - 'null'
        resolution_date:
          description: Date that the dispute was resolved.
          format: date-time
          type:
          - string
          - 'null'
        resolution_note:
          description: Note by Dispute team on the case resolution.
          maxLength: 10000
          type:
          - string
          - 'null'
        resolution_reason:
          description: 'Reason for the dispute resolution:

            * `CASE_LOST`: This case was lost at final arbitration.

            * `NETWORK_REJECTED`: Network rejected.

            * `NO_DISPUTE_RIGHTS_3DS`: No dispute rights, 3DS.

            * `NO_DISPUTE_RIGHTS_BELOW_THRESHOLD`: No dispute rights, below threshold.

            * `NO_DISPUTE_RIGHTS_CONTACTLESS`: No dispute rights, contactless.

            * `NO_DISPUTE_RIGHTS_HYBRID`: No dispute rights, hybrid.

            * `NO_DISPUTE_RIGHTS_MAX_CHARGEBACKS`: No dispute rights, max chargebacks.

            * `NO_DISPUTE_RIGHTS_OTHER`: No dispute rights, other.

            * `PAST_FILING_DATE`: Past filing date.

            * `PREARBITRATION_REJECTED`: Prearbitration rejected.

            * `PROCESSOR_REJECTED_OTHER`: Processor rejected, other.

            * `REFUNDED`: Refunded.

            * `REFUNDED_AFTER_CHARGEBACK`: Refunded after chargeback.

            * `WITHDRAWN`: Withdrawn.

            * `WON_ARBITRATION`: Won arbitration.

            * `WON_FIRST_CHARGEBACK`: Won first chargeback.

            * `WON_PREARBITRATION`: Won prearbitration.

            '
          enum:
          - CASE_LOST
          - NETWORK_REJECTED
          - NO_DISPUTE_RIGHTS_3DS
          - NO_DISPUTE_RIGHTS_BELOW_THRESHOLD
          - NO_DISPUTE_RIGHTS_CONTACTLESS
          - NO_DISPUTE_RIGHTS_HYBRID
          - NO_DISPUTE_RIGHTS_MAX_CHARGEBACKS
          - NO_DISPUTE_RIGHTS_OTHER
          - PAST_FILING_DATE
          - PREARBITRATION_REJECTED
          - PROCESSOR_REJECTED_OTHER
          - REFUNDED
          - REFUNDED_AFTER_CHARGEBACK
          - WITHDRAWN
          - WON_ARBITRATION
          - WON_FIRST_CHARGEBACK
          - WON_PREARBITRATION
          - null
          type:
          - string
          - 'null'
        status:
          description: 'Status types:

            * `NEW` - New dispute case is opened.

            * `PENDING_CUSTOMER` - Lithic is waiting for customer to provide more information.

            * `SUBMITTED` - Dispute is submitted to the card network.

            * `REPRESENTMENT` - Case has entered second presentment.

            * `PREARBITRATION` - Case has entered prearbitration.

            * `ARBITRATION` - Case has entered arbitration.

            * `CASE_WON` - Case was won and credit will be issued.

            * `CASE_CLOSED` - Case was lost or withdrawn.

            '
          enum:
          - ARBITRATION
          - CASE_CLOSED
          - CASE_WON
          - NEW
          - PENDING_CUSTOMER
          - PREARBITRATION
          - REPRESENTMENT
          - SUBMITTED
          type: string
        token:
          description: Globally unique identifier.
          format: uuid
          type: string
        transaction_token:
          description: The transaction that is being disputed. A transaction can only be disputed once but may have multiple dispute cases.
          format: uuid
          type: string
      required:
      - amount
      - arbitration_date
      - created
      - customer_filed_date
      - customer_note
      - network_claim_ids
      - network_filed_date
      - network_reason_code
      - prearbitration_date
      - primary_claim_id
      - reason
      - representment_date
      - resolution_date
      - resolution_note
      - resolution_reason
      - status
      - token
      - transaction_token
      type: object
  responses:
    TooManyRequests:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: 'Client has exceeded the number of allowed requests in a given time period.


        |   |   |

        |---|---|

        | Rate limited, too many requests per second | User has exceeded their per second rate limit |

        | Rate limited, reached daily limit | User has exceeded their daily rate limit |

        | Rate limited, too many keys tried | One IP has queried too many different API keys |

        '
    Unauthorized:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: '|   |   |

        |---|---|

        | User has not been authenticated | Invalid or missing API key |

        | API key is not active | The API key used is no longer active |

        | Could not find API key | The API key provided is not associated with any user |

        | Please provide API key in Authorization header | The Authorization header is not in the request |

        | Please provide API key in the form Authorization: [api-key] | The Authorization header is not formatted properly |

        | Insufficient privileges. Issuing API key required | Write access requires an Issuing API key. Reach out at [lithic.com/contact](https://lithic.com/contact) |

        | Insufficient privileges to create virtual cards. | Creating virtual cards requires an additional privilege | Reach out at [lithic.com/contact](https://lithic.com/contact) |

        '
    BadRequest:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: A parameter in the query given in the request does not match the valid queries for the endpoint.
    NotFound:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: The specified resource was not found.
    UnprocessableEntity:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/error'
      description: Unprocessable entity.
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: Authorization
      type: apiKey