# Getting URL for Listener in custom integration

**URL:** <https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958>\
**Category:** Integrator.io\
**Tags:** export, handlebars\
**Created:** [December 19, 2025, 1:51pm UTC](https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958 "2025-12-19T13:51:02Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![danielhalawi](https://avatars.discourse-cdn.com/v4/letter/d/3da27b/32.png) [@danielhalawi](https://connective.celigo.com/u/danielhalawi)\
**Post date:** [December 19, 2025, 1:51pm UTC](https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958/1 "2025-12-19T13:51:02Z")

</div>

Hey,

Wondering if anyone can help me.

I have a custom integration, where I am using the inbuilt functionality for pulling between Sandbox and Production.

I have a step in a flow which requires submitting the Celigo Listener endpoint as a URL in the post to the 3rd party HTTP request.

I have setup an alias of the ‘export’ listener, but how can i surface the URL for the listener in my flow to be able to use the URL in my step…

This is a screenshot of where I need to put the listeners URL in my HTTP step.

 ![image](https://us1.discourse-cdn.com/flex001/uploads/celigo/original/2X/2/29a211e5bf4c23a2125cf07d7293652d337856fd.png)

I have created an alias of the export in the integration’s alias’.

 ![image](https://us1.discourse-cdn.com/flex001/uploads/celigo/original/2X/5/53d93cb987ec9698f14f1cc0103b982b3fc7c95d.png)

Tried to follow this guide: [Reference resource aliases in hooks, custom forms, and connection routes – Celigo Help Center](https://docs.celigo.com/hc/en-us/articles/5849183551387-Reference-resource-aliases-in-hooks-custom-forms-and-connection-routes#reference-resource-aliases-in-hooks-custom-forms-and-connection-routes-0), but isn’t very helpful in getting to a solution for what I need.

Any help really appreciated.

---

<div class="post-metadata">

**Author:** ![basvanditzhuijzen](https://sea1.discourse-cdn.com/flex001/user_avatar/connective.celigo.com/basvanditzhuijzen/32/4422_2.png) [@basvanditzhuijzen](https://connective.celigo.com/u/basvanditzhuijzen)\
**Post date:** [December 22, 2025, 12:00pm UTC](https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958/2 "2025-12-22T12:00:03Z")

</div>

Aliases are only used for the [integrator.io](http://integrator.io) javascript runtime objects (like running a virtual export). You could theoretically write a script that runs an export to get the alias id, but that seems overkill to me.

My preferred way of saving settings/ids that change between sandbox and prod is to define them as a custom setting on the integration, and setting ILM to ignore those settings. Then update it after deploying to prod the first time. This seems a bit less nice than an alias but is a lot easier to setup/

---

<div class="post-metadata">

**Author:** ![tylerlamparter](https://sea1.discourse-cdn.com/flex001/user_avatar/connective.celigo.com/tylerlamparter/32/9204_2.png) [@tylerlamparter](https://connective.celigo.com/u/tylerlamparter)\
**Post date:** [December 22, 2025, 9:19pm UTC](https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958/3 "2025-12-22T21:19:20Z")

</div>

Not the most intuitive way, but you could use a preSave script: [https://docs.celigo.com/hc/en-us/articles/27359514088859-Pre-save-script#pre-save-script-0](https://docs.celigo.com/hc/en-us/articles/27359514088859-Pre-save-script#pre-save-script-0).

The script would be:

```javascript
function preSave (options) {
  var r = options.newResource;

  if (!r.settings) r.settings = {};
  if (!r.settings.aliases) r.settings.aliases = {};

  var out = { exports: {}, imports: {}, flows: {}, connections: {} };
  var a = r.aliases || [];

  for (var i = 0; i < a.length; i++) {
    var item = a[i];
    if (!item || !item.alias) continue;

    if (item._exportId) out.exports[item.alias] = item._exportId;
    else if (item._importId) out.imports[item.alias] = item._importId;
    else if (item._flowId) out.flows[item.alias] = item._flowId;
    else if (item._connectionId) out.connections[item.alias] = item._connectionId;
  }

  r.settings.aliases = out;
  return r;
}

```

Essentially, this duplicates the aliases to the settings field anytime aliases are updated or created. The settings can then be referenced with handlebar expressions like:

```handlebars
{{{settings.integration.aliases.exports.aliasName}}}
{{{settings.integration.aliases.imports.aliasName}}}
{{{settings.integration.aliases.connections.aliasName}}}
{{{settings.integration.aliases.flows.aliasName}}}

```

---

<div class="post-metadata">

**Author:** ![tylerlamparter](https://sea1.discourse-cdn.com/flex001/user_avatar/connective.celigo.com/tylerlamparter/32/9204_2.png) [@tylerlamparter](https://connective.celigo.com/u/tylerlamparter)\
**Post date:** [December 22, 2025, 9:29pm UTC](https://connective.celigo.com/t/getting-url-for-listener-in-custom-integration/5958/4 "2025-12-22T21:29:06Z")

</div>

Or you could use a preSavePage script on your flow to add it to your record data and then reference it later. You do need an [integrator.io](http://integrator.io) connection and its ID referenced in the script.

```javascript
import { exports } from 'integrator-api';

var ioConnectionId = "replaceMe";

function preSavePage (options) {
  var integrationDetails = getIntegration(ioConnectionId, options._integrationId);
  var aliases = (integrationDetails && integrationDetails.aliases) ? integrationDetails.aliases : [];

  var out = {
    flows: {},
    exports: {},
    imports: {},
    connections: {}
  };

  for (var i = 0; i < aliases.length; i++) {
    var item = aliases[i];
    if (!item || !item.alias) continue;

    if (item._flowId) out.flows[item.alias] = item._flowId;
    else if (item._exportId) out.exports[item.alias] = item._exportId;
    else if (item._importId) out.imports[item.alias] = item._importId;
    else if (item._connectionId) out.connections[item.alias] = item._connectionId;
  }

  for (var j = 0; j < options.data.length; j++) {
    options.data[j].aliases = out;
  }

  return {
    data: options.data,
    errors: options.errors,
    abort: false,
    newErrorsAndRetryData: []
  };
}

function getIntegration (ioConnectionId, integration_id) {
  return exports.runVirtual({
    export: {
      _connectionId: ioConnectionId,
      http: {
        relativeURI: "/v1/integrations/" + integration_id,
        method: "GET"
      }
    }
  }).data[0];
}

```
