Is it possible to inject dynamic tenant headers into outbound IVR calls from a Premium App?

Is it possible to configure outbound IVR flows within a multi-tenant Premium App to dynamically append custom SIP headers based on the originating organization context? We are building a partner integration where call routing logic depends on specific tenant metadata that isn’t available in the standard Genesys Cloud user attributes. Currently, the outbound calls initiated via the Architect API lack the necessary X-Tenant-Id header, causing downstream SIP trunk partners to reject the connection with a 403 Forbidden error due to missing authentication context.

The documentation suggests that custom headers can be added at the trunk level, but this approach fails for multi-org deployments since we cannot hardcode tenant-specific headers for shared infrastructure. Refer to the Outbound Call API constraints for the current limitations. We are using the latest Architect SDK version 2.1.5. Has anyone successfully implemented dynamic header injection via the /api/v2/architect/outbound/calls endpoint or through a custom integration server proxy?

I’d suggest checking out at the v2/architect/flows API structure for outbound calls. The standard outbound call flow does not support custom SIP headers directly in the initiate-call action payload. This is a common limitation when trying to pass tenant metadata through the Genesys Cloud platform to downstream SIP trunks.

The platform enforces strict schema validation on outbound call initiations. If you try to inject X-Tenant-Id via the standard API, the request is likely rejected with a 400 Bad Request or silently ignored if it’s not a recognized field.

A workaround involves using a Webhook to an intermediate service that can manipulate the SIP headers before forwarding. However, this introduces latency and complexity. For load testing purposes, verify that your JMeter scripts are not hitting the architect API rate limits when attempting these dynamic header injections. The v2/architect/flows endpoint has strict concurrency limits.

{
 "name": "Outbound Call with Headers",
 "actions": [
 {
 "id": "initiate-call",
 "name": "Initiate Call",
 "settings": {
 "phoneNumber": "+1234567890",
 // Custom headers are not supported here directly
 // "headers": { "X-Tenant-Id": "tenant123" } 
 }
 }
 ]
}

If the downstream partner requires the X-Tenant-Id, consider using the v2/conversations/calls API to start the call and then use a webhook to update the conversation metadata. This metadata can then be used by a flow to trigger a webhook to your intermediate service for header manipulation. Keep in mind that this approach increases the load on your platform and may impact call setup times. Monitor the WebSocket connection limits if you are scaling this out.