Начало
Общини
Длъжностни
Кметове
Областни
[DEV_PORTAL] // api.pod-oko.bg/v1

$> ./join
--role=developer

λ> cat /dev/mission_statement | grep "automation"

Стани доброволец-програмист и помогни да автоматизираме събирането на данни за общинските съвети чрез API.

$> ./about_project --verbose

Проектът „Под ОКО“ е напълно отворен и безплатен. Всички данни се поддържат от доброволци – граждани, журналисти и програмисти.

Ако си разработчик (независимо от езика – PHP, Python, JavaScript, Go и др.), можеш да помогнеш значително, като напишеш скрипт, който автоматично:

  • Извлича информация за предстоящи или минали заседания от сайта на твоята община
  • Качва ги в нашата платформа чрез публичното API

Така ще спестиш часове ръчна работа и ще направим данните по-пълни и актуални.

[STATUS: OPEN_SOURCE] // [LICENSE: MIT] // [REPO: github.com/pod-oko]
λ> ./api/endpoints --list
POST /api/login
[AUTHENTICATION_ENDPOINT]
POST /api/council-sessions
[DATA_UPLOAD_ENDPOINT]
GET /api/municipalities
[DATA_RETRIEVAL_ENDPOINT]
GET /api/health
[SYSTEM_STATUS_ENDPOINT]
$> ./getting_started --steps
1
$> ./connect --platform=facebook

Пиши ни във Facebook: facebook.com/podoko.site

Кажи коя община искаш да поемеш – ще ти създадем акаунт с роля "contributor" и достъп само до нея.

2
$> curl -X POST /api/login
curl -X POST https://pod-oko.site/api/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "your@email.com",
    "password": "your_password"
  }'

[RESPONSE: { "token": "YOUR_API_TOKEN", "expires": "never" }]

3
$> ./upload_session --data
curl -X POST https://pod-oko.site/api/council-sessions \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "municipality_id": 5,
    "date": "2025-12-20",
    "topic": "Редовно заседание",
    "time": "10:00",
    "description": "Обсъждане на бюджета",
    "result": "Приети 15 решения",
    "link": "https://youtu.be/abc123"
  }'
λ> ./examples --lang=all
python::v3
[requests_library]
import requests

# Authentication
login = requests.post("https://pod-oko.site/api/login", json={
    "email": "your@email.com",
    "password": "your_password"
})
token = login.json()["token"]

# Upload session
headers = {"Authorization": f"Bearer {token}"}
data = {
    "municipality_id": 5,
    "date": "2025-12-20",
    "topic": "Заседание от Python",
    "time": "14:00"
}
response = requests.post(
    "https://pod-oko.site/api/council-sessions",
    json=data,
    headers=headers
)
print(f"[UPLOAD_STATUS]: {response.status_code}")
node::v20
[axios_library]
const axios = require('axios');

async function uploadSession() {
  // Authentication
  const login = await axios.post('https://pod-oko.site/api/login', {
    email: 'your@email.com',
    password: 'your_password'
  });
  
  const token = login.data.token;
  
  // Upload session
  const session = await axios.post(
    'https://pod-oko.site/api/council-sessions',
    {
      municipality_id: 5,
      date: '2025-12-20',
      topic: 'Заседание от Node.js',
      time: '15:00'
    },
    { headers: { Authorization: `Bearer ${token}` } }
  );
  
  console.log(`[UPLOAD_STATUS]: ${session.status}`);
}

uploadSession();
php::v8
[curl_extension]
<?php
$ch = curl_init('https://pod-oko.site/api/login');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'email' => 'your@email.com',
    'password' => 'your_password'
]));

$response = curl_exec($ch);
$token = json_decode($response, true)['token'];
curl_close($ch);

// Upload session
$ch = curl_init('https://pod-oko.site/api/council-sessions');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $token,
    'Content-Type: application/json'
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
    'municipality_id' => 5,
    'date' => '2025-12-20',
    'topic' => 'Заседание от PHP',
    'time' => '16:00'
]));

$result = curl_exec($ch);
echo "[UPLOAD_STATUS]: " . curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
?>
$> ./api/response --example
{
  "status": "success",
  "data": {
    "id": 12345,
    "municipality_id": 5,
    "date": "2025-12-20",
    "topic": "Редовно заседание",
    "time": "10:00",
    "created_at": "2025-12-20T10:30:00Z"
  },
  "message": "Session uploaded successfully"
}
λ> [RECRUITMENT_ACTIVE]

$> ./waiting_for_you

Свържи се с нас и заедно ще направим данните за всички 265 общини пълни и актуални.

λ> ./connect --platform=facebook --action=join
[ENCRYPTED: AES-256] // [CHANNEL: ACTIVE] // [CLEARANCE: DEVELOPER]
λ