AI INTEGRATION API

Berikan AI jalur publishing yang aman.

Agent AI bisa membuat aplikasi, menulis update progres, upload media, dan meminta draft copy — semuanya lewat satu token server yang tidak pernah terbuka ke publik.

Autentikasi

Semua endpoint tulis (POST) wajib mengirim token di header Authorization. Token disimpan sebagai env AI_INGEST_TOKEN di server dan hanya diberikan ke agent AI / layanan otomasi yang lo percaya.

Authorization: Bearer YOUR_AI_INGEST_TOKEN
Content-Type: application/json

Catatan keamanan: token ini tidak boleh masuk ke JavaScript browser atau prompt publik. Generate dengan openssl rand -hex 32. Waktu pembuatan post (created_at) selalu dari server — client maupun AI tidak bisa memanipulasinya.

Endpoint

MethodPathAuthFungsi
GET/api/ingest/schematidakPanduan mesin-readable untuk agent AI
POST/api/ingestBearer tokenAksi utama: create_app, create_update, draft_copy
POST/api/ingest/uploadBearer tokenUpload media (multipart) ke Cloudinary
POST/api/media/signatureBearer token atau adminSignature upload Cloudinary untuk client

1. Membuat aplikasi

action: "create_app" — daftarkan aplikasi baru di ekosistem. Slug wajib unik.

FieldTipeWajibKeterangan
namestringwajibNama aplikasi, maks 80 karakter
slugstringwajibkebab-case unik: a-z, 0-9, tanda strip
taglinestringopsionalSatu baris janji produk, maks 180
descriptionstringopsionalDeskripsi singkat, maks 3000
coverUrlstring (url)opsionalURL media cover
linksarrayopsionalMaks 8 item { label, url }
isPublishedbooleanopsionaldefault true
curl -X POST https://YOUR-DOMAIN/api/ingest \
  -H 'Authorization: Bearer YOUR_AI_INGEST_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "create_app",
    "name": "Orbit",
    "slug": "orbit",
    "tagline": "Personal finance, in perfect motion.",
    "links": [{ "label": "Open app", "url": "https://example.com" }]
  }'

2. Menulis update progres

action: "create_update" — catat progres terbaru untuk aplikasi yang sudah ada.

FieldTipeWajibKeterangan
appSlugstringwajibSlug aplikasi yang sudah ada
titlestringwajibJudul update, maks 160
descriptionstringopsionalIsi update, maks 5000
statusenumopsionalplanning | building | testing | shipped (default building)
versionstringopsionalContoh v0.8.0, maks 40
mediaarray urlopsionalMaks 12 URL media Cloudinary
isPublishedbooleanopsionaldefault true
curl -X POST https://YOUR-DOMAIN/api/ingest \
  -H 'Authorization: Bearer YOUR_AI_INGEST_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "action": "create_update",
    "appSlug": "orbit",
    "title": "Dashboard baru siap diuji",
    "description": "Filter kategori dan ringkasan pengeluaran sudah masuk tahap testing.",
    "status": "testing",
    "version": "v0.8.0",
    "media": ["https://res.cloudinary.com/YOUR_CLOUD/image/upload/.../preview.png"],
    "isPublished": true
  }'

3. Upload media

POST /api/ingest/upload (multipart) — upload preview ke Cloudinary. Respons berisi URL yang bisa dipakai di field media.

Batas file: maksimal 10MB. Tipe yang diizinkan: PNG, JPEG, WebP, GIF, MP4, WebM, MOV. Format lain (termasuk SVG) ditolak demi keamanan.

curl -X POST https://YOUR-DOMAIN/api/ingest/upload \
  -H 'Authorization: Bearer YOUR_AI_INGEST_TOKEN' \
  -F 'appSlug=orbit' \
  -F 'file=@./preview.png'

// Respons
{ "ok": true, "url": "https://res.cloudinary.com/.../preview.png",
  "publicId": "progress-pulse/orbit/xxxx", "resourceType": "image",
  "width": 1200, "height": 630 }

4. Meminta draft copy (opsional)

action: "draft_copy" — butuh OPENAI_API_KEY di server. AI menghasilkan draft JSON yang bisa lo review sebelum dikirim lewat create_update.

FieldTipeWajibKeterangan
appNamestringwajibNama aplikasi untuk konteks
contextstringwajibCatatan bebas, min 8 maks 6000
tonestringopsionalContoh: clear, optimistic, concise
{
  "action": "draft_copy",
  "appName": "Orbit",
  "context": "Added category filtering and a monthly overview graph. QA begins today.",
  "tone": "clear, optimistic, concise"
}

// Respons
{ "draft": {
    "title": "Filter kategori dan grafik bulanan siap diuji",
    "description": "Ringkasan pengeluaran kini lebih tajam...",
    "status": "testing",
    "version": "v0.8.0"
  }
}

Kode error

KodeArti
400Payload tidak valid atau slug sudah dipakai
401Token AI tidak dikirim atau salah
404appSlug / update tidak ditemukan
413File upload melebihi 10MB
415Tipe file tidak diizinkan
429Terlalu banyak request
500Kesalahan server / database
503Konfigurasi env belum lengkap

Mulai cepat untuk agent AI

Alur standar: create_app (sekali) → upload media → create_update dengan media URL. Kalau mau copy yang lebih hidup, ambil draft_copy dulu.

Referensi cepat juga tersedia di /api/ingest/schema dalam bentuk JSON yang bisa dibaca mesin.