Axiom Structure
When exporting an Axiom.ai automation, you will receive a JSON file containing the inner workings of your automation. This allows you to share your automation with our support team, with a colleague or with another person that you are working on a project with. A lot of this file is purely for Axiom.ai to process your automation, but it's still interesting to know what it does! We have omitted some fields from the JSON as they are related to features no longer in use, features that are only used for the operation of the extension, or features that may not be of interest.
You can think of your exported automation as a "snapshot" of your automations current state, including variables related to the steps, errors and any settings that you have set up within your automation.
🚨 We do not recommend that you edit your automation through this JSON file
# Identifiers
Reviewing the first few values in the JSON, we can see the following fields:
"id": 938717,
"name": "Send to Supabase",
"templateId": 0,
"triggers": [ ... ]
| Key | Description |
|---|---|
| id | This is the ID of the automation |
| templateId | If you created your automation from a template, the ID will be stored |
| triggers | Any triggers you have set up, i.e. schedules |
If you have a schedule set up, you'll see the following inside the triggers key:
{
"id": 10126,
"interval_type": "seconds",
"name": "",
"starting_time": "2025-02-26 16:26:23+00",
"status": "ready",
"time_criteria": 86400,
"type": "schedule"
}
| Key | Description |
|---|---|
| id | The ID of the schedule |
| interval_type | The interval setting, this is always in seconds. |
| starting_time | The time you set the schedule to start. |
| time_criteria | The seconds between intervals, i.e. 86400 - 1 day |
| type | The type of trigger |
# Data
The data key is where all the magic happens, this contains all of the data about the steps that you have inserted into the automation that makes it run. You will see the following object sitting in your data key:
"builderTemplateId": 0,
"context": [{ "context": "url", "url": "" }],
"continueOnError": true,
"disablePageChangeMonitoring": true,
"executablePath": "...",
"extensionToLoad": "...",
"form": [ ... ]
| Key | Description | Default | Docs |
|---|---|---|---|
| continueOnError | Continue after the automation runs into an error. | false | Docs |
| disablePageChangeMonitoring | Disable page change monitoring. | false/off | Docs |
| executablePath | The path to your local installation of Chrome. | null | Docs |
| extensionToLoad | The path to any extensions you wish to load. | null | Docs |
| form | See Step data . |
# Step data
Step data is found in the form key, you'll find an array of objects containing information about your steps, for example:
{
"description": "Instruct the bot to go to a new page.",
"hasErrors": false,
"index": 0,
"machine_name": "WidgetDriverGoto",
"metadata": "",
"name": "google.com",
"original_name": "Go to page",
"params": [ ... ],
"stepNumber": "1",
"token": ""
}
| Key | Description |
|---|---|
| description | This contains the description of the automation 1. |
| machine_name | This is out backend name for the step. |
| metadata | This is used for the step finder, they're additional terms you can use to find the step. |
| name | This is the name of the automation, customisable. |
| original_name | The "official" name for the step without any customisations. |
| params | See Params |
| stepNumber | The order that the step in your automation. |
| token | If the step outputs a data token, it'll be found here (without the data). |
1We include the description to ensure older versions of the steps do not get confusing when they're updated - keeping them in use.
# Params
As mentioned, the params key holds data on all of the parameters that you see within your step. It also holds the value of the parameter that you have entered. Let's dive into one of the parameters for the Read data from a Google Sheet step.
{
"collapsible": 0,
"configurable": true,
"default_value": "",
"description": ["Select a google sheet to read from, or paste its URL here."],
"help": [],
"image": "",
"name": "Spreadsheet",
"sheetName": "Your Google Sheet",
"type": "spreadsheet_picker",
"value": "..."
}
| Key | Description |
|---|---|
| default_value | If the step has a default value, it'll show here. |
| description | The description of the parameter 2. |
| name | The name of the parameter, this helps with identifying it. |
| sheetName | The name of the Google Sheet being used in the automation. |
| type | The type of parameter it is. A "spreadsheet_picker" in the above example. |
| value | The value that you have input into the parameter. |
2We include the description to ensure older versions of the steps do not get confusing when they're updated - keeping them in use.
Each parameters may have piece of data that are specific to the parameter, or the step, that you are reviewing. The above example is just a single parameter. Most steps will have multiple parameters to allow for the customisation of the step.
# Automation options
Finally, we come to the options that you can set within your automation's settings panel. These options are all stored within you automation. Head into "Settings" within your automation to change any of these settings.
"headless": false,
"iframesAllowed": true,
"incognitoMode": true,
"injector": { "injector": "dom", "magic_btn_status": true, "selector": "" },
"maximumRuntime": 600,
"mode": "browser",
"notifications": { ... },
"proxyAuth": null,
"storeCookies": true,
"templateId": 0,
"templateItem": null,
"templateMode": false,
"templateStarted": false,
"tokens": null,
"useLocalTimezone": true,
"userDataDir": "...",
"viewport": null
| Key | Description | Default | Docs |
|---|---|---|---|
| headless | If the browser will run in headless mode. | false/off | Docs |
| iframesAllowed | If the selector tool will interact with iframes. | false/off | Docs |
| incognitoMode | If the automation will run in incognito mode. | false/off | Docs |
| maximumRuntime | The maximum amount of runtime an automation can use, in seconds. | 720 | Docs |
| notifications | See Notifications | null | Docs |
| proxyAuth | If you have a proxy set up, details will be included. | null | Docs |
| storeCookies | If the automation will use stored cookies. | null | Docs |
| templateId | The ID of the template used to create the automation. | 0 | |
| useLocalTimezone | If the automation should use your local timezone for scheduling. | false/off | Docs |
| userDataDir | If you have a custom Chrome profile set, the path will be shown here. | null | Docs |
# Notifications
When you set notifications for your automations, you'll find the settings in the notifications key. For example:
{
"emailAddress": "...",
"emailOn": true,
"onFailure": true,
"onSuccess": false,
"webhookOn": false,
"webhookPayload": "",
"webhookURL": ""
}
| Key | Description |
|---|---|
| emailAddress | The email address(es) you've entered for email notifications |
| emailOn | If email notifications are enabled |
| onFailure | If failure notifications are enabled |
| onSuccess | If success notifications are enabled |
| webhookOn | If webhook notifications are enabled |
| webhookPayload | The automatically created payload |
| webhookURL | The URL to send the webhook payload to |
# Wrapping up
Understanding the structure of an Axiom.ai automation can be helpful in understanding any automation that you have exported from your account. While we generally do not recommend editing this file, there may be instances where you can update the JSON directly, provided you've read the guide above to understand what each key does within the file. Any errors within the JSON may prevent the automation from having the ability to be imported into the extension.