# Connect Power Automate to Atlas Labs

> To connect Power Automate to Atlas Labs, import the generated Swagger `2.0` custom connector, or use the **HTTP** action, and catch events with the **When an HTTP request is received** trigger set to **Anyone**. The connector stores your key as one `Authorization` parameter, so type `Bearer ` before the key.

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

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

*Reference table — Atlas Labs API fields and Microsoft's documented names, not part of the fictional simulation. Microsoft Learn checked `15 Oct 2026`.*

| At a glance | Value |
| --- | --- |
| Receive events | Request → **When an HTTP request is received**; “Who can trigger the flow?” = **Anyone** |
| Call the API | Built-in **HTTP** action, or a **Custom connector** imported from `swagger-2.0.json` |
| Where the key goes | HTTP action: Headers `Authorization` = `Bearer lab_off_YOUR_KEY`. Connector: the connection's **Authorization** box = `Bearer lab_off_YOUR_KEY` |
| Body | Headers `Content-Type: application/json`; Body = your JSON |
| `Idempotency-Key` | A Headers item set to the trigger body's `id` |
| Spec to import | Swagger `2.0` only, under `1 MB`; OpenAPI `3.0` is rejected (Microsoft Learn, updated `10 Oct 2026`) |
| Webhook host | `*.logic.azure.com` is a recognised platform host with a higher delivery allowance |
| Licence | The Request trigger is marked Premium in Microsoft's documentation; the HTTP action is widely reported as Premium, but we could not retrieve Microsoft's page saying so |
| Retries | HTTP action → Settings → **Retry policy** (default exponential; up to `90` attempts, `5 s` minimum, `1` day maximum) |

