Com essa integração, você consegue verificar a geolocalização aproximada do chip M2M em tempo real, sem a necessidade de ativação de GPS ou permissão ativa.
Versão: 1.0
Criada por: TI Hub Novos Negócios – Data Analytics
Data: 26/09/2025
200 -A solicitação foi bem-sucedida. A resposta contém o resultado da validação dos dados do cliente.
400 - A solicitação não pôde ser entendida pelo servidor devido à sintaxe incorreta ou parâmetros inválidos. O cliente deve corrigir e reenviar a requisição.
401 - A solicitação requer autenticação. O token de acesso está ausente, inválido ou expirado.
404 - O recurso solicitado não foi encontrado. Pode indicar que o número de telefone ou o usuário não existem na base de dados.
500- Erro interno do servidor. Um problema inesperado ocorreu no processamento da solicitação.
504 - O servidor não conseguiu receber uma resposta a tempo para completar a solicitação. Recomenda-se tentar novamente.
Caso ainda restem dúvidas, baixe o PDF que contém o tutorial de consumo da API, que explica passo a passo como utiliza-la.
#!/bin/bash
# URL de obtenção do token
url_token="https://api.claro.com.br/oauth2/v1/token"
# URL da API Device Location Retrieval
url_device_location="https://api.claro.com.br/mobile/v1/gsma/gateway/devicelocation/retrieve"
# Credenciais para OAuth2 (Client ID e Client Secret)
key="XXXXXXXXXXXXXXXXXXXXXXXXX"
secret="XXXXXXXXXXXXXXXXXXXXX"
# Identificador do dispositivo
phoneNumber="+5511999999999"
# Parâmetro maxAge (idade máxima da localização em segundos)
maxAge=600
# Gerar senha em base64 para autenticação Basic no OAuth2
senha=$(echo -n "$key:$secret" | base64)
# Obter o token OAuth2 (client_credentials)
token=$(curl -s -X POST "$url_token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "Authorization: Basic $senha" \
-d "grant_type=client_credentials" | jq -r .access_token)
# Requisição para consultar a localização do dispositivo
curl -X POST "$url_device_location" \
-H "Authorization: Bearer $token" \
-H "Content-Type: application/json" \
-H "cache-control: no-cache" \
-d '{
"device": {
"phoneNumber": "'"$phoneNumber"'"
},
"maxAge": '"$maxAge"'
}'
$url_token,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/x-www-form-urlencoded",
"Authorization: Basic $basic_token"
],
CURLOPT_POSTFIELDS => "grant_type=client_credentials"
]);
$response = curl_exec($curl);
curl_close($curl);
$data = json_decode($response, true);
$access_token = $data["access_token"] ?? null;
if (!$access_token) {
die("Erro ao obter token OAuth2\nResposta: $response");
}
// 2) Chamada à API Device Location Retrieval ---------------
$payload = json_encode([
"device" => [
"phoneNumber" => $phoneNumber
],
"maxAge" => $maxAge
]);
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => $url_device_location,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer $access_token",
"Content-Type: application/json",
"cache-control: no-cache"
],
CURLOPT_POSTFIELDS => $payload
]);
$response = curl_exec($curl);
$http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
// Exibe resposta formatada
echo "HTTP Status: $http_code\n";
echo "Resposta da API:\n$response\n";
?>
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DeviceLocationRetrievalExample {
public static void main(String[] args) throws Exception {
// URL do token OAuth2
String urlToken = "https://api.claro.com.br/oauth2/v1/token";
// URL da API Device Location Retrieval
String urlDeviceLocation = "https://api.claro.com.br/mobile/v1/gsma/gateway/devicelocation/retrieve";
// Credenciais OAuth2 (Client ID e Client Secret)
String clientId = "XXXXXXXXXXXXXXXXXXXXXXXXX";
String clientSecret = "XXXXXXXXXXXXXXXXXXXXX";
// Identificador do dispositivo
String phoneNumber = "+5511999999999";
// Idade máxima da localização (em segundos)
int maxAge = 600;
HttpClient client = HttpClient.newHttpClient();
// Monta Authorization: Basic base64(clientId:clientSecret)
String basicToken = Base64.getEncoder()
.encodeToString((clientId + ":" + clientSecret).getBytes(StandardCharsets.UTF_8));
// 1) Obter token OAuth2 (grant_type=client_credentials)
String formData = "grant_type=client_credentials";
HttpRequest tokenRequest = HttpRequest.newBuilder()
.uri(URI.create(urlToken))
.header("Content-Type", "application/x-www-form-urlencoded")
.header("Authorization", "Basic " + basicToken)
.POST(HttpRequest.BodyPublishers.ofString(formData))
.build();
HttpResponse<String> tokenResponse = client.send(tokenRequest, HttpResponse.BodyHandlers.ofString());
if (tokenResponse.statusCode() != 200) {
System.out.println("Erro ao obter token OAuth2. Status: " + tokenResponse.statusCode());
System.out.println("Resposta: " + tokenResponse.body());
return;
}
String tokenBody = tokenResponse.body();
// Extrai o access_token sem depender de biblioteca JSON externa
String accessToken = extractAccessToken(tokenBody);
if (accessToken == null) {
System.out.println("Não foi possível extrair o access_token da resposta:");
System.out.println(tokenBody);
return;
}
// 2) Monta o JSON de requisição da Device Location Retrieval
String jsonPayload = "{\n" +
" \"device\": {\n" +
" \"phoneNumber\": \"" + phoneNumber + "\"\n" +
" },\n" +
" \"maxAge\": " + maxAge + "\n" +
"}";
HttpRequest apiRequest = HttpRequest.newBuilder()
.uri(URI.create(urlDeviceLocation))
.header("Authorization", "Bearer " + accessToken)
.header("Content-Type", "application/json")
.header("cache-control", "no-cache")
.POST(HttpRequest.BodyPublishers.ofString(jsonPayload))
.build();
HttpResponse<String> apiResponse = client.send(apiRequest, HttpResponse.BodyHandlers.ofString());
System.out.println("HTTP Status: " + apiResponse.statusCode());
System.out.println("Resposta da API:");
System.out.println(apiResponse.body());
}
/**
import requests
import json
# URL do token OAuth2
url_token = "https://api.claro.com.br/oauth2/v1/token"
# URL da API Device Location Retrieval
url_device_location = "https://api.claro.com.br/mobile/v1/gsma/gateway/devicelocation/retrieve"
# Credenciais OAuth2 (Client ID e Client Secret)
client_id = "XXXXXXXXXXXXXXXXXXXXXXXXX"
client_secret = "XXXXXXXXXXXXXXXXXXXXX"
# Identificador do dispositivo
phoneNumber = "+5511999999999"
# Idade máxima da localização (em segundos)
maxAge = 600
def obter_token():
"""
Obtém o access_token via OAuth2 (grant_type=client_credentials)
usando Basic Auth (client_id:client_secret).
"""
data = {
"grant_type": "client_credentials"
}
response = requests.post(
url_token,
data=data,
auth=(client_id, client_secret), # gera Authorization: Basic automaticamente
headers={
"Content-Type": "application/x-www-form-urlencoded"
},
timeout=30
)
if response.status_code != 200:
print("Erro ao obter token OAuth2")
print("HTTP Status:", response.status_code)
print("Resposta:", response.text)
return None
body = response.json()
return body.get("access_token")
def consultar_device_location(access_token):
"""
Chama a API Device Location Retrieval com o access_token obtido.
"""
payload = {
"device": {
"phoneNumber": phoneNumber
},
"maxAge": maxAge
}
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
"cache-control": "no-cache"
}
response = requests.post(
url_device_location,
headers=headers,
json=payload,
timeout=30
)
print("HTTP Status:", response.status_code)
try:
data = response.json()
print("Resposta da API:")
print(json.dumps(data, indent=2, ensure_ascii=False))
except ValueError:
# Caso a resposta não seja JSON
print("Resposta (raw):")
print(response.text)
if __name__ == "__main__":
token = obter_token()
if token:
consultar_device_location(token)
Plano Pay Per Use
A melhor escolha para o seu negócio. Após testar nossa trial, você passa a consumir nosso plano em produção, cobrado por consumo conforme seu contrato.
- A sua melhor escolha!
- Faça consultas sob demanda e pague apenas pelo o que usar.