Skip to content

Instantly share code, notes, and snippets.

@ricardomaia
Last active April 17, 2025 20:10
Show Gist options
  • Save ricardomaia/1b1e6c768d2d666fce1fe299113b05fb to your computer and use it in GitHub Desktop.
Save ricardomaia/1b1e6c768d2d666fce1fe299113b05fb to your computer and use it in GitHub Desktop.
GLPI API

Para obter um token de API no GLPI, você precisa seguir os seguintes passos:

  1. Habilitar a API REST no GLPI Primeiro, verifique se a API REST está habilitada:

Faça login no GLPI como administrador

  • Vá para Configuração > Geral > APIs
  • Certifique-se de que a opção "Habilitar API REST" esteja ativada
  1. Criar um token de API para um usuário
  • Vá para Administração > Usuários
  • Selecione o usuário para o qual deseja criar o token
  • Vá para a seção "Chaves de acesso remoto"
  • Marque a opção "re-gerar" e clique em "Salvar"
  • Copie a chave gerada
  1. Token da aplicação:
  • Vá para Configuração > Geral > APIs
  • Clique no botão "Adicionar clientes da API"
  • Insira um nome
  • Marque a opção "Ativo" como "Sim"
  • Preencha os campos "Início do intervalo de endereços IPv4" e "Fim do intervalo de endereços IPv4"
  • Clique no botão "Adicionar"
  • Selecione o cliente criado e copie o token.
curl -X GET \
  -H "Content-Type: application/json" \
  -H "Authorization: user_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  "https://glpi.exemplo.com.br/apirest.php/initSession"

Visualizar os campos disponíveis para itemtype ITILCategory

curl --request GET \
  --url https://glpi.exemplo.com.br/apirest.php/listSearchOptions/ITILCategory \
  --header 'App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --header 'Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Retornar a lista de categorias que estejam listadas na interface simplificada (campo 3). Você pode ajustar o parâmetro range caso deseje evitar a paginação dos resultados.

curl  -g -X GET \  
  -H 'App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  -H 'Content-Type: application/json' \
  -H 'Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  'https://glpi.exemplo.com.br/apirest.php/search/ITILCategory?range=0-500' \
  criteria[0][link]=AND&
  criteria[0][field]=3&
  criteria[0][searchtype]=equals&
  criteria[0][value]=1'

Inicializar a sessão para obter o Session-Token:

curl -X GET \
-H 'Content-Type: application/json' \
-H "Authorization: user_token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
'https://glpi.exemplo.com.br/apirest.php/initSession'

Criar um Ticket

curl --request POST \
  --url https://glpi.exemplo.com.br/apirest.php/Ticket \
  --header 'App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  --header 'Content-Type: application/json' \
  --header 'Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' \
  --data '{
	"input": {
		"name": "Ticket aberto pela API",
		"content": "Descricao do ticket",
		"priority": "1",
		"impact": "4",
		"urgency": "5",
		"type": "2",
		"itilcategories_id": "1"
	}
}'

Visualizar os campos disponíveis para itemtype Ticket:

curl -g -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
'https://glpi.exemplo.com.br/apirest.php/listSearchOptions/Ticket'

Retornar os tickets abertos para um determinado usuário em um intervalo de tempo.

No exemplo abaixo utilizei o nome de usuário johndoe e o período entre as 9h do dia 13/04/2020 às 9h do dia 14/04/2020:

curl -g -X GET \
-H 'Content-Type: application/json' \
-H "Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
'https://glpi.exemplo.com.br/apirest.php/search/Ticket? \ 
criteria[0][link]=AND&
criteria[0][field]=4&
criteria[0][searchtype]=contains&
criteria[0][value]=johndoe&
criteria[1][link]=AND&
criteria[1][field]=15&
criteria[1][searchtype]=morethan&
criteria[1][value]=2020-04-13 09:00:00&
criteria[2][link]=AND&
criteria[2][field]=15&
criteria[2][searchtype]=lessthan&
criteria[2][value]=2020-04-14 09:00:00
'
curl -v -X PUT \
  -H "Content-Type: application/json" \
  -H "Session-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "App-Token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -d '{
    "input": {
      "name": "Novo título do ticket",
      "content": "Nova descrição do ticket",
      "status": 2,
      "priority": 3
    }
  }' \
  "https://glpi.exemplo.com.br/apirest.php/Ticket/1"
@ricardomaia
Copy link
Author

Opa, os valores de status, prioridade, urgência, impacto e tipo de chamado, não tem como retornar via API? Estou procurando na documentação e não encontro isso. A ideia seria retornar pela API a lista de possíveis valores para cada um desse tipo de campo.

Até onde sei esses valores são fixos (hardcoded) e são definidos no arquivo src/CommonITILObject.php (https://github.com/glpi-project/glpi/blob/24b5a3cd0999e74dba1a812cc394fefafda7f737/src/CommonITILObject.php) e não há função de API para retornar esses valores. Você os obtêm no chamado, mas não como uma lista isolada.

Status

   81    // STATUS
   82     const INCOMING      = 1; // new
   83     const ASSIGNED      = 2; // assign
   84     const PLANNED       = 3; // plan
   85     const WAITING       = 4; // waiting
   86     const SOLVED        = 5; // solved
   87     const CLOSED        = 6; // closed
   88     const ACCEPTED      = 7; // accepted
   89     const OBSERVED      = 8; // observe
   90     const EVALUATION    = 9; // evaluation
   91     const APPROVAL      = 10; // approbation
   92     const TEST          = 11; // test
   93     const QUALIFICATION = 12; // qualification

Urgência, Impacto e Prioridade

 3248     public static function getUrgencyName($value)
 3122     public static function getPriorityName($value)
 3371     public static function getImpactName($value)

Tipo do Chamado

O tipo de chamado está definido no arquivo src/Ticket.php (https://github.com/glpi-project/glpi/blob/24b5a3cd0999e74dba1a812cc394fefafda7f737/src/Ticket.php#L74). Também não acho que a API tenha uma opção para retornar esses 2 tipos fixos.

74   // Request type
75    const INCIDENT_TYPE = 1;
76   // Demand type
77    const DEMAND_TYPE   = 2;

@possebon
Copy link

Obrigado @ricardomaia pela informação. Vou ter que usar então fixo. Muito obrigado pela resposta.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment