Nome da tab
Apresentação
Título
Localização precisa do dispositivo móvel em segundos
Text

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. 

Título
Dúvidas frequentes

A cobrança é por consulta?

Sim, a cobrança é feita por consulta com sucesso e com entrega de informações. Se ao menos um dos dados fornecidos na entrada for validado com 'true' ou 'false', a consulta será considerada um sucesso para fins de faturamento.

Como é feita a integração?

A integração é feita por meio de API e toda a documentação está disponível aqui no portal! 

Título
Documentação
Text

Nome da tab
Documentação
Título
API Device Location Retrieval - REST
Text

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.

Título
Passo a passo
Text

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.

Título
CURL
Text
#!/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"'
      }'
Título
PHP
Text
 $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";
?>
Título
JAVA
Text
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());
    }

    /**
Título
Python
Text
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.
Contrate agora!