Create checkout session
curl --request POST \
--url https://api.reclack.com/v1/checkouts \
--header 'Api-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"price_id": "price_7Fh2PqX9",
"amount": "29.00",
"networks": [
"base",
"ethereum"
],
"customer": {},
"expires_in": 3600,
"metadata": {}
}
'import requests
url = "https://api.reclack.com/v1/checkouts"
payload = {
"price_id": "price_7Fh2PqX9",
"amount": "29.00",
"networks": ["base", "ethereum"],
"customer": {},
"expires_in": 3600,
"metadata": {}
}
headers = {
"Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
price_id: 'price_7Fh2PqX9',
amount: '29.00',
networks: ['base', 'ethereum'],
customer: {},
expires_in: 3600,
metadata: {}
})
};
fetch('https://api.reclack.com/v1/checkouts', 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.reclack.com/v1/checkouts",
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([
'price_id' => 'price_7Fh2PqX9',
'amount' => '29.00',
'networks' => [
'base',
'ethereum'
],
'customer' => [
],
'expires_in' => 3600,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Api-Key: <api-key>",
"Content-Type: application/json"
],
]);
$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.reclack.com/v1/checkouts"
payload := strings.NewReader("{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("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.reclack.com/v1/checkouts")
.header("Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reclack.com/v1/checkouts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "chk_7Fh2PqX9Lm",
"status": "open",
"amount": "29.00",
"currency": "USDC",
"network": "base",
"chain_id": 8453,
"networks": [
"base",
"ethereum",
"polygon"
],
"url": "https://pay.reclack.com/chk_7Fh2PqX9Lm",
"expires_at": "2026-10-18T22:07:41Z",
"completed_at": "2026-10-18T22:07:41Z",
"created_at": "2026-10-18T22:07:41Z",
"updated_at": "2026-10-18T22:07:41Z"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}Checkouts
Create Checkout Session
Create a hosted checkout session.
POST
/
v1
/
checkouts
Create checkout session
curl --request POST \
--url https://api.reclack.com/v1/checkouts \
--header 'Api-Key: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"price_id": "price_7Fh2PqX9",
"amount": "29.00",
"networks": [
"base",
"ethereum"
],
"customer": {},
"expires_in": 3600,
"metadata": {}
}
'import requests
url = "https://api.reclack.com/v1/checkouts"
payload = {
"price_id": "price_7Fh2PqX9",
"amount": "29.00",
"networks": ["base", "ethereum"],
"customer": {},
"expires_in": 3600,
"metadata": {}
}
headers = {
"Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
price_id: 'price_7Fh2PqX9',
amount: '29.00',
networks: ['base', 'ethereum'],
customer: {},
expires_in: 3600,
metadata: {}
})
};
fetch('https://api.reclack.com/v1/checkouts', 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.reclack.com/v1/checkouts",
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([
'price_id' => 'price_7Fh2PqX9',
'amount' => '29.00',
'networks' => [
'base',
'ethereum'
],
'customer' => [
],
'expires_in' => 3600,
'metadata' => [
]
]),
CURLOPT_HTTPHEADER => [
"Api-Key: <api-key>",
"Content-Type: application/json"
],
]);
$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.reclack.com/v1/checkouts"
payload := strings.NewReader("{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("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.reclack.com/v1/checkouts")
.header("Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reclack.com/v1/checkouts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"price_id\": \"price_7Fh2PqX9\",\n \"amount\": \"29.00\",\n \"networks\": [\n \"base\",\n \"ethereum\"\n ],\n \"customer\": {},\n \"expires_in\": 3600,\n \"metadata\": {}\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "chk_7Fh2PqX9Lm",
"status": "open",
"amount": "29.00",
"currency": "USDC",
"network": "base",
"chain_id": 8453,
"networks": [
"base",
"ethereum",
"polygon"
],
"url": "https://pay.reclack.com/chk_7Fh2PqX9Lm",
"expires_at": "2026-10-18T22:07:41Z",
"completed_at": "2026-10-18T22:07:41Z",
"created_at": "2026-10-18T22:07:41Z",
"updated_at": "2026-10-18T22:07:41Z"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}{
"error": {
"type": "invalid_request_error",
"code": "price_not_found",
"message": "No price was found for that id"
}
}Overview
Create a checkout session and send your customer to theurl it returns. The
page carries your branding, lists the wallets the payer’s browser exposes, and
explains the approval in words before anything is signed.Authorizations
Your Reclack API key. The prefix decides the environment: rk_sandbox_ for test chains, rk_live_ for production.
Body
application/json
A price from your catalog.
Example:
"price_7Fh2PqX9"
A one-off amount not in your catalog. Use instead of price_id.
Example:
"29.00"
Narrow the networks for this session.
Example:
["base", "ethereum"]
Email, name, or an existing customer id.
merchant by default.
Available options:
merchant, customer Seconds until the session expires.
Example:
3600
Returned on the session and on its events.
Response
Created
Show child attributes
Show child attributes

