curl --request POST \
--url http://localhost:3000/v1/tickets/{code}/check-in \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"wristband": {
"nfc": "<string>",
"uhf": "<string>"
},
"originality_signature": "<string>",
"originality_verified": true
}
'import requests
url = "http://localhost:3000/v1/tickets/{code}/check-in"
payload = {
"wristband": {
"nfc": "<string>",
"uhf": "<string>"
},
"originality_signature": "<string>",
"originality_verified": True
}
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
wristband: {nfc: '<string>', uhf: '<string>'},
originality_signature: '<string>',
originality_verified: true
})
};
fetch('http://localhost:3000/v1/tickets/{code}/check-in', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/v1/tickets/{code}/check-in",
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([
'wristband' => [
'nfc' => '<string>',
'uhf' => '<string>'
],
'originality_signature' => '<string>',
'originality_verified' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-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 := "http://localhost:3000/v1/tickets/{code}/check-in"
payload := strings.NewReader("{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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("http://localhost:3000/v1/tickets/{code}/check-in")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/v1/tickets/{code}/check-in")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}"
response = http.request(request)
puts response.read_body{
"object": "checkin_result",
"ticket_code": "<string>",
"wristband": {
"id": "<string>",
"nfc": "<string>",
"uhf": "<string>",
"status": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}Accredit a ticket
Redeems the ticket and links the scanned wristband to it. This is the door operation: the operator reads the QR and then the wristband.
The wristband inherits the zones of the ticket type plus the ticket’s own extra zones, and its valid days.
Requires Idempotency-Key. Repeating the call with the same key returns the wristband already created, so a retry after a network drop does not issue a second one.
If another door accredited the same ticket first, the response is 409 ticket_already_claimed and this call’s wristband is left under review: it can be scanned so security is alerted, but it cannot spend. A supervisor resolves it from the dashboard.
curl --request POST \
--url http://localhost:3000/v1/tickets/{code}/check-in \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'idempotency-key: <idempotency-key>' \
--data '
{
"wristband": {
"nfc": "<string>",
"uhf": "<string>"
},
"originality_signature": "<string>",
"originality_verified": true
}
'import requests
url = "http://localhost:3000/v1/tickets/{code}/check-in"
payload = {
"wristband": {
"nfc": "<string>",
"uhf": "<string>"
},
"originality_signature": "<string>",
"originality_verified": True
}
headers = {
"idempotency-key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'idempotency-key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
wristband: {nfc: '<string>', uhf: '<string>'},
originality_signature: '<string>',
originality_verified: true
})
};
fetch('http://localhost:3000/v1/tickets/{code}/check-in', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "3000",
CURLOPT_URL => "http://localhost:3000/v1/tickets/{code}/check-in",
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([
'wristband' => [
'nfc' => '<string>',
'uhf' => '<string>'
],
'originality_signature' => '<string>',
'originality_verified' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"idempotency-key: <idempotency-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 := "http://localhost:3000/v1/tickets/{code}/check-in"
payload := strings.NewReader("{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("idempotency-key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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("http://localhost:3000/v1/tickets/{code}/check-in")
.header("idempotency-key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:3000/v1/tickets/{code}/check-in")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["idempotency-key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"wristband\": {\n \"nfc\": \"<string>\",\n \"uhf\": \"<string>\"\n },\n \"originality_signature\": \"<string>\",\n \"originality_verified\": true\n}"
response = http.request(request)
puts response.read_body{
"object": "checkin_result",
"ticket_code": "<string>",
"wristband": {
"id": "<string>",
"nfc": "<string>",
"uhf": "<string>",
"status": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}{
"error": {
"type": "authentication_error",
"code": "ticket_not_found",
"message": "<string>",
"request_id": "req_9f2c1a4e7b304d51",
"param": "<string>"
}
}Authorizations
Integrator API key, issued from the VENTRY dashboard. Format vk_live_... in production and vk_test_... in test environments.
Headers
Unique identifier for the scan. Retrying with the same value is safe.
Path Parameters
Body
Show child attributes
Show child attributes
Chip originality signature, in hexadecimal. Stored even if it fails to verify, so it can be audited later.
512Whether that signature verified against the manufacturer's public key.