Skip to content

Instantly share code, notes, and snippets.

@ricardomaia
Last active February 16, 2026 23:21
Show Gist options
  • Select an option

  • Save ricardomaia/1b1e6c768d2d666fce1fe299113b05fb to your computer and use it in GitHub Desktop.

Select an option

Save ricardomaia/1b1e6c768d2d666fce1fe299113b05fb to your computer and use it in GitHub Desktop.
GLPI API

Note

Devido ao numero crescente de comentários e dúvidas nesse simples Gist, decidi organizar melhor as principais funções da API REST do GLPI em https://glpi-rest-api.surge.sh/

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"
@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?

@Naisaas
Copy link

Naisaas commented Nov 21, 2025

Preciso de um auxilio. Estou usando a API do GLPI para fazer uma automação pelo N8N, porém não estou conseguindo postar um comentário.
Estou usando as credenciais session-token e app-token, e no body {input: {"content": "mensagem"}} e o method post.
Mas ele não está respondendo como esperado.

@flaviobunker
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 ?

Bom dia, tudo bem? Conseguiu resolver seu problema? Tenho a solução

@amatiuzo
Copy link

amatiuzo commented Jan 7, 2026

Bom dia
Estou com o mesmo problema, agradeço se puder compartilhar a solução

@fellipemanosso
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 ?

Conseguiu resolver isso?

@GCSBOSS
Copy link

GCSBOSS commented Feb 16, 2026

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 ?

Tenho o mesmo problema. O perfil tem permissão para fazer isso pela GUI, o que me leva a pensar que é algo de errado na requisição.

@clacostta @fellipemanosso @amatiuzo @flaviobunker

---- EDIT ----

Consegui descobrir o problema 😭

Para chamar POST apirest.php/Document_Item para um ticket, o seu perfil deve ter permissão para editar o ticket. No meu caso o perfil de usuário comum só pode criar o ticket e não editar, daí o problema de permissão ao tentar associar o documento ao ticket. Ao fazer a associação com um perfil de técnico (que pode editar o ticket), funcionou perfeitamente.

@ricardomaia
Copy link
Author

ricardomaia commented Feb 16, 2026

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 ?

Tenho o mesmo problema. O perfil tem permissão para fazer isso pela GUI, o que me leva a pensar que é algo de errado na requisição.

@clacostta @fellipemanosso @amatiuzo @flaviobunker

Vincular arquivo PDF ao ticket

O endpoint Document_Item e o payload que você está usando estão corretos. O erro "Você não tem permissão para executar essa ação" indica um problema de permissão do perfil do usuário no GLPI, não um erro na chamada da API.

As causas mais prováveis são:

  • Perfil do usuário sem permissão de escrita em Documentos: No GLPI, vá em Administração > Perfis > [perfil do usuário], aba Gerenciamento, e verifique se a permissão de Documentos inclui Criar e Atualizar.
image
  • Permissão de vinculação ao Ticket: O usuário precisa ter permissão de escrita no Ticket ao qual está tentando vincular o documento. Se o ticket pertence a outra entidade ou o perfil não permite editar aquele ticket, a vinculação será recusada.

  • Entidade diferente: Se o documento e o ticket estão em entidades diferentes e o perfil não é recursivo, a vinculação será bloqueada.

Lembre-se também de seguir os passos:

  1. Iniciar sessão
  2. Criar ticket
  3. Upload do Documento
  4. Vincular Documento ao Ticket

1) Iniciar Sessão

GET /apirest.php/initSession

Headers:

Content-Type: application/json
App-Token: [APP_TOKEN]
Authorization: user_token [USER_TOKEN]

2) Criar o ticket

POST /apirest.php/Ticket

Headers:

Content-Type: application/json
App-Token: [APP_TOKEN]
Session-Token: [SESSION_TOKEN]

Body (JSON):

{
  "input": {
    "name": "Ticket de teste - Upload PDF via API",
    "content": "Ticket criado via API para testar vinculacao de documento PDF.",
    "type": 1,
    "urgency": 3,
    "priority": 3
  }
}

3) Upload do Documento

POST /apirest.php/Document

