API referenceAdmin APIService accountsCreate

Create a service account

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

Create a non-human identity for automation. API keys owned by a service account keep working when the person who made them leaves, and its requests appear in usage and audit logs under the account’s name rather than a member’s.

For how this fits into a full workflow, see Service accounts.

Headers

HeaderRequiredValue
AuthorizationYesBearer <admin key>: an Admin API key (sk_admin_...). Inference keys are refused with 403 admin_key_required. See Admin API keys.
syntic-betaYes, while in previewadmin-2026-11-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 64 lowercase letters, digits and -; unique within the workspace.
workspace_idstringYesThe workspace that owns it.
permissionsarray of stringsYesOne or more of inference, agents, files.
descriptionstringNoUp to 200 characters.

Response

201 Created, Content-Type: application/json

{
  "id": "svcacct_01JCH7K9M1P3R5T7V9X1",
  "type": "service_account",
  "name": "ci-billing",
  "description": "Release pipeline for the billing service",
  "workspace_id": "wrkspc_01JC0A2C4E6G8J0L2N4Q",
  "permissions": [
    "inference",
    "files"
  ],
  "status": "active",
  "api_key_count": 0,
  "trust_rule_count": 0,
  "created_by": "user_01J9Y0A2C4E6G8J0L2N4",
  "created_at": "2026-10-20T09:00:00Z",
  "last_used_at": null
}
FieldTypeDescription
idstringStarts with svcacct_.
workspace_idstringService accounts belong to exactly one workspace; usage is billed there.
permissionsarrayAny of inference, agents, files. Service accounts never get Admin API access.
statusstringactive or archived. Archived accounts cannot authenticate.
api_key_countintegerKeys owned by the account. Keys are created in the Console.
trust_rule_countintegerWorkload identity rules that let external tokens act as this account.
last_used_atstring or nullLast request made with one of its keys or tokens.

Examples

curl -sS "https://app.syntic.ai/v1/organizations/service_accounts" \
  -H "Authorization: Bearer $SYNTIC_ADMIN_KEY" \
  -H "syntic-beta: admin-2026-11-01" \
  -H "Idempotency-Key: 8d6f0c1e-4b2a-4a57-9f0e-2f1d3c4b5a69" \
  -H "Content-Type: application/json" \
  -d '{
      "name": "ci-billing",
      "workspace_id": "wrkspc_01JC0A2C4E6G8J0L2N4Q",
      "permissions": [
        "inference",
        "files"
      ],
      "description": "Release pipeline for the billing service"
    }'

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_takenThe workspace already has a service account with this name.
400invalid_request_errorinvalid_permissionA permission is not one of the three allowed values.
404not_found_errorworkspace_not_foundNo active workspace with this id.
401authentication_errorinvalid_api_keyThe admin key is missing, unknown, revoked or expired.
403permission_erroradmin_key_requiredAn inference key was used.
429rate_limit_errorrate_limitedToo many requests; wait for Retry-After. See Rate-limit headers.
Was this page helpful?