Files
dashboard/API_DOCUMENTATION.md
T
Alberto-Audrix 32a36cceff
CI / lint-and-test (push) Canceled after 0s
first commit
2026-07-28 08:55:05 +07:00

5.4 KiB

Chicken Counting API Documentation

Version: 2.0 Last Updated: March 5, 2026 Base URL: http://103.215.13.55:5001/api


Overview

The Chicken Counting API allows external systems to submit chicken population counts per kandang (coop) per date. The API uses a simple upsert mechanism — calling the endpoint multiple times with the same date and kandang will replace the previous record with the latest data.


Authentication

All requests require an API key via the X-API-Key header.

X-API-Key: cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463
Header Value
X-API-Key cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463

API Endpoint

Submit / Update Chicken Count

Endpoint: POST /api/chicken-counting

Headers:

Content-Type: application/json
X-API-Key: cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463

Request Body:

{
  "date": "2026-03-01",
  "kandang": "kandang-atas",
  "filename": "farm_sukawarna_5b_ch1_main_20260301145938_20260301151559.mp4",
  "total_count": 5612
}

Required Fields:

Field Type Description
date string Date in YYYY-MM-DD format
kandang string Slug of the kandang name (e.g. kandang-atas, kandang-bawah). Matched against the kandangs table by normalizing the name: lowercase + spaces replaced with dashes.
total_count integer Chicken count (must be >= 0)

Optional Fields:

Field Type Description
filename string Source video/image filename

Response (200 OK):

{
  "success": true,
  "data": {
    "id": 1,
    "date": "2026-03-01",
    "kandangId": 1,
    "kandangName": "Kandang Atas",
    "filename": "farm_sukawarna_5b_ch1_main_20260301145938_20260301151559.mp4",
    "totalCount": 5612,
    "createdAt": "2026-03-01T14:59:38.000Z",
    "updatedAt": "2026-03-01T14:59:38.000Z"
  }
}

Upsert Behavior:

If a record with the same date + kandang already exists, the total_count and filename will be updated. The createdAt remains unchanged while updatedAt reflects the latest call.


Error Handling

All error responses follow this format:

{
  "success": false,
  "error": "Human-readable error message"
}

Error Responses:

Status Error Description
401 API key required X-API-Key header not provided
401 Invalid API key API key not found or incorrect
400 Missing required fields date, kandang, or total_count not provided
400 Kandang not found The kandang slug doesn't match any kandang name in the database
400 Invalid date format Must be YYYY-MM-DD
400 Invalid total_count Must be a non-negative number
500 Internal server error Server error

Code Examples

cURL

curl -X POST http://103.215.13.55:5001/api/chicken-counting \
  -H "Content-Type: application/json" \
  -H "X-API-Key: cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463" \
  -d '{
    "date": "2026-03-01",
    "kandang": "kandang-atas",
    "filename": "farm_sukawarna_5b_ch1_main_20260301145938_20260301151559.mp4",
    "total_count": 5612
  }'

Python

import requests

BASE_URL = "http://103.215.13.55:5001/api"

API_KEY = "cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463"

response = requests.post(
    f"{BASE_URL}/chicken-counting",
    headers={"X-API-Key": API_KEY},
    json={
        "date": "2026-03-01",
        "kandang": "kandang-atas",
        "filename": "farm_sukawarna_5b_ch1_main_20260301145938_20260301151559.mp4",
        "total_count": 5612
    }
)

print(response.json())

JavaScript

const API_KEY = 'cpa_e8cfeeabaa6997a1ecd4239cee6a9cc59cf43f96cfd58463';

const response = await fetch('http://103.215.13.55:5001/api/chicken-counting', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-API-Key': API_KEY,
  },
  body: JSON.stringify({
    date: '2026-03-01',
    kandang: 'kandang-atas',
    filename: 'farm_sukawarna_5b_ch1_main_20260301145938_20260301151559.mp4',
    total_count: 5612,
  }),
});

const result = await response.json();
// Use `result` here.