Save a payment method token
curl --request POST \
--url https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-API-VERSION: <x-api-version>' \
--data '
{
"customerId": "<string>"
}
'import requests
url = "https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault"
payload = { "customerId": "<string>" }
headers = {
"X-API-VERSION": "<x-api-version>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-VERSION': '<x-api-version>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({customerId: '<string>'})
};
fetch('https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault', 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://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'customerId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-API-VERSION: <x-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault"
payload := strings.NewReader("{\n \"customerId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-VERSION", "<x-api-version>")
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault")
.header("X-API-VERSION", "<x-api-version>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-VERSION"] = '<x-api-version>'
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2021-03-01T12:00:00.123456",
"token": "_xlXlmBcTnuFxc2N3HAI73wxNjE1NTU5ODY5",
"tokenType": "MULTI_USE",
"analyticsId": "vuXhpZouWxaZpRZ-x_brZmtT",
"paymentMethodType": "PAYMENT_CARD",
"paymentMethodData": {
"last4Digits": "1111",
"expirationMonth": "12",
"expirationYear": "2030",
"cardholderName": "John Biggins",
"network": "Visa",
"networkTransactionId": "020210628190752",
"accountFundingType": "DEBIT"
},
"customerId": "customer-123",
"description": "My first card",
"deleted": false,
"default": true
}{
"error": {
"errorId": "FailedVerification",
"description": "Payment method could not be verified",
"diagnosticsId": "1234567898"
}
}{
"error": {
"errorId": "RequestValidationError",
"description": "We were unable to validate your request, please check your payload against /docs/api",
"diagnosticsId": "1234567898",
"validationErrors": [
{
"model": "VaultPaymentInstrumentAPIRequest",
"errors": [
{
"path": "$.customerId",
"description": "Ensure this value has at least 1 characters"
}
]
}
]
}
}Save a payment method token
Save a SINGLE_USE payment method token so it can be used
again later.
If you try to vault an already vaulted token, you will get the existing vaulted token back.
POST
/
payment-instruments
/
{paymentMethodToken}
/
vault
Save a payment method token
curl --request POST \
--url https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--header 'X-API-VERSION: <x-api-version>' \
--data '
{
"customerId": "<string>"
}
'import requests
url = "https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault"
payload = { "customerId": "<string>" }
headers = {
"X-API-VERSION": "<x-api-version>",
"X-API-KEY": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-API-VERSION': '<x-api-version>',
'X-API-KEY': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({customerId: '<string>'})
};
fetch('https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault', 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://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'customerId' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-KEY: <api-key>",
"X-API-VERSION: <x-api-version>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault"
payload := strings.NewReader("{\n \"customerId\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-VERSION", "<x-api-version>")
req.Header.Add("X-API-KEY", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault")
.header("X-API-VERSION", "<x-api-version>")
.header("X-API-KEY", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customerId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sandbox.primer.io/payment-instruments/{paymentMethodToken}/vault")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-VERSION"] = '<x-api-version>'
request["X-API-KEY"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"customerId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2021-03-01T12:00:00.123456",
"token": "_xlXlmBcTnuFxc2N3HAI73wxNjE1NTU5ODY5",
"tokenType": "MULTI_USE",
"analyticsId": "vuXhpZouWxaZpRZ-x_brZmtT",
"paymentMethodType": "PAYMENT_CARD",
"paymentMethodData": {
"last4Digits": "1111",
"expirationMonth": "12",
"expirationYear": "2030",
"cardholderName": "John Biggins",
"network": "Visa",
"networkTransactionId": "020210628190752",
"accountFundingType": "DEBIT"
},
"customerId": "customer-123",
"description": "My first card",
"deleted": false,
"default": true
}{
"error": {
"errorId": "FailedVerification",
"description": "Payment method could not be verified",
"diagnosticsId": "1234567898"
}
}{
"error": {
"errorId": "RequestValidationError",
"description": "We were unable to validate your request, please check your payload against /docs/api",
"diagnosticsId": "1234567898",
"validationErrors": [
{
"model": "VaultPaymentInstrumentAPIRequest",
"errors": [
{
"path": "$.customerId",
"description": "Ensure this value has at least 1 characters"
}
]
}
]
}
}Authorizations
Headers
Specifies the version of the API to use. This must be set to 2.4.
Example:
"2.4"
Path Parameters
Payment method token
Body
application/json
The ID representing the customer
Minimum string length:
1Response
Successful Response
Creation date & time of the object (UTC)
The vaulted payment method token.
MULTI_USEa vaulted token that can be re-used with subsequent payments
Unique analytics identifier corresponding to a payment method
Payment method type associated with a token.
Available options:
PAYMENT_CARD, GOOGLE_PAY, APPLE_PAY, PAYPAL, BANK_ACCOUNT, KLARNA, APAYA, OPENNODE, HOOLAH, ATOME, COINBASE, NETS, TWOC2P, CLEARPAY, SHOPEEPAY, TRIPLE_A, AFTERPAY, NOL_PAY, FINTECTURE_IMMEDIATE_TRANSFER, FINTECTURE_SMART_TRANSFER, ALMA, CETELEM_BNPP_FINANCING, PAY_NL_IDEAL, PAY_NL_BANCONTACT, PAY_NL_DIRECT_DEBIT, PAY_NL_SOFORT_BANKING, PAY_NL_PAYPAL, PAY_NL_PAYCONIQ, PAY_NL_GIROPAY, PAY_NL_P24, PAY_NL_EPS, PAY_NL_KAARTDIRECT, PAY_NL_RIVERTY, ADYEN_SOFORT, ADYEN_TWINT, ADYEN_GIROPAY, ADYEN_TRUSTLY, ADYEN_ALIPAY, ADYEN_MOBILEPAY, ADYEN_MULTIBANCO, ADYEN_VIPPS, ADYEN_DOTPAY, ADYEN_IDEAL, ADYEN_BLIK, ADYEN_PAYTRAIL, ADYEN_INTERAC, ADYEN_PAYSHOP, ADYEN_MBWAY, ADYEN_AFFIRM, ADYEN_KLARNA, ADYEN_BANCONTACT_PAYCONIQ, ADYEN_EPS, ADYEN_BANCONTACT_CARD, ADYEN_SWISH, ADYEN_CASHAPP, ADYEN_ALIPAY_PLUS, ADYEN_KAKAOPAY, ADYEN_PAYPAY, MOLLIE_IDEAL, MOLLIE_BANCONTACT, MOLLIE_P24, MOLLIE_GIROPAY, MOLLIE_EPS, MOLLIE_GIFTCARD, MOLLIE_SOFORT, NETAXEPT_PAYTRAIL, BUCKAROO_IDEAL, BUCKAROO_BANCONTACT, BUCKAROO_SOFORT, BUCKAROO_GIROPAY, BUCKAROO_EPS, RAPYD_GCASH, RAPYD_PROMPTPAY, RAPYD_GRABPAY, RAPYD_POLI, RAPYD_FAST, XFERS_PAYNOW, STRIPE_ACH, STRIPE_GIROPAY, STRIPE_IDEAL, STRIPE_ALIPAY, STRIPE_KLARNA, STRIPE_WECHAT, STRIPE_KAKAOPAY, STRIPE_GRABPAY, STRIPE_CASHAPP, STRIPE_SEPA, STRIPE_PIX, ALIPAY_CN, CHAI_KAKAOPAY, CHAI_NAVER, CHAI_TOSS, XENDIT_DANA, XENDIT_OVO, XENDIT_SHOPEEPAY, XENDIT_RETAIL_OUTLETS, OMISE_PROMPTPAY, OMISE_TRUEMONEY, DLOCAL_PIX, DLOCAL_PIX_AUTOMATICO, EBANX_PAGOFACIL, PACYPAY_WECHAT, PACYPAY_ALIPAY, PACYPAY_ALIPAY_PLUS, WORLDPAY_IDEAL, IPAY88_CARD, INGENICO_PAYPAL, VOLT_PIX, VOLT_BANK_TRANSFER, BRAINTREE_VENMO, THUNES_SPIRIT_OF_CADEAU, THUNES_ILLICADO, THUNES_CARTE_CADEAU_CONFORAMA, THUNES_CHEQUE_FIDELITE_CONFORAMA, SIPS_CPAY, SIPS_CPAYCONFORAMA, MONEXT_CETELEM, MONEXT_CPAY, DLOCAL_BANK_TRANSFER, DLOCAL_OXXO, DLOCAL_NUPAY, DLOCAL_WECHAT, DLOCAL_BOLETO, DLOCAL_MERCADO_PAGO, DLOCAL_PICPAY, DLOCAL_TAMARA, DLOCAL_MOBICRED, DLOCAL_SPEI, DLOCAL_KUESKI, CHECKOUT_ALMA, CHECKOUT_IDEAL, CHECKOUT_TWINT, CHECKOUT_WECHAT, CHECKOUT_SWISH, CHECKOUT_KNET, CHECKOUT_OCTOPUS, CHECKOUT_EPS, CHECKOUT_P24, CHECKOUT_KAKAOPAY, CHECKOUT_BANCONTACT, CHECKOUT_BENEFIT, CHECKOUT_MULTIBANCO, CHECKOUT_PAYNOW, CHECKOUT_VIPPS, CHECKOUT_OMANNET, CHECKOUT_MBWAY, CHECKOUT_MOBILEPAY, CHECKOUT_PINLESS_DEBIT, CHECKOUT_ACH, CHECKOUT_SEPA, CHECKOUT_VENMO, CHECKOUT_STC_PAY, CHECKOUT_QPAY, CHECKOUT_BIZUM, CHECKOUT_PAYPAL, CHECKOUT_KLARNA, CHECKOUT_ALIPAY_CN, CHECKOUT_ALIPAY_HK, CHECKOUT_TAMARA, CHECKOUT_TNG, CHECKOUT_TRUEMONEY, CHECKOUT_DANA, CHECKOUT_GCASH, CHECKOUT_SEQURA, CHECKOUT_TABBY, AIRWALLEX_CASHAPP, AIRWALLEX_WERO, AIRWALLEX_IDEAL, AIRWALLEX_WECHAT, AIRWALLEX_BANK_TRANSFER, AIRWALLEX_BLIK, AIRWALLEX_DANA, AIRWALLEX_GRABPAY, AIRWALLEX_GCASH, AIRWALLEX_KAKAOPAY, AIRWALLEX_KLARNA, AIRWALLEX_OCTOPUS, AIRWALLEX_PAYSAFECARD, AIRWALLEX_PAYSAFECASH, AIRWALLEX_P24, AIRWALLEX_PROMPTPAY, AIRWALLEX_SEPA, AIRWALLEX_SKRILL, AIRWALLEX_TABBY, AIRWALLEX_TWINT, NUVEI_ALIPAY, NUVEI_BANCOMAT, NUVEI_BANK_TRANSFER, NUVEI_BIZUM, NUVEI_BLIK, NUVEI_CASHAPP, NUVEI_DANA, NUVEI_EPS, NUVEI_GCASH, NUVEI_GRABPAY, NUVEI_IDEAL, NUVEI_KAKAOPAY, NUVEI_KLARNA, NUVEI_MBWAY, NUVEI_MERCADO_PAGO, NUVEI_MOBILEPAY, NUVEI_MULTIBANCO, NUVEI_MYBANK, NUVEI_NPP, NUVEI_OXXO, NUVEI_P24, NUVEI_PAYNOW, NUVEI_PAYSAFECARD, NUVEI_PICPAY, NUVEI_PROMPTPAY, NUVEI_RIVERTY, NUVEI_SHOPEEPAY, NUVEI_SKRILL, NUVEI_SWISH, NUVEI_TRUSTLY, NUVEI_TWINT, NUVEI_VENMO, NUVEI_WECHAT, SCALAPAY, HITPAY, HITPAY_SHOPEEPAY, HITPAY_WECHAT, HITPAY_GRABPAY, HITPAY_ATOME, PAYSAFE_PAYSAFECARD, PAYSAFE_PAYSAFECASH, PAYSAFE_NETELLER, PAYSAFE_SKRILL, PAYSAFE_VENMO, PAYSAFE_BANK_TRANSFER, FLOA_PAY, ONEPOINT6_BANCONTACT, ONEPOINT6_IDEAL, ONEPOINT6_ANCV, ONEPOINT6_FLOA_PAY, ONEPOINT6_AMEX, ONEPOINT6_WERO, ONEPOINT6_PAYPAL, ONEPOINT6_WECHAT, ONEPOINT6_MULTIBANCO, ONEPOINT6_BANCOMAT, ONEPOINT6_KLARNA, ONEPOINT6_SWISH, ONEPOINT6_SDD, ONEPOINT6_SCT, ONEPOINT6_JCB, ONEPOINT6_CUP, NOMUPAY_GCASH, NOMUPAY_GRABPAY, NOMUPAY_BLIK, NOMUPAY_P24, NOMUPAY_SWISH, NOMUPAY_SHOPEEPAY, NOMUPAY_TRUSTLY, NOMUPAY_TWINT, NOMUPAY_WECHAT, NOMUPAY_WERO, NOMUPAY_ALIPAY, NOMUPAY_ALIPAY_PLUS, PAYABL_BANCONTACT, PAYABL_BLIK, PAYABL_BOLETO, PAYABL_IDEAL, PAYABL_MULTIBANCO, PAYABL_OXXO, PAYABL_P24, PAYABL_PAYSAFECARD, PAYABL_PIX, PAYABL_SEPA, PAYABL_SPEI, PAYABL_TRUSTLY, PAYABL_TWINT, PAYABL_WERO, REVOLUT_PAY_BY_BANK, REVOLUT_PAY, PRIMER_TEST_APPLE_PAY, PRIMER_TEST_GOOGLE_PAY, PRIMER_TEST_SOFORT, PRIMER_TEST_KLARNA, PRIMER_TEST_PAYPAL Payment method data
- PaymentCardTokenAPISchema
- PayPalBillingAgreementAPISchema
- GoCardlessMandateAPISchema
- KlarnaCustomerTokenAPISchema
- ApayaCustomerTokenAPISchema
Show child attributes
Show child attributes
The ID representing the customer
Whether or not this payment method is the default
Date & time when this object was revoked. (UTC)
Whether or not this object has been revoked.
A friendly description given by the user