Add dataset items

⚠️
Preview — this feature is being built; the design below is the spec.
POST https://app.syntic.ai/v1/evals/datasets/{dataset_id}/items

Add up to 1,000 items in one call. For larger sets, upload a JSONL file and use import. The call is all-or-nothing: if one item fails validation, none are added.

For how this fits into a full workflow, see Evaluations.

Headers

HeaderRequiredValue
AuthorizationYesBearer <key>: a private inference key (sk_live_...). See Authentication.
syntic-betaYes, while in previewevals-2026-12-01. Without it the call fails with 400 beta_required. See Versioning.
Content-TypeYesapplication/json
Idempotency-KeyNoUp to 255 characters. Retrying with the same key within 24 hours returns the first result instead of acting twice. See Idempotency.

Path parameters

ParameterTypeDescription
dataset_idstringStarts with evds_.

Body parameters

ParameterTypeRequiredNotes
itemsarrayYesObjects with input, optional ideal and tags.

Response

201 Created, Content-Type: application/json

{
  "dataset_id": "evds_01JD13B5D7F9H1K3M5P7",
  "added": 2,
  "item_ids": [
    "evit_01JD24C6E8G0J2L4N6Q8",
    "evit_01JD24D7F9H1K3M5P7R9"
  ],
  "item_count": 202
}

Examples

curl -sS "https://app.syntic.ai/v1/evals/datasets/evds_01JD13B5D7F9H1K3M5P7/items" \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "syntic-beta: evals-2026-12-01" \
  -H "Idempotency-Key: 8d6f0c1e-4b2a-4a57-9f0e-2f1d3c4b5a69" \
  -H "Content-Type: application/json" \
  -d '{
      "items": [
        {
          "input": {
            "ticket": "I was charged twice for order 88123.",
            "customer_tier": "gold"
          },
          "ideal": "Apologise, confirm the duplicate charge, say the refund is issued within 3 working days.",
          "tags": [
            "billing"
          ]
        },
        {
          "input": {
            "ticket": "How do I export my invoices?"
          },
          "ideal": "Point to Settings, Billing, Export, and mention CSV and PDF.",
          "tags": [
            "how-to"
          ]
        }
      ]
    }'

Errors

Errors use the error envelope and carry a request_id. Codes specific to this operation:

StatustypecodeWhen
400invalid_request_errorbeta_requiredThe syntic-beta header is missing.
400invalid_request_erroritem_invalidAn item fails input_schema; param points at it.
409conflict_errordataset_fullThe dataset would exceed 50,000 items.
404not_found_errordataset_not_foundNo dataset with this id.
401authentication_errorinvalid_api_keyThe key is missing, unknown, revoked or expired.
429rate_limit_errorrate_limitedToo many requests; wait for Retry-After. See Rate-limit headers.
Was this page helpful?