A unified Azure platform for creating and managing AI models, agents, and applications with built‑in enterprise security, monitoring, and governance
I don't know of documentation that confirms or rules out input_image.file_id with project-scoped files on private BYO storage. Your evidence, though, points to a specific split, and you can confirm it from your side in about 30 minutes.
What your symptoms suggest
- The Files API path works: upload succeeds, metadata and content download succeed, and blob logs show a read by Foundry's file service with the project identity.
- The inference path fails with
param: "url"and "Error while downloading file". That suggests the model service resolves the file ID to a blob URL and downloads it itself, which is a different caller from the file service. - Inline base64 works, so the model, the deployment and the image are fine.
In other words, it looks like the Files API reaches your storage through the Foundry network-injected/trusted path, while the image fetch for inference comes from a caller that your storage firewall (public access disabled) or RBAC doesn't allow. That's my inference from the symptoms, not a documented behavior.
1. Diagnose it: did the failing request reach storage?
With diagnostic settings enabled on the storage account (blob → StorageRead to Log Analytics):
StorageBlobLogs
| where TimeGenerated between (datetime(2026-11-06T13:56:50Z) .. datetime(2026-11-06T13:57:10Z))
| project TimeGenerated, OperationName, StatusCode, StatusText,
CallerIpAddress, AuthenticationType, RequesterObjectId, Uri
| order by TimeGenerated asc
| What you see | Meaning |
|---|---|
403 AuthorizationFailure from a non-VNet IP |
The network firewall blocks the inference service. Go to test 2. |
403 AuthorizationPermissionMismatch |
Wrong identity. Check RequesterObjectId: it's probably the Foundry account's managed identity, not the project's. Grant that principal Storage Blob Data Reader. |
| No entry at all | The request never reached your account. It's either a DNS/network path issue or the service reads from a different store. This is a support-case item. |
2. Isolate the network path (temporary test)
On the storage account, temporarily switch from Disabled to Enabled from selected networks with no public IPs, and add:
- Exceptions: Allow Azure services on the trusted services list to access this storage account
- Resource instances:
Microsoft.CognitiveServices/accounts→ your Foundry account
These don't open the account to the internet. If file_id starts working, the inference fetch needs the trusted-service path. Keep that configuration, or revert and stay on base64.
3. Isolate BYO storage
Run the same upload + responses.create against the resource endpoint (https://<account>.openai.azure.com/openai/v1/), as in the Responses documentation example. Files uploaded there go to service-managed storage. If it works there and fails on the project endpoint, the limitation is specific to project files on BYO storage.
Answers to your four questions, briefly
- Supported? Not documented either way for project-scoped BYO storage. Test 3 tells you whether it's a limitation.
- Different identity/path? Your logs plus the
param: urlerror suggest yes. The KQL above shows which identity and IP actually call. - Extra configuration? Most likely the trusted-services/resource-instance rule, and Blob Data Reader for the Foundry account identity.
- Diagnostics?
StorageBlobLogsas above. If nothing shows up, open a support case with the APIM request ID,x-request-id, file ID and timestamps you already have. Those are exactly what the product team needs.
Workaround meanwhile: inline base64 through input_image.image_url (which you've confirmed works), keeping images under the request size limits.
References: Responses API – file input · Azure Storage trusted services and resource instance rules · Monitor Azure Blob Storage – StorageBlobLogs