---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/studio/widget-library/resolve-profile#article
headline: Resolve Profile widget
description: Learn how to look up a customer profile in Twilio Profiles from within your Studio Flow with the Resolve Profile widget.
url: https://www.twilio.com/docs/studio/widget-library/resolve-profile
inLanguage: en
dateModified: 2026-09-24T21:21:55.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# Resolve Profile widget

Studio widgets represent various parts of Twilio's functionality that you can combine in your Studio Flow to build out robust applications that don't require you to do any coding.

> \[!NOTE]
>
> New to Twilio Studio? Check out our [Getting Started guide](/docs/studio/user-guide/get-started).

> \[!NOTE]
>
> The Studio Profiles widgets are not PCI compliant or a HIPAA Eligible Service and should not be used in workflows that are subject to HIPAA or PCI.
>
> These widgets are only available in the new Twilio Console. If your account hasn't been migrated, you'll be redirected to the legacy Console, where these widgets won't appear.

The Resolve Profile widget looks up a customer profile in Twilio Profiles using a channel identifier — such as a phone number or email address — or a Profile ID you already have from earlier in the flow. When a profile is found, the widget returns the profile's traits as flow variables, so the rest of your flow can route, personalize, or gate on them.

With this widget, you can:

* Greet a returning caller by name and route based on stored preferences, such as a saved language.
* Look up VIP status or loyalty tier to control queue priority.
* Branch new and returning customers into different flows — send someone with no profile straight to account setup, and someone with one directly to self-service.

![Resolve Profile widget configuration panel showing Profile Store, Find Profile By, Identifier Type, Identifier Value, and Profile ID fields](https://docs-resources.prod.twilio.com/ce488fffaee4232c509ea4ab4133c054905bc96bc1eb40a79365054df77e9d00.png)

## Before you begin

Before you configure the Resolve Profile widget, you need:

* A [Profile Store](/docs/conversations/memory/memory-stores) in Twilio Profiles, with the identifier types you plan to search by (for example, phone or email) already configured through [Identity Resolution](/docs/conversations/memory/identity-resolution).
* A channel identifier available in your flow to search by — such as `{{trigger.call.From}}` for an inbound call — or a Profile ID from an earlier widget in the flow.

## Required configuration for Resolve Profile

The Resolve Profile widget requires the following information:

| Field                | Type                                | Required    | Description                                                                                                                                                                                                                                                                             |
| -------------------- | ----------------------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Profile Store**    | Dropdown (account stores)           | Yes         | The Profile Store to search.                                                                                                                                                                                                                                                            |
| **Find Profile By**  | Radio selection                     | Yes         | A selection between Identifier or Profile ID, determining whether Identifier Type and Identifier Value or Profile ID are required.                                                                                                                                                      |
| **Identifier Type**  | Dropdown (from store configuration) | Conditional | How to identify the customer, such as phone or email. Required unless you provide a Profile ID.                                                                                                                                                                                         |
| **Identifier Value** | Expression / variable               | Conditional | The identifier value to search for, such as `{{trigger.call.From}}`. Required unless you provide a Profile ID.                                                                                                                                                                          |
| **Profile ID**       | Expression / variable               | No          | A known profile ID, such as `{{widgets.resolve_profile_1.profiles.profile_id}}` from an earlier Resolve Profile widget. When you provide a Profile ID, the widget fetches that profile directly and skips the identifier lookup — Identifier Type and Identifier Value aren't required. |

> \[!NOTE]
>
> Channel identifiers such as phone numbers can change ownership over time. If you use this widget to gate access to sensitive information, verify that the returned profile's traits actually match the caller before you act on them.

## Resolve Profile transitions

| Name                        | Description                                                                                        |
| --------------------------- | -------------------------------------------------------------------------------------------------- |
| **Profile found**           | Exactly one matching profile was found.                                                            |
| **Multiple profiles found** | Two or more profiles matched the identifier. See Resolve Profile variables for how to handle this. |
| **Profile not found**       | No profile matched the identifier.                                                                 |
| **Failed**                  | The lookup couldn't complete, such as an API error, a timeout, or a rate limit.                    |

## Resolve Profile variables

When the Resolve Profile widget executes, it populates the following variables, where `MY_WIDGET_NAME` is the name of your widget:

| Name                                                   | Description                                                                                         |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
| `{{widgets.MY_WIDGET_NAME.profiles.profile_id}}`       | The resolved or fetched profile's ID.                                                               |
| `{{widgets.MY_WIDGET_NAME.profiles.store_id}}`         | The Profile Store ID used for the lookup.                                                           |
| `{{widgets.MY_WIDGET_NAME.profiles.identifier_type}}`  | The identifier type used for the lookup, such as phone or email.                                    |
| `{{widgets.MY_WIDGET_NAME.profiles.identifier_value}}` | The identifier value used for the lookup.                                                           |
| `{{widgets.MY_WIDGET_NAME.profiles.profile}}`          | The full profile, including all trait groups and traits. Populated on the Profile found transition. |
| `{{widgets.MY_WIDGET_NAME.profiles.profiles}}`         | An array of matching profile IDs. Populated on the Multiple profiles found transition.              |

> \[!NOTE]
>
> On the Multiple profiles found transition, `profiles.profiles` contains an array of profile IDs, not full profile data. To fetch each full profile, use a counter variable with a Split Based On (or Branch) widget loop:
>
> 1. Set a counter variable to 0.
> 2. Check whether the counter is less than `profiles.profiles.length`.
> 3. Call Resolve Profile again, using `{{widgets.MY_WIDGET_NAME.profiles.profiles[counter]}}` as the Profile ID input.
> 4. Increment the counter and repeat.
>
> Each profile requires its own Resolve Profile call — there's no way to fetch all of them in a single request.

## Example: Personalized greeting by phone number

This example looks up a caller by phone number and branches based on whether a profile is found.

When a call comes in, a Resolve Profile widget searches by `{{trigger.call.From}}`. On the Profile found transition, the flow plays a greeting using the customer's stored `Contact.firstName` trait. On Profile not found, Multiple profiles found, or Failed, it falls back to a generic greeting.

![Flow diagram: incoming call triggers Resolve Profile, which branches to a personalized greeting on Profile found, or a generic greeting on Profile not found, Multiple profiles found, or Failed](https://docs-resources.prod.twilio.com/a70182399cca06056b66ff747a9104d32fff0854794c9b023c630dfadeb28d4a.png)
