Saltar a contenido

Primera solicitud

Objetivo

En esta guía vas a hacer tu primera solicitud exitosa a la API de Pontotel: listar jornadas.

Qué vas a hacer

  1. Autenticarte y obtener un token
  2. Hacer una solicitud GET para listar jornadas
  3. Procesar la respuesta

Paso 1: Autenticación

Primero, obtené tu token de acceso:

Python
import requests

# Endpoint de login
login_url = "https://apis.pontotel.com.br/pontotel/api/v4/login/"

# Credenciales
credentials = {
    "username": "tu_usuario",
    "password": "tu_contrasena"
}

# Hacer login
response = requests.post(login_url, json=credentials)

if response.status_code == 200:
    data = response.json()
    access_token = data["access_token"]
    print(f"✅ Token obtenido: {access_token[:20]}...")
else:
    print(f"❌ Error en el login: {response.status_code}")
    print(response.json())
JavaScript
const loginUrl = "https://apis.pontotel.com.br/pontotel/api/v4/login/";

const credentials = {
  username: "tu_usuario",
  password: "tu_contrasena"
};

const loginResponse = await fetch(loginUrl, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify(credentials)
});

if (loginResponse.ok) {
  const data = await loginResponse.json();
  const accessToken = data.access_token;
  console.log('✅ Token obtenido:', accessToken.substring(0, 20) + '...');
} else {
  console.error('❌ Error en el login:', loginResponse.status);
}
Bash
curl -X POST "https://apis.pontotel.com.br/pontotel/api/v4/login/" \
  -H "Content-Type: application/json" \
  -d '{
    "username": "tu_usuario",
    "password": "tu_contrasena"
  }' \
  -o response.json

# Extraer token
TOKEN=$(cat response.json | jq -r '.access_token')
echo "✅ Token obtenido: ${TOKEN:0:20}..."

Paso 2: Listar jornadas

Ahora usá el token para hacer tu primera solicitud:

Python
# Endpoint de jornadas
jornadas_url = "https://apis.pontotel.com.br/pontotel/api/v4/jornadas/"

# Headers con autenticación
headers = {
    "Authorization": f"Bearer {access_token}",
    "Content-Type": "application/json"
}

# Hacer la solicitud
response = requests.get(jornadas_url, headers=headers)

if response.status_code == 200:
    data = response.json()
    print(f"✅ Solicitud exitosa!")
    print(f"Total de jornadas: {data['total']}")
    print(f"\nPrimeras 3 jornadas:")
    for jornada in data['itens'][:3]:
        print(f"  - [{jornada['codigo']}] {jornada['nome']}")
else:
    print(f"❌ Error en la solicitud: {response.status_code}")
JavaScript
const jornadasUrl = "https://apis.pontotel.com.br/pontotel/api/v4/jornadas/";

const headers = {
  'Authorization': `Bearer ${accessToken}`,
  'Content-Type': 'application/json'
};

const jornadasResponse = await fetch(jornadasUrl, { headers });

if (jornadasResponse.ok) {
  const data = await jornadasResponse.json();
  console.log('✅ Solicitud exitosa!');
  console.log('Total de jornadas:', data.total);
  console.log('\nPrimeras 3 jornadas:');
  data.itens.slice(0, 3).forEach(jornada => {
    console.log(`  - [${jornada.codigo}] ${jornada.nome}`);
  });
} else {
  console.error('❌ Error en la solicitud:', jornadasResponse.status);
}
Bash
1
2
3
curl -X GET "https://apis.pontotel.com.br/pontotel/api/v4/jornadas/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json"

Paso 3: Entender la respuesta

La respuesta va a venir en este formato:

