Consolidate push and in-app messaging workspaces

Reach out before you start

Consolidating touches your messages, your app builds, and your billing, so let us help you plan it. Contact your CSM, or our support team if you don’t have a CSM. We can check how ready your workspaces are and walk you through what to do first.

If you can’t add apps to a workspace from Workspace settings > Push, you also need us to turn on multi-app support first.

How it works

Imagine you have two workspaces, one for each of your mobile apps, but the two audiences overlap. Rather than maintaining profiles with similar attributes and messages with similar content across two workspaces, you might want to manage everything from a single workspace.

To do this, you’ll pick the workspace you want to consolidate around, copy your messages from the old workspace into it, and release mobile app builds that point at the new, consolidated workspace.

As users update your app to the latest version, they’ll appear in your consolidated workspace and you can start to prune them from the old workspaces. When enough of your audience has updated your app and arrived in the consolidated workspace, you’ll retire the old workspaces. Then you’ll have a single workspace for all your profiles and mobile app messaging.

It’s important that as each profile arrives in the new workspace, you stop the old workspace from sending to them, so you don’t send them duplicate messages over channels that aren’t unique to a workspace—SMS, email, etc.

flowchart TD Prep[Copy your messages to the<br/>consolidated workspace] --> Release[Release app builds that point<br/>at the consolidated workspace] Release --> Q{Has the person<br/>updated?} Q -->|Not yet| Old[They keep hearing from<br/>the old workspace] Old --> Q Q -->|Yes| Arrive[They appear in the<br/>consolidated workspace] Arrive --> Flag[You flag them in the old workspace,<br/>which stops its messages] Flag --> Cut([Cut over when arrivals level off])

Why you can’t copy your audience over

Each build of your app talks to one Customer.io workspace. When you’re ready to consolidate your workspaces, you also need to update your app to point at the new workspace.

If you were to copy your audience over first, any users who hadn’t updated their app yet wouldn’t receive messages from the new workspace.

Instead, by updating your app first, you can identify users as they update. When they arrive in the workspace you consolidate around, you’ll know that they’re eligible for messages from the new workspace.

This applies to both push and in-app messages. Until someone updates:

  • Their device fetches in-app messages from the old workspace, so it’s the only workspace that can show them in-app messages.
  • Their device registered its push token with the old workspace, so that’s the workspace that sends them push notifications.

Consolidate your workspaces

Before you start, decide which workspace you want to consolidate around. That’s the workspace you’ll point your app builds at. Pick the one with the most engaged audience, and keep the app that’s already there as its default app.

Don't change the default app

The default app receives every message that doesn’t name an app: messages you built before app targeting existed, and messages to devices that don’t report which app they belong to. We work that out when the message sends, not when you build it.

So if you make a newly added app the default, all of those messages move to it, and the app that was already in the workspace stops receiving them.

  1. Add your other apps to the consolidated workspace. Go to Workspace settings > Push and add each app. We tell your apps apart by their push credentials, so you need the Apple Push Notification service (APNs) or Firebase Cloud Messaging (FCM) credentials for each one.

  2. Copy your messages into the consolidated workspace. You can copy a whole workflow between workspaces, and copy one-time sends and broadcasts as well. You can’t duplicate an automation across workspaces, so create the automation in the consolidated workspace, set its trigger, then paste the workflow in.

    Segments, email layouts, sender addresses, and action conditions that reference a segment don’t come along. Re-create those in the consolidated workspace before you rely on the messages you copied.

  3. Release app builds that point at the consolidated workspace. Update to an SDK version that supports app-level targeting and swap in the consolidated workspace’s credentials. Have the new build include an attribute in its identify call, like consolidated: true. You can use this attribute to flag new arrivals in your consolidated workspace. New installs get the attribute too. That’s fine, because the webhook you set up next only updates profiles that already exist in the old workspace.

  4. Flag users in the old workspace. In the consolidated workspace, create an automation triggered by your consolidated attribute, and give it a webhook action. The webhook sets an attribute on the person’s profile in the old workspace, marking them as someone the old workspace should stop sending to. Cross workspace automation has the full steps. Set the automation up before you move on to the next step.

  5. Stop the old workspace from sending messages to users who’ve arrived in the new workspace. In the old workspace, add the attribute to each automation’s exit conditions, so anyone you flag mid-journey leaves, and to its trigger conditions, so nobody you flag enters again. Add it to the audience conditions of your one-time sends too.

  6. Cut over. When your new workspace has enough arrivals to replace the old one, and you see less activity in the old workspace, you’re ready to delete the profiles in the old workspace or remove the workspace all together. There are some different ways to achieve this. See Section below.

Retiring the old workspace

It’s up to you to decide when to retire your old profiles or workspace. You may not want to delete profiles immediately, even if you flag them with an automation to ensure that they’re in the new workspace.

Before you delete profiles or the workspace, you want to make sure that profiles in the old workspace:

  1. Have arrived in the new workspace.
  2. Are no longer sending data/activity to the old workspace. If you still have active integrations or touchpoints pointed at the old workspace, users could still be interacting with them and sending data to the old workspace.
  3. No longer receive messages from the old workspace. If you still have active automations that are valid for these users, you might not want to stop their journeys just yet.

You can either remove profiles individually, as you’re confident that they meet the criteria above, or remove the entire workspace when you’re confident that a significant amount of your audience meets the criteria above.

If you remove profiles individually, make sure that you don’t have active integrations or touchpoints that users can still interact with. If you do, you could inadvertently re-identify people in the old workspace after you delete them—which can affect billing and make it difficult to determine when you’re ready to retire the workspace.

Cross workspace automation

As users arrive in the consolidated workspace, you probably want to flag them in the old workspace. This gives you criteria you can use to filter them out of automations or messages, and helps you determine when you’re ready to retire profiles from the old workspace.

To affect users in your old workspace, you’ll set up a webhook.

  1. Get your old workspace’s Track API credentials.

  2. In the consolidated workspace, create an automation and set the trigger to use an attribute that indicates that someone has arrived in the new workspace. You might use an attribute in your new workspace that you set when you identify them, like consolidated: true.

  3. Add a webhook action to the automation workflow.

  4. In the webhook action:

    1. Set the HTTP method to PUT.

    2. Set the URL to https://SITE_ID:TRACK_API_KEY@track.customer.io/api/v1/customers/{{customer.email}}, replacing SITE_ID and TRACK_API_KEY with the credentials from step 1. The webhook action doesn’t have separate authentication fields; you add basic authentication credentials to the URL. Replace {{customer.email}} with customer.id if you use a shared ID to identify users in both workspaces.

      Note

      If your old workspace is in the EU region, use track-eu.customer.io instead of track.customer.io.

    3. Use the request body to set the attribute you want to flag the user with, and also set _update to true. This ensures that you don’t inadvertently create a profile in the old workspace if the identifier doesn’t match anyone there:

      {
      "consolidated": true,
      "_update": true
      }

    Send a test request

    Try sending a test request to the old workspace’s Track API to make sure it works. For the test, you might want to unset _update to create a profile in the old workspace if the identifier doesn’t match anyone there. That’ll help you prove the webhook end-to-end.

  5. Save the webhook and start the automation.

Now, as people arrive in the consolidated workspace, the automation will flag them in the old workspace, and you can stop sending them messages.

Updated August 25, 2026