Acceso Restringido

Ingrese la frase de seguridad para consultar la Documentación Técnica de la API REST de CAMPETROL

Desarrollado con ❤️ por: Rocket Launch
REST API v2.0

Visión General de la API

La API REST de CAMPETROL conecta la página web pública, el panel CMS y las **aplicaciones móviles nativas e híbridas (iOS, Android, React Native, Flutter)**.

URL Base Servidor
https://campetrol.org/api
Formato de Intercambio
JSON (UTF-8)
Seguridad
JWT Bearer Token

1. Autenticación y Token JWT

Las peticiones de lectura (GET) son **públicas**. Las operaciones de modificación (POST, PUT, DELETE) requieren enviar el token en la cabecera HTTP.

POST /api/login
Genera Bearer Token

Request Body (JSON)

{
  "username": "admin",
  "password": "tu_password"
}

Respuesta Exitosa (200 OK)

{
  "message": "Login successful",
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwidXNlcm5hbW...",
  "user": {
    "id": 1,
    "username": "admin",
    "role": "admin",
    "permissions": "dashboard,analytics,actualidad,comunicados,banners,usuarios"
  }
}

2. API Unificada para App Móvil

Devuelve en **una sola llamada** los banners de la app, las últimas noticias de actualidad y los comunicados de prensa con URLs canónicas absolutas.

GET /api/mobile?section=all&limit=5
Público

Respuesta JSON Ejemplo:

{
  "status": "success",
  "timestamp": "2026-07-21T09:38:00Z",
  "section": "all",
  "limit": 5,
  "data": {
    "banners": [
      {
        "id": 1,
        "target_platform": "both",
        "title": "II Rueda de Relacionamiento CAMPETROL 2026",
        "tag": "RUEDA DE RELACIONAMIENTO",
        "date": "25 DE AGOSTO 2026",
        "link": "https://campetrol.org/inicio/eventos-ruedas-relacionamiento.html",
        "full_image_url": "https://campetrol.org/inicio/images/banners/rueda.jpg",
        "full_app_image_url": "https://campetrol.org/inicio/images/banners/rueda_app.jpg",
        "active": true
      }
    ],
    "actualidad": [
      {
        "id": 45,
        "title": "Análisis del Mercado Energético Colombia 2026",
        "excerpt": "Revisión técnica de la producción de crudo y gas...",
        "article_url": "https://campetrol.org/inicio/archivos-articulos/analisis.html"
      }
    ]
  }
}

3. Módulo de Banners Hero

Soporta clasificación por plataforma (both, web, app) y carga de imagen optimizada para pantallas móviles.

POST /api/banners Requiere Token Bearer
{
  "title": "Nuevo Banner para la App",
  "tag": "EVENTO ESPECIAL",
  "date": "15 DE SEPTIEMBRE 2026",
  "desc_text": "Descripción del banner...",
  "link_text": "Ver evento →",
  "link": "https://campetrol.org/inicio/eventos.html",
  "target_platform": "app",
  "image_url": "images/banners/banner_web.jpg",
  "app_image_url": "images/banners/banner_app.jpg",
  "num": 1,
  "active": 1
}

Ejemplos de Código para la App Móvil

Ejemplos de implementación listos para copiar y usar en tu aplicación móvil (React Native, Flutter y Swift).

import React, { useEffect, useState } from 'react';
import { View, Text, FlatList, Image, TouchableOpacity, Linking, ActivityIndicator } from 'react-native';

const API_MOBILE_URL = 'https://campetrol.org/api/mobile?limit=10';

export default function HomeScreen() {
  const [data, setData] = useState(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    fetchMobileHomeData();
  }, []);

  const fetchMobileHomeData = async () => {
    try {
      const response = await fetch(API_MOBILE_URL);
      const json = await response.json();
      if (json.status === 'success') {
        setData(json.data);
      }
    } catch (error) {
      console.error('Error cargando API CAMPETROL:', error);
    } finally {
      setLoading(false);
    }
  };

  if (loading) return <ActivityIndicator size="large" color="#2563eb" style={{ flex: 1 }} />;

  return (
    <FlatList
      data={data?.actualidad || []}
      keyExtractor={(item) => item.id.toString()}
      ListHeaderComponent={() => (
        <View>
          <Text style={{ fontSize: 18, fontWeight: 'bold', margin: 16 }}>Banners Móviles</Text>
          <FlatList
            horizontal
            data={data?.banners || []}
            keyExtractor={(b) => b.id.toString()}
            renderItem={({ item }) => (
              <TouchableOpacity onPress={() => item.link && Linking.openURL(item.link)}>
                <Image
                  source={{ uri: item.full_app_image_url || item.full_image_url }}
                  style={{ width: 300, height: 160, borderRadius: 12, marginRight: 12 }}
                />
              </TouchableOpacity>
            )}
          />
          <Text style={{ fontSize: 18, fontWeight: 'bold', margin: 16 }}>Actualidad CAMPETROL</Text>
        </View>
      )}
      renderItem={({ item }) => (
        <TouchableOpacity
          onPress={() => item.article_url && Linking.openURL(item.article_url)}
          style={{ padding: 16, borderBottomWidth: 1, borderColor: '#e2e8f0' }}
        >
          <Text style={{ fontSize: 16, fontWeight: 'bold' }}>{item.title}</Text>
          <Text style={{ color: '#64748b', marginTop: 4 }}>{item.excerpt}</Text>
        </TouchableOpacity>
      )}
    />
  );
}

Probador de Endpoints en Vivo

Ejecuta consultas en tiempo real directamente sobre la API de producción de CAMPETROL.

Respuesta Servidor JSON: Esperando solicitud...
// Haz clic en "Probar" para ver la respuesta en vivo