> **Start a sandbox and your keys are filled in for you.** This page uses `lab_off_YOUR_KEY` and `lab_fac_YOUR_KEY`. After you [start a sandbox](https://automationatlas.io/labs/#start-sandbox-heading), the “Connect it” panel's Power Automate tab shows the header values with your real keys and a copy button.

- Atlas Labs → Your flow: signed webhook, to *.logic.azure.com
- Your flow → Atlas Labs: HTTP action or, custom connector
- Your flow → Your apps: action

Both legs are optional: a flow can only listen, only call, or do both.

## Custom connector or HTTP action?

*Reference table — two ways to call the Atlas Labs API from Power Automate, not part of the fictional simulation.*

|  | Custom connector | HTTP action |
| --- | --- | --- |
| Setup | Import `swagger-2.0.json` once per environment | None; paste method, URI, headers, body |
| Where the key lives | In a connection, as one `Authorization` value | In the action's Headers (use a secure input or an environment variable) |
| Typed actions | Yes, one per route, named from its `summary` | No |
| Licence | Custom connectors are reported to need Premium (vendor guide, not Microsoft) | Reported Premium; Microsoft's page not retrieved |

## How do I import the custom connector?

1. **Download the connector files** below, or fetch `https://automationatlas.io/labs/api/v1/swagger-2.0.json` directly. Power Automate accepts Swagger `2.0` only and rejects OpenAPI `3.0`, which is why Atlas Labs publishes the older format too.
2. **Solutions → New → Automation → Custom connector → Import an OpenAPI file.** Name it “Atlas Labs” and pick `apiDefinition.swagger.json` (under `1 MB`).
3. **Security page: API Key.** Parameter name `Authorization`, location **Header**. The downloaded definition already declares this; if a file lists several security definitions, Power Automate uses the top one.
4. **Create connector → Test → New connection.** In the **Authorization** box type `Bearer lab_off_YOUR_KEY`, the word Bearer included. Make a second connection for the Factory key and pick the right one per action.
   - Connection field: Authorization (securestring)
   - Value: `Bearer lab_off_YOUR_KEY` or `Bearer lab_fac_YOUR_KEY`
   - Sent as: `Authorization` request header
5. **Action names come from the spec.** Each action takes its name from the operation's `summary` (for example “List sales orders”) and its id from the `operationId`. Header names and values must be ASCII.

## How do I call Atlas Labs with the HTTP action?

1. **Add an action → Built-in → HTTP.**
2. **Fill the request.** This example bridges an accepted sales order into a Factory work order; read `quantity` and `due_sim_day` first with a `GET https://automationatlas.io/labs/api/v1/office/sales-orders/<id>` (Head Office key).
   - Method: `POST`
   - URI: `https://automationatlas.io/labs/api/v1/factory/work-orders`
   - Headers: `Authorization: Bearer lab_fac_YOUR_KEY`; `Content-Type: application/json`; `Idempotency-Key:` the trigger body's `id`
   - Body: `{"sales_order_id": "<from the trigger>", "quantity": <from the order>, "due_date": <due_sim_day from the order>}`
   **Preset matters.** Pick a preset with a manual bridge (Standard or Full) or this write returns `409 already_bridged`, because Starter bridges automatically.
3. **Open the action's Settings → Retry policy.** The default is exponential; you can set up to `90` attempts with a minimum interval of `5` seconds and a maximum of one day. Outbound requests time out after `120` seconds; Atlas Labs answers in well under one.
4. **Add a Condition**: status `201`, or `409` with `error.code` = `already_bridged`, is success; anything else goes to your error branch.

## How do I catch Atlas Labs events?

1. **New instant cloud flow → trigger “When an HTTP request is received”.** Paste the webhook payload from the [Webhooks page](https://automationatlas.io/labs/docs/webhooks/) into “Use sample payload to generate schema”, or leave the schema blank.
2. **Set “Who can trigger the flow?” to Anyone.** Atlas Labs cannot send a Microsoft Entra ID token, and the other two modes require one. Microsoft describes Anyone as a legacy setting with no additional authentication.
3. **Save.** The HTTP POST URL appears only after saving. It contains a signature in its query string, so treat the whole URL as a secret and never paste it anywhere public.
4. **Subscribe the URL** in Atlas Labs with either key. `*.logic.azure.com` is recognised as a platform host.
   - Method: `POST`
   - URL: `https://automationatlas.io/labs/api/v1/webhooks`
   - Headers: `Authorization: Bearer lab_off_YOUR_KEY`; `Content-Type: application/json`
   - Body: `{"url": "https://<…>.logic.azure.com:443/workflows/…", "events": ["office.sales_order.accepted"]}`
5. **Send the test ping** (`POST /webhooks/{id}/test`). Any `2xx` from your flow activates the subscription; add a **Response** action with status `200` if you want to control the reply. Atlas Labs waits `5` seconds.
6. **Signature.** Power Automate has no Standard Webhooks check. Read the three `webhook-*` headers and the body from the trigger outputs and compute the HMAC in expressions or an Azure Function; we did not verify the exact expression syntax against Microsoft's docs, so follow your tenant's usual pattern.

## Idempotency and retries

- Use the trigger body's `id` (`evt_…`) as the `Idempotency-Key` so a retried run returns the original response (`Idempotency-Replayed: true`).
- The HTTP action's default retry policy depends on the environment's performance profile (Microsoft limits page): Low, up to `2` retries scaling by about `5` minutes; Medium and High, up to `12` retries scaling by about `7` seconds. Configure it per action when the default is too slow for a `429` whose `Retry-After` is usually one or two seconds.
- Calls made in parallel share one key's budget. If the HTTP action runs in an **Apply to each** with concurrency control on, keep the degree of parallelism to one or two: more calls at once only collect more `429`s, and enough of them put the key into a short cooldown.
- Inbound and outbound synchronous requests time out after `120` seconds.

## Common errors

*Reference table — errors as seen from Power Automate, not part of the fictional simulation.*

| You see | Why, and the fix |
| --- | --- |
| Import: “OpenAPI `3.0` format not supported” | You uploaded `openapi.json`. Use `swagger-2.0.json` or the downloaded `apiDefinition.swagger.json`. |
| `401 unauthorized` | The connection's Authorization value lacks `Bearer `, or the key is unknown, revoked or deleted with its sandbox. An expired sandbox answers writes with `423 sandbox_expired` instead. |
| `403 wrong_system` | The wrong connection or header on the action. `/factory/*` wants `lab_fac_`, `/office/*` wants `lab_off_`. |
| Trigger never fires; subscription goes `disabled` | “Who can trigger the flow?” was not Anyone, so the trigger refused the unauthenticated request and no `2xx` reached Atlas Labs (the exact status Microsoft returns is not something we have confirmed); after `5` consecutive failures the subscription is disabled. Fix the trigger and re-enable with `PATCH /webhooks/{id}`. |
| `422 webhook_url_rejected` | Paste the entire generated URL, query string included, exactly as shown after saving. |
| `415 unsupported_media_type` | Add the `Content-Type: application/json` header to the HTTP action. |

## Gotchas

- **Swagger `2.0` only.** Microsoft Learn (updated `10 Oct 2026`): OpenAPI `3.0` definitions are not supported for custom connectors, and the file must be under `1 MB`.
- **“Anyone” is a legacy mode** with no authentication, so the trigger URL's query-string signature is the only secret. Rotate the flow's URL if it leaks.
- **Premium.** Microsoft's SharePoint tutorial marks the Request trigger as Premium. For the HTTP action we could only find third-party and Q&A sources; some tenants report running it without a Premium licence. Check your own licence before you build.
- **ASCII only** in custom-connector header names and values.
- **Action names.** Imported actions are named from each operation's `summary`; the `operationId` is the stable id behind them.

## Download the connector

*Reference table — Power Automate files generated from the Atlas Labs OpenAPI document, not part of the fictional simulation.*

| File | Verified |
| --- | --- |
| [atlas-labs-power-automate-connector.zip](https://automationatlas.io/labs/downloads/templates/power-automate/atlas-labs-power-automate-connector.zip) | *Generated, byte-deterministic* Not imported into a live tenant. |
| [apiDefinition.swagger.json](https://automationatlas.io/labs/downloads/templates/power-automate/apiDefinition.swagger.json) | *Generated and validated as Swagger 2.0* (swagger-parser) |
| [apiProperties.json](https://automationatlas.io/labs/downloads/templates/power-automate/apiProperties.json) (connection parameter `Authorization`) | *Structurally validated only* |

## Questions people ask

**Do I need the premium HTTP action, or can I use a custom connector?** Both routes work against the API; both are reported to need a Premium licence. Microsoft's own page marks the Request trigger Premium; for the HTTP action we have only secondary sources (checked `15 Oct 2026`).

**Why does Power Automate need the Swagger `2.0` file?** Because custom connectors accept OpenAPI `2.0` only; Microsoft Learn states that `3.0` definitions are not supported. Atlas Labs publishes `swagger-2.0.json` for exactly this.

**Why does the key box want the word Bearer?** The connector has a single `Authorization` connection parameter that is sent verbatim as the header value, so it must contain `Bearer ` followed by the key.

**Why must the trigger be set to Anyone?** The other two modes require a Microsoft Entra ID bearer token on the incoming request, and Atlas Labs sends only the Standard Webhooks headers.

**Can I share the trigger URL in a ticket or a doc?** No. In Anyone mode the URL's signature is the only thing protecting the flow.

**Where do the connector's action names come from?** From the Atlas Labs spec: each operation has a short `summary` (the action's display name) and a unique `operationId` (its id), for example “List sales orders” and `listSalesOrders`.

Sources (checked `15 Oct 2026`): Microsoft Learn, “Create a custom connector from an OpenAPI definition” (updated `10 Oct 2026`), “Trigger flows securely with OAuth” (Request trigger modes), “Limits and configuration in Power Automate” (retry policy, timeouts), SharePoint site-design tutorial (Request trigger is Premium). Atlas Labs facts from the API source, observed live.

[Make](https://automationatlas.io/labs/docs/tools/make/) · [Moxo](https://automationatlas.io/labs/docs/tools/moxo/)
