curl --request DELETE \
--url https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId} \
--header 'Authorization: Bearer <token>' \
--header 'X-API-KEY: <api-key>'import requests
url = "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}"
headers = {
"X-API-KEY": "<api-key>",
"Authorization": "Bearer <token>"
}
response = requests.delete(url, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {'X-API-KEY': '<api-key>', Authorization: 'Bearer <token>'}
};
fetch('https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}")
.header("X-API-KEY", "<api-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["X-API-KEY"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"bankAccount": {
"accountSuffix": "7890",
"accountType": "savings",
"bankCode": "001",
"bankName": null,
"country": "CO",
"currency": "cop",
"entityType": "individual"
},
"createdAt": "2026-08-20T19:10:00.000Z",
"paymentMethodId": "1cad2281-bd3d-4219-8787-7dfea94c60b1",
"reason": null,
"status": "deleted",
"statusReason": null,
"type": "bank-account-co",
"updatedAt": "2026-08-20T19:12:11.000Z"
}Delete Payment Method
Soft-deletes a payment method and returns it. It can no longer be used for payments. A deleted bank account stays readable through retrieve, and through list with status=deleted, and carries the terminal status deleted. A deleted card is excluded and carries no status. Deleting a bank account that is already deleted returns it again.
API scope required: payment-methods.delete
curl --request DELETE \
--url https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId} \
--header 'Authorization: Bearer <token>' \
--header 'X-API-KEY: <api-key>'import requests
url = "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}"
headers = {
"X-API-KEY": "<api-key>",
"Authorization": "Bearer <token>"
}
response = requests.delete(url, headers=headers)
print(response.text)const options = {
method: 'DELETE',
headers: {'X-API-KEY': '<api-key>', Authorization: 'Bearer <token>'}
};
fetch('https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}")
.header("X-API-KEY", "<api-key>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://staging.crossmint.com/api/unstable/payment-methods/{paymentMethodId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["X-API-KEY"] = '<api-key>'
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"bankAccount": {
"accountSuffix": "7890",
"accountType": "savings",
"bankCode": "001",
"bankName": null,
"country": "CO",
"currency": "cop",
"entityType": "individual"
},
"createdAt": "2026-08-20T19:10:00.000Z",
"paymentMethodId": "1cad2281-bd3d-4219-8787-7dfea94c60b1",
"reason": null,
"status": "deleted",
"statusReason": null,
"type": "bank-account-co",
"updatedAt": "2026-08-20T19:12:11.000Z"
}Authorizations
API key required for authentication
The end user's JWT, sent as Authorization: Bearer <JWT> together with a client-side API key. Validated against the project's external JWT configuration.
Path Parameters
UUID of the payment method.
Query Parameters
Identifies the target user when authenticating with a server API key. Format: <type>:<value> (e.g., email:alice@example.com, userId:abc123, phoneNumber:+12125551234, twitter:alice). Required for API-key authentication; ignored when authenticating with a JWT (the JWT subject is used).
Response
The payment method in its terminal state. A deleted bank account stays readable through Retrieve Payment Method, and through List Payment Methods with status=deleted. A deleted card is no longer returned.
- MX CLABE
- US bank account
- CO bank account
- SEPA IBAN
- PH bank account
- CO Bre-B key
- Card
A saved payment method. Sensitive fields (full PAN, CVC, full account numbers, IBANs, Bre-B keys) are never included.
Bank account details. Present when type is a bank type. Full account numbers and IBANs are never included.
Show child attributes
Show child attributes
ISO 8601 timestamp when this payment method was created.
"2024-01-15T10:30:00.000Z"
Unique identifier (UUID v4). Crossmint assigns it on creation.
1Deprecated. Use statusReason, which carries the same value.
Whether this destination can receive a payout right now. 'pending' while the readiness checks run, 'active' when a provider has confirmed a rail, 'rejected' when it cannot receive funds, 'deleted' when it was deleted. 'pending' moves to 'active', 'rejected' or 'deleted'; 'active' moves to 'rejected' or 'deleted'; 'rejected' moves only to 'deleted'. Branch on this field, never on statusReason.
active, deleted, pending, rejected Why the status is 'rejected'. Null on every other status, and on a rejection with no established destination condition. Known values today: destination-not-found, destination-closed, destination-cannot-receive, no-rail-available. New codes can appear at any time, so branch on status and treat an unrecognised code as the status alone.
Payment method type. Selects which sub-object is present: card, bankAccount, or breB.
"bank-account-mx-clabe"ISO 8601 timestamp when this payment method was last modified.
"2024-01-15T10:30:00.000Z"
The client's own name for this payment method, when one was sent.
1Read-only. ISO 8601 timestamp of the most recent successful offramp payout funded by this bank account. Absent if none.
"2024-01-15T10:30:00.000Z"
Was this page helpful?

