curl --request POST \
--url https://api.underpass.com.co/api/checkout/start \
--header 'Content-Type: application/json' \
--data '
{
"event_id": "<string>",
"items": [
{
"ticket_type_id": "<string>",
"selling_stage_id": "<string>",
"quantity": 2,
"discount_code": "<string>"
}
],
"customer": {
"email": "<string>",
"name": "<string>",
"document_number": "<string>",
"phone": "<string>"
},
"accept_terms": true,
"success_url": "<string>",
"cancel_url": "<string>",
"installment_count": 1,
"promo_code": "<string>",
"promoter_code": "<string>",
"referral_code": "<string>",
"tracking": {
"fbc": "<string>",
"fbp": "<string>",
"client_user_agent": "<string>",
"client_ip_address": "<string>"
}
}
'import requests
url = "https://api.underpass.com.co/api/checkout/start"
payload = {
"event_id": "<string>",
"items": [
{
"ticket_type_id": "<string>",
"selling_stage_id": "<string>",
"quantity": 2,
"discount_code": "<string>"
}
],
"customer": {
"email": "<string>",
"name": "<string>",
"document_number": "<string>",
"phone": "<string>"
},
"accept_terms": True,
"success_url": "<string>",
"cancel_url": "<string>",
"installment_count": 1,
"promo_code": "<string>",
"promoter_code": "<string>",
"referral_code": "<string>",
"tracking": {
"fbc": "<string>",
"fbp": "<string>",
"client_user_agent": "<string>",
"client_ip_address": "<string>"
}
}
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({
event_id: '<string>',
items: [
{
ticket_type_id: '<string>',
selling_stage_id: '<string>',
quantity: 2,
discount_code: '<string>'
}
],
customer: {
email: '<string>',
name: '<string>',
document_number: '<string>',
phone: '<string>'
},
accept_terms: true,
success_url: '<string>',
cancel_url: '<string>',
installment_count: 1,
promo_code: '<string>',
promoter_code: '<string>',
referral_code: '<string>',
tracking: {
fbc: '<string>',
fbp: '<string>',
client_user_agent: '<string>',
client_ip_address: '<string>'
}
})
};
fetch('https://api.underpass.com.co/api/checkout/start', 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.underpass.com.co/api/checkout/start",
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([
'event_id' => '<string>',
'items' => [
[
'ticket_type_id' => '<string>',
'selling_stage_id' => '<string>',
'quantity' => 2,
'discount_code' => '<string>'
]
],
'customer' => [
'email' => '<string>',
'name' => '<string>',
'document_number' => '<string>',
'phone' => '<string>'
],
'accept_terms' => true,
'success_url' => '<string>',
'cancel_url' => '<string>',
'installment_count' => 1,
'promo_code' => '<string>',
'promoter_code' => '<string>',
'referral_code' => '<string>',
'tracking' => [
'fbc' => '<string>',
'fbp' => '<string>',
'client_user_agent' => '<string>',
'client_ip_address' => '<string>'
]
]),
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.underpass.com.co/api/checkout/start"
payload := strings.NewReader("{\n \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\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.underpass.com.co/api/checkout/start")
.header("Content-Type", "application/json")
.body("{\n \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.underpass.com.co/api/checkout/start")
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 \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"order_id": "<string>",
"payment_provider": "bold",
"redirect_url": "<string>",
"total_amount": 123,
"currency": "<string>",
"checkout_session_id": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}Start a checkout session
Initiates a checkout session for purchasing tickets. Returns a redirect URL for payment.
Purchase limits are enforced here — a 400 carries a machine code your UI should branch on:
code | Meaning |
|---|---|
INSUFFICIENT_TICKETS | Not enough inventory for the requested quantity. |
MAX_PER_ORDER_EXCEEDED | An item exceeds its ticket type’s max_per_order. |
MAX_TICKETS_PER_ORDER_EXCEEDED | Total tickets exceed the event’s max_tickets_per_order. |
MAX_TICKETS_PER_EMAIL_EXCEEDED | The buyer email reached the event’s max_tickets_per_email across its live orders. |
Error bodies follow { code, message, detail } — detail includes the limit and the requested amount.
curl --request POST \
--url https://api.underpass.com.co/api/checkout/start \
--header 'Content-Type: application/json' \
--data '
{
"event_id": "<string>",
"items": [
{
"ticket_type_id": "<string>",
"selling_stage_id": "<string>",
"quantity": 2,
"discount_code": "<string>"
}
],
"customer": {
"email": "<string>",
"name": "<string>",
"document_number": "<string>",
"phone": "<string>"
},
"accept_terms": true,
"success_url": "<string>",
"cancel_url": "<string>",
"installment_count": 1,
"promo_code": "<string>",
"promoter_code": "<string>",
"referral_code": "<string>",
"tracking": {
"fbc": "<string>",
"fbp": "<string>",
"client_user_agent": "<string>",
"client_ip_address": "<string>"
}
}
'import requests
url = "https://api.underpass.com.co/api/checkout/start"
payload = {
"event_id": "<string>",
"items": [
{
"ticket_type_id": "<string>",
"selling_stage_id": "<string>",
"quantity": 2,
"discount_code": "<string>"
}
],
"customer": {
"email": "<string>",
"name": "<string>",
"document_number": "<string>",
"phone": "<string>"
},
"accept_terms": True,
"success_url": "<string>",
"cancel_url": "<string>",
"installment_count": 1,
"promo_code": "<string>",
"promoter_code": "<string>",
"referral_code": "<string>",
"tracking": {
"fbc": "<string>",
"fbp": "<string>",
"client_user_agent": "<string>",
"client_ip_address": "<string>"
}
}
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({
event_id: '<string>',
items: [
{
ticket_type_id: '<string>',
selling_stage_id: '<string>',
quantity: 2,
discount_code: '<string>'
}
],
customer: {
email: '<string>',
name: '<string>',
document_number: '<string>',
phone: '<string>'
},
accept_terms: true,
success_url: '<string>',
cancel_url: '<string>',
installment_count: 1,
promo_code: '<string>',
promoter_code: '<string>',
referral_code: '<string>',
tracking: {
fbc: '<string>',
fbp: '<string>',
client_user_agent: '<string>',
client_ip_address: '<string>'
}
})
};
fetch('https://api.underpass.com.co/api/checkout/start', 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.underpass.com.co/api/checkout/start",
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([
'event_id' => '<string>',
'items' => [
[
'ticket_type_id' => '<string>',
'selling_stage_id' => '<string>',
'quantity' => 2,
'discount_code' => '<string>'
]
],
'customer' => [
'email' => '<string>',
'name' => '<string>',
'document_number' => '<string>',
'phone' => '<string>'
],
'accept_terms' => true,
'success_url' => '<string>',
'cancel_url' => '<string>',
'installment_count' => 1,
'promo_code' => '<string>',
'promoter_code' => '<string>',
'referral_code' => '<string>',
'tracking' => [
'fbc' => '<string>',
'fbp' => '<string>',
'client_user_agent' => '<string>',
'client_ip_address' => '<string>'
]
]),
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.underpass.com.co/api/checkout/start"
payload := strings.NewReader("{\n \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\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.underpass.com.co/api/checkout/start")
.header("Content-Type", "application/json")
.body("{\n \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.underpass.com.co/api/checkout/start")
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 \"event_id\": \"<string>\",\n \"items\": [\n {\n \"ticket_type_id\": \"<string>\",\n \"selling_stage_id\": \"<string>\",\n \"quantity\": 2,\n \"discount_code\": \"<string>\"\n }\n ],\n \"customer\": {\n \"email\": \"<string>\",\n \"name\": \"<string>\",\n \"document_number\": \"<string>\",\n \"phone\": \"<string>\"\n },\n \"accept_terms\": true,\n \"success_url\": \"<string>\",\n \"cancel_url\": \"<string>\",\n \"installment_count\": 1,\n \"promo_code\": \"<string>\",\n \"promoter_code\": \"<string>\",\n \"referral_code\": \"<string>\",\n \"tracking\": {\n \"fbc\": \"<string>\",\n \"fbp\": \"<string>\",\n \"client_user_agent\": \"<string>\",\n \"client_ip_address\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"order_id": "<string>",
"payment_provider": "bold",
"redirect_url": "<string>",
"total_amount": 123,
"currency": "<string>",
"checkout_session_id": "<string>",
"expires_at": "2023-11-07T05:31:56Z"
}Body
Event ID
Items to purchase
Show child attributes
Show child attributes
Customer information
Show child attributes
Show child attributes
Customer accepts terms and conditions
URL to redirect after successful payment
URL to redirect after cancelled payment
Number of installments (1 = full payment, 2+ = split payments)
1 <= x <= 12Promo/discount code to apply
Promoter code for sales attribution
Referral code for referral attribution
Meta CAPI enhanced matching data
Show child attributes
Show child attributes
Response
Checkout session created successfully
Order ID
Payment provider used
bold, FREE URL to redirect customer - for paid orders goes to payment provider, for free orders goes to order confirmation
Order total amount - 0 for free orders
Currency code
Checkout session ID from payment provider (null for free orders)
Checkout session expiration time (null for free orders)

