In Particle firmware, call Particle.publish("temperature", String(reading), PRIVATE) to emit a named event to the Particle Cloud; events have a max payload of 1024 bytes and are rate-limited to 1 event per second per device by default
Subscribe to device events from another device with Particle.subscribe("temperature", handlerFunction, MY_DEVICES) or use the Server-Sent Events (SSE) REST stream: GET https://api.particle.io/v1/devices/events?access_token=<TOKEN> to receive all events in real time
Create a webhook in the Particle Console or via POST https://api.particle.io/v1/integrations specifying the event name trigger, target URL, HTTP method, and optional request body template using Mustache placeholders like {{PARTICLE_EVENT_VALUE}}
The webhook fires when the matching event is published; Particle Cloud sends a hook-sent event confirming dispatch and a hook-response event containing the HTTP status and response body from the target URL — subscribe to these to debug webhook delivery
Use the REST API to query device status: GET https://api.particle.io/v1/devices/<deviceId>?access_token=<TOKEN> returns the device's online state, last heard timestamp, firmware version, and variables; call a function with POST /v1/devices/<deviceId>/<functionName>
Implement error handling for webhook failures: Particle Cloud uses adaptive retry with backoff when the target URL returns 4xx or 5xx responses; after repeated failures it temporarily pauses webhook delivery to protect the receiving server
Known gotchas
Particle events are rate-limited to 1 per second per device; bursting many publishes in rapid succession causes some events to be dropped silently — coalesce high-frequency readings into a single JSON payload rather than publishing each individually
Webhooks send hook-response events back to the device's event stream; if the device subscribes to hook-response and the response payload exceeds 512 bytes it is truncated without warning, which can break JSON parsing of the response in firmware
The Particle Cloud SSE event stream times out after several minutes of inactivity; client code must implement automatic reconnection to avoid silently missing events after the connection drops
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp