Skip to content

Instantly share code, notes, and snippets.

@ricardomaia
Last active June 21, 2025 09:58
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"
@dec-br
Copy link

dec-br commented Feb 26, 2025

Valeu pelo conteúdo amigo.
Uma dúvida, se eu quiser atualizar um ticket já criado, existe alguma função especifica?

@ricardomaia
Copy link
Author

Valeu pelo conteúdo amigo. Uma dúvida, se eu quiser atualizar um ticket já criado, existe alguma função especifica?

Atualizei o Gist. Veja que é um Gist antigo, feito em 2021 e os códigos mais antigos não foram modificados. Uma das principais mudanças é em relação a app-token, que antes não era exigida.

ticket-update.MD

@possebon
Copy link

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.

@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.

@clacostta
Copy link

Olá, estoutentando vincular um arquivo pdf em um ticket via api , porem estou recebendo esse erro...

[
"ERROR_GLPI_ADD",
"Você não tem permissão para executar essa ação."
]

Body :

{
"input": {
"documents_id": xxx,
"itemtype": "Ticket",
"items_id": xxxx
}
}
Endpoint
https://{}/apirest.php/Document_Item

poderia me ajudar ?

@GGxcollab
Copy link

Gostaria de saber como fechar um chamado

@jozafa
Copy link

jozafa commented Jun 21, 2025

Alguém sabe como atribuir o ticket a um usuário pela API?

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