We want SmartThings to push device events to a webhook hosted on Google Apps Script, without requiring user interaction or UI after initial setup

Background & Goal

Goal (very clear)

The goal is to build a background-only SmartThings integration that:

  • Subscribes to existing devices in a personal SmartThings account

  • Receives real-time device events (push-based, not polling)

  • Sends those events to an external endpoint (Google Apps Script → Spreadsheet / Cloudflare / ntfy, etc.)

  • No UI required

  • No Home Assistant

  • No Raspberry Pi / local server

  • Hosting platform: Google Apps Script (HTTPS Web App)

In short:

We want SmartThings to push device events to a webhook hosted on Google Apps Script, without requiring user interaction or UI after initial setup.


:toolbox: Technology Stack Used

  • Platform: Samsung SmartThings

  • Webhook Host: Google Apps Script (deployed as Web App, HTTPS)

  • No local hardware

  • No polling (polling was intentionally avoided due to missed events and quota concerns)


:repeat_button: Initial Working Pieces (What DID work)

1. Webhook connectivity

  • Google Apps Script Web App is publicly accessible over HTTPS

  • SmartThings successfully calls:

    • PING

    • CONFIRMATION

  • Confirmation lifecycle was completed successfully by calling the provided confirmationUrl

2. Lifecycle handling

The Apps Script correctly responds to:

  • PING

  • CONFIRMATION

  • CONFIGURATION

  • UNINSTALL

This proves:

  • HTTPS

  • TLS

  • Endpoint reachability

  • JSON parsing

  • Response formatting

All are correct.


:counterclockwise_arrows_button: Original Approach Attempted

Project creation path used:

Developer Center → Create Project → Automation for the SmartThings App → Webhook Endpoint

This seemed correct initially because:

  • It allows a webhook

  • It does not require AWS Lambda

  • It appears to be the modern replacement for classic SmartApps


:construction: Where the Problem Starts

Observed behavior in logs:

Only these lifecycles are ever received:

CONFIGURATION
CONFIGURATION
CONFIGURATION
UNINSTALL

Never received:

INSTALL


:red_exclamation_mark: Why INSTALL is critical

  • Device subscriptions can only be created during INSTALL

  • The INSTALL lifecycle provides:

    • installedAppId

    • authToken (scoped token required for subscriptions)

  • Without INSTALL, all subscription attempts result in 403 Forbidden

This was verified repeatedly.


:mobile_phone: SmartThings Mobile App Behavior

  • App appears under Smart Apps (Developer Mode enabled)

  • Tapping the app always shows:

“There was a problem connecting. Try again.”

  • Each tap results in another CONFIGURATION lifecycle

  • Installation never completes

  • There is no visible “Install” or “Done” path


:brain: Root Cause (Key Insight)

After extensive debugging and lifecycle verification, the core issue became clear:

:prohibited: Automation SmartApps cannot be installed headlessly

Important platform behavior:

  • Automation SmartApps are UI-driven by design

  • They expect:

    • Valid automation context (triggers, actions, routines)

    • A configuration flow that SmartThings can complete

  • A “background-only” automation is silently rejected

  • When SmartThings cannot finalize configuration, it:

    • Loops CONFIGURATION

    • Never fires INSTALL

    • Shows a generic “problem connecting” error in the app

This behavior cannot be fixed by code alone.


:magnifying_glass_tilted_left: Why this is confusing (and a trap)

  • The term “SmartApp” is used in multiple places

  • The Automation Webhook path looks like the old Webhook SmartApp

  • But functionally it is not equivalent

Important distinction:

Type Purpose
Automation SmartApp UI-driven routines & automations
Webhook SmartApp / Connector (classic) Background integrations, subscriptions

The Automation path cannot satisfy the “no UI, background-only” requirement.


:cross_mark: What Was Tried (and Why It Failed)

  • Adding fake CONFIGURATION pages

  • Returning complete: true

  • Adding dummy sections

  • Ignoring UI and attempting subscriptions manually

  • Using PATs (403 errors confirmed)

  • Reinstalling multiple times

  • CLI & API inspection

All failed for the same reason:

INSTALL never fires


:brick: Environmental Constraints

  • No Home Assistant

  • No Raspberry Pi

  • No always-on server

  • Google Apps Script chosen intentionally for:

    • HTTPS

    • Zero infrastructure

    • Reliability

    • Easy logging


:white_check_mark: What We Believe Is Needed (Request for Guidance)

We are looking for official or supported guidance on one of the following:

Option A (Preferred)

A true Webhook SmartApp / Connector-style project that:

  • Can be hosted on Google Apps Script

  • Fires INSTALL

  • Supports device subscriptions

  • Does not require UI or automation routines

If this still exists in the new Developer Center, where exactly is it created?


Option B (Acceptable workaround)

A documented way to complete Automation SmartApp installation for:

  • Background-only apps

  • No triggers/actions

  • Subscription-only use cases


Option C (Confirmation)

If SmartThings no longer supports background webhook listeners without UI, we would like:

  • Explicit confirmation

  • Recommended alternative architecture (cloud relay, schema, etc.)


:bullseye: Final Ask (Very Clear)

Is it currently possible (in 2026) to create a background-only SmartThings webhook that subscribes to device events without UI, using a hosted HTTPS endpoint (e.g., Google Apps Script)?

If yes:

  • Please point to the correct project type / workflow

If no:

  • Please confirm this limitation so developers stop attempting an unsupported pattern

This summary reflects multiple days of structured debugging, not trial-and-error.
Any authoritative clarification from SmartThings staff or experienced partners would be hugely appreciated.

At what point does the mobile app produce the error?

Does the mobile app display your configuration pages?

Do the configuration pages work as expected?

Do you get to the page where you are invited to authorise the SmartApp’s access?

Errors when you get this far are often down to a mismatch between the scopes you whitelisted and the ones your app is requesting.

Regardless of the cause the CONFIGURATION will be ‘looping’ because it wasn’t completed successfully.

Subscriptions aren’t restricted to the INSTALL/UPDATE lifecycles, that’s just a convenient place to do them as that’s when you receive your access and refresh tokens.

I’ve just tapped on a SmartApp in the mobile app for the first time in months just to check it hasn’t been broken. It is behaving fine. The app doesn’t have a UI. Indeed mobile app UIs for Webhook SmartApps are completely undocumented beyond what you can contrive using the CONFIGURATION / INSTALL / UPDATE lifecycles.

1 Like

I wish AI would be brief and ‘(very clear)’. TL;DR.

1 Like