application-integration-basics
About application-integration-basics
A guide to Google Cloud's serverless Application Integration platform, covering workload fit, project and region setup, interface selection, and platform constraints. It also explains the ADK toolset and clarifies that the platform has no Google-managed MCP server.
Key features
- 01Assess iPaaS versus custom-code fit
- 02Configure projects, regions, and IAM
- 03Compare REST, Python, Terraform, and console
- 04Explain the ADK ApplicationIntegrationToolset
- 05Describe platform limits and confirmation safeguards
Use cases
- 01Evaluate SaaS connections and event-driven orchestration
- 02Set up an Application Integration region
- 03Choose an interface to manage and run workflows
- 04Expose published integrations or connector actions to ADK agents
MCP support
Application Integration has no Google-managed remote MCP server. Integration Connectors includes an outbound MCP connector that lets workflows call external MCP servers.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ google/ skills --skill application-integration-basicsAfter installing, type/application-integration-basicsin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/api-access.mdcore-concepts.mdiam-and-service-accounts.mdlimits.mdprovisioning-and-terraform.mdDetails
From the project READMEApplication Integration Basics
Application Integration is Google Cloud's serverless, auto-scaling Integration-Platform-as-a-Service (iPaaS) for connecting Google Cloud services and third-party SaaS applications. It runs event-driven workflows made of triggers, tasks, data mappings, and Integration Connectors connections without requiring you to manage servers. Use this skill to decide whether Application Integration fits a workload, set up a project and region, configure IAM and run-as service accounts, choose the right API or tool interface, and design around platform limits.
When to Use Application Integration vs. Custom Glue Code
| Choose Application Integration when... | Choose custom code (Cloud Run / Cloud Functions) when... |
|---|---|
| Connecting SaaS apps (CRM, ERP, databases, Google Cloud services) via prebuilt Integration Connectors. | You need sub-second latency or custom binary protocols. |
| Orchestrating event-driven workflows from API, Pub/Sub, Cloud Scheduler, Salesforce, or Connector Event triggers. | Total workflow data exceeds 30 MB (or 8 MB for API trigger inputs and Connector payloads). |
| Transforming JSON/array data visually with Data Mapping or Jsonnet without deploying containers. | Synchronous runs take longer than 2 minutes or asynchronous runs take longer than 10 minutes. |
Pausing workflows for human review (Approval or Suspend tasks up to 31 days). | You must call VPC-only HTTP endpoints directly without Private Service Connect connectors (Call REST Endpoint reaches the public internet only). |
Exposing enterprise workflows or connectors as tools to AI agents via ADK ApplicationIntegrationToolset. | You need arbitrary language packages or heavy in-memory compute beyond JavaScript (V8) or Jsonnet tasks. |
Safety and Confirmation Rules
- Read-only checks run freely: You may run
gcloud services list,gcloud projects get-iam-policy, and HTTPGETcalls tohttps://integrations.googleapis.com/v1/...orhttps://connectors.googleapis.com/v1/...without asking first. - Require explicit user confirmation before any state change: Always show the exact command or request payload and wait for user approval before:
- Enabling APIs (
gcloud services enable). - Provisioning a region (
clients:provisionorterraform applyongoogle_integrations_client), especially with Customer-Managed Encryption Keys (CMEK), because enabling CMEK for a region cannot be undone. - Modifying IAM policies (
gcloud projects add-iam-policy-bindingorgcloud iam service-accounts add-iam-policy-binding). - Creating, uploading, publishing, unpublishing, executing, testing, or deleting any integration, version, auth profile, or connection.
- Enabling APIs (
- Never bundle destructive scripts that delete integrations, versions, auth profiles, or connections unattended.
- Ask the user before installing packages (
pip install) or changing global gcloud settings such asgcloud config set auth/impersonate_service_account; show the exact command first.
Choosing the Interface
Application Integration has no gcloud integrations command group (and no gcloud connectors command group), and no Google-managed remote MCP server. The REST API is the primary control and execution interface.
| Interface | What it covers | Authentication |
|---|---|---|
REST API (curl) | Full v1 surface: region provisioning, integrations, versions, download/upload, publish, execute, schedule, executions, suspensions, authConfigs, templates. | Authorization: Bearer $(gcloud auth print-access-token) |
| Python discovery client | Full v1 surface via googleapiclient.discovery.build("integrations", "v1") (and v2 via build("integrations", "v2"); no dedicated Cloud Client Library exists). Install with pip install "google-api-python-client>=2.100.0,<3" "google-auth>=2.20.0,<3". | Application Default Credentials (gcloud auth application-default login) |
Terraform (hashicorp/google) | Infrastructure only: google_integrations_client (region setup), google_integrations_auth_config, and google_integration_connectors_*. Does not manage integration workflow versions. | ADC or Terraform provider credentials |
ADK (ApplicationIntegrationToolset) | Exposes published API-trigger integrations or Integration Connectors actions/entities as tools for ADK agents (Python v0.1.0+, Java v0.3.0+). | ADC (gcloud auth application-default login) or service account JSON |
| Cloud console | Visual drag-and-drop editor, Quick/Advanced region setup, Approval task resolution, OAuth 2.0 authorization code consent flow. | Browser Google Cloud sign-in |
- Use
gcloudonly for generic Google Cloud tasks: enabling APIs (gcloud services enable), printing access tokens (gcloud auth print-access-token), managing IAM, and reading Cloud Logging (gcloud logging read). - Integration Connectors includes an outbound MCP connector (
MCP v1andv2) that lets a workflow call an external MCP server as a connector target; this is an outbound connector, not a Google-managed MCP server for controlling Application Integration. - Always use the global endpoint
https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/...consistently for REST calls. - Note on draft testing (
integrations:test): AlthoughPOST .../integrations/INTEGRATION_NAME:testexists in the v1 REST API, its requiredTestIntegrationsRequest.clientIdvalue is not publicly documented, so do not invent one; test integrations by publishing to a non-production project and calling:execute. - See references/api-access.md for authentication setup,
curlcommands, Python discovery client patterns, and ADKApplicationIntegrationToolsetconfiguration.
Step-by-Step Region Setup Workflow
Application Integration is regional: confirm the target region is supported on Application Integration locations and use us-central1 as a well-supported default when the user has no preference. The region is the LOCATION in every REST path; no gcloud default-region setting applies to Application Integration. Provisioning is per region. Provisioning us-central1 does not provision europe-west1; repeat region provisioning for every LOCATION you use in PROJECT_ID. Ensure an active billing account is attached to PROJECT_ID before setup—an active billing account is required even when usage stays within the monthly free tier (see the Application Integration pricing page).
1. Check and enable required APIs
First check which APIs are already enabled (read-only):
gcloud services list --enabled --project=PROJECT_ID \
--filter="config.name:(integrations.googleapis.com OR connectors.googleapis.com OR secretmanager.googleapis.com OR cloudkms.googleapis.com)"
After getting user confirmation, enable the required APIs (add cloudkms.googleapis.com only if configuring CMEK):
gcloud services enable \
integrations.googleapis.com \
connectors.googleapis.com \
secretmanager.googleapis.com \
--project=PROJECT_ID
2. Verify setup IAM roles on the caller
Setting up Application Integration requires roles/integrations.integrationAdmin, roles/connectors.admin, and roles/editor (plus roles/cloudkms.admin for CMEK). Check current bindings (read-only):
gcloud projects get-iam-policy PROJECT_ID --format=json
3. Provision the region (LOCATION)
Choose one of the three supported paths after getting user confirmation:
-
Option A: REST (
clients:provision)curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{}' \ "https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clients:provision"The response is
{}when provisioning succeeds (clients:provisiondoes not applyrunAsServiceAccount; set the run-as identity on each integration version viaIntegrationVersion.runAsServiceAccount).{}is also returned when the region is already provisioned; the call does not change an existing region's settings. Change HTTP calls or encryption on an existing region from the console's Regions page (when the region is alreadyACTIVE,cloudKmsConfig,enableHttpCall, andenableManagedAiFeaturesonclients:provisionare not applied). IfPROJECT_IDwas already registered through Apigee Integration, provisioning fails. -
Option B: Cloud console Open
https://console.cloud.google.com/integrations, selectLOCATION, and click Quick setup (enables the APIs, creates the default service account, and uses Google-managed encryption) or Advanced setup (to configure CMEK, HTTP calls, AI features, governance, or variable masking). To add another region later, go to Regions > Provision new region. -
Option C: Terraform (
google_integrations_client) Use thegoogle_integrations_clientresource inhashicorp/google. Do not setrun_as_service_accountongoogle_integrations_client—that argument was removed in provider v8.0.0 (August 26, 2026), and it mapped to theclients:provisionrunAsServiceAccountfield, which is likewise not applied; set the run-as identity on each integration version (IntegrationVersion.runAsServiceAccount) instead.
4. Sanity-check region access
Run a read-only list call against the region; a successful 200 OK response is a good sign that the API is reachable in LOCATION:
curl -sS -H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations"
See references/provisioning-and-terraform.md for all ProvisionClientRequest fields, CMEK and governance options, and complete Terraform examples.
Core Concepts at a Glance
- Integrations and Triggers: An integration is a workflow started by one or more triggers. Synchronous runs (
SYNC) wait for completion and return output (integrations.execute, console test, syncCall Integration). Asynchronous runs (ASYNC) are fire-and-forget (integrations.schedule, Schedule, Cloud Scheduler, Cloud Pub/Sub, Salesforce triggers, and runs resumed after a suspension or approval). - Tasks: Units of work chained after a trigger (such as
Data Mapping,Call REST Endpoint,Connectors,JavaScripton V8,Cloud Function,Approval,Suspend,Timer, loops, andCall Integration). - Versions and Edit Locks: Only a
DRAFTversion can be edited (locked to its author for 15 minutes after the last update). Only anACTIVE(published) version runs from triggers. Publishing a version automatically unpublishes the prior active version and cancels any suspended executions of that prior version. Unpublishing moves an active version toSNAPSHOT(PREVIOUSLY_PUBLISHED). Callingversions.deletesoft-deletes a version intoARCHIVED(listed asDELETEDon the Integration versions documentation page). - Variables:
- Integration variables: Explicit inputs (
IN), outputs (OUT),IN_OUT, or internal variables withIN_OUT_TYPE_UNSPECIFIED($varName$). - Task variables: Auto-generated task outputs named
`Task_<taskId>_<variableName>`wheretaskIdis the bare task number intaskConfigs[].taskId(for example,taskId"1"->$`Task_1_responseBody`$). - System variables: keys are backtick-wrapped (
`ExecutionId`,`ExecutionMode`,`ErrorInfo`[message,code],`IntegrationName`,`Region`,`ProjectId`); reference them as$`ExecutionId`$(a bare$ExecutionId$names a nonexistent integration variable and fails). - Config variables (Preview): Environment-specific values defined in
integrationConfigParameters(with defaults inparameter.defaultValue; a top-levelvalueon a draft is discarded) and supplied per environment inconfigParametersat publish time (named`CONFIG_<NAME>`; keys inconfigParametersmust exactly match a key inintegrationConfigParameters, backticks included, such as"`CONFIG_target_url`", because unknown keys are silently ignored—publish returns 200 and the default stays). Never store secrets in config variables—they are exported in plain text. Use an authentication profile (authConfigs) or the Secret Manager task instead.
- Integration variables: Explicit inputs (
- Suspensions:
Suspendtasks pause up to 31 days and are resumed via the Suspensions API (suspensions:lift, with an optionalsuspensionResult, requiringintegrations.suspensions.lift).Approvaltasks email approvers and can be approved or rejected in the Cloud console UI or viasuspensions:resolve(state:"LIFTED"or"REJECTED", requiringintegrations.suspensions.resolve). Listing suspensions (suspensions.list) requiresintegrations.suspensions.list. All three permissions are included inroles/integrations.suspensionResolver(androles/integrations.integrationAdmin), and resuming also requiresroles/iam.serviceAccountUseron the integration's run-as service account; always confirm with the user before lifting or resolving.Timertasks resume automatically. - Authentication Profiles (
authConfigs): Reusable regional credential records (projects/PROJECT_ID/locations/LOCATION/authConfigs/AUTH_CONFIG_ID). They are not included when downloading an integration version.
See references/core-concepts.md for full details on version states, trigger types, task categories, variables, suspensions, and authentication profiles.
IAM and the Run-As Service Account Requirement
Key IAM roles and service agents
- Developer & operator roles:
roles/integrations.integrationAdmin(full CRUD + delete auth profiles),roles/integrations.integrationEditor(create/upload/edit/test/invoke/cancel/replay/publish, includingintegrations.integrationVersions.createandintegrations.integrationVersions.deploy),roles/integrations.integrationDeployer(publish/unpublish viaintegrations.integrationVersions.deploy; holdslist/get/deploybut notcreate, so it can publish an existing version but cannot upload),roles/integrations.integrationInvoker(invoke/cancel/replay),roles/integrations.integrationViewer(view integrations and logs), androles/integrations.suspensionResolver(list, lift, and resolve suspensions:integrations.suspensions.list,integrations.suspensions.lift,integrations.suspensions.resolve;suspensionResolveralone cannot read execution records, so also grantroles/integrations.integrationViewerto inspecttaskExecutionDetailsor run:troubleshoot, or use the approval email link, which carries the execution and task IDs). - Service agents:
- Application Integration service agent:
service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com(grantedroles/integrations.serviceAgent). - Integration Connectors service agent:
[email protected](grantedroles/connectors.serviceAgent).
- Application Integration service agent:
Mandatory run-as service account rules (effective October 15, 2026)
- Explicit identity required: For integrations created on or after October 15, 2026 (and for existing integrations at a later date), every run needs an explicit identity—either the triggering caller or a user-managed run-as service account set per integration version via
IntegrationVersion.runAsServiceAccount(region provisioning viaclients:provisiondoes not applyrunAsServiceAccount). - Triggers other than API or Private require a run-as service account: Integrations created on or after October 15, 2026 with any trigger other than an API or Private trigger (for example Schedule, Cloud Scheduler, Cloud Pub/Sub, Eventarc, Salesforce, or Connector Event) cannot be tested or published unless
runAsServiceAccountis set. Private triggers are exempt like API triggers, so a sub-integration whose only trigger is Private can be published withoutrunAsServiceAccount. - Region governance: If governance is enabled on the region, a run-as service account is mandatory for every new integration and version, including API-trigger integrations.
- Service Account User (
roles/iam.serviceAccountUser): WheneverrunAsServiceAccountis set on a version, the user (or principal) publishing or testing the version must holdroles/iam.serviceAccountUseron that service account (or its owning project). At runtime, the invoking caller or trigger service account—and anyone resolving or lifting a suspension—must also holdroles/iam.serviceAccountUseron it. - Best practice: Create one dedicated, minimally scoped user-managed service account per integration. When
runAsServiceAccountis set and no task-level auth profile is set, it mints tokens for Connector, Call REST Endpoint, and Cloud Function tasks (an OAuth 2.0 or OIDC auth profile on a task takes precedence overrunAsServiceAccount).
See references/iam-and-service-accounts.md for the complete IAM role tables, service agent permissions, credential precedence rules, and gcloud IAM commands.
Key Quotas and Limits to Design Around
| Limit | Value | Design impact |
|---|---|---|
| SYNC execution timeout | 2 minutes | Use async triggers or integrations.schedule for workflows exceeding 2 minutes; timed-out sync runs become CANCELLED. |
| ASYNC execution timeout | 10 minutes | Split heavy work into sub-integrations or external jobs if a single async run exceeds 10 minutes. |
| Max execution lifetime | 31 days | Includes time paused in Approval or Suspend tasks (max 44,640 minutes). |
| Total integration data | 30 MB | Shared across input/output variables and private-trigger sub-integrations. Above 10 MB, local logging is disabled, retries stop working, and monitoring skips the run. |
| API trigger input size | 8 MB | Cumulative size across all input variables; larger payloads fail before the workflow starts. |
| Connectors data & timeout | 8 MB in/out; 3 min timeout | Application Integration quotas cap cumulative data sent to/from connections at 8 MB and connector response at 20 MB (Integration Connectors quotas cap the Connectors task payload at 10 MB); custom queries cap at 180 seconds and 50,000 rows. |
| Concurrent executions | 50 per project per region; 10 per integration (defaults) | Both concurrency caps are adjustable; a burst on a single integration hits the 10-per-integration cap, not 50. The execution request rate quota is shown on the project's Cloud Quotas page and can be adjusted there. |
| Integrations / tasks / versions | 1,000 / 100 / 100 | Up to 1,000 integrations per project, 100 tasks per integration, and 100 versions per integration. |
| Publish propagation | Up to 10 minutes | Eventual consistency: an older version can keep running for up to 10 minutes after publishing a new version. |
See references/limits.md for all task-specific payload caps, loop iteration limits, Integration Connectors node limits, and pricing details.
Sibling Skills
- application-integration-basics (this skill): Concepts, API enablement, region provisioning, IAM roles and run-as service accounts, interface choices (REST, Python client, Terraform, ADK), and quotas/limits.
- application-integration-authoring: Building, uploading, versioning, config variables, publishing, executing, and testing integrations via the REST API; trigger IDs; task gotchas; and CI/CD promotion across projects with download/upload.
- application-integration-troubleshooting: Diagnosing failed or stuck executions, checking execution and task states and
ErrorInfo, listing and filtering executions, Cloud Logging and Cloud Monitoring, suspensions and approvals, Integration Connectors connection health, and IAM / run-as / quota errors.
Reference Files
- references/core-concepts.md: Triggers, execution modes, task types, version lifecycle, edit locks, variables, suspensions, and authentication profiles.
- references/iam-and-service-accounts.md: Predefined IAM roles for Application Integration and Integration Connectors, service agents, run-as service account rules, and IAM commands.
- references/provisioning-and-terraform.md: Per-region provisioning via REST
clients:provision, Cloud console Quick/Advanced setup, CMEK caveats, and Terraformgoogle_integrations_*/google_integration_connectors_*resources. - references/api-access.md: Endpoints, authentication,
curlexamples, Pythongoogle-api-python-clientdiscovery patterns, ADKApplicationIntegrationToolset, and MCP connector clarification. - references/limits.md: Timeouts, payload caps, concurrency quotas, loop/task limits, Integration Connectors limits, and pricing tiers.