openapi: 3.2.0 info: title: Customer Request Requests API version: 1.0.0 servers: - url: https://api.cash.app/customer-request/v1 description: Production - url: https://sandbox.api.cash.app/customer-request/v1 description: Sandbox tags: - name: requests paths: /requests: post: operationId: create-request summary: Create request description: Creates a request to perform an action on a customer's account. All available actions can be found in the `action` schema. tags: - requests parameters: - name: Accept in: header required: true schema: type: string - name: User-Agent in: header required: true schema: type: string responses: '201': description: Created content: application/json: schema: $ref: '#/components/schemas/Requests_create-request_Response_201' requestBody: description: '' content: application/json: schema: type: object properties: idempotency_key: $ref: '#/components/schemas/IdempotencyKey' request: $ref: '#/components/schemas/RequestsPostRequestBodyContentApplicationJsonSchemaRequest' description: Details about the request to create. required: - idempotency_key - request /requests/{request_id}: get: operationId: retrieve-request summary: Retrieve request description: Retrieves a customer request by its ID. tags: - requests parameters: - name: request_id in: path required: true schema: type: string - name: Accept 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/Requests_retrieve-request_Response_200' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' patch: operationId: update-request summary: Update request description: 'Updates a customer request. The request must have its `status` in a `PENDING` state to successfully update. To clear a field, set it to `null`. Fields that are not provided in the request will not be changed. If updating an array field, the entire contents of the array must be passed.' tags: - requests parameters: - name: request_id in: path required: true schema: type: string - name: Accept 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/Requests_update-request_Response_200' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '404': description: Not Found content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' requestBody: content: application/json: schema: type: object properties: request: $ref: '#/components/schemas/RequestsRequestIdPatchRequestBodyContentApplicationJsonSchemaRequest' description: Details about the request to update required: - request components: schemas: RequestsRequestIdPatchRequestBodyContentApplicationJsonSchemaRequest: type: object properties: actions: type: array items: $ref: '#/components/schemas/Action' description: 'A list of the different actions a client intends to take on the customer if the request is approved. No duplicate action types allowed. Min number of items: `1` Max number of items: `5`' reference_id: type: - string - 'null' description: 'A user-defined identifier for this request, typically used to associate the resource with a record in an external system. Min length: `1` Max length: `1024`' metadata: $ref: '#/components/schemas/Metadata' description: Details about the request to update title: RequestsRequestIdPatchRequestBodyContentApplicationJsonSchemaRequest RequestOrigin: type: object properties: type: $ref: '#/components/schemas/RequestOriginType' description: 'The method used to create the customer request. - `DIRECT` - the client or SDKs created this customer request by calling the "CreateCustomerRequest" endpoint - `REQUEST_INITIATOR` - a customer interacted with a request initiator and caused Cash App to create a customer request.' id: type: string description: 'If present, is the ID of the initiator used to create this request. Min length: `1` Max length: `128`' required: - type description: Metadata describing how the customer request was created. title: RequestOrigin RequestsPostRequestBodyContentApplicationJsonSchemaRequestChannel: type: string enum: - IN_PERSON - ONLINE - IN_APP description: 'How the customer is expected to interact with the request. - `IN_PERSON`: The customer presents or scans a QR code at a physical location to approve the request. - `ONLINE`: The customer scans a QR code or is redirected to Cash App from a browser context. - `IN_APP`: The customer scans a QR code or is redirected to Cash App from a native mobile application context.' title: RequestsPostRequestBodyContentApplicationJsonSchemaRequestChannel RequestRequesterProfile: type: object properties: name: type: string description: 'Name of the brand to be shown in Cash App next to payments. Min length: `1` Max length: `1024`' logo_url: type: string format: uri description: 'URL to the image of the entity (brand or client) that is requesting permission to perform the actions on the customer request. Formats: - `.jpg` - `.jpeg` - `.png` Min length: `8` Max length: `8000`' required: - name - logo_url description: Details about the brand or client that are requesting permission to perform the actions on the customer request. title: RequestRequesterProfile Action: oneOf: - $ref: '#/components/schemas/OneTimePaymentAction' - $ref: '#/components/schemas/OnFilePaymentAction' - $ref: '#/components/schemas/OnFileDepositAction' - $ref: '#/components/schemas/OnFilePayoutAction' - $ref: '#/components/schemas/LinkAccountAction' - $ref: '#/components/schemas/CheckingBalanceAction' description: Represents what the client intends to do to a customer if given authorization. title: Action Channel: type: string enum: - IN_PERSON - ONLINE - IN_APP description: 'How the customer is expected to interact with the request. - `IN_PERSON`: The customer presents or scans a QR code at a physical location to approve the request. - `ONLINE`: The customer scans a QR code or is redirected to Cash App from a browser context. - `IN_APP`: The customer scans a QR code or is redirected to Cash App from a native mobile application context.' title: Channel RequestAuthFlowTriggers: type: object properties: qr_code_image_url: type: string format: uri description: 'Link to a QR code customers can scan with Cash App to authorize the given action, encoded as a PNG file. Min length: `8` Max length: `1024`' qr_code_svg_url: type: string format: uri description: 'Link to a QR code customers can scan with Cash App to authorize the given action, encoded as an SVG file. Min length: `8` Max length: `1024`' mobile_url: type: string format: uri description: 'If on an Android or iOS device, the URL to redirect customers to in order to authorize the given action. Min length: `8` Max length: `1024`' refreshes_at: type: string format: date-time description: When the QR code image URL will be rotated. Generally, it will rotate every ~20 seconds and become invalid after 30 seconds. desktop_url: type: string format: uri description: 'If on a desktop browser, the URL to redirect customers to in order to authorize the given action. Min length: `8` Max length: `1024`' required: - qr_code_image_url - qr_code_svg_url - mobile_url - refreshes_at description: 'While the request is `PENDING`, contains different methods that can be used to start the authorization flow in the Cash App mobile application. Its contents refresh each time the `refreshes_at` timestamp passes. When the data refreshes, you should update any buttons or QR codes referring to it immediately. After a request has been scanned (and is no longer in the `PENDING` status), this field will no longer be returned.' title: RequestAuthFlowTriggers RequestOriginType: type: string enum: - DIRECT - REQUEST_INITIATOR description: 'The method used to create the customer request. - `DIRECT` - the client or SDKs created this customer request by calling the "CreateCustomerRequest" endpoint - `REQUEST_INITIATOR` - a customer interacted with a request initiator and caused Cash App to create a customer request.' title: RequestOriginType RequestsPostRequestBodyContentApplicationJsonSchemaRequest: type: object properties: actions: type: array items: $ref: '#/components/schemas/Action' description: 'A list of the different actions a client intends to take on the customer if the request is approved. No duplicate action types allowed. Min number of items: `1` Max number of items: `5`' channel: $ref: '#/components/schemas/RequestsPostRequestBodyContentApplicationJsonSchemaRequestChannel' description: 'How the customer is expected to interact with the request. - `IN_PERSON`: The customer presents or scans a QR code at a physical location to approve the request. - `ONLINE`: The customer scans a QR code or is redirected to Cash App from a browser context. - `IN_APP`: The customer scans a QR code or is redirected to Cash App from a native mobile application context.' redirect_url: type: string format: uri description: If this request is responded to via mobile redirect, this field specifies the URL that Cash App will open for a customer in the mobile device's default browser after the request is approved or declined. reference_id: type: string description: 'A user-defined identifier for this request, typically used to associate the resource with a record in an external system. Min length: `1` Max length: `1024`' metadata: $ref: '#/components/schemas/Metadata' customer_metadata: $ref: '#/components/schemas/CustomerMetadata' required: - actions - channel description: Details about the request to create. title: RequestsPostRequestBodyContentApplicationJsonSchemaRequest OnFilePayoutActionType: type: string enum: - ON_FILE_PAYOUT description: The type of the action (`ON_FILE_PAYOUT`). title: OnFilePayoutActionType 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. See the Error Code Reference for more information. 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 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 GrantType: type: string enum: - ONE_TIME - EXTENDED description: Describes whether this grant can be only be used once (`ONE_TIME`) or repeatedly (`EXTENDED`). title: GrantType 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 OneTimePaymentActionType: type: string enum: - ONE_TIME_PAYMENT description: The type of the action (`ONE_TIME_PAYMENT`). title: OneTimePaymentActionType IdempotencyKey: type: string description: A unique identifier which can be used by Cash App to de-duplicate retries of this request, making it idempotent. Learn more about [idempotency](../docs/api/technical-documentation/api-fundamentals/idempotency) in the API. title: IdempotencyKey OnFileDepositActionType: type: string enum: - ON_FILE_DEPOSIT description: The type of the action (`ON_FILE_DEPOSIT`). title: OnFileDepositActionType Requests_create-request_Response_201: type: object properties: request: $ref: '#/components/schemas/Request' required: - request title: Requests_create-request_Response_201 CheckingBalanceActionType: type: string enum: - CHECKING_BALANCE description: The type of the action (`CHECKING_BALANCE`). title: CheckingBalanceActionType CustomerMetadata: type: object properties: reference_id: type: string description: The `reference_id` of the customer approving this request. When a customer approves this request, that customer will be associated with this `reference_id`. description: Metadata to associate with the customer that approves this request. title: CustomerMetadata Requests_retrieve-request_Response_200: type: object properties: request: $ref: '#/components/schemas/Request' required: - request title: Requests_retrieve-request_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 OneTimePaymentAction: type: object properties: amount: type: integer description: 'Amount to charge the customer, in the lowest unit of the associated currency. Min value: `1`' currency: $ref: '#/components/schemas/Currency' scope_id: type: string description: 'ID of the client, brand, or merchant that will charge the customer. If a client ID is passed, the grant from this action can be used to create a payment for any merchant owned by the client. If a brand ID is passed, the grant from this action can be used to create a payment for any merchant that has a matching brand ID. If a merchant ID is passed, the grant from this action can be used to create a payment for the merchant with a matching ID. Min length: `1` Max length: `128`' type: $ref: '#/components/schemas/OneTimePaymentActionType' description: The type of the action (`ONE_TIME_PAYMENT`). required: - scope_id - type description: 'Describes an intent for a client to charge a customer a given amount. Note the following restrictions when using this action: - If no amount is provided to the action, the payment charged may be **any** amount. - If `amount` is provided, `currency` must be provided too (and vice versa).' title: OneTimePaymentAction LinkAccountActionType: type: string enum: - LINK_ACCOUNT description: The type of the action (`LINK_ACCOUNT`). title: LinkAccountActionType Request: type: object properties: id: type: string description: 'A unique identifier for the request issued by Cash App. Min length: `1` Max length: `128`' status: $ref: '#/components/schemas/RequestStatus' description: 'Indicates if the state is approved, declined, or pending. Approved requests have grants, while pending and declined grants do not. Current values: - `PENDING`: The request has been created, but not responded to. - `PROCESSING`: The Cash App customer is actively responding to the request on their mobile device, and will require time to fill out information before the request is approved / declined. - `APPROVED`: The request was approved by the customer and grants have been created for the provided actions. - `DECLINED`: The request was denied by the customer. No grants were created.' actions: type: array items: $ref: '#/components/schemas/Action' description: 'Represents what the client intends to do to a customer if given authorization. No duplicate action types allowed. Min number of items: `1` Max number of items: `5`' auth_flow_triggers: $ref: '#/components/schemas/RequestAuthFlowTriggers' description: 'While the request is `PENDING`, contains different methods that can be used to start the authorization flow in the Cash App mobile application. Its contents refresh each time the `refreshes_at` timestamp passes. When the data refreshes, you should update any buttons or QR codes referring to it immediately. After a request has been scanned (and is no longer in the `PENDING` status), this field will no longer be returned.' redirect_url: type: string format: uri description: If this request is responded to via mobile redirect, this field specifies the URL that Cash App will open for a customer in the mobile device's default browser after the request is approved or declined. created_at: type: string format: date-time description: When this customer request was created, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC). updated_at: type: string format: date-time description: When the customer request was last updated, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC). expires_at: type: string format: date-time description: When this customer request will be automatically declined by Cash App, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC). origin: $ref: '#/components/schemas/RequestOrigin' description: Metadata describing how the customer request was created. channel: $ref: '#/components/schemas/Channel' grants: type: array items: $ref: '#/components/schemas/Grant' description: 'If present, contains grants that can be used to perform actions specified in the request using the Network API. Each grant corresponds directly to an action on the request. Min number of items: `1` Max number of items: `5`' reference_id: type: string description: 'A user-defined identifier for this request, typically used to associate the resource with a record in an external system. Min length: `1` Max length: `1024`' requester_profile: $ref: '#/components/schemas/RequestRequesterProfile' description: Details about the brand or client that are requesting permission to perform the actions on the customer request. customer_profile: $ref: '#/components/schemas/RequestCustomerProfile' description: If the customer request was approved, contains the identity of the Cash App customer that approved it. metadata: $ref: '#/components/schemas/Metadata' customer_metadata: $ref: '#/components/schemas/CustomerMetadata' required: - id - status - actions - redirect_url - created_at - updated_at - expires_at - origin - channel description: Describes a request from a client to perform a given action on a customer's account. title: Request OnFilePaymentActionType: type: string enum: - ON_FILE_PAYMENT default: ON_FILE_PAYMENT description: The type of the action (`ON_FILE_PAYMENT`). title: OnFilePaymentActionType RequestCustomerProfile: type: object properties: id: type: string description: 'Unique identifier for this customer issued by Cash App. Min length: `1` Max length: `128`' cashtag: type: string description: 'Public identifier for the customer on Cash App. [Learn more](https://cash.app/help/us/en-us/3123-cashtags). Min length: `1` Max length: `1024`' required: - id - cashtag description: If the customer request was approved, contains the identity of the Cash App customer that approved it. title: RequestCustomerProfile 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 CheckingBalanceAction: type: object properties: type: $ref: '#/components/schemas/CheckingBalanceActionType' description: The type of the action (`CHECKING_BALANCE`). scope_id: type: string description: 'ID of the client or brand requesting access to read the customer''s balances. If a client ID is passed, the grant from this action can be used to read balances on behalf of the client. If a brand ID is passed, the grant from this action can be used to read balances on behalf of any merchant that has a matching brand ID. Merchant IDs may *not* be passed. Min length: `1` Max length: `128`' required: - type - scope_id description: 'Describes an intent for a client to read a customer''s Cash App checking balance until the customer revokes the grant. **Beta:** This action is in beta.' title: CheckingBalanceAction OnFilePayoutAction: type: object properties: type: $ref: '#/components/schemas/OnFilePayoutActionType' description: The type of the action (`ON_FILE_PAYOUT`). scope_id: type: string description: 'ID of the client or brand that indicates the set of merchants that will payout to customers. If a client ID is passed, the grant from this action can be used to create a payout for any merchant owned by the client. If a brand ID is passed, the grant from this action can be used to create a payout for any merchant that has a matching brand ID. Merchant IDs may *not* be passed. Min length: `1` Max length: `128`' account_reference_id: type: string description: Identifier of the account or customer associated to the on file action. required: - type - scope_id description: Describes an intent for a client to payout funds from the Cash App account balances in perpetuity until the Cash App account revokes the grant. title: OnFilePayoutAction Requests_update-request_Response_200: type: object properties: request: $ref: '#/components/schemas/Request' required: - request title: Requests_update-request_Response_200 RequestStatus: type: string enum: - APPROVED - DECLINED - PENDING - PROCESSING default: PENDING description: 'Indicates if the state is approved, declined, or pending. Approved requests have grants, while pending and declined grants do not. Current values: - `PENDING`: The request has been created, but not responded to. - `PROCESSING`: The Cash App customer is actively responding to the request on their mobile device, and will require time to fill out information before the request is approved / declined. - `APPROVED`: The request was approved by the customer and grants have been created for the provided actions. - `DECLINED`: The request was denied by the customer. No grants were created.' title: RequestStatus GrantStatus: type: string enum: - ACTIVE - CONSUMED - REVOKED - EXPIRED description: 'Describes whether or not this grant can be used to perform the action associated with it. If `ACTIVE`, it can be used to perform the action. If `EXPIRED`, it may no longer be used to perform the action due to the current time being past the "expires_at" time. If `CONSUMED`, it was already redeemed to perform the action and cannot be used again. If `REVOKED`, the customer or merchant explicitly unauthorized the grant, preventing it from being used to perform the action.' title: GrantStatus Grant: type: object properties: id: type: string description: 'Unique identifier for this grant issued by Cash App. Min length: `1` Max length: `256`' customer_id: type: string description: 'ID of the customer that approved this grant. Min length: `1` Max length: `128`' request_id: type: string description: 'A unique identifier issued by Cash App for the customer request that resulted in the creation of this grant. Min length: `1` Max length: `128`' action: $ref: '#/components/schemas/Action' status: $ref: '#/components/schemas/GrantStatus' description: 'Describes whether or not this grant can be used to perform the action associated with it. If `ACTIVE`, it can be used to perform the action. If `EXPIRED`, it may no longer be used to perform the action due to the current time being past the "expires_at" time. If `CONSUMED`, it was already redeemed to perform the action and cannot be used again. If `REVOKED`, the customer or merchant explicitly unauthorized the grant, preventing it from being used to perform the action.' type: $ref: '#/components/schemas/GrantType' description: Describes whether this grant can be only be used once (`ONE_TIME`) or repeatedly (`EXTENDED`). channel: $ref: '#/components/schemas/Channel' created_at: type: string format: date-time description: When this grant was created, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC). updated_at: type: string format: date-time description: When this grant was last updated, in [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC). expires_at: type: string format: date-time description: 'If present, indicates when the grant''s status will become `EXPIRED`, preventing a client from using it to create payments or refunds. The timestamp is in the [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339) format (UTC).' required: - id - customer_id - request_id - action - status - type - channel - created_at - updated_at description: Describes a grant that can be used to perform actions specified in a customer request using the Network API. title: Grant OnFileDepositAction: type: object properties: type: $ref: '#/components/schemas/OnFileDepositActionType' description: The type of the action (`ON_FILE_DEPOSIT`). scope_id: type: string description: 'ID of the client or brand that indicates the set of merchants that will deposit to customers. If a client ID is passed, the grant from this action can be used to create a deposit for any merchant owned by the client. If a brand ID is passed, the grant from this action can be used to create a deposit for any merchant that has a matching brand ID. Min length: `1` Max length: `128`' account_reference_id: type: string description: Identifier of the account or customer associated to the on file action. required: - type - scope_id - account_reference_id description: Describes an intent for a client to deposit funds into the Cash App account balances in perpetuity until the Cash App account revokes the grant. title: OnFileDepositAction OnFilePaymentAction: type: object properties: scope_id: type: string description: 'ID of the client or brand that will charge customers. If a client ID is passed, the grant from this action can be used to create a payment for any merchant owned by the client. If a brand ID is passed, the grant from this action can be used to create a payment for any merchant that has a matching brand ID. Merchant IDs may *not* be passed. Min length: `1` Max length: `128`' type: $ref: '#/components/schemas/OnFilePaymentActionType' description: The type of the action (`ON_FILE_PAYMENT`). account_reference_id: type: string description: Identifier of the account or customer associated to the on file action. required: - scope_id - type description: Describes anĀ intent for a client to store a customer's account, allowing a client to create payments or issue refunds for it on a recurring basis. title: OnFilePaymentAction LinkAccountAction: type: object properties: type: $ref: '#/components/schemas/LinkAccountActionType' description: The type of the action (`LINK_ACCOUNT`). required: - type description: Describes anĀ intent for a client to manage a customer's merchant profiles in Cash App. title: LinkAccountAction