> ## Documentation Index
> Fetch the complete documentation index at: https://docs.neosantara.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Batch Processing

> Eksekusi ribuan permintaan asinkron secara massal dengan potongan harga token 50%.

Endpoint `/v1/batches` memungkinkan pemrosesan beban kerja skala besar secara asinkron tanpa membebani limit *Requests Per Minute* (RPM) harian Anda, dengan diskon harga 50% dibanding panggilan real-time.

<CodeGroup>
  ```python Python (OpenAI SDK) icon="python" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  from openai import OpenAI
  import os

  client = OpenAI(
      base_url="https://api.neosantara.xyz/v1",
      api_key=os.environ["NEOSANTARA_API_KEY"]
  )

  # 1. Buat tugas batch dari file masukan yang telah diunggah
  batch_job = client.batches.create(
      input_file_id="file-xyz123",
      endpoint="/v1/chat/completions",
      completion_window="24h"
  )

  print(f"Batch ID: {batch_job.id}, Status: {batch_job.status}")

  # 2. Periksa status batch secara berkala
  status = client.batches.retrieve(batch_job.id)
  print(f"Kemajuan: {status.request_counts.completed}/{status.request_counts.total}")
  ```

  ```bash cURL icon="terminal" theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
  # Membuat tugas batch
  curl -X POST https://api.neosantara.xyz/v1/batches \
    -H "Authorization: Bearer $NEOSANTARA_API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
      "input_file_id": "file-xyz123",
      "endpoint": "/v1/chat/completions",
      "completion_window": "24h"
    }'

  # Mengambil status batch
  curl https://api.neosantara.xyz/v1/batches/batch_abc123 \
    -H "Authorization: Bearer $NEOSANTARA_API_KEY"
  ```
</CodeGroup>

## Format Baris JSONL Input

File masukan batch harus berupa berkas `.jsonl` di mana setiap baris berisi objek tugas mandiri:

```json theme={"theme":{"light":"ayu-dark","dark":"catppuccin-latte"}}
{"custom_id": "req-1", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-3.8-flash", "messages": [{"role": "user", "content": "Halo 1"}]}}
{"custom_id": "req-2", "method": "POST", "url": "/v1/chat/completions", "body": {"model": "gemini-3.8-flash", "messages": [{"role": "user", "content": "Halo 2"}]}}
```

## Parameter Permintaan

| Parameter           | Tipe     | Wajib | Keterangan                                                     |
| :------------------ | :------- | :---- | :------------------------------------------------------------- |
| `input_file_id`     | `string` | Ya    | ID file yang diunggah ke `/v1/files` dengan tujuan `batch`.    |
| `endpoint`          | `string` | Ya    | Target endpoint: `/v1/chat/completions` atau `/v1/embeddings`. |
| `completion_window` | `string` | Ya    | Batas jendela waktu pemrosesan (saat ini `"24h"`).             |

## Siklus Status Batch

| Status        | Keterangan                                                                |
| :------------ | :------------------------------------------------------------------------ |
| `validating`  | Gateway sedang memverifikasi format sintaks berkas JSONL.                 |
| `in_progress` | Permintaan batch sedang diproses oleh model upstream.                     |
| `finalizing`  | Seluruh respons sedang dikumpulkan ke dalam file output.                  |
| `completed`   | Tugas selesai. File ID output siap diunduh melalui `/v1/files`.           |
| `failed`      | Pemrosesan batch gagal karena kesalahan skema atau saldo tidak mencukupi. |


## Related topics

- [Manajemen File](/id/gateway/operations/files.md)
- [Tugas Latar Belakang & Webhook](/id/gateway/responses-api/background-jobs.md)
- [Batas Rate & Throughput](/id/guides/rate-limits.md)