JSON
{
  "itens": [
    {
      "id": "1d3fc7947bee78a5179720a",
      "codigo": "0001",
      "ehJornadaDeTrabalho": true,
      "nome": "jornada de trabalho 08h x 18h",
      "entrada": "08:00",
      "pausa": "12:00",
      "retorno": "13:00",
      "saida": "18:00",
      "duracaoLegal": null,
      "tipoPagamento": "extra",
      "temPresencaObrigatoria": true,
      "regraDeCalculo": null,
      "criadoEm": "2025-09-23T17:00:57.767000-03:00",
      "ultimaModificacaoEm": "2025-09-23T17:00:57.767000-03:00",
      "removidoEm": null,
      "deletado": false
    }
  ],
  "total": 239,
  "pagina": 0,
  "por_pagina": 1,
  "ordenacao": [],
  "filtros": []
}

Campos de la respuesta

Campo Descripción
itens Array con los elementos de la página actual (en este caso, jornadas)
total Total de registros disponibles
pagina Índice de la página actual (empieza en 0)
por_pagina Cantidad de elementos por página
ordenacao Criterios de ordenación aplicados
filtros Filtros aplicados en la consulta

Script completo

Acá tenés el código completo para copiar y probar:

Python
import requests

def primeira_requisicao():
    # 1. Login
    login_url = "https://apis.pontotel.com.br/pontotel/api/v4/login/"
    credentials = {
        "username": "tu_usuario",
        "password": "tu_contrasena"
    }

    login_response = requests.post(login_url, json=credentials)
    login_response.raise_for_status()
    access_token = login_response.json()["access_token"]
    print(f"✅ Autenticado con éxito!")

    # 2. Listar jornadas
    jornadas_url = "https://apis.pontotel.com.br/pontotel/api/v4/jornadas/"
    headers = {"Authorization": f"Bearer {access_token}"}

    jornadas_response = requests.get(jornadas_url, headers=headers)
    jornadas_response.raise_for_status()
    data = jornadas_response.json()

    # 3. Mostrar resultados
    print(f"\n📊 Total de jornadas: {data['total']}")
    print(f"📄 Jornadas en esta página: {len(data['itens'])}")
    print(f"\n📋 Primeras jornadas:")
    for jornada in data['itens'][:5]:
        tipo = "✅" if jornada['ehJornadaDeTrabalho'] else "🔄"
        print(f"  {tipo} [{jornada['codigo']}] {jornada['nome']:40} {jornada['entrada']} - {jornada['saida']}")

    return data

if __name__ == "__main__":
    try:
        primeira_requisicao()
    except requests.exceptions.HTTPError as e:
        print(f"❌ Error HTTP: {e}")
    except Exception as e:
        print(f"❌ Error: {e}")
JavaScript
async function primeiraRequisicao() {
  try {
    // 1. Login
    const loginUrl = "https://apis.pontotel.com.br/pontotel/api/v4/login/";
    const credentials = {
      username: "tu_usuario",
      password: "tu_contrasena"
    };

    const loginResponse = await fetch(loginUrl, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(credentials)
    });

    if (!loginResponse.ok) {
      throw new Error(`Login failed: ${loginResponse.status}`);
    }

    const { access_token } = await loginResponse.json();
    console.log('✅ Autenticado con éxito!');

    // 2. Listar jornadas
    const jornadasUrl = "https://apis.pontotel.com.br/pontotel/api/v4/jornadas/";
    const jornadasResponse = await fetch(jornadasUrl, {
      headers: { 'Authorization': `Bearer ${access_token}` }
    });

    if (!jornadasResponse.ok) {
      throw new Error(`Request failed: ${jornadasResponse.status}`);
    }

    const data = await jornadasResponse.json();

    // 3. Mostrar resultados
    console.log(`\n📊 Total de jornadas: ${data.total}`);
    console.log(`📄 Jornadas en esta página: ${data.itens.length}`);
    console.log('\n📋 Primeras jornadas:');
    data.itens.slice(0, 5).forEach(jornada => {
      const tipo = jornada.ehJornadaDeTrabalho ? '✅' : '🔄';
      console.log(`  ${tipo} [${jornada.codigo}] ${jornada.nome} - ${jornada.entrada} a ${jornada.saida}`);
    });

    return data;
  } catch (error) {
    console.error('❌ Error:', error.message);
  }
}

primeiraRequisicao();

Próximos pasos

Felicitaciones, ya hiciste tu primera solicitud con éxito.

Ahora explorá más: