# Key Concepts

Understand the following key concepts from which to better understand what the [entity object](#entity-object) is prior to preparing your REST API requests:

* [Entity type](#entity-type)
* [Entity](#entity)
* [Attributes](#attributes)

### Entity Type

An entity type describes a class of objects and their attributes. For example: a **Person** can be an entity type.

### Entity

An entity is an instance of an entity type / a single object. For example: **John Doe** is an instance of Person.

### Attributes

Attributes are characteristics that pertain to an entity type. An attribute represents a small piece of information about an entity. For example, the Person entity type could have an attribute called **date of birth**.

## Entity Object

The ProcessMaker REST API represents an entity object as the following endpoints based on these [key concepts](#key-concepts):

* [Type](#type)
* [Attributes](#attributes-1)
* [Relations](#relations)

Below is an example of an entity object of an entity of type file you may reference in the representations that follow.

```json
{
  "type": "file",
  "attributes": {
    "createdAt": "2019-11-19T13:37:46.824+0000",
    "createdBy": null,
    "documentType": "NONE",
    "modifiedAt": "2019-11-19T13:37:46.824+0000",
    "name": "Welcome to IDP.docx",
    "modifiedBy": null,
    "checkedOutBy": null,
    "id": "bd37f241-7b05-4ba8-ae0b-ab844daafd36",
    "content": null
  },
  "relations": {
    "parent": "/api/rest/folder/5f97858b-26e3-4180-80c4-25b176cbc35f"
  }
}
```

### Type

Type is a string that represents the type of an entity.

### Attributes

Attributes are JSON key-value pairs store data that pertain to an entity.

### Relations

Relations is a JSON object that represents references to and from a specified entity object. For example, a parent entity is defined by its child JSON objects. Inversely, the child JSON objects are collectively defined by its parent. Below is an example of a relation.

```json
"relations": {
            "parent": "/api/rest/folder/b9072a85-2214-4f55-9ca6-e29ad59167a1",
            "files": "/api/rest/folder/97869a7d-946a-4f7c-b612-34f5e5ab02ce/files"
        },
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://processmaker.gitbook.io/idp/idp-developer/key-concepts.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
