HTTP flow request and expressions
The API returns 202 with a JSON id, not the complete Azure-style Location polling contract. Therefore this recipe reads status explicitly using the returned ID. Keep the submission action name stable so expressions still point to the correct response. Named connector actions expose the same job fields.
{
"template_id": "REPLACE_TEMPLATE_ID",
"options": {
"format": "png",
"mode": "full",
"slots": {
"REPLACE_SLOT_ID": {
"asset_id": "REPLACE_ASSET_ID",
"fit": "contain"
}
}
}
}
Job ID: body('Submit_render')?['id']
Status: body('Read_status')?['status']
Result path: concat('/api/v1/render-jobs/', variables('JobId'), '/result')
Custom connector scope and licensing
The downloadable definition is Swagger 2.0, the format supported by Microsoft's custom connector import workflow. It includes named JSON actions and response schemas, with bearer credentials sent through an API-key header connection. Review validation in your tenant, verify licensing and DLP policy, and change the host for a different deployment. This is a starter definition, not a certified Microsoft marketplace connector or a full deployment solution.
Official platform documentation for this setup
Reviewed collections and approvals
Preflight a multi-artwork areas specification and inspect valid, warnings, total and the sample. Store the returned plan_id and plan_hash in the source record, then use an approval action before paying for the batch. Submit only the stored token and idempotency_key after approval. Do not regenerate the review on a retry. Check the review's expires_at before a first submission, because a long human approval can outlive the plan.
Failure scopes and resumed delivery
Group submit, status and delivery into scopes with Configure run after paths for failed and timed-out actions. Save the existing Job ID in every path. A destination failure can retry Download image and Create file without repeating Submit render. If two flows may deliver the same job, use a record-level delivery guard or unique file identity to avoid duplicated publishing.
Verify completion and move a real file
Treat 202 as acceptance. Persist id, then poll the canonical job endpoint with the same bearer credential. queued, running and cancelling mean wait; done means download; error and cancelled need a recovery branch. A protected result URL cannot be pasted into a destination that has no way to send your API key. Download the bytes through an authenticated action, then upload a file to your destination. A temporary signed link can expire, so refresh it or use the canonical result endpoint. Do not forward the bearer key across a redirect to another origin.
Retries, duplicate events and interrupted runs
Use one key for one intended operation, such as order-1042-artwork-v1. Keep it stable on a lost-response retry. The same inputs and key return the same render job; changed inputs return 409 and need an explicit new version. Do not repeat a synchronous paid render just because the previous step timed out. Retry reads and idempotent submissions with bounded backoff for temporary network or 5xx errors. Fix 401 credentials, 404 ownership, 402 allowance and 422 validation before retrying. When a polling deadline is reached, save the job ID and resume checking it later; the server continues independently.
Troubleshooting checklist
Check the actual HTTP status and detail field before changing the workflow. Test a single ready template and saved asset first, then add multi-area placements and collection output. Avoid enabling schedules until the downloaded file and its destination record have both been inspected.
| Field or condition | Mapping or action |
|---|
| 401 | Use the full Bearer value and a non-revoked API key; a website key is for the iframe only. |
|---|
| 404 | Confirm the template, asset or job belongs to this account or is an accessible public template. |
|---|
| 409 | Read detail: result not ready, changed inputs, stale revision and expired review need different actions. |
|---|
| 402 / 429 | Check account allowance / reduce concurrency and back off for rate limits. |
|---|
| 422 | Inspect the slot ID, ready status, nested options and direct-image URL. JSON options must be an object. |
|---|
| Broken destination image | Download with authentication and upload bytes; protected URLs are not public attachments. |
|---|