Regionalization and data residency

Dialogflow provides data residency to keep your data-at-rest physically within a geographical region or location. When a region is specified, your data-at-rest is not replicated outside the region. Pricing is the same for all regions.

Regions are used for the following reasons:

  • Your system may have regulatory or policy requirements that govern where your data must reside.
  • Your network latencies may be improved when the data is in the same region as your customers. For example, If UK customers use europe-west2, they can expect better latency.


All Dialogflow developer user and end-user data is included in data-at-rest. For example:

  • All agent resources set with console or API (intents, entities, etc.)
  • All agent settings set with console or API
  • Query history
  • Validation results
  • Model creation tasks
  • Training tasks
  • Long-running operation tasks

Available regions

Dialogflow provides the following regions:

Country grouping Geographical location Region ID
Americas Multi-region in the United States us (default)
Europe Belgium europe-west1
Europe London europe-west2
Asia Pacific Sydney australia-southeast1
Asia Pacific Tokyo asia-northeast1

Select a region with the console

The top left area of the Dialogflow ES Console has a drop-down for region selection. Every agent has an immutable region that is specified upon creation. When you select a region from the console, you can only list or create agents for the selected region. The default region is us.

Select a region with the API

If your agent was created in a non-default region, you must specify that region when calling the API for either design-time or runtime requests.

To provide a region, you supply a location parameter to API requests. For REST calls, do both of the following:

  • Provide the location URL path parameter.
  • Use the region-specific hostname of the form For example: If the region specified in the hostname does not match the region specified in the URL path, the request will be rejected.

For client libraries, see the client library documentation. You need to do the following:

  • Set the Dialogflow service endpoint to:
  • Set the session name to:


For example:


Before using any of the request data below, make the following replacements:

  • PROJECT_ID: your GCP project ID
  • REGION_ID: a region ID, example: europe-west2
  • SESSION_ID: a session ID

HTTP method and URL:


Request JSON body:

  "query_input": {
    "text": {
      "text": "I want a pony.",
      "language_code": "en-US"

To send your request, expand one of these options:



import java.util.List;
import java.util.Map;

public class DetectIntentWithLocation {

  // DialogFlow API Detect Intent sample with text inputs.
  public static Map<String, QueryResult> detectIntentWithLocation(
      String projectId, String locationId, List<String> texts, String sessionId,
      String languageCode)
      throws IOException, ApiException {
    SessionsSettings sessionsSettings = SessionsSettings.newBuilder()
        .setEndpoint(locationId + "").build();
    Map<String, QueryResult> queryResults = Maps.newHashMap();
    // Instantiates a client
    try (SessionsClient sessionsClient = SessionsClient.create(sessionsSettings)) {
      // Set the session name using the projectId (my-project-id), locationId and sessionId (UUID)
      SessionName session = SessionName
          .ofProjectLocationSessionName(projectId, locationId, sessionId);
      System.out.println("Session Path: " + session.toString());

      // Detect intents for each text input
      for (String text : texts) {
        // Set the text (hello) and language code (en-US) for the query
        TextInput.Builder textInput =

        // Build the query with the TextInput
        QueryInput queryInput = QueryInput.newBuilder().setText(textInput).build();

        // Performs the detect intent request
        DetectIntentResponse response = sessionsClient.detectIntent(session, queryInput);

        // Display the query result
        QueryResult queryResult = response.getQueryResult();

        System.out.format("Query Text: '%s'\n", queryResult.getQueryText());
            "Detected Intent: %s (confidence: %f)\n",
            queryResult.getIntent().getDisplayName(), queryResult.getIntentDetectionConfidence());
        System.out.format("Fulfillment Text: '%s'\n", queryResult.getFulfillmentText());

        queryResults.put(text, queryResult);
    return queryResults;


def detect_intent_texts_with_location(
    project_id, location_id, session_id, texts, language_code
    """Returns the result of detect intent with texts as inputs.

    Using the same `session_id` between requests allows continuation
    of the conversation."""
    from import dialogflow

    session_client = dialogflow.SessionsClient(
        client_options={"api_endpoint": f"{location_id}"}

    session = (
    print(f"Session path: {session}\n")

    for text in texts:
        text_input = dialogflow.TextInput(text=text, language_code=language_code)

        query_input = dialogflow.QueryInput(text=text_input)

        response = session_client.detect_intent(
            request={"session": session, "query_input": query_input}

        print("=" * 20)
        print(f"Query text: {response.query_result.query_text}")
            f"Detected intent: {response.query_result.intent.display_name} (confidence: {response.query_result.intent_detection_confidence,})\n"
        print(f"Fulfillment text: {response.query_result.fulfillment_text}\n")

Cloud logging

See the Cloud logging guide to control the region in which logs are stored.


When a non-default region is selected in the Dialogflow Console, the following features are not available: