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>"
}
}Acreditar una entrada
Canjea la entrada y le vincula la pulsera escaneada. Es la operación de puerta: el operario lee el QR y después la pulsera.
La pulsera hereda las zonas del tipo de entrada más las zonas extra de la propia entrada, y sus días de validez.
Exige Idempotency-Key. Repetir la llamada con la misma clave devuelve la pulsera ya creada, así que un reintento tras un corte de red no emite una segunda pulsera.
Si otra puerta acreditó la misma entrada primero, la respuesta es 409 ticket_already_claimed y la pulsera de esta llamada queda en revisión: se puede escanear para que seguridad avise, pero no gastar. La resuelve un supervisor desde el panel.
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
API key del integrador, emitida desde el panel de VENTRY. Formato vk_live_... en producción y vk_test_... en entornos de prueba.
Headers
Identificador único del escaneo. Reintentar con el mismo valor es seguro.
Path Parameters
Body
Show child attributes
Show child attributes
Firma de originalidad del chip, en hexadecimal. Se guarda aunque no verifique, para poder auditar después qué pulseras entraron.
512Si esa firma verificó contra la clave pública del fabricante.