> For the complete documentation index, see [llms.txt](https://docs.getmesa.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.getmesa.com/for-developers/admin-api.md).

# Admin API

Use the MESA Admin API to work with workflows programmatically. Get your API key from the MESA CLI and review the base URL, parameters and endpoints.

The MESA Admin API allows you to programmatically interact with MESA. All requests must include your API key. To get your key, install the [MESA CLI](https://docs.getmesa.com/for-developers/command-line-interface/) and run `mesa auth login`. Your key is saved to `~/.mesa/config.yml`.

<table><thead><tr><th width="151">Key</th><th width="451">Value</th></tr></thead><tbody><tr><td>{url}</td><td>https://api.getmesa.com/v1</td></tr><tr><td>{uuid}</td><td>Your store’s unique identifier: {{uuid}}.myshopify.com</td></tr></tbody></table>

## Workflows

### Get list of automations

```http
GET {url}/admin/{uuid}/automations.json
```

Returns a list of automations for a store, sorted by most recently created first.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Request body**

```json
{
  "automations": [
    {
      "uuid": "my-store",
      "created_by": "",
      "key": "etsy_order_send_to_google_sheets",
      "name": "Send Etsy orders to Google Sheets",
      "version": "1.0.0",
      "template": "etsy/order/send_to_google_sheets",
      "description": "Consolidate your Etsy orders in Google Sheets for real-time tracking and improved order management. This template will automatically send Etsy order details to a Google Sheets spreadsheet when a customer completes an order on Etsy.",
      "video": "",
      "is_premium": false,
      "tags": [],
      "source": "",
      "destination": "",
      "enabled": false,
      "did_complete": false,
      "logging": true,
      "debug": false,
      "setup": "incomplete",
      "seconds": 135,
      "notifications": {
        "enabled": false,
        "emails": [
          "example@theshoppad.com"
        ]
      },
      "_id": "65f1fdbbb54ac273e806026b",
      "created_at": "Mar 13 2020",
      "updated_at": "Mar 13 2024"
    }
  ]
}
```

**Response 200**: Successful response

### Get the mesa.json file for an automation

```http
GET {url}/admin/{uuid}/automations/{automation_key}.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `Content-Type` | header | string | No | Example: `application/json` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes |  |

**Response 200**: Successful response

### Create or update an Automation configuration

```http
POST {url}/admin/{uuid}/automations.json
```

Updates the Inputs, Outputs, Credentials and Storage for an automation. Updating scripts requires separate calls to the Script POST endpoing for each script.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Request body**

```json
{
  "key": "",
  "name": "",
  "config": {
    "inputs": [],
    "outputs": [],
    "secrets": [],
    "storage": [],
    "files": [],
    "overwrite": false
  }
}
```

**Response 200**: Successful response

### Uninstall an Automation

```http
DELETE {url}/admin/{uuid}/automations/{automation_key}.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |

**Response 200**: Successful response

## Connections

### Get a list of Credentials

```http
GET {url}/admin/{uuid}/{automation_key}/credentials.json
```

Returns a list of all Credential names.  Credential values are not available via the Admin API.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes |  |

**Response 200**: Successful response

### Create a new Credential

```http
POST {url}/admin/{uuid}/{automation_key}/credentials.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |

**Request body**

```json
{
  "secret": {
    "key": "mysecret",
    "value": "myvalue"
  }
}
```

**Response 200**: Successful response

### Update an existing Credential

```http
PUT {url}/admin/{uuid}/{automation_key}/credentials/{credential_key}.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `secret_key` | path | string | Yes |  |

**Request body**

```json
{
  "secret": {
    "value": "myvalue"
  }
}
```

**Response 200**: Successful response

### Delete a Credential

```http
DELETE {url}/admin/{uuid}/{automation_key}/credentials/{credential_key}.json
```

<h5 class="label label-primary">URL Parameters</h5>
<table class="table">
	<thead>
		<tr>
		    <th>Key</th>
			<th>Description</th>
		</tr>
	</thead>
	<tbody>
		<tr>
		    <td>{{uuid}}</td>
		    <td>Your store's unique identifier: {{uuid}}.myshopify.com.</td>
		</tr>
		<tr>
		    <td>{{automation_key}}</td>
		    <td>The automation's key. Example: shoppad/mesa-templates/shopify/draft-order/remove.</td>
		</tr>
		<tr>
		    <td>{{secret_key}}</td>
		    <td>The key of the Credential, which can be obtained from the Credentials tab of the Mesa Dashboard.</td>
		</tr>
	</tbody>
</table>

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `secret_key` | path | string | Yes | Example: `googlesheets_1` |

**Response 200**: Successful response

## Storage

### Get a list of all Storage items

```http
GET {url}/admin/{uuid}/{automation_key}/storage.json
```

Note: Storage has been deprecated in favor of Data by MESA. Returns a list of all Storage item names.  To get a Storage value, call GET {{url}}/admin/{{uuid}}/storage/{{storage_name}}.json

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |

**Response 200**: Successful response

### Create a new Storage item

```http
POST {url}/admin/{uuid}/{automation_key}/storage.json
```

Note: Storage has been deprecated in favor of Data by MESA. Value parameter can be a string, an object, an array, or a boolean value.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |

**Request body**

```json
{
  "storage": {
    "key": "{{storage_key}}",
    "value": {
      "mykey": "myvalue"
    }
  }
}
```

**Response 200**: Successful response

### Get the value of a Storage item

```http
GET {url}/admin/{uuid}/{automation_key}/storage/{storage_key}.json
```

Note: Storage has been deprecated in favor of Data by MESA.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `storage_key` | path | string | Yes | Example: `storage_1` |

**Response 200**: Successful response

### Update an existing Storage item

```http
PUT {url}/admin/{uuid}/{automation_key}/storage/{storage_key}.json
```

Note: Storage has been deprecated in favor of Data by MESA. Value parameter can be a string, an object, an array, or a boolean value.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `storage_key` | path | string | Yes | Example: `storage_1` |

**Request body**

```json
{
  "storage": {
    "value": "mynewstringvalue"
  }
}
```

**Response 200**: Successful response

### Deletes a Storage item

```http
DELETE {url}/admin/{uuid}/{automation_key}/storage/{storage_key}.json
```

Note: Storage has been deprecated in favor of Data by MESA. Delete a Storage item.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `storage_key` | path | string | Yes | Example: `storage_1` |

**Response 200**: Successful response

## Scripts

### Get a list of Scripts

```http
GET {url}/admin/{uuid}/{automation_key}/scripts.json
```

Returns a list of all Scripts, including the Script code.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Response 200**: Successful response

### Create or update a Script

```http
POST {url}/admin/{uuid}/{automation_key}/scripts.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |

**Request body**

```json
{
  "script": {
    "filename": "myscript.js",
    "code": "// Javascript goes here"
  }
}
```

**Response 200**: Successful response

### Delete a Script

```http
DELETE {url}/admin/{uuid}/{automation_key}/scripts.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Response 200**: Successful response

## Testing

### Run a test

```http
POST {url}/admin/{uuid}/{automation_key}/triggers/{trigger_key}/test.json
```

Trigger a test with a specific that is passed as the `payload` body parameter. To test an actual payload, consider running a test in the UI and replaying the task with `POST replay.json`.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `automation_key` | path | string | Yes | Example: `new_workflow_1` |
| `trigger_key` | path | string | Yes | Example: `shopify_1` |

**Request body**

```json
{
  "payload": {}
}
```

**Response 200**: Successful response

## Tasks

### Replay a task

```http
POST {url}/admin/{uuid}/tasks/{task_id}/replay.json
```

Restart the execution of the workflow from a specific task. Data from all steps previous to this task in the original workflow run will be available.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |
| `task_id` | path | string | Yes | To find the Task ID, click on a step in the Activity List > Request Details, and copy the last ID hash from the URL Example: `65f3459357ca4e809608c8fb` |

**Response 200**: Successful response

## Templates

### Install a template from the Mesa Template library

```http
POST {url}/admin/{uuid}/templates/install.json
```

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Request body**

```json
{
  "template": "shoppad/mesa-templates/tests/kitchen-sink",
  "force": true
}
```

**Response 200**: Successful response

## Logs

### Get the 50 most recent log entries

```http
GET {url}/admin/{uuid}/logs.json
```

Returns a list of the most recent 50 log entries.

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `x-api-key` | header | string | No | Example: `{{api_key}}` |
| `uuid` | path | string | Yes |  |

**Response 200**: Successful response