Headers:

App-Token: [APP_TOKEN]
Session-Token: [SESSION_TOKEN]

Body (multipart/form-data):

Campo Valor
uploadManifest {"input":{"name":"teste.pdf","_filename":["teste.pdf"]}} (type: application/json)
filename[0] arquivo teste.pdf (binary)

Importante!
Esta requisição não usa Content-Type: application/json. É multipart/form-data porque envia um arquivo binário.

Requisição em formato CURL

curl -s -X POST "https://glpi.example.com/apirest.php/Document" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]" \
  -F 'uploadManifest={"input":{"name":"teste.pdf","_filename":["teste.pdf"]}};type=application/json' \
  -F "filename[0]=@/caminho/para/teste.pdf"

Os pontos-chave:

  • -F (não -d): indica `multipart/form-dataP , necessário para envio de arquivo binário
  • uploadManifest: é o JSON de metadados enviado como parte do form, com ;type=application/json no final para indicar o content-type desse campo
  • filename[0]=@: o @ faz o curl ler o conteúdo do arquivo e enviá-lo como binary upload
  • Não se coloca header Content-Type: application/json. O curl define automaticamente multipart/form-data quando se usa -F.

4) Vincular Documento ao Ticket

POST /apirest.php/Document_Item

Headers:

Content-Type: application/json
App-Token: [APP_TOKEN]
Session-Token: [SESSION_TOKEN]

Body (JSON):

{
  "input": {
    "documents_id": 1,
    "itemtype": "Ticket",
    "items_id": 3
  }
}

Importante!
Substitua em documents_id o ID retornado no passo 3 e items_id pelo ID do ticket do passo 2.

@ricardomaia
Copy link
Author

ricardomaia commented Feb 16, 2026

Preciso de um auxilio. Estou usando a API do GLPI para fazer uma automação pelo N8N, porém não estou conseguindo postar um comentário. Estou usando as credenciais session-token e app-token, e no body {input: {"content": "mensagem"}} e o method post. Mas ele não está respondendo como esperado.

Incluir comentário em um chamado

curl -s -X POST "https://glpi.example.com/apirest.php/ITILFollowup" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]" \
  --data-raw '{"input":{"itemtype":"Ticket","items_id":3,"content":"Comentario de teste postado via API."}}'

Importante!
Substitua o valor de items_id pelo ID do ticket no qual quer inserir o comentário

@ricardomaia
Copy link
Author

ricardomaia commented Feb 16, 2026

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

Atribuir um ticket a um usuário

curl -s -X POST "https://glpi.example.com/apirest.php/Ticket_User" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]" \
  --data-raw '{"input":{"tickets_id":3,"users_id":8,"type":2}}'

Valores para type:

  • 1 - Requerente
  • 2 - Técnico (atribuído)
  • 3 - Observador

Importante!
Substitua o valor de users_id pelo ID do usuário a qual quer atribuir o chamado e tickets_id pelo ID do ticket.

@ricardomaia
Copy link
Author

ricardomaia commented Feb 16, 2026

Gostaria de saber como fechar um chamado

Fechar um chamado

curl -s -X PUT "https://glpi.example.com/apirest.php/Ticket/3" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]" \
  --data-raw '{"input":{"id":3,"status":6}}'

Valores para status:

  • 1 - Novo
  • 2 - Em atendimento (atribuído)
  • 3 - Planejado
  • 4 - Pendente
  • 5 - Solucionado
  • 6 - Fechado

@ricardomaia
Copy link
Author

Listar usuários

curl -s -X GET "https://glpi.example.com/apirest.php/User" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]"

Por padrão retorna os primeiros 20 registros. Para paginar, use o parâmetro range na URL:

curl -s -X GET "https://glpi.example.com/apirest.php/User?range=0-49" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]"

Para buscar um usuário específico por nome, use searchText:

curl -s -X GET "https://glpi.example.com/apirest.php/User?searchText[name]=ricardo" \
  -H "Content-Type: application/json" \
  -H "App-Token: [APP_TOKEN]" \
  -H "Session-Token: [SESSION_TOKEN]"

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