# Ignition API Keys

**URL:** <https://forum.inductiveautomation.com/t/ignition-api-keys/109660>\
**Category:** Ignition 8.3 Early Access\
**Created:** [August 12, 2025, 6:53pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660 "2025-08-12T18:53:35Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![richhull](https://avatars.discourse-cdn.com/v4/letter/r/b19c9b/32.png) [@richhull](https://forum.inductiveautomation.com/u/richhull)\
**Post date:** [August 12, 2025, 6:53pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/1 "2025-08-12T18:53:35Z")

</div>

I am currently experimenting with Ignition 8.3’s new API Key feature. However I cant seem to get the authentication right. I am currently trying to follow this post here:

> [@Ignition 8.3 API Usage Guide (via Postman)](https://forum.inductiveautomation.com/t/ignition-8-3-api-usage-guide-via-postman/93935):
>
> Ignition 8.3 API Usage Guide (via Postman) Last revision - 7/30/2025 Ignition 8.3 OpenAPI Documentation Login via - [http://localhost:8088/data/app/login](http://localhost:8088/data/app/login) Access OpenAPI docs - [http://localhost:8088/openapi](http://localhost:8088/openapi)Postman Setup and Importing Configuration Clone the 83-api GitHub resources from this repository: [inductiveautomation/83-api](https://github.com/inductiveautomation/83-api) Import the Collection config file (8.3.postman\_collection\_v2.json) from the downloaded repository. This contains the config for all of the base …

But I am sort of reverse engineering it to write a script using httpClienth.get() to grab the information. Is there something I am missing or doing wrong?

Here is the script I am using:  
client = system.net.httpClient() url = '[http://localhost:8070/app/platform/security/api-keys](http://localhost:8070/app/platform/security/api-keys)'

headers = { 'Authorization': 'Reader: TOKEN HERE ', 'Content-Type': 'application/json' }

response = client.get(url, headers=headers) print(response) #print(response.text)

client = system.net.httpClient() url = '[http://localhost:8070/data/api/v1/resources/names/com.inductiveautomation.opcua/device](http://localhost:8070/data/api/v1/resources/names/com.inductiveautomation.opcua/device)'

headers = { 'Authorization': 'Reader: TOKEN HERE', 'Content-Type': 'application/json' }

response = client.get(url, headers=headers) print(response) #print(response.text)

---

<div class="post-metadata">

**Author:** ![richhull](https://avatars.discourse-cdn.com/v4/letter/r/b19c9b/32.png) [@richhull](https://forum.inductiveautomation.com/u/richhull)\
**Post date:** [August 12, 2025, 6:57pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/2 "2025-08-12T18:57:32Z")

</div>

I forgot to add, here is the response I get from both:

![image](https://us1.discourse-cdn.com/inductiveautomation/optimized/3X/0/d/0d6b1032d028e89bbe12456190ed839a6d638be5_2_690x34.png)

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 12, 2025, 7:00pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/3 "2025-08-12T19:00:52Z")

</div>

Try this:

```python
url = 'http://localhost:8070/data/api/v1/resources/names/com.inductiveautomation.opcua/device'

headers = { 
	'X-Ignition-API-Token': 'TOKEN HERE',
}

response = system.net.httpClient.get(url, headers=headers)
print(response.json)

```

---

<div class="post-metadata">

**Author:** ![richhull](https://avatars.discourse-cdn.com/v4/letter/r/b19c9b/32.png) [@richhull](https://forum.inductiveautomation.com/u/richhull)\
**Post date:** [August 12, 2025, 7:07pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/4 "2025-08-12T19:07:53Z")

</div>

I get the same response 401. It also seems that the .json at the end of response is not liked by the script console.

Here is the code I have:

url = '[http://localhost:8070/data/api/v1/resources/names/com.inductiveautomation.opcua/device](http://localhost:8070/data/api/v1/resources/names/com.inductiveautomation.opcua/device)'

headers = {  
'X-Ignition-API-Token': 'Reader:TOKEN HERE',  
}

response = system.net.httpClient.get(url, headers=headers)  
print(response)

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/5/250b882efe3560d910b9d93acefda7ae74ea11d1.png)

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 12, 2025, 7:16pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/5 "2025-08-12T19:16:04Z")

</div>

Something's wrong with your API key or the way you're providing it - have you given it a security level that has gateway read access?

> **[Gateway General Security Settings | Ignition User Manual](https://docs.inductiveautomation.com/docs/8.3/platform/security/gateway-general-security-settings#roles-and-permissions)**
>
> This page determines security permissions for the Gateway and Designer.

The same script works fine for me:

```python
url = 'http://localhost:8088/data/api/v1/resources/names/com.inductiveautomation.opcua/device'

headers = { 
	'X-Ignition-API-Token': 'API:KZFH8OAhqIInsGeFku7xw9eyJE2N940B_EbxtDHd1Vc',
}

response = system.net.httpClient.get(url, headers=headers)
print(response.json['items'])

```

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/6/662980fdf0839c09798133ecf536a046d2ea3d0a.png)

The 'unable to parse response body as JSON' is because of the 401 error - we return a plain text error that's not valid JSON.

---

<div class="post-metadata">

**Author:** ![richhull](https://avatars.discourse-cdn.com/v4/letter/r/b19c9b/32.png) [@richhull](https://forum.inductiveautomation.com/u/richhull)\
**Post date:** [August 12, 2025, 7:19pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/6 "2025-08-12T19:19:36Z")

</div>

Here is the Security General Settings I have set up:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/e/6ec8c09e735bc73c03a8f4fb7d690d6b4627f510.png)

And here is the API Keys setting:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/8/b/8b18e96d0e5488f4a4baaa3ccf4ca191239bf5c7.png)

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [August 12, 2025, 7:20pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/7 "2025-08-12T19:20:38Z")

</div>

You have 'require secure connections' set but you're using an HTTP URL.

---

<div class="post-metadata">

**Author:** ![richhull](https://avatars.discourse-cdn.com/v4/letter/r/b19c9b/32.png) [@richhull](https://forum.inductiveautomation.com/u/richhull)\
**Post date:** [August 12, 2025, 7:21pm UTC](https://forum.inductiveautomation.com/t/ignition-api-keys/109660/8 "2025-08-12T19:21:37Z")

</div>

It worked!!! Thank You!!!
