---
title: "Create a single new dimension"
method: POST
path: "/dimensions"
tags: ["dimensions"]
---

# Create a single new dimension

`POST /dimensions`

Creates a new dimension with the provided details. All fields in the request body are required. This endpoint does not upsert: if a dimension with the same `reference_id` and `erp_type` already exists for the company, the request is rejected with a 400 error instead of updating the existing record. To update an existing dimension, use `POST /dimensions/bulk`, which upserts by `reference_id` + `erp_type`.

## Headers

- `Authorization` string, required
- `X-Api-Key` string, required
- `X-API-Version` string
- `Idempotency-Key` string

## Request body

- object
  - `ottimate_company_id` integer, required — The Ottimate company ID this dimension belongs to
  - `erp_type` string, required — The dimension category label as displayed in the client's ERP system (e.g., 'Account', 'GLACCOUNT', 'Department'). This is client-specific.
  - `ottimate_type` 'account' | 'location' | 'department' | 'class' | 'project' | 'customer' | 'entity' | 'item' | 'warehouse' | 'task' | 'cost_type' | 'employee' | 'tax_code' | 'property' | 'company' | 'subsidiary', required — Ottimate's standardized dimension type code for consistent categorization.
  - `name` string, required — Display name of the dimension
  - `code` string, required — The GL code or short identifier for this dimension in the client's ERP system
  - `reference_id` string, required — A unique reference identifier that tracks this dimension across all client systems (ERP, inventory management, Ottimate)
  - `erp_dimension_id` string, required — The identifier assigned to this dimension by the client's ERP software

## Response `200`

Successfully created. The created dimension is returned nested under a `dimension` key, matching the shape of the GET /dimensions/{id} response. There is no timestamp field (e.g. `created_date`) in the response.

- DimensionsPostDimensionsRootResponse200
  - `version` string
  - `dimension` DimensionsPostResponsesContentApplicationJsonSchemaDimension
    - `id` string
    - `name` string
    - `erp_type` string — The dimension category label in client's ERP system
    - `code` string
    - `reference_id` string
    - `ottimate_type` 'account' | 'location' | 'department' | 'class' | 'project' | 'customer' | 'entity' | 'item' | 'warehouse' | 'task' | 'cost_type' | 'employee' | 'tax_code' | 'property' | 'company' | 'subsidiary' — Ottimate's standardized dimension type code
    - `erp_dimension_id` string
    - `ottimate_company_id` integer

## Other responses

- `400` — Bad Request. Also returned when a dimension with the same `reference_id` and `erp_type` already exists for the company (this endpoint does not upsert).
- `403` — Forbidden - Access denied or insufficient permissions

---

[API](https://skmtc.dev/ottimate/apis/api-reference.md) · [All operations](https://skmtc.dev/ottimate/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ottimate/api-reference/revisions/ba91ff4c6969/schema)
