API reference
Integration sources
Register the stores and sites that report events, and let a plugin read which events to send.
Download OpenAPIRegister an integration source#
/v1/integration_sourcesScopeintegrations:writeRegisters a connected store or site, or refreshes the one that already has this platform and external_id in the mode of the key (an upsert). A plugin calls it once when the user clicks "connect", stores id and source_key, and uses only the source key from then on. Calling it again is safe and is how a plugin reports a new version or new emits.
201 with source_key and signing_secret when the source was created; 200 without secrets when it existed. An account can have at most 50 sources per mode.
Headers
Idempotency-KeystringOptionalUnique string of up to 255 characters, such as a UUID. Repeating a request with the same key and body within 24 hours returns the stored response instead of performing the operation again.
Request body
platformstringRequiredPlatform slug.
external_idstringRequiredThe platform's stable identifier of the store or site.
1 to 255 characters
namestringOptionalDisplay name. Defaults to the platform and the identifier.
1 to 120 characters
urlstring or nullOptionalPublic address of the store or site.
Up to 2048 characters
plugin_versionstring or nullOptionalVersion of the plugin.
Up to 64 characters
platform_versionstring or nullOptionalVersion of the platform.
Up to 255 characters
emitsarray of stringsOptionalEvent types the plugin is able to send.
Responses
- 200
The source existed and was refreshed. No secrets.
- 201
The source was created.
source_keyandsigning_secretare included, this once. - 400
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 409
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sourcescurl https://api.omnimessage.co/v1/integration_sources \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
]
}'{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}List integration sources#
/v1/integration_sourcesScopeintegrations:readReturns the integration sources of the key mode, newest first. Secrets are not included.
Query parameters
limitintegerOptionalNumber of objects to return, 1 to 100. Default
20.starting_afterstringOptionalCursor for the next page: the
next_cursorof the previous response (the ID of its last object).
Responses
- 200
A page of sources.
- 400
Bad request.
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sourcescurl https://api.omnimessage.co/v1/integration_sources \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"object": "list",
"data": [
{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}
],
"has_more": false,
"next_cursor": null
}Retrieve the source of a source key#
/v1/integration_sources/currentAny valid API keyReturns the source the key belongs to: which events to send (enabled_events), how to behave (event_settings) and where the editor is (console_url, automation_url_template). The response carries ETag: "<config_version>"; poll at most once per five minutes with If-None-Match.
Authenticate with the **source key** (Authorization: Bearer om_src_…) that was returned when the source was created. An API key is answered with 403 scope_missing.
Headers
If-None-MatchstringOptionalThe
ETagof the copy you hold. When it is still current the answer is304without a body.
Responses
- 200
The source.
- 304
Not modified: the
If-None-Matchvalue is the currentETag. No body. - 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
Called with an API key instead of a source key, or the source is disabled.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/currentcurl https://api.omnimessage.co/v1/integration_sources/current \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}Describe the source of a source key#
/v1/integration_sources/currentAny valid API keyLets a plugin report its name, address, versions and the events it can send. Only the fields you send are changed. The status and the secrets cannot be changed with a source key.
Authenticate with the **source key** (Authorization: Bearer om_src_…) that was returned when the source was created. An API key is answered with 403 scope_missing.
Request body
namestringOptionalDisplay name.
1 to 120 characters
urlstring or nullOptionalPublic address.
Up to 2048 characters
plugin_versionstring or nullOptionalVersion of the plugin.
Up to 64 characters
platform_versionstring or nullOptionalVersion of the platform.
Up to 255 characters
emitsarray of stringsOptionalReplaces the event types the plugin is able to send.
Responses
- 200
The updated source.
- 400
Bad request.
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
Called with an API key instead of a source key, or the source is disabled.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/currentcurl -X PATCH https://api.omnimessage.co/v1/integration_sources/current \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"plugin_version": "0.2.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned",
"form.submitted"
]
}'{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.2.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}Retrieve an integration source#
/v1/integration_sources/{id}Scopeintegrations:readReturns one integration source, with the same ETag as the source key sees. Secrets are not included.
Path parameters
idstringRequiredIntegration source ID.
Headers
If-None-MatchstringOptionalThe
ETagof the copy you hold. When it is still current the answer is304without a body.
Responses
- 200
The source.
- 304
Not modified: the
If-None-Matchvalue is the currentETag. No body. - 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 404
The resource does not exist in this account and mode.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/{id}curl https://api.omnimessage.co/v1/integration_sources/src_9Kd2mQ5vB8cX1zL0pK3j \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}Update an integration source#
/v1/integration_sources/{id}Scopeintegrations:writeChanges the description of a source, disables or enables it, replaces the secret native webhooks are verified with, or changes how its events are treated. Only the fields you send are changed.
Path parameters
idstringRequiredIntegration source ID.
Request body
namestringOptionalDisplay name.
1 to 120 characters
urlstring or nullOptionalPublic address.
Up to 2048 characters
plugin_versionstring or nullOptionalVersion of the plugin.
Up to 64 characters
platform_versionstring or nullOptionalVersion of the platform.
Up to 255 characters
emitsarray of stringsOptionalReplaces the event types the plugin is able to send.
statusstringOptionaldisabledrefuses the source key and the native webhooks until it is set back toactive.Possible values
activedisabledsigning_secretstringOptionalReplaces the secret native webhooks are verified with. Needed for Shopify, which signs with its own key. Write-only.
8 to 255 characters
settingsobjectOptionalHow events of this source are treated.
Show child attributesHide child attributes
contact_syncbooleanOptionalUpsert the customer of every event into Contacts. Default
true.consent_modestringOptionalimplied(default): transactional automations send unless the event saysconsent.transactional: false.explicit: they needtrue.Possible values
impliedexplicitstore_all_eventsbooleanOptionalReport
enabled_events: ["*"], so that the plugin sends every event (debugging).
Responses
- 200
The updated source.
- 400
Bad request.
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 404
The resource does not exist in this account and mode.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/{id}curl -X PATCH https://api.omnimessage.co/v1/integration_sources/src_9Kd2mQ5vB8cX1zL0pK3j \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Shop (main store)"
}'{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop (main store)",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z"
}Delete an integration source#
/v1/integration_sources/{id}Scopeintegrations:writeDeletes the source with its automations and receipts, and cancels its scheduled runs. The source key stops working at once. Messages that were already sent stay.
Path parameters
idstringRequiredIntegration source ID.
Responses
- 200
The source was deleted.
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 404
The resource does not exist in this account and mode.
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/{id}curl -X DELETE https://api.omnimessage.co/v1/integration_sources/src_9Kd2mQ5vB8cX1zL0pK3j \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"deleted": true
}Roll the key of an integration source#
/v1/integration_sources/{id}/roll_keyScopeintegrations:writeIssues a new source_key and signing_secret. The old ones stop working at once: update the plugin and the platform webhook right away.
Path parameters
idstringRequiredIntegration source ID.
Headers
Idempotency-KeystringOptionalUnique string of up to 255 characters, such as a UUID. Repeating a request with the same key and body within 24 hours returns the stored response instead of performing the operation again.
Responses
- 200
The source with its new secrets.
- 401
The API key is missing, invalid, revoked or expired.
api_key_missingapi_key_invalidapi_key_revokedapi_key_expired
- 403
The API key is not allowed to make this request.
- 404
The resource does not exist in this account and mode.
- 409
- 429
Too many requests. Wait for
Retry-Afterseconds. - 500
Unexpected error on our side. Safe to retry with the same
Idempotency-Key.
/v1/integration_sources/{id}/roll_keycurl -X POST https://api.omnimessage.co/v1/integration_sources/src_9Kd2mQ5vB8cX1zL0pK3j/roll_key \
-H "Authorization: Bearer om_live_xxxxxxxxxxxxxxxxxxxxxxxx"{
"id": "src_9Kd2mQ5vB8cX1zL0pK3j",
"object": "integration_source",
"mode": "live",
"platform": "woocommerce",
"external_id": "shop.example.com",
"name": "Acme Shop",
"url": "https://shop.example.com/",
"status": "active",
"plugin_version": "0.1.0",
"platform_version": "woocommerce/10.1 wordpress/7.0",
"emits": [
"order.created",
"order.paid",
"order.shipped",
"cart.abandoned"
],
"enabled_events": [
"order.paid",
"order.shipped"
],
"event_settings": {
"cart.abandoned": {
"delay_seconds": 3600
}
},
"console_url": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations",
"automation_url_template": "https://omnimessage.co/console/integrations/src_9Kd2mQ5vB8cX1zL0pK3j/automations/{event_type}",
"ingest_urls": {
"woocommerce": "https://api.omnimessage.co/v1/ingest/woocommerce/src_9Kd2mQ5vB8cX1zL0pK3j",
"shopify": "https://api.omnimessage.co/v1/ingest/shopify/src_9Kd2mQ5vB8cX1zL0pK3j"
},
"config_version": 12,
"last_event_at": "2026-10-05T09:30:00.000Z",
"created_at": "2026-10-01T08:00:00.000Z",
"source_key": "om_src_N7bT4xK1mQ8wE5rY2uI9oP3aS6dF0gHj",
"signing_secret": "isec_Zk8vQ2mX5cB7nL0pR3tY6wA9dF1gH4jKN7bT4xK1"
}