For a deeper look into our World Check One API, look into:

Overview |  Quickstart |  Documentation |  Downloads

question

Upvotes
Accepted
1 1 1 0

Getting 401 Unauthorized World Check API

import requests
import hmac
import hashlib
import base64
import time
import json
import io

null = None
false = None

# To get the GMT time string
dataformat = ("%a, %d %b %Y %H:%M:%S GMT")
datenow = time.gmtime()
date = time.strftime(dataformat, datenow)
print(date)

api_key = "xxxxxxxxxxxxxxxxxxxx"  # Enter your API key
api_secret = "xxxxxxxxxxxxxxxxxxxxxxx"  # Enter your API secret
group_id = "xxxxxxxxxxxxxxxxxxxxxxx"  # Enter your group Id
api_token = api_secret.encode()
path = "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2/cases"
gatewayurl = "/v2/"
gatewayhost = "rms-world-check-one-api-pilot.thomsonreuters.com"
content_type = "application/json"

name1 = "putin"
entity_type = "INDIVIDUAL"
bcontent = "{\n\"secondaryFields\": [],\n  \"entityType\": \"" + entity_type + "\",\n  \"customFields\": [],\n  \"groupId\":\"" + group_id + "\",\n  \"providerTypes\": [\n    \"WATCHLIST\"\n  ],\n  \"name\": \"" + name1 + "\"}"
content = bcontent.encode('utf-8')
length = len(content)
str_length = str(length)

datatosign = "(request-target): post " + gatewayurl + "cases/screeningRequest\n" + \
             "host: " + gatewayhost + "\n" + \
             "date: " + date + "\n" + \
             "content-type: " + content_type + "\n" + \
             "content-length: " + str_length + "\n" + \
             content.decode()

print(datatosign)

byte_datatosign = datatosign.encode()


def hbase(byte_datatosign, api_token):
    encrypt = hmac.new(api_token, byte_datatosign, digestmod=hashlib.sha256)
    digest_maker = encrypt.digest()
    base = base64.b64encode(digest_maker)
    return base.decode()


hmacbase = hbase(byte_datatosign, api_token)
print(hmacbase)

authorisation = "Signature keyId=\"" + api_key + "\"" + ",algorithm=\"hmac-sha256\"" + ",headers=\"(request-target) host date content-type content-length\"" + ",signature=\"" + hmacbase + "\""
print(authorisation)

headers = {

    'Authorization': authorisation,
    'Date': date,
    'Content-Type': content_type,
    'Content-Length': str_length,
    'Accept': "*/*",
    'Cache-Control': "no-cache",
    'Host': "rms-world-check-one-api-pilot.thomsonreuters.com",
    'Accept-Encoding': "gzip, deflate",
    'Connection': "keep-alive",
    'cache-control': "no-cache"
}
print(headers)

try:
    result = requests.request("POST", path, headers=headers, data=content)
    result.raise_for_status()
    print(result.status_code)
    print(result.headers)
    result_json = result.json()

    with io.open("result_json.txt", 'w', encoding="utf-8") as outfile:
        outfile.write(str(json.dumps(result_json, ensure_ascii=False, indent=4)))
    print(result_json)


except requests.exceptions.HTTPError as errh:
    print("Http Error:", errh)
except requests.exceptions.ConnectionError as errc:
    print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
    print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
    print("OOps: Something Else", err)
pythonworld-checkworld-check-one
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hello @sagarmanohara.rao-ext

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?

If so please can you click the 'Accept' text next to the appropriate reply. This will guide all community members who have a similar question.
Thanks,

AHS

Please be informed that a reply has been verified as correct in answering the question, and has been marked as such.

Thanks,

AHS

Upvotes
Accepted
2.4k 6 5 6

@sagarmanohara.rao-ext

Hi,

I would like to highlight an observation that I made on the path that you have declared in the code i.e "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2/cases" which is for the endpoint to save a case API(async screening) and I also see that in dataToSign section of the code the endpoint declared is of sync screening i.e. "cases/screeningRequest".

There is an obvious discrepancy here and I believe this might be the potential cause for the 401 that you're observing. Please clarify the endpoint that you would like to use i.e. save a case or sync screen a case and make the corrections accordingly under the path and dataToSign section of your code.

Let me know if this solves the issue.

Regards,

Mehran Khan


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
1 1 1 0

APIs are working fine in postman but not in python they are returning 401

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
1 1 1 0

I want to save the case.



icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
2.4k 6 5 6

@sagarmanohara.rao-ext

Please edit the endpoint detail in your dataToSign section to just "cases" from "cases/screeningRequest".

Let me know if this works.


icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.