JavaScript
import HenrySDK from '@henrylabs/sdk';
const client = new HenrySDK({
apiKey: process.env['HENRY_SDK_API_KEY'], // This is the default and can be omitted
});
const response = await client.card.tokenize({
cardNumber: '4242424242424242',
cvv: '123',
expiryMonth: '12',
expiryYear: '28',
});
console.log(response.data);curl --request POST \
--url https://api.henrylabs.ai/v1/card/tokenize \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"cardNumber": "4242424242424242",
"expiryMonth": "12",
"expiryYear": "28",
"cvv": "123"
}
'import requests
url = "https://api.henrylabs.ai/v1/card/tokenize"
payload = {
"cardNumber": "4242424242424242",
"expiryMonth": "12",
"expiryYear": "28",
"cvv": "123"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.henrylabs.ai/v1/card/tokenize",
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([
'cardNumber' => '4242424242424242',
'expiryMonth' => '12',
'expiryYear' => '28',
'cvv' => '123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.henrylabs.ai/v1/card/tokenize"
payload := strings.NewReader("{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.henrylabs.ai/v1/card/tokenize")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.henrylabs.ai/v1/card/tokenize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": "<string>",
"message": "<string>",
"data": {
"cardToken": "card_live_abc123xyz",
"cardBin": "424242",
"cardLast4": "4242",
"cardBrand": "visa"
}
}{
"success": true,
"status": "<string>",
"message": "<string>"
}{
"success": true,
"status": "<string>",
"message": "<string>"
}Card
Card Tokenize
Tokenize raw card details into a card token.
PCI scope warning: This endpoint accepts the raw PAN, CVV, and expiry directly on your server. Sending unencrypted cardholder data through your backend brings your systems into PCI DSS scope (typically SAQ D). To stay out of scope, collect card details with the Card Element instead: it captures and tokenizes the card in a secure iframe, so raw card data never touches your servers, and returns the same cardToken.
POST
/
card
/
tokenize
JavaScript
import HenrySDK from '@henrylabs/sdk';
const client = new HenrySDK({
apiKey: process.env['HENRY_SDK_API_KEY'], // This is the default and can be omitted
});
const response = await client.card.tokenize({
cardNumber: '4242424242424242',
cvv: '123',
expiryMonth: '12',
expiryYear: '28',
});
console.log(response.data);curl --request POST \
--url https://api.henrylabs.ai/v1/card/tokenize \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"cardNumber": "4242424242424242",
"expiryMonth": "12",
"expiryYear": "28",
"cvv": "123"
}
'import requests
url = "https://api.henrylabs.ai/v1/card/tokenize"
payload = {
"cardNumber": "4242424242424242",
"expiryMonth": "12",
"expiryYear": "28",
"cvv": "123"
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.henrylabs.ai/v1/card/tokenize",
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([
'cardNumber' => '4242424242424242',
'expiryMonth' => '12',
'expiryYear' => '28',
'cvv' => '123'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.henrylabs.ai/v1/card/tokenize"
payload := strings.NewReader("{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.henrylabs.ai/v1/card/tokenize")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.henrylabs.ai/v1/card/tokenize")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"cardNumber\": \"4242424242424242\",\n \"expiryMonth\": \"12\",\n \"expiryYear\": \"28\",\n \"cvv\": \"123\"\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"status": "<string>",
"message": "<string>",
"data": {
"cardToken": "card_live_abc123xyz",
"cardBin": "424242",
"cardLast4": "4242",
"cardBrand": "visa"
}
}{
"success": true,
"status": "<string>",
"message": "<string>"
}{
"success": true,
"status": "<string>",
"message": "<string>"
}Authorizations
Body
application/json
Full card number (PAN) with no spaces or dashes
Pattern:
^\d{13,19}$Example:
"4242424242424242"
Two-digit expiry month, zero-padded
Pattern:
^(0[1-9]|1[0-2])$Example:
"12"
Two-digit expiry year
Pattern:
^\d{2}$Example:
"28"
Card verification value (3 digits for Visa/MC, 4 for Amex)
Pattern:
^\d{3,4}$Example:
"123"
Was this page helpful?
⌘I