API referenceEvaluationsDatasetsCreate a dataset

Create a dataset

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

Create an evaluation dataset: a named set of test inputs, each optionally with the ideal output. Datasets are the fixed ground you run every prompt or model change against, so a change is judged on the same cases every time.

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.

Body parameters

ParameterTypeRequiredNotes
namestringYes1 to 100 characters, unique in the workspace.
descriptionstringNoUp to 500 characters.
input_schemaobjectNoJSON Schema for item inputs.

Response

201 Created, Content-Type: application/json

{
  "id": "evds_01JD13B5D7F9H1K3M5P7",
  "type": "eval_dataset",
  "name": "support-replies-v3",
  "description": "200 real tickets with approved answers",
  "item_count": 0,
  "input_schema": {
    "type": "object",
    "properties": {
      "ticket": {
        "type": "string"
      },
      "customer_tier": {
        "type": "string"
      }
    },
    "required": [
      "ticket"
    ]
  },
  "created_at": "2026-11-01T09:00:00Z",
  "updated_at": "2026-11-03T12:00:00Z"
}
FieldTypeDescription
idstringStarts with evds_.
item_countintegerItems in the dataset, up to 50,000.
input_schemaobject or nullOptional JSON Schema every item’s input must match. Catches malformed items at upload time.

Examples

curl -sS "https://app.syntic.ai/v1/evals/datasets" \
  -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 '{
      "name": "support-replies-v3",
      "description": "200 real tickets with approved answers",
      "input_schema": {
        "type": "object",
        "properties": {
          "ticket": {
            "type": "string"
          },
          "customer_tier": {
            "type": "string"
          }
        },
        "required": [
          "ticket"
        ]
      }
    }'

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.
409conflict_errorname_takenAnother dataset has this name.
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?