# Connect your tools to Atlas Labs

> To connect a tool to Atlas Labs, give it the base URL `https://automationatlas.io/labs/api/v1`, an `Authorization: Bearer` header holding one of your two sandbox keys and, for events, a public HTTPS webhook URL. Zapier, Make, n8n, Power Automate, Pipedream, Frends and any AI agent that speaks MCP use those same fields against this fictional company's API, Moxo receives the webhooks directly, and every recipe is readable here before you start a sandbox.

Canonical: `https://automationatlas.io/labs/docs/tools/` · Checked: `2026-10-15`

Atlas Labs is a fictional company's API; every figure in every response is simulation data.

> **Start a sandbox and your keys are filled in for you.** Every recipe on these pages uses the placeholders `lab_off_YOUR_KEY` and `lab_fac_YOUR_KEY`. Once you start a sandbox, a “Connect it” panel shows the same snippets with your real keys and a copy button.

## Which key do I use, and where does it go?

Every tool on this page needs the same five things. Nothing else is tool-specific.

*Reference table — Atlas Labs API fields, not part of the fictional simulation. Derived from the API source, checked `15 Oct 2026`.*

| Field in your tool | Value |
| --- | --- |
| Base URL | `https://automationatlas.io/labs/api/v1` |
| Auth header | `Authorization: Bearer lab_off_YOUR_KEY` for Head Office routes, `Authorization: Bearer lab_fac_YOUR_KEY` for Factory routes. `X-Api-Key` is accepted as an alias. |
| Which key | `/office/*` wants `lab_off_`; `/factory/*` wants `lab_fac_`; `/sandbox`, `/missions`, `/events` and `/webhooks` take either. The wrong one returns `403 wrong_system` with a `hint` naming the right prefix. |
| Body header | `Content-Type: application/json` on every write (otherwise `415 unsupported_media_type`). |
| `Idempotency-Key` | A value that is stable per business event, for example the incoming webhook's `id`, at most `64` characters. Accepted on every write, required on `13` money and stock routes. |
| Webhook URL | Public `https://`, port `443`, no redirects, answer `2xx` within `5` seconds. Localhost and private hosts are refused with `422 webhook_url_rejected`. |
| Spec to import | `/labs/api/v1/openapi-3.0.json` (OpenAPI `3.0`, the safe first choice), `/openapi.json` (`3.1`, for tools that state `3.1` support), `/swagger-2.0.json` (the one Power Automate accepts). |

- Factory key `lab_fac_…` opens the Factory API (`/factory/*`): work orders, runs, stock.
- Head Office key `lab_off_…` opens the Head Office API (`/office/*`): orders, suppliers, cash.
- Shared routes accept either key: `/sandbox`, `/missions`, `/events`, `/webhooks`.
- The wrong key answers `403 wrong_system` with a `hint` naming the right prefix.

## Which tools have a guide?

Pick your tool. Each guide has the exact field names to type, the steps in the tool's own words, the webhook leg, and a label saying how far we verified it. The logos are each vendor's own mark, shown only to identify the tool; none of these products is affiliated with Atlas Labs.

