CallFunction
"customerName": {{ content.order.customerId | CallFunction: 'GetCustomerName' | ToJson }}The action must list the alias: "allowedFunctionAliases": ["GetCustomerName"] (case-sensitive). Otherwise the call fails with FunctionNotAllowed before anything is sent.
The registry
Where each alias goes, and how to authenticate, is set by the operator in a registry file (LiquidCompose__FunctionRegistryPath) or setting (LiquidCompose__FunctionRegistry). Templates never contain URLs or keys.
{
"schemaVersion": 1,
"functions": {
"GetCustomerName": {
"endpoint": "https://<function-app>.azurewebsites.net/api/GetCustomerName",
"authentication": { "mode": "ManagedIdentity", "scope": "api://<application-id>/.default" },
"timeoutSeconds": 5,
"maxRequestBytes": 65536,
"maxResponseBytes": 65536,
"cacheWithinTransform": true,
"retryCount": 0
}
}
}| Field | Rules |
|---|---|
| endpoint | Absolute https URL without credentials, query string or fragment. http only for loopback, with LiquidCompose__Development__AllowLocalhostHttp. |
| authentication | ManagedIdentity (scope, optional clientId for a user-assigned identity), FunctionKey (keySetting: the app setting holding the key, ideally a Key Vault reference), or None for loopback in development. |
| timeoutSeconds | 1–5, and never past the action's deadline. |
| cacheWithinTransform | true reuses identical answers within one render. |
| enabled | false refuses calls with FunctionNotAllowed. |
| retryCount | Must be 0: the action never retries a call. |
The Function contract
- Request:
POSTwith{"value": "…"}as JSON, plusx-ms-client-request-id,traceparent, and the key or bearer token. - Answer: HTTP 200
text/plainUTF-8; the body is the filter's result, exactly as sent. - Anything else fails the action: 401/403 give
FunctionAuthenticationFailed; 404, 429, 5xx, redirects and network errors giveFunctionHttpFailed; a wrong content type or an oversized body givesFunctionResponseInvalid. A template never gets an empty value in place of an error. - Limits: 5 s per call, 64 KiB each way, 50 calls per render.