Notification Systems
- Applications with scope
<action>:<applicationMetadata.id>:<resourceTypes>
must be able to access all subscription endpoints with path /api/webhooks/v2/applications/{applicationId}/tenants/{tenantId}/subscriptions.
{applicationId}
/tenants/{tenantId}
/subscriptions{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
{applicationId}
/tenants/{tenantId}
/subscriptions{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
/tests{applicationId}
/tenants/{tenantId}
/subscriptionsAuthentication
Path variables
Request body
Responses
POST https://eventwebhooks.vertexcloud.com/api/v1/api/webhooks/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions HTTP/1.1
Content-Type: application/json
{
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "STRING",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
}
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z",
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "STRING",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
},
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"subscriptionType": "WEBHOOK"
}
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
Authentication
Path variables
Responses
GET https://eventwebhooks.vertexcloud.com/api/v1/api/webhooks/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions/c86fcc87-a137-4c37-8d19-17edc7199fef HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z",
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
},
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"subscriptionType": "WEBHOOK"
}
{applicationId}
/tenants/{tenantId}
/subscriptionsAuthentication
Path variables
Request parameters
Multi value sort parameter used for paging across a large data set. The expected format is as follows when specified:
sortField,sortOrder
sortField can be any arbitrary field specific to the content that is being paged sortOrder is ASC or DESC. The sort order defaults to DESC when left unspecified.
A page can be sorted using multiple columns by providing multiple sort query parameters
pageSort=field1,ASC&pageSort=field2,DESC
Vertex managed application identifier
Vertex customer organizations segment environment id.
The tags for filtering are provided as a URL-encoded array of tag objects, each containing a key and a value.
For instance, if your tag value is [{“key”:“docNum”, “value”: “3a”}], you’ll need to URL-encode it to %5B%7B%22key%22%3A%22docNum%22%2C%20%22value%22%3A%20%223a%22%7D%5D.
During the filtering process, all tags are combined using an AND operation, meaning a match only occurs if all specified tags are present.
The lower bound (start) of the event’s creation timestamp in UTC. This will default to today - 7 days.
Responses
Body
GET https://eventwebhooks.vertexcloud.com/api/v1/api/webhooks/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"content": [
{
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z",
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
},
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"subscriptionType": "WEBHOOK"
}
]
}
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
Authentication
Path variables
Request body
Responses
PUT https://eventwebhooks.vertexcloud.com/api/v1/api/webhooks/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions/c86fcc87-a137-4c37-8d19-17edc7199fef HTTP/1.1
Content-Type: application/json
{
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
}
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z",
"name": "ms365ForJaneDoe",
"eventTypeCode": "einv.document.updated",
"eventTypeVersion": 1,
"status": "ENABLED",
"public": true,
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
],
"webhookRecipient": {
"url": "https://jane.com/inbox",
"method": "POST",
"securityScheme": "OAUTH2",
"hmacSha256Secret": "",
"basicAuthUsername": "",
"basicAuthPassword": "",
"oauth2ClientId": "d3049b4c-8e7c-4a1f-a5f1-3b9d0b6c2a1e",
"oauth2ClientSecret": "_nS7yQzPp5RjF2hT8cVx9eYw0uIaLkBmCgDdEfGhIjKkL",
"oauth2Audience": "jane://einvoice-inbox",
"oauth2Scopes": "einvoice-notifications",
"oauth2TokenUrl": "https://auth0.jane.com/oauth/token",
"oauth2AdditionalHeaders": {
"[...]": ""
},
"oauth2AdditionalProperties": {
"[...]": "resource-123"
},
"additionalHeaders": {
"[...]": "janeCoLegalEntity1"
},
"additionalProperties": {
"[...]": ""
}
},
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"subscriptionType": "WEBHOOK"
}
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
Authentication
Path variables
Responses
DELETE https://eventwebhooks.vertexcloud.com/api/v1/api/v2/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions/c86fcc87-a137-4c37-8d19-17edc7199fef HTTP/1.1
HTTP/1.1 204 No Content
{applicationId}
/tenants/{tenantId}
/subscriptions/{id}
/testsAuthentication
Use this operation to verify your subscription endpoint’s setup. We’ll do this by:
- Creating a test event (EventType.testPayload) tailored to your subscription.
- Sending this test event to your subscription.endpoint.url, distinguished by the vertex-webhooks-test=true HTTP header, Subect prefixed [TEST] in emails
- It’s critical that the application receiving this test notification is designed to log the request, bypass any business logic for the test event, and return a 200 OK response within 500ms.
Path variables
Responses
POST https://eventwebhooks.vertexcloud.com/api/v1/api/webhooks/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/subscriptions/c86fcc87-a137-4c37-8d19-17edc7199fef/tests HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"status": "SUCCEEDED",
"event": {
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "STRING",
"defaultValue": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}",
"expiresAt": "2025-06-06T15:09:44.789Z",
"eventType": {
"id": "einvDocumentUpated",
"code": "einv.document.updated",
"name": "E-Invoice Document Updated Event",
"description": "This state indicates the outbound e-invoice reached a terminal state",
"version": 1,
"schemaVersion": "0.0.1",
"schemaRef": "https://xyz.github.io/einv/api/einv-events-openapi.yaml",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "STRING",
"defaultValue": "john.doe@vertexinc.com"
}
]
},
"activeSubscriptions": [
"c86fcc87-a137-4c37-8d19-17edc7199fef"
],
"payloadRefId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"payloadSizeKb": 199,
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z"
},
"subscriptionId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"deliveryCompletionIntervalMs": 199,
"deliveryCompletionMessage": "ok"
}
- Applications with scope
all:<applicationMetadata.id>:all
must be able to access event management endpoints with path /api/notifications/v2/applications/{applicationId}/tenants/{tenantId}/…
{applicationId}
/tenants/{tenantId}
/eventtypes/{eventTypeId}
/events{applicationId}
/events/{id}
{applicationId}
/tenants/{tenantId}
/eventtypes/{eventTypeId}
/eventsAuthentication
Only application with matching scope for applicationId path variable can access this endpoint. For example application with scope all:EINV:all
can create events using endpoint /api/v2/application/EINV/…
Path variables
Request body
Responses
Body
POST https://eventwebhooks.vertexcloud.com/api/v1/api/notifications/v1/applications/EINV/tenants/c86fcc87-a137-4c37-8d19-17edc7199fef/eventtypes/c86fcc87-a137-4c37-8d19-17edc7199fef/events HTTP/1.1
Content-Type: application/json
{
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}"
}
HTTP/1.1 201 Created
Content-Type: application/json
{
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}",
"expiresAt": "2025-06-06T15:09:44.789Z",
"eventType": {
"id": "einvDocumentUpated",
"code": "einv.document.updated",
"name": "E-Invoice Document Updated Event",
"description": "This state indicates the outbound e-invoice reached a terminal state",
"version": 1,
"schemaVersion": "0.0.1",
"schemaRef": "https://xyz.github.io/einv/api/einv-events-openapi.yaml",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
]
},
"activeSubscriptions": [
"c86fcc87-a137-4c37-8d19-17edc7199fef"
],
"payloadRefId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"payloadSizeKb": 199,
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z"
}
{applicationId}
/events/{id}
Authentication
Applications with scope all:EINV:WebhookSubscriptions
or all:EINV:all
can access this /api/v2/application/EINV/events/uuid to get a download url.
Applications or user with scope profile
and matching profile.tenant.id == event.tenantId can access this link as well.
Path variables
Responses
Body
POST https://eventwebhooks.vertexcloud.com/api/v1/api/v2/applications/EINV/events/c86fcc87-a137-4c37-8d19-17edc7199fef HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
https://download-url.vertexcloud.com/xyz
This represents the delivery completion interval in milliseconds, where 95% of events within a user-specified time window are smaller than or equal to this value.
We store each delivery attempt as a separate record. Our system makes a total of five automated delivery attempts. If all five attempts fail, the final record’s status will be PERMANENTLY_FAILED, while the previous four will show a FAILED status.
Here’s how the automated attempts progress:
- Attempt 1: PENDING → FAILED (at time t1)
- Attempt 2: RETRYING → FAILED (at t1 + 120 seconds)
- Attempt 3: RETRYING → FAILED (at t1 + 240 seconds)
- Attempt 4: RETRYING → FAILED (at t1 + 480 seconds)
- Attempt 5: RETRYING → FAILED (at t1 + 960 seconds)
- Additionally, you can initiate a manual delivery attempt via a “replay” operation, which would look like this:
Manual Replay: RETRYING → SUCCEEDED
{
"replayAttempt": 1,
"retryAttempt": 1,
"status": "SUCCEEDED",
"event": {
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "NUMBER",
"defaultValue": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}",
"expiresAt": "2025-06-06T15:09:44.789Z",
"eventType": {
"id": "einvDocumentUpated",
"code": "einv.document.updated",
"name": "E-Invoice Document Updated Event",
"description": "This state indicates the outbound e-invoice reached a terminal state",
"version": 1,
"schemaVersion": "0.0.1",
"schemaRef": "https://xyz.github.io/einv/api/einv-events-openapi.yaml",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
]
},
"activeSubscriptions": [
"c86fcc87-a137-4c37-8d19-17edc7199fef"
],
"payloadRefId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"payloadSizeKb": 199,
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z"
},
"subscriptionId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"deliveryCompletionIntervalMs": 199,
"deliveryCompletionMessage": "ok",
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z"
}
The fundamental structure for all outgoing notification events.
{
"event": {
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}",
"payloadRefId": "c517f9b8-d0e5-42a9-b3a7-5e9c0c1b7e4f",
"payloadSizeKb": "55"
},
"eventExpiresAt": "2025-06-06T15:09:44.789Z",
"eventId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"replayAttempt": 1,
"retryAttempt": 1,
"subscription": {
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"name": "ms365ForJaneDoe",
"additionalProperties": {
"[...]": "janeCoBusinessUnit1"
},
"eventTags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com"
}
]
}
}
Vertex cloud subscription id
Subscription name
Additional properties defined in Subscription.endpoint.additionalProperties
Configurations for subscription delivery criteria
We track errors that occur when processing and storing events from applications. For both synchronous and asynchronous event ingestion, we monitor incoming requests. However, this count may sometimes be an approximation due to internal errors.
This represents the payload size observed, where 95% of events within a user-specified time window are smaller than or equal to this value.
This state can transition to either SUCCEEDED or FAILED state
This is a terminal state
This state is a terminal state for a specific delivery attempt. Next delivery attemtp with start with RETRYING state. If delivery attempt as maxed out (5 attempts), then this state will delivery instance will transition to PERMANENTLY_FAILED.
When as resource is first created, the udpatedAt and updatedBy will be the same as createdAt and createdBy respectively.
Client applications that interact with the notification-service
Notification system defined immutable identifier for application. This must be globally unique within the notification-system.
Client system defined identifier for application. This must be globally unique within the notification-system.
This value must be globally unique within notification-service and is immutable.
This value combined with version must be globally unique within notification-service and is defined by client application system. Following naming convention is recommended: <appcode>.<resource>.<resourceState>
This is human readable name for an event type. This can be used in user interfaces.
Applicaton defined tags that can be used for subscription and event filtering criteria
Event types are logical identifiers for distinct actions or states within client applications. Examples include: einvoice.received
, einvoice.transmitted
, taxCalculation.completed
, exemptionCertificate.processed
, and taxReporting.completed
. These are owned by application developers
responsible for building application that prouce and consume events.
The Cloud Portal Tools MFE for webhooks SHALL use this attribute to filter out events that aren’t publicly subscribable. Setting it to false indicates internal usage.
This will be used for testing subscription endpoints during configuration.
This readonly property serves as a key for discovering event types by linking them to specific products. On the Webhooks MFE screen, this information is leveraged to show customers only the event types relevant to their product feature code entitlements. For example:
- 1199 represents Connectors
- 1200 represents einvoicing events
- 100 represents OSeries events
- 1200,1199 represents einvoicing Connectors
- 100,1199 represents OSeries Connectors
This value is evaluated from the client applications scope that is prefixed with platformFeatureCodes::<value>
Client application defined globally unique value across notification-service
Used in Subject for Emails, sent as vertex-notification-title header for webhooks
Application name and event type
Application name and event type for webhooks or sender email address for email subscription type
Used to generate email body content or webhook event payload content
{
"applicationEventTypes": [
{
"applicationMetadata": {
"id": "EINV",
"code": "EINV",
"name": "Vertex E-Invoicing",
"description": "Vertex E-Invoicing Service",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
]
},
"eventTypes": [
{
"id": "einvDocumentUpdated"
"name": "einv.document.updated",
"description": "This state indicates the outbound e-invoice reached a terminal state",
"version": 1,
"schemaVersion": "0.0.1",
"schemaRef": "https://xyz.github.io/einv/api/einv-events-openapi.yaml",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
],
"defaultRetentionIntervalDays": 3,
"public": true,
"testPayload": "{customerName: John.Doe, documentId: 123}",
"platformFeatureCodes": "1200",
"emailSubscriptionTemplate": {
"code": "einv.document.updated.email",
"eventType": "einv.document.updated",
"subscriptionType": "EMAIL",
"title": "E-Invoice Document Updated",
"sender": "Vertex E-Invoicing",
"senderAddress": "jane.doe@vertexinc.com",
"payloadTemplate": "Hi {{EventData->customerName}}, Thank you for reaching out to us. We appreciate your business. - Vertex inc."
}
}
]
}
]
}
Conditionally required for is HMAC_SHA256
security scheme
Conditionally required for is Basic Auth
security scheme
Conditionally required for is Basic Auth
security scheme
Conditionally required for is OAuth2
security scheme
Conditionally required for is OAuth2
security scheme
Conditionally required for is OAuth2
security scheme
Conditionally required for is OAuth2
security scheme
Conditionally required for is OAuth2
security scheme
During token creation, some systems require header attributes for token creation.
Optional properties used for OAuth2 token generation. For example microsoft idP requires sending of resource key.
You can include additional, arbitrary HTTP headers with your event deliveries. These headers are incredibly flexible and can be used to convey extra context that aids in event processing on the receiving end.
Here are some common ways these custom headers are utilized:
- Identifying Environments: A custom header could indicate whether an event is for production or test processing, allowing the receiving system to route or handle it accordingly.
- Providing Partner Details: Headers can carry specific information about the partner system, such as their legal entity, business unit, or other relevant organizational details.
These properties can also be accessed on the notification endpoint using the subscription.additionalHeaders
attibute
You can define custom properties during subscripton creation to be included with event deliveries. These properties will appear within the eventDelivery.subscription.additionalProperties field for each delivered event. These properties will be merged as key value pairs in the event payload object.
Email address is preferred. If not available, userId is used for lookup with UserService.
Conditionally required vertex user service generated user identifier (immutable). In existing form, this is the same as actorId
The Cloud Portal Tools MFE for webhooks SHALL use this attribute to filter out event type subscriptions that aren’t directly managed by our customers. Setting it to false indicates internally managed subscriptions.
Events are delivered when all specified tags match.
Conditionally required for WEBHOOK subscription type
Conitionally required for EMAIL subscription type
The event producer creates tags for each event. It primarily uses the tag keys and their default values as specified in the event type object. However, the producer can also add additional keys not originally defined there. These tags are crucial because subscriptions are matched against them to determine whether an event should be delivered.
Default value from event type is used when not provided in the request.
The event payload is represented as a string. If the content is binary, client systems must Base64 encode it before sending the event.
{
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
],
"expiryIntervalDays": "3",
"payload": "{\"documentId\": \"123\"}",
"expiresAt": "2025-06-06T15:09:44.789Z",
"eventType": {
"id": "einvDocumentUpated",
"code": "einv.document.updated",
"name": "E-Invoice Document Updated Event",
"description": "This state indicates the outbound e-invoice reached a terminal state",
"version": 1,
"schemaVersion": "0.0.1",
"schemaRef": "https://xyz.github.io/einv/api/einv-events-openapi.yaml",
"tags": [
{
"key": "owner",
"value": "john.doe@vertexinc.com",
"valueType": "BOOLEAN",
"defaultValue": "john.doe@vertexinc.com"
}
]
},
"activeSubscriptions": [
"c86fcc87-a137-4c37-8d19-17edc7199fef"
],
"payloadRefId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"payloadSizeKb": 199,
"tenantId": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"id": "c86fcc87-a137-4c37-8d19-17edc7199fef",
"version": 1,
"createdBy": "john.doe@vertexinc.com",
"createdAt": "2025-06-05T16:26:41.567Z",
"updatedBy": "jane.doe@vertexinc.com",
"updatedAt": "2025-06-05T17:26:41.567Z"
}
The Cloud Portal Tools MFE for webhooks SHALL use this attribute to filter out event type subscriptions that aren’t directly managed by our customers. Setting it to false indicates internally managed subscriptions.
Events are delivered when all specified tags match.
Conditionally required for WEBHOOK subscription type
Multi value sort parameter used for paging across a large data set. The expected format is as follows when specified:
sortField,sortOrder
sortField can be any arbitrary field specific to the content that is being paged sortOrder is ASC or DESC. The sort order defaults to DESC when left unspecified.
A page can be sorted using multiple columns by providing multiple sort query parameters
pageSort=field1,ASC&pageSort=field2,DESC
Vertex managed application identifier
Vertex customer organizations segment environment id.
The tags for filtering are provided as a URL-encoded array of tag objects, each containing a key and a value.
For instance, if your tag value is [{“key”:“docNum”, “value”: “3a”}], you’ll need to URL-encode it to %5B%7B%22key%22%3A%22docNum%22%2C%20%22value%22%3A%20%223a%22%7D%5D.
During the filtering process, all tags are combined using an AND operation, meaning a match only occurs if all specified tags are present.
Event type name
Event type version
The lower bound (start) of the event’s creation timestamp in UTC. This will default to today - 7 days.
The upper bound (end inclusive) of the event’s creation timestamp in UTC.
This is application defined identifier for event instance, and it will be included in all event delivery attempts.
We’ll include this header both when you create a subscription (if testSubscriptionEndpoint is true) and when you perform a subscription test operation.