openapi: 3.2.0
info:
title: Network Refunds API
version: 1.0.0
servers:
- url: https://api.cash.app/network/v1
description: Production
- url: https://sandbox.api.cash.app/network/v1
description: Sandbox
tags:
- name: refunds
paths:
/refunds:
get:
operationId: list-refunds
summary: List refunds
description: 'Returns a list of refunds matching the given query parameters.
**This endpoint is rate limited to 100 QPS.**
Scopes: `REFUNDS_READ`'
tags:
- refunds
parameters:
- name: cursor
in: query
description: A pagination cursor returned by a previous call to this endpoint. Provide this cursor to retrieve the next set of results for the original query.
required: false
schema:
type: string
- name: reference_id
in: query
description: Filters results to only include refunds with a `reference_id` matching the given value.
required: false
schema:
type: string
- name: customer_id
in: query
description: Filters results to only include refunds made to a customer that matches the the given ID.
required: false
schema:
type: string
- name: merchant_id
in: query
description: Filters results to only include refunds made by a merchant that matches the given ID.
required: false
schema:
type: string
- name: limit
in: query
description: Maximum number of refunds to return.
required: false
schema:
type: integer
default: 50
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_list-refunds_Response_200'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
post:
operationId: create-refund
summary: Create refund
description: "Creates a refund from a merchant to a customer.\n\n- To issue a refund, provide a `payment_id` in the request. \n\nThe grant must be associated with the `ON_FILE_PAYMENT` actions.\n\nTo generate a grant to pass to this field, use the Customer Request API.\n\n**This endpoint is not rate limited.**\n\nScopes: `REFUNDS_WRITE`"
tags:
- refunds
parameters:
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_create-refund_Response_200'
'400':
description: "Bad Request\n\nIf a `REFUND_DECLINE_*` error is returned, the refund will still be created, but with a `DECLINED` status. This refund will then appear in the response payload.\n\n \n**`REFUND_DECLINE_*` errors consume one-time use grants.**\n This means you must repeat the Customer Request flow to get a new grant if you want to try issuing\n the refund again. All other errors will not consume grants.\n"
content:
application/json:
schema:
$ref: '#/components/schemas/Create-refundRequestBadRequestError'
requestBody:
description: ''
content:
application/json:
schema:
type: object
properties:
idempotency_key:
$ref: '#/components/schemas/IdempotencyKey'
refund:
$ref: '#/components/schemas/RefundsPostRequestBodyContentApplicationJsonSchemaRefund'
description: Details about the refund to create.
required:
- idempotency_key
- refund
/refunds/{refund_id}:
get:
operationId: retrieve-refund
summary: Retrieve refund
description: 'Retrieves a refund by its ID.
**This endpoint is not rate limited.**
Scopes: `REFUNDS_READ`'
tags:
- refunds
parameters:
- name: refund_id
in: path
required: true
schema:
type: string
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_retrieve-refund_Response_200'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/refunds/{refund_id}/capture:
post:
operationId: capture-refund
summary: Capture refund
description: 'Finalizes a refund so that it can be allocated in the next nightly settlement batch.
**This endpoint is not rate limited.**
Scopes: `REFUNDS_WRITE`'
tags:
- refunds
parameters:
- name: refund_id
in: path
required: true
schema:
type: string
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_capture-refund_Response_200'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
type: object
properties:
idempotency_key:
$ref: '#/components/schemas/IdempotencyKey'
required:
- idempotency_key
/refunds/{refund_id}/void:
post:
operationId: void-refund
summary: Void refund
description: "Moves an authorized refund to the voided state and removes the \"pending refund\" screen from a customer's Cash App account.\n\n \nYou can only void an authorized refund.\n\n\n**This endpoint is not rate limited.**\n\nScopes: `REFUNDS_WRITE`"
tags:
- refunds
parameters:
- name: refund_id
in: path
required: true
schema:
type: string
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_void-refund_Response_200'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
/refunds/void-by-idempotency-key:
post:
operationId: void-refund-by-idempotency-key
summary: Void refund by idempotency key
description: "Moves an authorized refund to the voided state using the idempotency key specified while creating the refund.\n\n \nYou can only void an authorized refund. If a refund is captured, there is no way to reverse it.\n\n\nIn rare cases, an issue with an integration, network connectivity, or the Cash App Pay API may cause an API client to end up in a state where a refund is created in Cash App Pay, but the API client doesn't know the ID of the refund. This endpoint allows an API client to void a refund using _only_ the idempotency key to recover from these situations.\n\nIf you don't have the idempotency key or ID of the refund you want to void, you can use the [list refunds](Network-API.v1.yaml/paths/~1refunds/get) endpoint to try to search for the refund you're looking for.\n\n**This endpoint is not rate limited.**\n\nScopes: `REFUNDS_WRITE`"
tags:
- refunds
parameters:
- name: Accept
in: header
required: true
schema:
type: string
- name: X-Region
in: header
required: true
schema:
type: string
- name: X-Signature
in: header
required: true
schema:
type: string
- name: User-Agent
in: header
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Refunds_void-refund-by-idempotency-key_Response_200'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
requestBody:
content:
application/json:
schema:
type: object
properties:
idempotency_key:
$ref: '#/components/schemas/IdempotencyKey'
required:
- idempotency_key
components:
schemas:
RefundsPostRequestBodyContentApplicationJsonSchemaRefund:
type: object
properties:
amount:
type: integer
description: 'The amount of money to refund the customer, in the lowest denomination of currency for the refund.
Min value: `1`'
currency:
$ref: '#/components/schemas/Currency'
merchant_id:
type: string
description: 'ID of the merchant to make the refund from.
Min length: `1`
Max length: `128`'
payment_id:
type: string
description: 'For refunds, this is the ID of the payment to refund.
Min length: `1`
Max length: `128`'
capture:
type: boolean
default: true
description: 'Whether or not to automatically capture the refund once it''s created.
Default: `true`'
reference_id:
type: string
description: 'A user-defined identifier for this refund, typically used to associate the refund with a record in an external system.
Min length: `1`
Max length: `1024`'
metadata:
$ref: '#/components/schemas/Metadata'
required:
- amount
- currency
- merchant_id
description: Details about the refund to create.
title: RefundsPostRequestBodyContentApplicationJsonSchemaRefund
Refunds_retrieve-refund_Response_200:
type: object
properties:
refund:
$ref: '#/components/schemas/Refund'
required:
- refund
title: Refunds_retrieve-refund_Response_200
Refunds_void-refund_Response_200:
type: object
properties:
refund:
$ref: '#/components/schemas/Refund'
required:
- refund
title: Refunds_void-refund_Response_200
RefundStatus:
type: string
enum:
- AUTHORIZED
- CAPTURED
- VOIDED
- DECLINED
description: 'The step of the refund processing lifecycle that this refund is currently at.
- `AUTHORIZED`
- `CAPTURED`
- `VOIDED`
- `DECLINED`'
title: RefundStatus
Refunds_capture-refund_Response_200:
type: object
properties:
refund:
$ref: '#/components/schemas/Refund'
required:
- refund
title: Refunds_capture-refund_Response_200
Refunds_create-refund_Response_200:
type: object
properties:
refund:
$ref: '#/components/schemas/Refund'
required:
- refund
title: Refunds_create-refund_Response_200
ErrorResponse:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/Error'
description: 'A list of errors that occurred while processing the request.
Min number of items: `1`'
required:
- errors
title: ErrorResponse
Error:
type: object
properties:
category:
$ref: '#/components/schemas/ErrorCategory'
description: The high-level reason the error occurred.
code:
type: string
description: 'A unique identifier for the specific type of error that occurred. For more information, see [Error Code Reference](/cash-app-pay-partner-api/guides/technical-guides/api-fundamentals/errors/error-code-reference).
Min length: `1`'
detail:
type: string
description: 'Human-readable description of why the error occurred and how to resolve it.
Min length: `1`'
field:
type: string
description: 'The field in the request that caused the error, using array and object dot notation.
Min length: `1`'
required:
- category
- code
description: Represents an error encountered during a request to the API.
title: Error
Refunds_list-refunds_Response_200:
type: object
properties:
refunds:
type: array
items:
$ref: '#/components/schemas/Refund'
description: List of refunds matching the given query parameters.
cursor:
type: string
description: The pagination cursor to be used in a subsequent request. If empty, this is the final response.
required:
- refunds
title: Refunds_list-refunds_Response_200
Refund:
type: object
properties:
id:
type: string
description: 'Unique identifier for this refund issued by Cash App.
Min length: `1`
Max length: `128`'
amount:
type: integer
description: 'Amount of money to refund, in the lowest denomination of currency on the refund.
Min value: `1`'
currency:
$ref: '#/components/schemas/Currency'
customer_id:
type: string
description: 'ID of the customer that received this refund.
Min length: `1`
Max length: `128`'
merchant_id:
type: string
description: 'ID of the merchant that issued this refund.
Min length: `1`
Max length: `128`'
status:
$ref: '#/components/schemas/RefundStatus'
description: 'The step of the refund processing lifecycle that this refund is currently at.
- `AUTHORIZED`
- `CAPTURED`
- `VOIDED`
- `DECLINED`'
created_at:
type: string
format: date-time
description: When this refund was created, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC).
updated_at:
type: string
format: date-time
description: When this refund was last updated, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC).
grant_id:
type: string
description: 'This is currently unused and empty.
Min length: `1`
Max length: `256`'
payment_id:
type: string
description: 'This is currently unused and empty.
Min length: `1`
Max length: `128`'
reference_id:
type: string
description: 'A user-defined identifier for this refund, typically used to associate the refund with a record in an external system.
Min length: `1`
Max length: `1024`'
metadata:
$ref: '#/components/schemas/Metadata'
decline_errors:
type: array
items:
$ref: '#/components/schemas/Error'
description: 'If the refund was declined, contains a list of the reasons why it was declined.
Min number of items: `1`'
required:
- id
- amount
- currency
- customer_id
- merchant_id
- status
- created_at
- updated_at
title: Refund
Metadata:
type: object
additionalProperties:
type: string
description: 'Freeform key-value pairs of arbitrary data associated with this resource.
Keys and values must be passed as strings and not contain any personally identifiable information (PII).
Min keys: `0`
Max keys: `50`
> Note: Nested keys are not supported.'
title: Metadata
Currency:
type: string
enum:
- USD
description: 'Indicates the country associated with an entity. Values are from the [ISO-4217 Alpha-3](https://www.iso.org/iso-4217-currency-codes.html) specification.
Current values:
- `USD`: United States Dollar'
title: Currency
Refunds_void-refund-by-idempotency-key_Response_200:
type: object
properties:
refund:
$ref: '#/components/schemas/Refund'
required:
- refund
title: Refunds_void-refund-by-idempotency-key_Response_200
Create-refundRequestBadRequestError:
type: object
properties:
errors:
type: array
items:
$ref: '#/components/schemas/Error'
description: A list of errors that occurred while processing the request.
refund:
$ref: '#/components/schemas/Refund'
required:
- errors
title: Create-refundRequestBadRequestError
ErrorCategory:
type: string
enum:
- API_ERROR
- AUTHENTICATION_ERROR
- BRAND_ERROR
- DISPUTE_ERROR
- MERCHANT_ERROR
- INVALID_REQUEST_ERROR
- PAYMENT_PROCESSING_ERROR
- RATE_LIMIT_ERROR
- WEBHOOK_ERROR
- API_KEY_ERROR
- GRANT_ERROR
description: The high-level reason the error occurred.
title: ErrorCategory
IdempotencyKey:
type: string
description: A unique identifier which can be used by Cash App to de-duplicate retries of this request, making it idempotent. For more information, see [Idempotency](/cash-app-pay-partner-api/guides/technical-guides/api-fundamentals/idempotency).
title: IdempotencyKey