- [Zapier](https://automationatlas.io/labs/docs/tools/zapier/) (Written from vendor docs): good for pushing Atlas Labs events into the apps you already run in Zapier, and simple writes back. Receive: Webhooks by Zapier → **Catch Raw Hook**; Call: Webhooks by Zapier → **Custom Request**; Key: Headers field: `Authorization: Bearer lab_off_YOUR_KEY`.
- [Make](https://automationatlas.io/labs/docs/tools/make/) (Blueprint structurally validated): good for visual scenarios with routers and iterators over Atlas Labs lists. Receive: Webhooks → **Custom webhook**; Call: HTTP → **Make a request**; Key: Credentials keychain, API key: Key `Bearer lab_off_YOUR_KEY`, Header, name `Authorization`.
- [n8n](https://automationatlas.io/labs/docs/tools/n8n/) (Workflow structurally validated): good for self-hosted or Cloud workflows with a Code node for signature checks. Receive: **Webhook** node, Options → Raw Body; Call: **HTTP Request** node, or Import cURL; Key: Credential: **Bearer Auth** (token only) or **Header Auth**.
- [Power Automate](https://automationatlas.io/labs/docs/tools/power-automate/) (Connector generated, schema-validated): good for Microsoft tenants; a typed custom connector from our Swagger `2.0` file. Receive: **When an HTTP request is received**, set to Anyone; Call: **HTTP** action, or the custom connector; Key: Connector connection: type `Bearer lab_off_YOUR_KEY`.
- [Pipedream](https://automationatlas.io/labs/docs/tools/rest-api/) (Step syntax-checked): good for pasting the JavaScript snippets unchanged into a Node.js code step. Receive: HTTP / Webhook → **New Requests** trigger; Call: **Send any HTTP Request**, or a Node.js step; Key: Headers, or an environment variable read in code.
- [Workato](https://automationatlas.io/labs/docs/tools/rest-api/) (Written from vendor docs): good for Workato teams who want to import our OpenAPI or Swagger file as a connector. Import: OpenAPI connector: `openapi-3.0.json` or `swagger-2.0.json` (Workato's docs list both formats); Call: HTTP connector, Header auth: `Authorization: Bearer lab_off_YOUR_KEY`; Receive: HTTP connector with authentication **None** gives you a webhook URL; Not checked: plan, raw-body access and retries.
- [Moxo](https://automationatlas.io/labs/docs/tools/moxo/) (Tested: Atlas Labs to Moxo AI by webhook): good for Moxo AI flows that start from an Atlas Labs sales order. Receive: Template Webhook trigger, None (secret URL), with field mapping; Call: Moxo Webhook step → a Make, n8n or Zapier hook that adds the key; Key: Never in Moxo.
- [Frends](https://automationatlas.io/labs/docs/tools/frends/) (Not run in a tenant): good for enterprise integration teams building a Process with HTTP shapes. Receive: **HTTP Trigger**, unparsed Base64 option for HMAC; Call: Task **Frends.HTTP.Request**; Key: Headers list from an Environment Variable.
- [Postman](https://automationatlas.io/labs/docs/tools/rest-api/) (Collection generated, schema-validated): good for exploring every route before you automate anything. Import: Import → link `…/api/v1/openapi-3.0.json`. We have not confirmed which OpenAPI versions Postman accepts, so start with `3.0`; `swagger-2.0.json` is the fallback; Auth: Authorization tab → **Bearer Token**; Key: A collection variable, never plain text.
- [AI agents (MCP)](https://automationatlas.io/labs/docs/tools/ai-agents/) (Proven against the live API): good for Claude Code, Cursor and any MCP client; the agent creates its own sandbox. Endpoint: `https://automationatlas.io/labs/mcp`, Streamable HTTP; Tools: `create_sandbox` binds both keys to the session; Gotcha: `Accept` must list JSON and `text/event-stream`.
- [REST: curl, JavaScript, Python](https://automationatlas.io/labs/docs/tools/rest-api/) (Proven against the live API): good for anything with a shell, Node `20` or Python `3.9`. Read: `GET /sandbox`, `GET /office/sales-orders`; Write: `POST …/accept` with `Idempotency-Key`; Events: `POST /webhooks`, verify the raw body.

## Can I try the integrations before I get a token?

Yes. Every guide reads completely with the placeholder keys, so you can set up a Zap, a scenario or a flow first and paste real keys last. Start a sandbox from the hub when you are ready and the same snippets reappear there with your keys filled in. Nothing on these pages needs JavaScript, so crawlers and AI assistants read the same recipes you do.

## How do I connect an AI agent?

Point an MCP client at `https://automationatlas.io/labs/mcp` over Streamable HTTP and call the `create_sandbox` tool; the session then holds both keys. The client must send `Accept: application/json, text/event-stream`. [Connect an AI agent](https://automationatlas.io/labs/docs/tools/ai-agents/) has the tools, the limits and the client commands.

## Does Atlas Labs publish an OpenAPI file?

*Reference table — specification downloads for the Atlas Labs API, not part of the fictional simulation.*

| Format | URL | Use it in |
| --- | --- | --- |
| OpenAPI `3.1` | `https://automationatlas.io/labs/api/v1/openapi.json` | Code generators and importers that state `3.1` support |
| OpenAPI `3.0` | `https://automationatlas.io/labs/api/v1/openapi-3.0.json` | Postman (we have not confirmed which OpenAPI versions it accepts; start with `3.0`), Workato, tools that reject `3.1` |
| Swagger `2.0` | `https://automationatlas.io/labs/api/v1/swagger-2.0.json` | Power Automate custom connectors; fallback for Postman and Workato |

All three describe the same set of operations. Every operation has a readable `operationId` and `summary`, so importers name each request from its `summary` (for example “List sales orders”), with a unique `operationId` such as `listSalesOrders` behind it. n8n and Make have no OpenAPI import, and none was found in Zapier's documentation, so their guides use the HTTP modules instead.

## How do I get events pushed to my tool?

- Subscribe with `POST /webhooks` using either key: `{"url": "https://…", "events": ["office.sales_order.received"]}`. The `whsec_` secret is shown once. The bridge recipes subscribe to `office.sales_order.accepted` instead, because only an accepted order can be bridged.
- Up to `3` subscriptions per sandbox. The URL must be public `https://` on port `443`; the subscription activates when the test ping (`POST /webhooks/{id}/test`) gets a `2xx`.
- Shared platform hosts (`hooks.zapier.com`, `hook.*.make.com`, `*.app.n8n.cloud`, `*.m.pipedream.net`, `*.logic.azure.com`, `webhook.site`) get a higher delivery allowance than a private host.
- Every delivery is signed (Standard Webhooks: `webhook-id`, `webhook-timestamp`, `webhook-signature`). Verify against the raw body; most tools need a “raw” option for that.
- Failed deliveries retry after `10 s`, `60 s` and `300 s`; `5` consecutive failures disable the subscription. De-duplicate on the event `id`. Events are sent only for the types you subscribed to.

[Webhooks in five minutes →](https://automationatlas.io/labs/docs/webhooks/#five-minutes)

## Downloads

Each file says how far it was verified. “Generated and schema-validated” never means “confirmed to import into the real tool”.

*Reference table — connector templates for Atlas Labs, not part of the fictional simulation.*

| File | Verified |
| --- | --- |
| [atlas-labs.postman_collection.json](https://automationatlas.io/labs/downloads/templates/postman/atlas-labs.postman_collection.json) | *Generated and schema-validated* |
| [atlas-labs-power-automate-connector.zip](https://automationatlas.io/labs/downloads/templates/power-automate/atlas-labs-power-automate-connector.zip) (Swagger `2.0` + properties) | *Generated, byte-deterministic* |
| [n8n workflow: bridge accepted order → work order](https://automationatlas.io/labs/downloads/templates/n8n/bridge-accepted-sales-order-to-work-order.json) (needs a manual-bridge preset: Standard or Full) | *Structurally validated only* |
| [Make blueprint: bridge accepted order → work order](https://automationatlas.io/labs/downloads/templates/make/bridge-accepted-sales-order-to-work-order.blueprint.json) (needs a manual-bridge preset: Standard or Full) | *Structurally validated only* |
| [Zapier recipe (Markdown)](https://automationatlas.io/labs/downloads/templates/zapier/bridge-accepted-sales-order-to-work-order.md): bridge accepted order → work order (needs a manual-bridge preset: Standard or Full) | *Written from vendor docs, not built* |
| [Pipedream step (JavaScript)](https://automationatlas.io/labs/downloads/templates/pipedream/bridge-accepted-sales-order-to-work-order.js) | *Syntax-checked and lint-clean* |
| [Bruno collection](https://automationatlas.io/labs/downloads/templates/bruno/atlas-labs-bruno-collection.zip) | *Structurally validated only* |
| History pack ([.xlsx](https://automationatlas.io/labs/downloads/atlas-print-works-history.xlsx) / [.csv](https://automationatlas.io/labs/downloads/atlas-print-works-history-csv.zip)), twelve fictional months of one company | *Generated by the simulator* |

[Quickstart](https://automationatlas.io/labs/docs/quickstart/) · [Authenticate with your key](https://automationatlas.io/labs/docs/tools/rest-api/)
