Credenciales de acceso

Para obtener sus credenciales de acceso (API_KEY y SIGNATURE_SECRET), contacte a Transagro.

Las credenciales son confidenciales y solo deben ser compartidas con personal autorizado de su empresa.

Ejemplo de autenticación

Método: GET
Endpoint: /conagro/sellout-data
Timestamp: 1757500443000
Body: {}

Payload para la firma:

GET/conagro/sellout-data1757500443000{}

Firma generada (HMAC-SHA256, hexadecimal):

6e2e359a2568f98041ba0728ddc6c5e3

Headers a enviar:

x-api-key: su-api-key-aqui
x-signature: 6e2e359a2568f98041ba0728ddc6c5e3
x-timestamp: 1757500443000
Content-Type: application/json

¿Qué información necesita para la integración?

  1. API_KEY (proporcionada por Transagro)
  2. SIGNATURE_SECRET (proporcionada por Transagro)
  3. URL base del API: https://apiconagro.hilagro.com.py
  4. Instrucciones para generar la firma y timestamp (ver ejemplos de código)

API Transagro - Guía Rápida de Integración

Acceso y Autenticación

x-api-key: SU_API_KEY
x-signature: FIRMA_GENERADA
x-timestamp: TIMESTAMP_UNIX_MS
Content-Type: application/json

Ejemplo de payload para firma:

GET/conagro/sellout-data1757500443000{}

Nota: El timestamp debe estar en milisegundos y sincronizado.

Endpoints Disponibles

Ejemplos de Código

Python

import requests, hmac, hashlib, time

api_key = "SU_API_KEY"
secret = "SU_SECRET_KEY"
url = "https://apiconagro.hilagro.com.py/conagro/sellout-data"
timestamp = str(int(time.time() * 1000))
payload = f"GET{url}{timestamp}{{}}"
signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
headers = {
    "x-api-key": api_key,
    "x-signature": signature,
    "x-timestamp": timestamp,
    "Content-Type": "application/json"
}
resp = requests.get(url, headers=headers)
print(resp.status_code, resp.json())

Node.js

const axios = require('axios');
const crypto = require('crypto');

class TransagroApiClient {
  constructor(apiKey, secretKey, baseUrl = 'https://apiconagro.hilagro.com.py') {
    this.apiKey = apiKey;
    this.secretKey = secretKey;
    this.baseUrl = baseUrl;
    
    this.axiosInstance = axios.create({
      baseURL: this.baseUrl,
      timeout: 30000,
      headers: {
        'Content-Type': 'application/json'
      }
    });
  }

  generateSignature(method, url, timestamp, body = '') {
    const payload = `${method}${url}${timestamp}${body}`;
    return crypto
      .createHmac('sha256', this.secretKey)
      .update(payload)
      .digest('hex');
  }

  async makeRequest(endpoint) {
    const timestamp = Date.now().toString();
    const fullUrl = `${this.baseUrl}${endpoint}`;
    const signature = this.generateSignature('GET', fullUrl, timestamp);

    try {
      const response = await this.axiosInstance.get(endpoint, {
        headers: {
          'x-api-key': this.apiKey,
          'x-signature': signature,
          'x-timestamp': timestamp
        }
      });

      return response.data;
    } catch (error) {
      if (error.response) {
        throw new Error(`Error en la solicitud: ${error.response.status} - ${error.response.statusText}`);
      }
      throw error;
    }
  }

  async getSelloutData() {
    return this.makeRequest('/conagro/sellout-data');
  }

  async getStockData() {
    return this.makeRequest('/conagro/stock-data');
  }
}

// Ejemplo de uso
async function example() {
  const client = new TransagroApiClient('su-api-key', 'su-secret-key');
  try {
    const data = await client.getSelloutData();
    console.log(`Datos obtenidos: ${data.length} registros`);
  } catch (error) {
    console.error('Error:', error.message);
  }
}

example();

Códigos de Respuesta

Código Descripción
200 Solicitud exitosa
400 Solicitud incorrecta
401 No autorizado (API key inválida)
403 Prohibido (firma/timestamp inválido)
404 Endpoint no encontrado
429 Demasiadas solicitudes
500 Error interno del servidor

Buenas Prácticas

Soporte

© 2025 Transagro - API. Todos los derechos reservados.