curl --request POST \
--url https://api-sandbox.beinfi.com/public/v1/claimables \
--header 'Content-Type: application/json' \
--data '
{
"accountName": "<string>",
"email": "jsmith@example.com"
}
'import requests
url = "https://api-sandbox.beinfi.com/public/v1/claimables"
payload = {
"accountName": "<string>",
"email": "jsmith@example.com"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({accountName: '<string>', email: 'jsmith@example.com'})
};
fetch('https://api-sandbox.beinfi.com/public/v1/claimables', 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.beinfi.com/public/v1/claimables",
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([
'accountName' => '<string>',
'email' => 'jsmith@example.com'
]),
CURLOPT_HTTPHEADER => [
"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-sandbox.beinfi.com/public/v1/claimables"
payload := strings.NewReader("{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.beinfi.com/public/v1/claimables")
.header("Content-Type", "application/json")
.body("{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/public/v1/claimables")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "UNCLAIMED",
"tenantSlug": "<string>",
"accountName": "<string>",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"apiKeySecret": "<string>",
"publishableKey": "<string>",
"claimUrl": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Create a test account
Instantly creates a sandbox account, with a starter product and sk_test_ and pk_test_ keys in the response, no login needed. Keep the response: the secret key is not shown again, and keys are never emailed. To keep the account, open claimUrl and sign in to Infi before expiresAt.
email is optional and unverified: it is only a contact. If sent, it asynchronously receives a notice with the claim link and deadline (at most one per address every 24 hours). A 201 confirms creation, not email delivery.
curl --request POST \
--url https://api-sandbox.beinfi.com/public/v1/claimables \
--header 'Content-Type: application/json' \
--data '
{
"accountName": "<string>",
"email": "jsmith@example.com"
}
'import requests
url = "https://api-sandbox.beinfi.com/public/v1/claimables"
payload = {
"accountName": "<string>",
"email": "jsmith@example.com"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({accountName: '<string>', email: 'jsmith@example.com'})
};
fetch('https://api-sandbox.beinfi.com/public/v1/claimables', 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.beinfi.com/public/v1/claimables",
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([
'accountName' => '<string>',
'email' => 'jsmith@example.com'
]),
CURLOPT_HTTPHEADER => [
"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-sandbox.beinfi.com/public/v1/claimables"
payload := strings.NewReader("{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.beinfi.com/public/v1/claimables")
.header("Content-Type", "application/json")
.body("{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/public/v1/claimables")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"accountName\": \"<string>\",\n \"email\": \"jsmith@example.com\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "UNCLAIMED",
"tenantSlug": "<string>",
"accountName": "<string>",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"apiKeySecret": "<string>",
"publishableKey": "<string>",
"claimUrl": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Body
Where the account came from: lovable, mcp, cursor or cli.
lovable, mcp, cursor, cli Business name, optional. Does not change the account identifier, which is random.
120Optional, unverified contact for the claim notice. Without it, no email is sent.
254Response
Test account created.
The created test account and its credentials. Keep the whole response.
Test account ID. Use it with GET /public/v1/claimables/{claimableID}.
UNCLAIMED until someone claims the account; then CLAIMED.
UNCLAIMED, CLAIMED The account's public identifier, used in checkout URLs. It is random.
The business name sent at creation.
The starter product. Not sellable yet: publish a version with a price first.
The sk_test_ key. Shown only this once.
The pk_test_ key. Reserved: no route accepts it today. The embedded checkout needs no key; the payment link token is enough.
Open it and sign in to Infi to keep the account, e.g. https://app-sandbox.beinfi.com/claim/{id}.
Claim deadline, 30 days after creation. After it, the unclaimed account expires and the sk_test_ key is revoked.