Endpoint and authentication
How AMC builds request URLs from your endpoint, the two credentials it can present, and what multi-tenancy means for your service.
The endpoint URL
The Endpoint URL is a base. AMC adds a trailing slash if it's missing and resolves every path relative to it, so an endpoint of https://invoices.contoso.com/amc gets https://invoices.contoso.com/amc/health, https://invoices.contoso.com/amc/runs, and so on.
- It must be an absolute
httporhttpsURL. Usehttpsanywhere but local testing; managed identity requires it. - Path segments don't change these URLs. They only form the resource id AMC sends as
orchestratorWorkflowId. See the resource id. - The health check does not follow redirects. Serve
/healthdirectly.
API key
In key mode AMC presents the key in an api-key header on every call, including /health. It never sends the key as Authorization: Bearer, and never sends both headers.
POST /amc/runs HTTP/1.1
Host: invoices.contoso.com
api-key: <your-agent-api-key>
Content-Type: application/json; charset=utf-8import os
from fastapi import Depends, FastAPI, Header, HTTPException
API_KEY = os.environ["AGENT_API_KEY"]
def check_key(api_key: str | None = Header(default=None, alias="api-key")) -> None:
if api_key != API_KEY:
raise HTTPException(status_code=401, detail="unauthorized")
app = FastAPI(dependencies=[Depends(check_key)])- Return
401or403for a bad key. At registration that shows as Access not granted, which tells the person the endpoint is up and the key is wrong. - AMC stores the key in Key Vault, never returns it, and deletes it when the registration is deactivated.
- To rotate, update the registration with the new key. AMC checks the new key against
/healthbefore it replaces the stored one, so accept both keys while you switch.
Managed identity
In managed-identity mode AMC requests a Microsoft Entra token from its own managed identity for the Resource scope you register, and presents it as Authorization: Bearer <token>. Your service validates it like any Entra access token issued for your app.
- Create an app registration for your endpoint and give it an application ID URI, for example
api://invoice-summarizer. - Have your AMC administrator approve your host and that audience for the installation (below).
- Register as a Tenant Admin (or Super Admin) with Managed Identity (same tenant) and Resource scope set to
api://invoice-summarizer/.default. - In your service, accept tokens for that audience from AMC's identity, and reject everything else with
401.
AMC's identity is shared by the whole installation, so it refuses to send a token anywhere it wasn't told to. A custom-endpoint registration with managed identity must pass every rule, or registration fails before anything is stored:
| Rule | If it fails |
|---|---|
| The caller is a Tenant Admin or Super Admin. | 403 with reason managed_identity_requires_tenant_admin. |
The scope is an application ID URI (api://...). Azure resource scopes and a blank scope are refused. | 400: AMC does not send tokens for Azure resource scopes to self-hosted endpoints. |
The endpoint is https. | 400: managed identity is only sent to https endpoints. |
| The host, or a parent domain of it, is approved for the installation, and the scope is one of that host's approved audiences. | 400: managed identity isn't set up for that host, or the audience isn't approved for it. |
The approvals live in one installation setting, Registration:SelfHostedManagedIdentityTargets, in the form host=audience[,audience...][;host=...]. A host entry admits that host and its subdomains, never look-alikes. Empty, the default, means managed identity is off for custom endpoints.
agents.contoso.com=api://invoice-summarizer/.default;tools.contoso.com=api://tool-a/.default,api://tool-b/.defaultTenancy
- AMC is multi-tenant. Each AMC tenant registers your endpoint separately, and each registration has its own credential and its own runs.
- AMC sends no tenant identifier on calls to your endpoint. A managed-identity token is the same for every tenant on an installation, so it can't tell them apart.
- If one endpoint serves several AMC tenants, give each registration its own API key and map key to tenant on your side. Never let one tenant's run id resolve for another.
- Your agent's own outbound credentials (to your model provider, to the systems it reads) are yours to manage. AMC never sees them.
Related
Last updated 2026-10-21