Subscribe to the live-state SSE stream for an app
Server-Sent Events stream of state-changed notifications. Each event id is <server-epoch>:<rev>; the browser EventSource replays via Last-Event-ID on reconnect, and the server emits a synthetic state-changed event with source: "reconnect-resync" and result: null whenever the client’s id belongs to an older epoch or claims an unseen revision. The overcapacity event is emitted (and the stream closed) when the per-app subscriber cap is reached. Heartbeats are SSE comment lines (: ping) every 15s.
Auth posture is broader than the owner endpoints: appToken, userToken, renderToken (bearer or ?t= query), or the path-scoped buildy_sse_<id> HMAC cookie minted by the /app/{id} render-bridge when a render-token rendered the page. The {} (no-auth) option in security covers the cookie path — OpenAPI cannot model a per-app cookie name as a fixed scheme.
/app/{id}/eventsOptional — this operation also accepts unauthenticated requests.
AuthorizationBearer token (bld_app_*) · headerAuthorizationBearer token (bld_user_*) · headerAuthorizationBearer token (bld_render_*) · headertAPI key · queryidstringrequiredtstringLast-Event-IDstringkindstringrequiredstate-changedappIdstringrequiredopstring | nullrequiredsourcestringrequiredagentreconnect-resynctsintegerrequiredresultanyrequiredmessagestringrequiredtoo_many_subscribersokbooleanrequiredfalseerrorobjectrequiredShow propertiesHide properties
kindstringrequirednot_foundunknown_operationoperation_not_foundoperation_failedunauthorizedtoken_expiredforbiddenforbidden_writestorage_quota_exceededinvalid_moduleinvalid_uiinvalid_route_schemainvalid_routes_shapeinvalid_manifest_exportsinvalid_requestinvalid_inputinvalid_outputunexpected_keyscapability_deniedcapability_errorexecutor_errorinvalid_call_shapealready_claimedduplicate_remixmanifest_not_foundpayload_too_largemodule_too_largeui_too_largedescription_too_longmissing_descriptioninvalid_descriptionrate_limitedtoo_many_requestsexpiredalready_approvedanon_not_remixableinvalid_if_matchprecondition_requiredversion_mismatchold_string_not_foundold_string_not_uniqueedits_too_largemanifest_id_conflictmanifest_id_immutabletext_too_largestructured_data_too_largeapp_not_foundasset_too_largeasset_count_exceededasset_quota_exceededasset_invalid_keyasset_invalid_content_typeasset_errorinvalid_idsse_cookie_expiredinvalid_secret_namesecret_too_largesecret_already_existsinvalid_iconteam_slug_takenalready_membergrantee_not_foundinvite_cap_reachedread_onlyhandle_takeninvalid_handlename_takenapp_unclaimedlink_cap_reachedgrantee_is_owneralready_invitedmessagestringreasonstringtoken_malformedtoken_unknowntoken_revokedtoken_revoked_post_claimrecoveryRecoveryPair | RecoveryRetry | RecoveryShrink | RecoveryRefetch | RecoveryFixRouteLabel | RecoveryOpenExisting | RecoveryRenameShow propertiesHide properties
kindstringrequiredpairstartstring<uri>requiredverification_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredretryretry_after_secintegerrequiredretry_after_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredshrinkfieldstringrequiredmoduleuistylesdescriptiontextstructured_dataasseteditssecretpayloadsize_bytesintegerrequiredcap_bytesintegerrequiredinstructionsstringrequiredkindstringrequiredrefetchrefetch_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredfix_route_labelinstructionsstringrequiredkindstringrequiredopen_existingexisting_app_idstringrequiredexisting_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredrenameinstructionsstringrequiredokbooleanrequiredfalseerrorobjectrequiredShow propertiesHide properties
kindstringrequirednot_foundunknown_operationoperation_not_foundoperation_failedunauthorizedtoken_expiredforbiddenforbidden_writestorage_quota_exceededinvalid_moduleinvalid_uiinvalid_route_schemainvalid_routes_shapeinvalid_manifest_exportsinvalid_requestinvalid_inputinvalid_outputunexpected_keyscapability_deniedcapability_errorexecutor_errorinvalid_call_shapealready_claimedduplicate_remixmanifest_not_foundpayload_too_largemodule_too_largeui_too_largedescription_too_longmissing_descriptioninvalid_descriptionrate_limitedtoo_many_requestsexpiredalready_approvedanon_not_remixableinvalid_if_matchprecondition_requiredversion_mismatchold_string_not_foundold_string_not_uniqueedits_too_largemanifest_id_conflictmanifest_id_immutabletext_too_largestructured_data_too_largeapp_not_foundasset_too_largeasset_count_exceededasset_quota_exceededasset_invalid_keyasset_invalid_content_typeasset_errorinvalid_idsse_cookie_expiredinvalid_secret_namesecret_too_largesecret_already_existsinvalid_iconteam_slug_takenalready_membergrantee_not_foundinvite_cap_reachedread_onlyhandle_takeninvalid_handlename_takenapp_unclaimedlink_cap_reachedgrantee_is_owneralready_invitedmessagestringreasonstringtoken_malformedtoken_unknowntoken_revokedtoken_revoked_post_claimrecoveryRecoveryPair | RecoveryRetry | RecoveryShrink | RecoveryRefetch | RecoveryFixRouteLabel | RecoveryOpenExisting | RecoveryRenameShow propertiesHide properties
kindstringrequiredpairstartstring<uri>requiredverification_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredretryretry_after_secintegerrequiredretry_after_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredshrinkfieldstringrequiredmoduleuistylesdescriptiontextstructured_dataasseteditssecretpayloadsize_bytesintegerrequiredcap_bytesintegerrequiredinstructionsstringrequiredkindstringrequiredrefetchrefetch_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredfix_route_labelinstructionsstringrequiredkindstringrequiredopen_existingexisting_app_idstringrequiredexisting_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredrenameinstructionsstringrequiredokbooleanrequiredfalseerrorobjectrequiredShow propertiesHide properties
kindstringrequirednot_foundunknown_operationoperation_not_foundoperation_failedunauthorizedtoken_expiredforbiddenforbidden_writestorage_quota_exceededinvalid_moduleinvalid_uiinvalid_route_schemainvalid_routes_shapeinvalid_manifest_exportsinvalid_requestinvalid_inputinvalid_outputunexpected_keyscapability_deniedcapability_errorexecutor_errorinvalid_call_shapealready_claimedduplicate_remixmanifest_not_foundpayload_too_largemodule_too_largeui_too_largedescription_too_longmissing_descriptioninvalid_descriptionrate_limitedtoo_many_requestsexpiredalready_approvedanon_not_remixableinvalid_if_matchprecondition_requiredversion_mismatchold_string_not_foundold_string_not_uniqueedits_too_largemanifest_id_conflictmanifest_id_immutabletext_too_largestructured_data_too_largeapp_not_foundasset_too_largeasset_count_exceededasset_quota_exceededasset_invalid_keyasset_invalid_content_typeasset_errorinvalid_idsse_cookie_expiredinvalid_secret_namesecret_too_largesecret_already_existsinvalid_iconteam_slug_takenalready_membergrantee_not_foundinvite_cap_reachedread_onlyhandle_takeninvalid_handlename_takenapp_unclaimedlink_cap_reachedgrantee_is_owneralready_invitedmessagestringreasonstringtoken_malformedtoken_unknowntoken_revokedtoken_revoked_post_claimrecoveryRecoveryPair | RecoveryRetry | RecoveryShrink | RecoveryRefetch | RecoveryFixRouteLabel | RecoveryOpenExisting | RecoveryRenameShow propertiesHide properties
kindstringrequiredpairstartstring<uri>requiredverification_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredretryretry_after_secintegerrequiredretry_after_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredshrinkfieldstringrequiredmoduleuistylesdescriptiontextstructured_dataasseteditssecretpayloadsize_bytesintegerrequiredcap_bytesintegerrequiredinstructionsstringrequiredkindstringrequiredrefetchrefetch_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredfix_route_labelinstructionsstringrequiredkindstringrequiredopen_existingexisting_app_idstringrequiredexisting_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredrenameinstructionsstringrequiredokbooleanrequiredfalseerrorobjectrequiredShow propertiesHide properties
kindstringrequirednot_foundunknown_operationoperation_not_foundoperation_failedunauthorizedtoken_expiredforbiddenforbidden_writestorage_quota_exceededinvalid_moduleinvalid_uiinvalid_route_schemainvalid_routes_shapeinvalid_manifest_exportsinvalid_requestinvalid_inputinvalid_outputunexpected_keyscapability_deniedcapability_errorexecutor_errorinvalid_call_shapealready_claimedduplicate_remixmanifest_not_foundpayload_too_largemodule_too_largeui_too_largedescription_too_longmissing_descriptioninvalid_descriptionrate_limitedtoo_many_requestsexpiredalready_approvedanon_not_remixableinvalid_if_matchprecondition_requiredversion_mismatchold_string_not_foundold_string_not_uniqueedits_too_largemanifest_id_conflictmanifest_id_immutabletext_too_largestructured_data_too_largeapp_not_foundasset_too_largeasset_count_exceededasset_quota_exceededasset_invalid_keyasset_invalid_content_typeasset_errorinvalid_idsse_cookie_expiredinvalid_secret_namesecret_too_largesecret_already_existsinvalid_iconteam_slug_takenalready_membergrantee_not_foundinvite_cap_reachedread_onlyhandle_takeninvalid_handlename_takenapp_unclaimedlink_cap_reachedgrantee_is_owneralready_invitedmessagestringreasonstringtoken_malformedtoken_unknowntoken_revokedtoken_revoked_post_claimrecoveryRecoveryPair | RecoveryRetry | RecoveryShrink | RecoveryRefetch | RecoveryFixRouteLabel | RecoveryOpenExisting | RecoveryRenameShow propertiesHide properties
kindstringrequiredpairstartstring<uri>requiredverification_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredretryretry_after_secintegerrequiredretry_after_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredshrinkfieldstringrequiredmoduleuistylesdescriptiontextstructured_dataasseteditssecretpayloadsize_bytesintegerrequiredcap_bytesintegerrequiredinstructionsstringrequiredkindstringrequiredrefetchrefetch_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredfix_route_labelinstructionsstringrequiredkindstringrequiredopen_existingexisting_app_idstringrequiredexisting_urlstring<uri>requiredinstructionsstringrequiredkindstringrequiredrenameinstructionsstringrequiredcurl -X GET "https://charm.ing/app/string/events" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://charm.ing/app/string/events", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"https://charm.ing/app/string/events",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
){
"kind": "state-changed",
"appId": "string",
"op": "string",
"source": "agent",
"ts": 0,
"result": "string"
}{
"ok": false,
"error": {
"kind": "not_found",
"message": "string",
"reason": "token_malformed",
"recovery": {
"kind": "pair",
"start": "<uri>",
"verification_url": "<uri>",
"instructions": "string"
}
}
}{
"ok": false,
"error": {
"kind": "not_found",
"message": "string",
"reason": "token_malformed",
"recovery": {
"kind": "pair",
"start": "<uri>",
"verification_url": "<uri>",
"instructions": "string"
}
}
}{
"ok": false,
"error": {
"kind": "not_found",
"message": "string",
"reason": "token_malformed",
"recovery": {
"kind": "pair",
"start": "<uri>",
"verification_url": "<uri>",
"instructions": "string"
}
}
}{
"ok": false,
"error": {
"kind": "not_found",
"message": "string",
"reason": "token_malformed",
"recovery": {
"kind": "pair",
"start": "<uri>",
"verification_url": "<uri>",
"instructions": "string"
}
}
}