> ## Documentation Index
> Fetch the complete documentation index at: https://docs.procfy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Centros de Custo

## **Introdução**

Na API do Procfy os centros de custo são representados por um objeto JSON com os seguintes atributos:

<Info>
  Atributos com o valor `null` serão retornados na resposta.
</Info>

| Atributo    | Tipo    | Descrição                              |
| :---------- | :------ | :------------------------------------- |
| id          | integer | Identificador único do centro de custo |
| name        | string  | Nome do centro de custo                |
| description | text    | Descrição do centro de custo           |

***

## **Rotas**

| Método | Endpoint                  | Descrição                                |
| :----- | :------------------------ | :--------------------------------------- |
| GET    | /api/v1/cost\_centers     | Visualizar vários centros de custo       |
| GET    | /api/v1/cost\_centers/:id | Visualizar um centro de custo específico |
| POST   | /api/v1/cost\_centers     | Criar um centro de custo                 |
| PUT    | /api/v1/cost\_centers/:id | Editar um centro de custo                |
| DELETE | /api/v1/cost\_centers/:id | Excluir um centro de custo               |

#### **Visualizar vários centros de custo**

O Procfy utiliza o padrão de paginação para retornar os resultados das requisições. Para mais informações sobre paginação, consulte a seção [**paginação**](/paginacao#introducao).

Para visualizar vários centros de custo, você deve fazer uma requisição para a API utilizando o método `GET` no endpoint correspondente ao objeto que deseja visualizar.

```text theme={null}
GET /api/v1/cost_centers
```

#### **Parâmetros aceitos**

| Parâmetro | Tipo    | Descrição                      |
| :-------- | :------ | :----------------------------- |
| page      | integer | Número da página               |
| items     | integer | Quantidade de itens por página |

#### **Visualizar um centro de custo específico**

Para visualizar um centro de custo específico, você deve fazer uma requisição para a API utilizando o método `GET` no endpoint correspondente ao objeto que deseja visualizar.

```text theme={null}
GET /api/v1/cost_centers/:id
```

#### **Criar um centro de custo**

Para criar um objeto, você deve fazer uma requisição para a API utilizando o método `POST` no endpoint correspondente ao objeto que deseja criar.

```text theme={null}
POST /api/v1/cost_centers
```

#### **Editar um centro de custo**

Para editar um objeto, você deve fazer uma requisição para a API utilizando o método `PUT` no endpoint correspondente ao objeto que deseja editar.

```text theme={null}
PUT /api/v1/cost_centers/:id
```

#### **Excluir um centro de custo**

Para excluir um objeto, você deve fazer uma requisição para a API utilizando o método `DELETE` no endpoint correspondente ao objeto que deseja excluir.

```text theme={null}
DELETE /api/v1/cost_centers/:id
```

***

## **Visualizando vários centros de custo**

A API utiliza o padrão de paginação para retornar os resultados das requisições. Para mais informações sobre paginação, consulte a seção [**paginação**](/paginacao#introducao).

> Exemplo de requisição para visualizar vários centros de custo

```text theme={null}
GET /api/v1/cost_centers
```

> Exemplo de resposta para visualizar vários centros de custo

```json theme={null}
{
  "page": {
    "page": 1,
    "items": 50,
    "pages": 1,
    "last": 1,
    "next": null,
    "prev": null,
    "count": 2,
    "from": 1,
    "to": 2
  },
  "data": [
    {
      "id": 58,
      "name": "Centro de custo 1",
      "description": "Descrição 1"
    },
    {
      "id": 59,
      "name": "Centro de custo 2",
      "description": "Descrição 2"
    }
  ]
}
```

***

## **Criando um centro de custo**

Para criar um objeto, você deve fazer uma requisição para a API utilizando o método `POST` no endpoint correspondente ao objeto que deseja criar.

A API vai retornar o objeto criado, caso não ocorra nenhum erro.

O corpo da requisição deve conter um objeto com os atributos necessários para a criação do objeto.

Os atributos são:

| Atributo    | Tipo   | Obrigatório | Descrição                    |
| :---------- | :----- | :---------- | :--------------------------- |
| name        | string | sim         | Nome do centro de custo      |
| description | text   | não         | Descrição do centro de custo |

Veja a lista de atributos necessários para a criação do objeto na [tabela de atributos](/centros-de-custo#introdução).

> Exemplo de requisição para criar um centro de custo

```text theme={null}
POST /api/v1/cost_centers
```

> Exemplo de corpo da requisição para criar um centro de custo

```json theme={null}
{
  "name": "Nome do centro de custo",
  "description": "Descrição"
}
```

> Exemplo de resposta para criar um centro de custo

```json theme={null}
{
  "id": 57,
  "name": "Nome do centro de custo",
  "description": "Descrição"
}
```

***

## **Editando um centro de custo**

Para editar um objeto, você deve fazer uma requisição para a API utilizando o método `PUT` no endpoint correspondente ao objeto que deseja editar.

A API vai retornar o objeto editado, caso não ocorra nenhum erro.

O corpo da requisição deve conter um objeto com os atributos necessários para a edição do objeto.

Veja a lista de atributos necessários para a edição do objeto na [tabela de atributos](/centros-de-custo#introdução).

> Exemplo de requisição para editar um centro de custo

```text theme={null}
PUT /api/v1/cost_centers/:id
```

> Exemplo de corpo da requisição para editar um centro de custo

```json theme={null}
{
  "id": 57,
  "name": "Nome do centro de custo alterado",
  "description": "Descrição"
}
```

> Exemplo de resposta para editar um centro de custo

```json theme={null}
{
  "id": 57,
  "name": "Nome do centro de custo alterado",
  "description": "Descrição"
}
```

***

## **Erros**

Erros que podem ocorrer durante a execução de um centro de custo.

Os erros de validação retornam um objeto com a chave `error` e `description` com a mensagem de erro. A mensagem de erro pode variar de acordo com o erro ocorrido.

#### **Erros de validação**

Os erros de validação são retornados quando os atributos obrigatórios não são informados ou quando os atributos informados não estão de acordo com as regras de validação.

> Exemplo de resposta para erro de validação na criação ou edição de um centro de custo (Objeto em branco)

```json theme={null}
{
  "error": "Registro inválido",
  "description": "A validação falhou: Nome não pode ficar em branco, Nome é muito curto (mínimo: 2 caracteres)"
}
```

> Exemplo de resposta para erro de enum na criação ou edição de uma categoria (transaction\_type)

```json theme={null}
{
  "error": "Enum inválido",
  "description": "Tipo de transação inválido"
}
```
