
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2025 10:40 AM
Hello, guys! I need some help!
Has anyone already made a REST API connection between ServiceNow and Cherwell?
I've tried everything, but I keep getting errors in my script. However, using Postman, I was able to reach the system and generate a token without any issues.
Could someone help me with the script? I've left a snippet below and attached the successful Postman call.
Thank you in advance guys!
var endpoint = 'https://{domain}/CherwellAPI/token';
var clientId = '{cilent_id}';
var username = '{username}';
var password = '{password}';
var authMode = 'internal';
var request = new sn_ws.RESTMessageV2();
request.setEndpoint(endpoint);
request.setHttpMethod('POST');
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var requestBody = 'grant_type=password' +
'&username=' + encodeURIComponent(username) +
'&password=' + encodeURIComponent(password) +
'&client_id=' + encodeURIComponent(clientId) +
'&auth_mode=' + encodeURIComponent(authMode);
request.setRequestBody(requestBody);
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
gs.info(httpStatus);
Solved! Go to Solution.
- Labels:
-
Integrations
-
restapi
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2025 01:19 PM
Brunão,
Pelo log, o erro java.net.UnknownHostException indica que o domínio/host informado não está sendo resolvido ou não está acessível a partir do ServiceNow. Isso acontece antes mesmo de enviar qualquer payload, ou seja, é um problema de DNS/rede e não de parâmetros do script em si.
Quando o ServiceNow tenta chamar o endpoint e não reconhece o host, ele retorna Status HTTP: 0 e “request not sent”.
Verifique a grafia do domínio
- Um caractere trocado ou um “https://” a mais ou a menos pode gerar UnknownHostException.
- Copie o domínio exato que está no Postman e cole no script para ter certeza de que não há erro de digitação.
Domínio interno vs. Internet
- Se o Cherwell estiver hospedado num ambiente interno (sem DNS público), o ServiceNow SaaS não conseguirá resolver o host diretamente.
- Nesse caso, você precisa de um MID Server rodando dentro da sua rede que possa fazer a ponte.
- Então, no script, você configuraria request.setMIDServer('nome_do_mid_server').
Firewall ou ACL
- Mesmo se o domínio for público, pode haver bloqueios de firewall que impedem a comunicação de entrada/saída.
- Verifique se o endpoint permite requisições vindas de IPs do ServiceNow.
Configurações de Outbound Network Access (SN)
- Em instâncias que usam Allowlisted Outbound (com Access Control Rules), é preciso cadastrar o domínio na lista de destinos permitidos.
- Verifique se o seu subdomínio Cherwell está liberado.
Teste de Conexão
- No módulo MID Server → IP Ranges ou nas configurações do seu proxy, garanta que o domínio do Cherwell seja acessível.
- Se você usar um MID Server, no menu MID Server → Script Include → ECCDebug, é possível “pingar” o domínio para conferir se resolve o DNS.
Enfim, o script em si já está formatado corretamente (Content-Type, parâmetros etc.). O UnknownHostException ocorre porque o ServiceNow não conseguiu nem sequer “enxergar” o host. Ajustando a parte de DNS/acesso em rede (ou usando MID Server, se for ambiente interno), você deve receber o HTTP 200 como no Postman.
Espero ter ajudado!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2025 11:02 AM
Olá, Bruno!
Tudo bem?
Olhando de fora assim é dificil entender o problema, mas vamos tentar...
Para integrar o ServiceNow ao Cherwell via REST (conseguir o token OAuth “password” grant), você pode seguir este passo a passo. A ideia é reproduzir exatamente o que funciona no Postman dentro do seu script de ServiceNow.
1. Compare tudo com o Postman
Verifique o corpo da requisição
- No Postman, está usando x-www-form-urlencoded com os seguintes campos:
- grant_type=password
- username={seu_usuario}
- password={sua_senha}
- client_id={seu_client_id}
- auth_mode=internal
- Confirme se não existem outros parâmetros (por exemplo, scope ou client_secret).
- No Postman, está usando x-www-form-urlencoded com os seguintes campos:
Verifique os cabeçalhos (Headers)
- Se no Postman for x-www-form-urlencoded, então deve ter:
- Content-Type: application/x-www-form-urlencoded
- Se for necessário client_secret, às vezes o Cherwell pede Authorization: Basic base64(client_id:client_secret). Mas no seu print não aparece, então provavelmente não é preciso.
- Se no Postman for x-www-form-urlencoded, então deve ter:
Verifique a capitalização
- Se no Postman estiver auth_mode=internal (tudo minúsculo), use exatamente assim no script.
- Cherwell pode ser sensível a maiúsculas e minúsculas, então revise também grant_type=“password”.
2. Script de Exemplo no ServiceNow
Abaixo um script completo, usando setRequestBody e encodeURIComponent para montar a requisição:
(function() {
var endpoint = 'https://{seuDominio}/CherwellAPI/token';
var username = '{seuUsuario}';
var password = '{suaSenha}';
var clientId = '{seuClientId}';
var authMode = 'internal'; // De acordo com seu Postman
var grantType = 'password';
var request = new sn_ws.RESTMessageV2();
request.setEndpoint(endpoint);
request.setHttpMethod('POST');
// Configura que o body é x-www-form-urlencoded
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// Monta o corpo igual ao Postman
var requestBody =
'grant_type=' + encodeURIComponent(grantType) +
'&username=' + encodeURIComponent(username) +
'&password=' + encodeURIComponent(password) +
'&client_id=' + encodeURIComponent(clientId) +
'&auth_mode=' + encodeURIComponent(authMode);
request.setRequestBody(requestBody);
// Opcional: Log detalhado para debug
request.setLogLevel('all');
var response = request.execute();
var httpStatus = response.getStatusCode();
var responseBody= response.getBody();
gs.info('Status HTTP: ' + httpStatus);
gs.info('Resposta: ' + responseBody);
})();
Observações Importantes
- Testar e checar logs
Vá em System Logs → Outbound HTTP Requests para ver o que de fato o ServiceNow enviou e qual a resposta do servidor Cherwell. - Comparar request do ServiceNow com o Postman
Os parâmetros (grant_type, username, etc.) e o Content-Type precisam estar idênticos. - Possível uso de client_secret
Se sua instância Cherwell precisar do client_secret, será necessário enviar um header Authorization: Basic base64(client_id:client_secret) ou então incluir client_secret no form, dependendo da documentação. Mas pelo print, parece que não é o caso. - Cuidados com SSL
Se houver erro de certificado, verifique se o ServiceNow confia no certificado do domínio do Cherwell. Geralmente seria um erro de TLS, não 400 ou 401.
Seguindo essas etapas, você deve obter o mesmo sucesso do Postman, recebendo o token com HTTP 200 OK no ServiceNow.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2025 12:17 PM
Obrigado pelo rápido retorno @Itallo Brandão.
Conferi todas as configurações que você sugeriu, mas, aparentemente não consegui acesso ainda assim.
Encaminho as mensagens que recebi nos LOGS e no SCRIPTS - BACKGROND em anexo!
Atenciosamente,
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-07-2025 12:39 PM
Could you please set your request body and header as follow:
var requestBody = {
"grant_type": grantType,
"username": username,
"password" : password,
"client_id" : clientId,
"auth_mode" : authMode
}
req.setRequestHeader('Content-Type','application/json');
request.setRequestBody(JSON.stringify(requestBody));
If you found this helpful, please hit the thumbs-up button and mark as correct. That helps others find their solutions.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
03-10-2025 11:11 AM
Hello Medi,
Thanks for your help! I believe is a case of server unreachable! My test via POSTMAN was made using a jumper. I was in doubt about the function that I made, I wasn't sure if was correct.
It seems it was the case!
Anyway, i appreciate your help very much!
Thank you for the fast reply!