API
Serviço de API REST Camlytics
O Serviço Camlytics fornece uma maneira conveniente de acessar eventos analíticos, relatórios, dados de localizações e canais programaticamente.
Você também pode estar interessado em webhooks para métricas em tempo real como
ocupação atual ocupação e
atual fila.
Se você planeja receber eventos analíticos em tempo real, recomendamos usar webhooks.
Se você estiver interessado em receber programaticamente os
Relatórios, você pode optar por
feeds de relatórios.
Chave da API
A autenticação na API REST do Serviço requer uma Chave de API válida.
As chaves de API pública e secreta podem ser encontradas na seção de chave de API em Configurações.
Assinatura de solicitação
Siga os seguintes passos para assinar sua solicitação de API:
- Crie um HMAC SHA512 usando sua chave secreta da API e o valor do URI da solicitação.
- Inclua o hash resultante em sua solicitação no cabeçalho de solicitação X-Sign.
Exemplo:
Javascript
const Crypto = require('crypto'); // if you use the since or/and until parameter. You should process it with encodeURIComponent function const since = encodeURIComponent('2020-10-13T06:12:00.000+01:00'); // 2020-10-13T06%3A12%3A00.000%2B01%3A00 const requestUri = '/service/api/v1/events?location_id=32&nonce=154&since=' + since; const secret = 'ehsd7485746548574'; const signature = Crypto.createHmac('sha512', secret) .update(requestUri) .digest('hex');
PHP
<?php // if you use the since or/and until parameter. You should process it with urlencode function $since = urlencode('2020-10-12T14:00:00Z'); // 2020-10-12T14%3A00%3A00Z $requestUri = '/service/api/v1/events?location_id=32&nonce=154&since=' . $since; $secret = 'ehsd7485746548574'; $sign = hash_hmac("sha512", $requestUri, $secret)
Limitação de solicitações
O limite atual de solicitações é de 1 solicitação por segundo. Se você fizer mais solicitações, receberá o código de erro 503 ou 429.
Parâmetros da solicitação
Parâmetros de cabeçalho necessários
X-key - chave de API pública
X-Sign - HMAC SHA512 usando sua chave secreta da API e o valor do URI da solicitação
Parâmetro de string de consulta necessário
Nonce - um valor gerado pelo usuário que aumenta monotonicamente (recomendamos um timestamp no estilo UNIX no formato de segundo do epoch). Nonce deve ser maior que o anterior.
Methods & Models
Access
- APIKey
KeyParamName: X-Key
KeyInQuery:false
KeyInHeader:true - Signature
KeyParamName: X-Sign
KeyInQuery:false
KeyInHeader:true
Methods
[ Jump to Models ]Table of Contents
Dictionaries
Statistic
Dictionaries
get /channels
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "name" : "Lobby", "paid" : 0, "active" : 1, "id" : "47576ahb-56656-45786-acb45_000015E2", "location_id" : 123 }, { "name" : "Lobby", "paid" : 0, "active" : 1, "id" : "47576ahb-56656-45786-acb45_000015E2", "location_id" : 123 } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
channels list matching criteria inline_response_200_1get /locations
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "name" : "Manhattan store", "id" : 123, "version" : "3.2.1", "timezone_offset" : "+00:00", "hash" : "SwU8JH3ldduwsZoxzamSCNU9Xd/lCQGCUUQyJ/Fz9e0+Y+CTVKRvHsYZDBlsFMuVXps1UTFYea8wds6tiyEPSxsJUsKry3C3/1eMNs3h6y0dNYlqnMFCTR/J8NkujrBdndZyxATevYDPIidn51ZcU79DFWq1NYVnrYoY4pxCMNDNppZsCap0tAnGvyvq43MlKN1qvONBC/p5vVXf5bdfMGB3mhEhMTQ" }, { "name" : "Manhattan store", "id" : 123, "version" : "3.2.1", "timezone_offset" : "-04:00", "hash" : "SwU8JH3ldduwsZoxzamSCNU9Xd/lCQGCUUQyJ/Fz9e0+Y+CTVKRvHsYZDBlsFMuVXps1UTFYea8wds6tiyEPSxsJUsKry3C3/1eMNs3h6y0dNYlqnMFCTR/J8NkujrBdndZyxATevYDPIidn51ZcU79DFWq1NYVnrYoY4pxCMNDNppZsCap0tAnGvyvq43MlKN1qvONBC/p5vVXf5bdfMGB3mhEhMTQ" } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
locations list matching criteria inline_response_200get /triggers
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "name" : "Enter", "active" : 1, "id" : "47576ahb-56656-45786-acb45_000015E2", "type" : "Line", "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "location_id" : 123 }, { "name" : "Enter", "active" : 1, "id" : "47576ahb-56656-45786-acb45_000015E2", "type" : "Line", "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "location_id" : 123 } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
triggers list matching criteria inline_response_200_2Statistic
get /events
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Pedestrian", "suborigin" : "Unknown", "age_range" : "", "gender" : "", "id" : 34454545, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23T04:56:07.000+00:00" }, { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Vehicle", "suborigin" : "Car", "age_range" : "", "gender" : "", "id" : 34454545, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23T04:56:07.000+00:00" }, { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Face", "suborigin" : "", "age_range" : "26 - 35", "gender" : "Male", "id" : 34454545, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23T04:56:07.000+00:00" } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
events list matching criteria inline_response_200_3get /totals/triggers
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "trigger_name" : "Exit", "trigger_id" : "35576ahb-56656-45781-acb45_000015E2", "count" : 3012, "channel_id" : "85576ahb-56656-45781-acb41_000015E2", "location_id" : 423 }, { "trigger_name" : "Exit", "trigger_id" : "35576ahb-56656-45781-acb45_000015E2", "count" : 3012, "channel_id" : "85576ahb-56656-45781-acb41_000015E2", "location_id" : 423 } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
number of events matching criteria grouped by triggers inline_response_200_4get /totals/types
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "count" : 4712, "type" : "TripwireCrossed", "channel_id" : "35576ahb-56656-45781-acb45_000015E2" }, { "count" : 4712, "type" : "TripwireCrossed", "channel_id" : "35576ahb-56656-45781-acb45_000015E2" } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
number of events matching criteria grouped by types inline_response_200_5get /histograms
Query parameters
Return type
Example data
{ "msg" : "success", "result" : [ { "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "id" : 34454545, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "counting_data" : [ 3400.3, 199.7 ], "lifetime_data" : [ 10, 4, 0, 1 ], "location_id" : 123, "histogram_time" : "2000-01-23T04:00:00+00:00" }, { "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "id" : 34454545, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "counting_data" : [ 3600 ], "lifetime_data" : [ ], "location_id" : 123, "histogram_time" : "2000-01-23T05:00:00+00:00" } ], "code" : 0 }
Produces
This API call produces the following media types according to the Accept request header; the media type will be conveyed by the Content-Type response header.application/json
Responses
200
histograms list matching criteria inline_response_200_6Models
[ Jump to Methods ]Table of Contents
Channel
-Event
-EventTotalByTrigger
-EventTotalByType
-Histogram
-Location
-Trigger
-inline_response_200
-inline_response_200_1
-inline_response_200_2
-inline_response_200_3
-inline_response_200_4
-inline_response_200_5
-inline_response_200_6
-
Event
- Up
Histogram
- Up
Location
- Up
inline_response_200
- Up
inline_response_200_1
- Up
inline_response_200_2
- Up
inline_response_200_3
- Up
inline_response_200_4
- Up
inline_response_200_5
- Up
inline_response_200_6
- Up
Webhooks
Webhooks são a maneira preferida de receber eventos em tempo real sem fazer solicitações excessivas. Para fazer isso, você precisaria de um ponto de extremidade para receber webhooks.
Para fins de teste, você pode usar o serviço requestbin.com.
Para acessar as configurações de webhooks, no portal de nuvem, vá para Configurações > Webhooks. Lá, você configuraria o ponto de extremidade para cada um dos canais adicionados ou para toda a localização. Se você definir o webhook para toda a localização, você receberá todos os eventos de qualquer um dos canais de localização.

A estrutura JSON do evento de webhook é muito semelhante à estrutura da API. O tempo do evento está no fuso horário UTC.
[ { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Pedestrian", "suborigin" : "Unknown", "age_range" : "", "gender" : "", "id" : null, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23 04:56:07.000" }, { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Vehicle", "suborigin" : "Car", "age_range" : "", "gender" : "", "id" : null, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23 04:56:07.000" }, { "record_id" : 1635343534, "event_type" : "RegionJoin", "snapshot_id" : -235343534, "trigger_id" : "47576ahb-56656-45786-acb45_000015E2", "origin" : "Face", "suborigin" : "", "age_range" : "26 - 35", "gender" : "Male", "id" : null, "channel_id" : "35576ahb-56656-45781-acb45_000015E2", "object_id" : 6, "location_id" : 123, "event_time" : "2000-01-23 04:56:07.000" } ]