# Get KObjects (custom objects)

> GET /v1/klasses/{name} · Core resources API

Source: https://developer.kustomer.com/api/core-resources/get-kobjects-custom-objects

```http
GET https://{orgname}.api.kustomerapp.com/v1/klasses/{name}
Authorization: Bearer <API key>
```

## Authorization

Requires any one of these roles: `org.permission.klass.read`; or legacy `org.user.klass.read`, `org.admin.klass.read`. The API key or user must hold at least one of them. Legacy roles predate permission sets and still work.

Retrieves a KObject (custom object) based on the Klass name.

To learn more, see [Data Model Overview](https://support.kustomer.com/data-model-overview-SyIS1S3zM).

## About KObjects (custom objects)

A KObject is one record of a custom type that you define, such as a single order, booking or device. It belongs to a customer or company, shows up on their timeline, and can be searched and used in workflows like built-in data.

Custom objects bring records from your own systems into Kustomer. Two resources work together: a [Klass](https://developer.kustomer.com/api/core-resources#klasses) is the type, such as "Order", with a name, icon, color and a set of typed attributes; a KObject is one instance of that type, such as order #4417 for Jane Doe. You define the Klass once, then create as many KObjects as you need. Agents see KObjects as cards on the customer or company timeline, and admins can use them in searches, workflows and [KViews](https://developer.kustomer.com/docs/apps/kviews).

A KObject is created under its Klass and usually linked to a customer (`customer`) or company (`company`), most often by an integration that syncs records as they change. KObject endpoints address the Klass by its `name` in the path (for example `/v1/klasses/ecomm-order/...`), not by its ID.

#### Key fields

| Field | Meaning |
| --- | --- |
| `title` | Required. The headline on the timeline card. `description` adds a second line. |
| `externalId` | Your ID for the record. Look the KObject up with it later instead of storing Kustomer's ID. |
| `custom` | Typed attributes defined in the Klass's metadata, named with suffixes such as `orderStatusStr` or `totalPriceNum`. These are searchable, for example as `kobject_custom_ecomm-order_totalPriceNum`. |
| `data` | Free-form JSON for anything else, such as line items. Use it for display, not search. |
| `images`, `icon`, `tags` | Up to 20 images, an icon that overrides the Klass icon, and up to 20 tags. |
| `importedAt` | Marks a record as historical data you are importing. |

KObjects of task Klasses also carry work-tracking fields: `status` (`open` or `done`), `assignedUser`, `queue`, `doneCount`, `reopenCount`, and `firstDone`/`lastDone` with timing details.

#### Limits and write behavior

A single client can create up to 120 KObjects per customer per minute; beyond that, creates return `429 Too Many Requests`. Records that include `importedAt` are exempt, so set it when you backfill. Updates merge into the existing record unless you pass `replace=true`, and they are subject to object rate limiting on repeated changes to the same KObject (see [rate limits](https://developer.kustomer.com/docs/concepts/rate-limits)). Custom `Str` attributes hold up to 1,024 characters.

#### Which endpoint to use

| To | Call |
| --- | --- |
| Create a KObject for a customer | [`POST /v1/customers/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/create-customer-kobject-custom-object), or [`POST /v1/klasses/{name}`](https://developer.kustomer.com/api/core-resources/create-kobject) with `customer` or `company` in the body |
| List a customer's KObjects of one Klass | [`GET /v1/customers/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/find-customer-kobjects-custom-objects) |
| List a company's KObjects of one Klass | [`GET /v1/companies/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/find-company-kobjects-custom-objects) |
| List every KObject of a Klass | [`GET /v1/klasses/{name}`](https://developer.kustomer.com/api/core-resources/get-kobjects-custom-objects) |
| Find a record by your own ID | [`GET /v1/klasses/{name}/externalId={externalId}`](https://developer.kustomer.com/api/core-resources/get-kobject-by-external-id) |
| Read, update or delete one KObject | [`GET`](https://developer.kustomer.com/api/core-resources/get-kobject-custom-object-by-id), [`PUT`](https://developer.kustomer.com/api/core-resources/update-kobject-custom-object-by-id) or [`DELETE /v1/klasses/{name}/{id}`](https://developer.kustomer.com/api/core-resources/delete-kobject-custom-object-by-id) |
| Create, update or delete up to 100 at once | [`POST`](https://developer.kustomer.com/api/core-resources/bulk-create-kobjects-custom-objects), [`PUT`](https://developer.kustomer.com/api/core-resources/bulk-batch-update-kobjects-custom-objects) or [`DELETE /v1/klasses/{name}/bulk`](https://developer.kustomer.com/api/core-resources/bulk-delete-kobjects-custom-objects) |

A typical sync looks the record up by `externalId`, creates it on `404`, and updates it otherwise. List endpoints page with `page` and `pageSize`, and accept `sort`, `fromDate` and `fields` to narrow the results. Bulk requests run asynchronously and return a bulk operation to poll; see [bulk operations](https://developer.kustomer.com/docs/guides/bulk-operations). Bulk deletes take the IDs as a comma-separated `ids` query parameter. Add `getS3DataUrls=true` when reading a single KObject to get signed URLs for its attachment fields.

Related: [Klasses](https://developer.kustomer.com/api/core-resources#klasses), [Custom objects (KObjects)](https://developer.kustomer.com/docs/concepts/custom-objects), [Custom attributes](https://developer.kustomer.com/api/core-resources#custom-attributes), [Comments](https://developer.kustomer.com/api/core-resources#comments)

### Recipes

#### 1. Sync a record from your system by external ID

Create or update one KObject whenever a record changes in your system, such as an order in your store, without storing Kustomer's IDs.

**Step 1.** [`GET /v1/customers/externalId={externalId}`](https://developer.kustomer.com/api/core-resources/get-customer-by-external-id.md). Find the customer the record belongs to. A `404` means Kustomer doesn't know them yet; [create the customer](https://developer.kustomer.com/api/core-resources/create-customer) first, then continue with its `id`.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/customers/externalId=$CUSTOMER_EXTERNAL_ID" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
CUSTOMER_ID=$(kusty api GET "/v1/customers/externalId=$CUSTOMER_EXTERNAL_ID" | jq -r '.data.id')
```

**Step 2.** [`GET /v1/klasses/{name}/externalId={externalId}`](https://developer.kustomer.com/api/core-resources/get-kobject-by-external-id.md). Look the record up by your own ID. The path takes the Klass `name` (such as `ecomm-order`), not its ID. A `404` means it doesn't exist yet, so create it; otherwise keep its `id` and `rev` for the update.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/klasses/$KLASS/externalId=$ORDER_ID" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
kusty api GET "/v1/klasses/$KLASS/externalId=$ORDER_ID" --fields id,attributes.rev > found.json
# exit code 4 means not found: create it in the next step
```

**Step 3.** [`POST /v1/customers/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/create-customer-kobject-custom-object.md). Create it on the customer. `title` is required and is what agents see on the timeline. Put values you'll search, filter or automate on in `custom`, using the attribute names defined in the Klass's metadata, and anything else (such as line items) in `data`. Always send `externalId` so the next sync finds this record.

```bash title="cURL"
curl --request POST "https://api.kustomerapp.com/v1/customers/$CUSTOMER_ID/klasses/$KLASS" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "externalId": "order-4417",
    "title": "Order #4417",
    "description": "2 items, paid",
    "custom": { "orderStatusStr": "paid", "totalPriceNum": 64.67 },
    "data": { "items": [{ "sku": "HOOD-2", "qty": 1 }, { "sku": "TEE-3", "qty": 1 }] }
  }'
```

```bash title="kusty"
kusty api POST /v1/customers/$CUSTOMER_ID/klasses/$KLASS --data @order.json
```

**Step 4.** [`PUT /v1/klasses/{name}/{id}`](https://developer.kustomer.com/api/core-resources/update-kobject-custom-object-by-id.md). If it already existed, send the changes with the `rev` you read. The update merges into the record (pass `replace=true` to overwrite it instead). If someone changed the record in between, the API answers `409 Conflict`; read it again and reapply your change.

```bash title="cURL"
curl --request PUT "https://api.kustomerapp.com/v1/klasses/$KLASS/$KOBJECT_ID" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY" \
  --header "Content-Type: application/json" \
  --data "{\"custom\": {\"orderStatusStr\": \"shipped\"}, \"rev\": $REV}"
```

```bash title="kusty"
kusty api PUT /v1/klasses/$KLASS/$KOBJECT_ID \
  --field custom.orderStatusStr=shipped --field rev:=$REV
```

> Updates are subject to object rate limiting, so collapse bursts of changes to the same record into one write. See [rate limits](https://developer.kustomer.com/docs/concepts/rate-limits) and the full [orders integration guide](https://developer.kustomer.com/docs/guides/kobject-orders-integration).

#### 2. Backfill historical records in bulk

Import past records, such as a year of orders, 100 at a time without tripping the per-customer create limit.

**Step 1.** [`POST /v1/klasses/{name}/bulk`](https://developer.kustomer.com/api/core-resources/bulk-create-kobjects-custom-objects.md). Send an array of up to 100 KObjects. Give each one its `customer` (or `company`), your `externalId`, and `importedAt`, which marks it as historical data and exempts it from the 120-creates-per-customer-per-minute limit. Add a `_clientRef` to every item so you can match results to your source rows. The response is a bulk operation; keep its `id`.

```bash title="cURL"
curl --request POST "https://api.kustomerapp.com/v1/klasses/$KLASS/bulk" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY" \
  --header "Content-Type: application/json" \
  --data '[
    { "_clientRef": "order-1001", "externalId": "order-1001", "customer": "'"$CUSTOMER_ID"'", "title": "Order #1001", "importedAt": "2025-03-02T10:00:00Z" },
    { "_clientRef": "order-1002", "externalId": "order-1002", "customer": "'"$CUSTOMER_ID"'", "title": "Order #1002", "importedAt": "2025-03-04T16:30:00Z" }
  ]'
```

```bash title="kusty"
BULK_ID=$(kusty api POST /v1/klasses/$KLASS/bulk --data @orders-page-1.json | jq -r '.data.id')
```

**Step 2.** [`GET /v1/bulk/{id}`](https://developer.kustomer.com/api/core-resources/get-bulk-operation-by-id.md). The records are created in the background. Poll the bulk operation every few seconds, backing off, until `status` is `complete`. `batchErrors` is `true` if any record failed.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/bulk/$BULK_ID" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
kusty api GET /v1/bulk/$BULK_ID --fields attributes.status,attributes.batches,attributes.batchErrors
```

**Step 3.** [`GET /v1/bulk/{id}/batches`](https://developer.kustomer.com/api/core-resources/get-bulk-operation-batches.md). Read the per-record results. Each `results` entry has your `_clientRef`, a `status` of `created` or `error`, and the new `objectId` or an `error` reason. Retry only the failed rows.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/bulk/$BULK_ID/batches" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
kusty api GET /v1/bulk/$BULK_ID/batches --all \
  | jq -r '.data.attributes.results[]? | select(.status == "error") | [._clientRef, .error] | @tsv'
```

> Don't read the records back until the job is complete. See [bulk operations](https://developer.kustomer.com/docs/guides/bulk-operations) for the full polling flow.

#### 3. Show a customer's latest records in your own tool

Fetch the few most recent KObjects of one Klass for a customer, for example to show recent orders in a CRM sidebar or a chatbot.

**Step 1.** [`GET /v1/customers/email={email}`](https://developer.kustomer.com/api/core-resources/get-customer-by-email.md). Resolve the customer from what you have, here an email address. Use [`GET /v1/customers/externalId={externalId}`](https://developer.kustomer.com/api/core-resources/get-customer-by-external-id) if you have your own ID.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/customers/email=$EMAIL" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
CUSTOMER_ID=$(kusty api GET "/v1/customers/email=$EMAIL" | jq -r '.data.id')
```

**Step 2.** [`GET /v1/customers/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/find-customer-kobjects-custom-objects.md). List the customer's KObjects of the Klass with `sort=desc` and a small `pageSize`. Results are ordered by `createdAt`, so this returns the newest records first. Read `title`, `custom` and `externalId` from each.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/customers/$CUSTOMER_ID/klasses/$KLASS?sort=desc&pageSize=5" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
kusty api GET /v1/customers/$CUSTOMER_ID/klasses/$KLASS --query sort=desc --query pageSize=5 \
  | jq -r '.data[] | [.attributes.title, .attributes.custom.orderStatusStr] | @tsv'
```

#### 4. Pull new records of a Klass since your last run

Copy newly created KObjects into a warehouse or another system on a schedule, picking up where the previous run stopped.

**Step 1.** [`GET /v1/klasses/{name}`](https://developer.kustomer.com/api/core-resources/get-kobjects-custom-objects.md). List the Klass's records with `sort=asc` and `fromDate` set to the `createdAt` of the last record you processed. Only records created after it come back, oldest first, so you can page to the end safely.

```bash title="cURL"
curl "https://api.kustomerapp.com/v1/klasses/$KLASS?sort=asc&fromDate=$CHECKPOINT&pageSize=100" \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```

```bash title="kusty"
kusty api GET /v1/klasses/$KLASS --query sort=asc --query fromDate=$CHECKPOINT --all > new.jsonl
```

**Step 2.** Load the records, then save the last `createdAt` as the checkpoint for the next run. List responses leave out each record's free-form `data`; if you need it, read the record with [`GET /v1/klasses/{name}/{id}`](https://developer.kustomer.com/api/core-resources/get-kobject-custom-object-by-id).

```bash title="kusty"
CHECKPOINT=$(tail -n 1 new.jsonl | jq -r '.data.attributes.createdAt')
```

> `fromDate` and the sort order use `createdAt`, so this finds new records but not changes to older ones. To react to changes, trigger a workflow on `kustomer.kobject.<klass>.update`; see [triggers and actions](https://developer.kustomer.com/docs/workflows/triggers-and-actions).

### Example object

A real record from [`POST /v1/customers/{id}/klasses/{name}`](https://developer.kustomer.com/api/core-resources/create-customer-kobject-custom-object.md):

```json
{
  "type": "kobject.order",
  "id": "5826b2a30fcc2514008b2a99",
  "attributes": {
    "title": "Order #1059 (3 items ordered for $64.67)",
    "icon": "truck-delivery",
    "images": [
      "https://cdn.shopify.com/s/files/1/1489/4596/products/hoodie-2_1.jpg",
      "https://kustomer-integrations.s3.amazonaws.com/kusty-swag/img/koffee.png",
      "https://cdn.shopify.com/s/files/1/1489/4596/products/shirt-3_large.jpg?v=1473819771"
    ],
    "custom": {
      "orderStatusStr": "fulfilled",
      "shippingStatusStr": "fulfilled",
      "billingStatusStr": "authorized",
      "specialInstructionsStr": "The tshirt is a gift, can you include a gift bag?",
      "orderNumberNum": 1059,
      "orderDescriptionStr": "3 items ordered for $64.67",
      "totalPriceNum": 64.67,
      "orderUpdatedAt": "2016-11-06T13:54:29-05:00"
    },
    "tags": [],
    "updatedAt": "2016-11-12T06:11:47.466Z",
    "createdAt": "2016-11-12T06:11:47.466Z",
    "rev": 0
  },
  "relationships": {
    "org": {
      "links": {
        "self": "/v1/orgs/57bb5d2e32e83a130052e94e"
      },
      "data": {
        "type": "org",
        "id": "57bb5d2e32e83a130052e94e"
      }
    },
    "klass": {
      "link": {
        "self": "/v1/klasses/order"
      },
      "data": {
        "type": "klass",
        "id": "order"
      }
    },
    "customer": {
      "links": {
        "self": "/v1/customers/57c08ccde595371400462df2"
      },
      "data": {
        "type": "customer",
        "id": "57c08ccde595371400462df2"
      }
    }
  },
  "links": {
    "self": "/v1/klasses/orders/5826b2a30fcc2514008b2a99"
  }
}
```

Fields:

- `type` (string): `kobject.` followed by the Klass `name`, such as `kobject.order`. The same form names the Klass in metadata, KView and card contexts.
- `attributes.title` (string): Required on create, up to 256 characters. The headline agents see on the timeline card.
- `attributes.icon` (string): A Material Design Icons name. When the record has no icon of its own, the response shows the Klass's icon.
- `attributes.images` (array): Up to 20 image URLs shown on the card, such as product photos.
- `attributes.custom` (object): Typed attributes defined in the Klass's metadata (resource `kobject.<name>`). The suffix of each name sets its type. These are the fields you can search, filter and automate on.
- `attributes.custom.orderStatusStr` (string): A `Str` attribute, a string of up to 1,024 characters. Give it an `enumeration` in the metadata to make it a dropdown for agents.
- `attributes.custom.orderNumberNum` (integer): A `Num` attribute. Numbers are stored as numbers, so search can compare them.
- `attributes.custom.totalPriceNum` (number): A `Num` attribute. Search can filter on it with comparisons, as `kobject_custom_<klass>_totalPriceNum`.
- `attributes.custom.orderUpdatedAt` (string): An `At` attribute, an ISO 8601 date-time. Use these for your system's own timestamps; they are separate from Kustomer's `createdAt` and `updatedAt`.
- `attributes.updatedAt` (string): Changes on every write. List endpoints don't sort or filter by it, so they can't find records changed since a date.
- `attributes.createdAt` (string): When the record was created. You can set it on create, for example to your system's creation time when importing. List endpoints sort by it, and their `fromDate` filter uses it.
- `attributes.rev` (integer): The revision, incremented on every update. Send it back on `PUT` to fail with `409 Conflict` if the record changed since you read it.
- `relationships.klass` (object): The Klass this record belongs to. `data.id` is the Klass `name`, the value KObject paths take, not its ID.
- `relationships.customer` (object): The customer whose timeline shows this record. Set by creating through the customer path or by sending `customer` in the body.
- `links.self` (string): Built from the Klass's plural name, so it can differ from the `name` you use in paths.

### Relationships

- Points to **Klasses** via `relationships.klass`: Every KObject belongs to exactly one Klass, its type. KObject endpoints name the Klass in the path, and the Klass's `kobjects` link lists its records.
- Points to **Customers** via `relationships.customer`: The customer whose timeline shows this KObject. List a customer's KObjects of one Klass with `GET /v1/customers/{id}/klasses/{name}`.
- Points to **Companies** via `relationships.company`: The company whose timeline shows this KObject, set with `company` when you create it. List them with `GET /v1/companies/{id}/klasses/{name}`.
- Points to **Queues** via `relationships.queue`: For KObjects that are routed as work, such as tasks, the routing queue the KObject is in.
- Referenced by **Comments** via `relationships.object`: The KObject a comment is on. Comments attach only to KObjects; list a KObject's comments with `GET /v1/kobjects/{id}/comments`.
- Referenced by **Klasses** via `relationships.kobjects` (list): The records of this type. Each KObject belongs to one Klass, and KObject endpoints name the Klass in their path, such as `/v1/klasses/order/{id}`.

### Permissions

Fewest roles for a read-only integration: `org.permission.kobject.kobject_*.read`, `org.permission.customer.read`, `org.permission.klass.read`. For every endpoint: `org.permission.kobject.create`, `org.permission.kobject.delete`, `org.permission.kobject.kobject_*.read`, `org.permission.kobject.kobject_*.update`, `org.permission.customer.read`, `org.permission.klass.read`.

### Events

Workflow triggers:

- `kustomer.kobject.<klass>.create` (KObject Created (*klass*)): A custom object of that Klass is created, for example `kustomer.kobject.order.create`
- `kustomer.kobject.<klass>.update` (KObject Updated (*klass*)): A custom object of that Klass changes

Workflow actions:

- `kustomer.kobject.create` (Custom Object (KObject): Create): required inputs `klassName`, `title`, `data`
- `kustomer.kobject.create-with-customer` (Custom Object (KObject): Create with Customer): required inputs `klassName`, `customer`, `title`, `data`
- `kustomer.kobject.update` (Custom Object (KObject): Update): required inputs `id`, `klassName`, `title`, `data`
- `kustomer.kobject.find` (Custom Object (KObject): Lookup (By ID)): required inputs `id`, `klassName`
- `kustomer.kobject.delete` (Custom Object (KObject): Delete): required inputs `id`, `klassName`

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | string | yes | Klass name of the KObjects (custom objects). |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `page` | integer | no | Page number of results to return. |
| `pageSize` | integer | no | Number of results to return per page. |
| `sort` | string | no | Sort direction for results. |
| `fromDate` | string | no | Return resources after this date or cursor timestamp, using the endpoint's sort direction. |
| `fields` | string | no | Comma-separated response fields to project. The example is representative, not exhaustive; supported values are resource field names and custom field paths accepted by the endpoint handler. |

## Responses

### 200

OK

- `meta` (object, required)
  - `pageSize` (integer, required)
  - `page` (integer, required)
- `data` (array<object>, required)
  - `type` (string, required)
  - `id` (string, required)
  - `attributes` (object, required)
    - `title` (string, required)
    - `icon` (string, required)
    - `images` (array<string>, required)
    - `s3DataUrl` (string)
    - `custom` (object, required)
    - `tags` (array<any>, required)
    - `updatedAt` (string, required)
    - `createdAt` (string, required)
    - `rev` (integer, required)
    - `klassDisplayName` (string)
    - `klassMixins` (array<string>)
    - `firstDone` (object)
    - `lastDone` (object)
    - `doneCount` (integer)
    - `reopenCount` (integer)
    - `reopenFromDoneCount` (integer)
    - `queue` (string<object-id>)
    - `assignedUser` (string<object-id>)
    - `status` (string): One of: `open`, `done`.
  - `relationships` (object, required)
    - `org` (object, required)
    - `queue` (object)
    - `klass` (object, required)
  - `links` (object, required)
    - `self` (string, required)
- `links` (object, required)
  - `self` (string, required)
  - `first` (string, required)
  - `prev` (string, required, nullable)
  - `next` (string, required, nullable)

```json
{
  "meta": {
    "pageSize": 100,
    "page": 1
  },
  "data": [
    {
      "type": "kobject.order",
      "id": "5826ab180fcc2514008b2a94",
      "attributes": {
        "title": "Order #1059 (3 items ordered for $64.67)",
        "icon": "truck-delivery",
        "images": [
          "https://cdn.shopify.com/s/files/1/1489/4596/products/hoodie-2_1.jpg",
          "https://kustomer-integrations.s3.amazonaws.com/kusty-swag/img/koffee.png",
          "https://cdn.shopify.com/s/files/1/1489/4596/products/shirt-3_large.jpg?v=1473819771"
        ],
        "custom": {
          "orderStatusStr": "fulfilled",
          "shippingStatusStr": "fulfilled",
          "billingStatusStr": "authorized",
          "specialInstructionsStr": "The tshirt is a gift, can you include a gift bag?",
          "orderNumberNum": 1059,
          "orderDescriptionStr": "3 items ordered for $64.67",
          "totalPriceNum": 64.67,
          "orderUpdatedAt": "2016-11-06T13:54:29-05:00"
        },
        "tags": [],
        "updatedAt": "2016-11-12T05:39:36.976Z",
        "createdAt": "2016-11-12T05:39:36.976Z",
        "rev": 0,
        "firstDone": {
          "time": {
            "type": "integer",
            "example": 27122
          },
          "businessTime": {
            "type": "integer",
            "example": 27122
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2021-06-01T12:00:00Z"
          },
          "createdBy": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3b3"
          },
          "createdByTeam": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3b3"
          },
          "assignedTeam": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3"
          },
          "assignedUser": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3"
          },
          "commentCount": {
            "type": "integer",
            "example": 1
          }
        },
        "lastDone": {
          "time": {
            "type": "integer",
            "example": 27122
          },
          "businessTime": {
            "type": "integer",
            "example": 27122
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "example": "2021-06-01T12:00:00Z"
          },
          "createdBy": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3b3"
          },
          "createdByTeam": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3b3"
          },
          "assignedTeam": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3"
          },
          "assignedUser": {
            "type": "string",
            "format": "object-id",
            "example": "60b6b1b3b3b3b3b3b3b3b3"
          },
          "commentCount": {
            "type": "integer",
            "example": 1
          }
        },
        "doneCount": {
          "type": "integer",
          "example": 1
        },
        "reopenCount": {
          "type": "integer",
          "example": 1
        },
        "reopenDoneCount": {
          "type": "integer",
          "example": 1
        },
        "queue": {
          "type": "string",
          "format": "object-id",
          "example": "60b6b1b3b3b3b3b3b3b3b3"
        },
        "assignedUser": {
          "type": "string",
          "format": "object-id",
          "example": "60b6b1b3b3b3b3b3b3b3b3"
        },
        "status": {
          "type": "string",
          "example": "open"
        }
      },
      "relationships": {
        "org": {
          "links": {
            "self": "/v1/orgs/57bb5d2e32e83a130052e94e"
          },
          "data": {
            "type": "org",
            "id": "57bb5d2e32e83a130052e94e"
          }
        },
        "klass": {
          "link": {
            "self": "/v1/klasses/order"
          },
          "data": {
            "type": "klass",
            "id": "order"
          }
        },
        "queue": {
          "link": {
            "self": "/v1/queues/60b6b1b3b3b3b3b3b3b3b3"
          },
          "data": {
            "type": "queue",
            "id": "60b6b1b3b3b3b3b3b3b3b3"
          }
        }
      },
      "links": {
        "self": "/v1/klasses/orders/5826ab180fcc2514008b2a94"
      }
    }
  ],
  "links": {
    "self": "/v1/klasses/orders?page=1&pageSize=100",
    "first": "/v1/klasses/orders?page=1&pageSize=100",
    "prev": null,
    "next": null
  }
}
```

### 400

Bad Request

### 401

Unauthorized

### 403

Forbidden

### 404

Not Found

## Example request

```bash
curl --request GET \
  --url 'https://api.kustomerapp.com/v1/klasses/orders' \
  --header "Authorization: Bearer $KUSTOMER_API_KEY"
```
