Webhook Postman Subscriptions
Webhook Subscription and Delivery
Webhook Configuration and Delivery
This guide describes how the customer can configure webhook delivery for platform events using the public Webhook API. A webhook is an outbound notification sent by the Interlace platform to a customer-owned external URL when a subscribed business event occurs, such as a completed payment or a customer address change.
The customer configures one webhook record that contains both the subscribed event list and the delivery configuration. This includes the destination URL, authentication method, optional OAuth token settings, optional header information, optional JWE payload encryption, and version information.
Important Model Behavior
- Webhook configuration is created through one public endpoint: POST /webhooks.
- A webhook record defines both what events should trigger delivery and where the notification should be sent.
- The events field contains the subscribed event names. When one of those events occurs, the platform resolves the matching webhook configuration and invokes the configured url.
- The webhook id and createdTime are generated by the platform after the webhook record is created.
- headerInfo behavior depends on authType. For NONE, BASIC, and OAUTH, headerInfo is sent as webhook request headers. For OAUTHPOST, headerInfo values are sent as additional fields in the OAuth token request body.
- Payload encryption is optional. When enabled, the platform encrypts the webhook payload using the configured public key before sending it to the external endpoint.
- Webhook delivery supports configurable retries through a scheduled retry task. The default retry count is controlled by platform configuration, but it can be overridden through retry task parameters without changing the environment-level setting.
Access Flow
- The customer creates a webhook using POST /webhooks.
- The webhook record stores the subscribed event names and the delivery configuration.
- A business event occurs in the platform.
- The webhook service finds webhook records subscribed to that event.
- The webhook service reads the configured url, authType, headerInfo, and payload security settings.
- If OAuth is configured, the webhook service obtains an access token before invoking the webhook URL.
- If JWE is configured, the webhook payload is encrypted before delivery.
- The webhook service sends the notification to the configured customer URL.
- If delivery fails, the failure is recorded in the transmission log. A scheduled retry task can later pick up the failed transmission and retry delivery according to the configured retry policy.
Webhook Create API
Use the following API to create a webhook that subscribes to one or more events and configures how notifications should be delivered.
POST /webhooks
Example environment URL:
POST https://{HOST_NAME}.infinant.com/interlace/platform-api/v1/webhooksRequest Headers
| Header | Description |
|---|---|
| x-rquid | Request identifier used for request tracking. |
| x-idempotency-key | Idempotency value used to safely identify a repeated create request. |
| x-tecd-alias | Tenant alias used by the platform to route the request. |
Request and Response Model
The request body uses the WebhookSubscription model. The successful response returns the created Webhook record.
| Model | Usage |
|---|---|
| WebhookSubscription | Request body used to create the webhook configuration. |
| Webhook | Response body returned after the webhook is created. Includes platform-generated fields such as id and createdTime. |
Response Codes
| HTTP Status | Description |
|---|---|
| 200 | Webhook created. The response contains the created Webhook record. |
| 400 | Bad request. The request body or required headers are invalid. |
| 500 | Internal server error. The platform could not complete the request. |
Required Configuration Values
| Value | Description |
|---|---|
| name | Customer-defined webhook name. |
| url | External URL that receives webhook notifications. HTTPS is recommended. |
| authType | Authentication method used to invoke the customer endpoint: BASIC, OAUTH, OAUTHPOST, or NONE. |
| events | List of subscribed event names. When one of these events occurs, the webhook can be invoked. |
| clientKey / clientSecret | Credentials used for BASIC authentication or OAuth client credentials, depending on authType. |
| tokenURL | OAuth token URL. Required when authType is OAUTH or OAUTHPOST. |
| headerInfo | Additional request information. Sent as webhook headers except when authType is OAUTHPOST. |
| payloadSecurity | Payload security mode. Defaults to NONE. Use JWE when encrypted payload delivery is required. |
| version | Webhook feature version used by the platform. |
WebhookSubscription Field Reference
| Field | Required | Description |
|---|---|---|
| name | Yes | Name of the webhook. |
| description | No | Description of the webhook. |
| url | Yes | Customer-owned endpoint URL that receives webhook notifications. |
| authType | Yes | Authentication method used when invoking the endpoint: BASIC, OAUTH, OAUTHPOST, or NONE. |
| clientKey | Conditional | API key, username, or OAuth client ID, depending on authType. |
| clientSecret | Conditional | Secret, password, or OAuth client secret, depending on authType. This value is secured and is not returned once stored. |
| tokenURL | Conditional | OAuth token URL. Required for OAUTH and OAUTHPOST. |
| events | Yes | List of subscribed event names using the WebhookEvent schema supported by the platform. |
| headerInfo | No | Additional request information. Sent as webhook headers except for OAUTHPOST, where it is sent in the OAuth token request body. |
| payloadSecurity | No | Payload security mode. Defaults to NONE. |
| payloadEncryptionAlg | Conditional | JWE key management algorithm. Required when JWE encryption is enabled. |
| payloadEncryptionEnc | Conditional | JWE content encryption algorithm. Required when JWE encryption is enabled. |
| payloadEncryptionKeyId | Conditional | Key identifier used for encrypted payloads. |
| payloadEncryptionPublicKey | Conditional | Public key used to encrypt the webhook payload. Required when JWE encryption is enabled. |
| version | No | Webhook feature version. |
Webhook Response Field Reference
| Field | Description |
|---|---|
| id | Platform-generated webhook record identifier. |
| name | Name of the webhook. |
| description | Description of the webhook. |
| url | Customer-owned endpoint URL that receives webhook notifications. |
| authType | Authentication method configured for the webhook. |
| clientKey | Client key or username associated with the configured authentication method. |
| clientSecret | Secret value associated with the configured authentication method. This value is secured and should not be expected to be returned once stored. |
| tokenURL | OAuth token URL when OAuth authentication is configured. |
| events | Subscribed event list. |
| createdTime | Timestamp generated by the platform when the webhook was created. |
| headerInfo | Configured header or token request body information. |
| payloadSecurity | Configured payload security mode. |
| payloadEncryptionAlg / payloadEncryptionEnc | Configured JWE algorithms when encrypted payload delivery is enabled. |
| payloadEncryptionKeyId | Key identifier used for encrypted payloads. |
| payloadEncryptionPublicKey | Public key used to encrypt the payload. |
Supported Endpoint Authentication
Webhook endpoint authentication is configured using authType. The supported values are BASIC, OAUTH, OAUTHPOST, and NONE.
Authentication Mode: NONE
No authentication is applied when invoking the external webhook endpoint. This option should only be used when the endpoint does not require authentication or when authentication is handled by another approved external mechanism.
{
"authType": "NONE"
}Authentication Mode: BASIC
The webhook service authenticates to the customer endpoint using Basic Authentication. The configured clientKey and clientSecret are used as the credential values.
{
"authType": "BASIC",
"clientKey": "webhook-user",
"clientSecret": "webhook-password"
}Authentication Mode: OAUTH
The webhook service obtains an OAuth Bearer token before invoking the customer endpoint. The configured tokenURL, clientKey, and clientSecret are used to request the access token. The webhook request is then sent with Authorization: Bearer <access_token>.
{
"authType": "OAUTH",
"tokenURL": "https://auth.customer.com/oauth/token",
"clientKey": "client-id",
"clientSecret": "client-secret"
}Authentication Mode: OAUTHPOST
The webhook service obtains an OAuth Bearer token using a POST-based token request. This option is used when the authorization server requires additional token request fields, such as audience or scope, to be included in the request body.
{
"authType": "OAUTHPOST",
"tokenURL": "https://auth.dev.customer.com/oauth/token",
"clientKey": "client-id",
"clientSecret": "client-secret",
"headerInfo": "[{\"audience\":\"https://api.dev.customer.com\"},{\"scope\":\"infinant:send-payment-webhook\"}]"
}headerInfo Handling
The headerInfo field is used to configure additional request information. Its behavior depends on authType.
| authType | headerInfo behavior |
|---|---|
| NONE | Values are sent as headers in the webhook request to url. |
| BASIC | Values are sent as headers in the webhook request to url, in addition to Basic Authentication. |
| OAUTH | Values are sent as headers in the webhook request to url, in addition to the Bearer token. |
| OAUTHPOST | Values are sent as additional body fields in the OAuth token request, not as webhook request headers. |
Example headerInfo value for OAUTHPOST:
headerInfo = '[{"audience":"https://api.dev.customer.com"},{"scope":"infinant:send-payment-webhook"}]'For OAUTHPOST, the above configuration adds the following fields to the OAuth token request body:
grant_type=client_credentials
audience=https://api.dev.customer.com
scope=infinant:send-payment-webhookJWE Payload Encryption
The webhook model supports payload encryption using JWE. When enabled, the platform encrypts the webhook payload before sending it to the external endpoint. The customer receiving system must decrypt the payload using the corresponding private key.
| Field | Description |
|---|---|
| payloadSecurity | Defines the payload security mode. Default value is NONE. Use JWE to enable encrypted payload delivery. |
| payloadEncryptionAlg | JWE key management algorithm, for example RSA-OAEP-256. |
| payloadEncryptionEnc | JWE content encryption algorithm, for example A256GCM. |
| payloadEncryptionKeyId | Key identifier used to identify the encryption key. |
| payloadEncryptionPublicKey | Public key used to encrypt the webhook payload. The key can also be passed in as a BASE-64 encoded value |
{
"payloadSecurity": "JWE",
"payloadEncryptionAlg": "RSA-OAEP-256",
"payloadEncryptionEnc": "A256GCM",
"payloadEncryptionKeyId": "customer-key-001",
"payloadEncryptionPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"
}Retry Handling and Delivery Resilience
The webhook service supports configurable retries when a customer endpoint is temporarily unavailable or when a webhook delivery attempt fails.
This capability improves delivery resilience because a temporary outage, network issue, timeout, or short-lived authentication problem does not immediately stop the delivery process. Instead, failed webhook transmissions can be picked up later by the retry process and delivered again based on the configured retry policy.
Webhook retries are handled by a scheduled retry batch task by the platform. This task periodically searches for failed transmission records and attempts to resend them, as long as the retry count has not exceeded the configured maximum.
Retry behavior is controlled by platform-level retry configuration.
The default value is: 3
However, this default value can be updated upon client’s request. Note that this is an environment setting i.e. all tenants in the given environment would be impacted by the change.
Retry Behavior
When a webhook delivery fails:
- The failed delivery is recorded in a transmission log.
- The retry task searches for failed transmission records.
- The retry task selects eligible failed records based on the configured retry parameters.
- The webhook delivery is attempted again.
- The retry count is updated.
- Once the configured retry maximum is reached, the delivery is no longer retried automatically.
This retries mechanism allows the platform to continue attempting webhook delivery during temporary customer endpoint outages, while still preventing unlimited retry attempts.
Failed Webhook Delivery Logs
The platform also provides a transmission log API that can be used to search webhook delivery records, including failed webhook delivery attempts.
This allows customers or support teams to review webhook delivery status, retry count, transmission details, and failure information.
Use the following API to search transmission logs:
GET /message/transmit/logThis API supports filters such as transmission type, status, date range, template, limit, and offset.
To review failed webhook deliveries, the request should filter the transmission logs using the webhook transmission type and the failed delivery status supported by the environment.
Example Request
curl --location --globoff 'https://api.sandbox.infinant.com/interlace/notifications-api/v1/message/transmit/log?transmitType=WEBHOOK&status=FAILED&limit=50&offset=0' \
--header 'x-rquid: <REQUEST_ID>' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>'Response Model
The response contains a paginated list of transmission log records.
Important fields include:
| Field | Description |
|---|---|
| id | Transmission log record identifier. |
| tecd | Tenant or environment code. |
| transmitType | Transmission type. For webhook delivery, this identifies the record as a webhook transmission. |
| status | Current delivery status. |
| statusDesc | Description of the current status or failure reason. |
| retryCount | Number of retry attempts already performed. |
| transmitId | Transmission identifier. |
| transmitted | Date and time when the transmission was attempted. |
| eventUID | Event identifier associated with the transmission. |
| template | Template or event reference used for the transmission. |
| addresses | Destination information used for delivery. |
| content | Transmission content or payload information, when available. |
Create Webhook
Use POST /webhooks to create the webhook configuration. The request contains the subscribed events, target URL, authentication
configuration, optional header information, optional JWE encryption settings, and version.
curl 'https://{HOST_NAME}.infinant.com/interlace/platform-api/v1/webhooks' \
-H 'accept: application/json, text/plain, */*' \
-H 'authorization: Bearer <ACCESS_TOKEN>' \
-H 'x-idempotency-key: <IDEMPOTENCY_KEY_UUID>' \
-H 'x-rquid: <UNIQUE_RQ_UUID>' \
--data-raw '<PAYLOAD_JSON>'Request Example: No Authentication
{
"name": "CustomerAddressWebhook",
"description": "Endpoint used to receive customer address change notifications",
"url": "https://api.customer.com/webhooks/customer-address",
"authType": "NONE",
"events": [
{
"name": "customer.address.changed"
}
],
"payloadSecurity": "NONE",
"version": 1
}Request Example: Basic Authentication with Additional Headers
{
"name": "PaymentWebhookBasic",
"description": "Endpoint used to receive payment notifications",
"url": "https://api.customer.com/webhooks/payments",
"authType": "BASIC",
"clientKey": "webhook-user",
"clientSecret": "webhook-password",
"events": [
{
"name": "payment.completed"
}
],
"headerInfo": "[{\"X-Customer-Id\":\"customer-123\"},{\"X-Environment\":\"sandbox\"}]",
"payloadSecurity": "NONE",
"version": 1
}Request Example: OAuth POST with Audience and Scope
{
"name": "PaymentWebhookOAuthPost",
"description": "Endpoint used to receive payment notifications using OAuth POST",
"url": "https://api.customer.com/webhooks/payments",
"authType": "OAUTHPOST",
"tokenURL": "https://auth.dev.customer.com/oauth/token",
"clientKey": "client-id",
"clientSecret": "client-secret",
"events": [
{
"name": "payment.completed"
}
],
"headerInfo": "[{\"audience\":\"https://api.dev.customer.com\"},{\"scope\":\"infinant:send-payment-webhook\"}]",
"payloadSecurity": "NONE",
"version": 1
}Request Example: OAuth POST with JWE Payload Encryption
{
"name": "SecurePaymentWebhook",
"description": "Endpoint used to receive encrypted payment notifications",
"url": "https://api.customer.com/webhooks/payments",
"authType": "OAUTHPOST",
"tokenURL": "https://auth.dev.customer.com/oauth/token",
"clientKey": "client-id",
"clientSecret": "client-secret",
"events": [
{
"name": "payment.completed"
}
],
"headerInfo": "[{\"audience\":\"https://api.dev.customer.com\"},{\"scope\":\"infinant:send-payment-webhook\"}]",
"payloadSecurity": "JWE",
"payloadEncryptionAlg": "RSA-OAEP-256",
"payloadEncryptionEnc": "A256GCM",
"payloadEncryptionKeyId": "customer-key-001",
"payloadEncryptionPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----",
"version": 1
}Sample Created Webhook Response
After the webhook is created, the platform returns the created Webhook record. The id and createdTime values are generated by the platform. The clientSecret value is secured and should not be expected to be returned in plain text.
{
"id": "webhook-12345",
"name": "SecurePaymentWebhook",
"description": "Endpoint used to receive encrypted payment notifications",
"url": "https://api.customer.com/webhooks/payments",
"authType": "OAUTHPOST",
"clientKey": "client-id",
"tokenURL": "https://auth.dev.customer.com/oauth/token",
"events": [
{
"name": "payment.completed"
}
],
"createdTime": "2026-07-15T13:54:42Z",
"headerInfo": "[{\"audience\":\"https://api.dev.customer.com\"},{\"scope\":\"infinant:send-payment-webhook\"}]",
"payloadSecurity": "JWE",
"payloadEncryptionAlg": "RSA-OAEP-256",
"payloadEncryptionEnc": "A256GCM",
"payloadEncryptionKeyId": "customer-key-001"
}Complete Runtime Example
A customer wants to receive a webhook notification whenever a payment is completed. The customer OAuth provider requires audience and scope during token generation, and the webhook payload must be encrypted using JWE.
Webhook Configuration
{
"name": "CompletedPaymentWebhook",
"description": "Receives completed payment webhook notifications",
"url": "https://api.customer.com/webhooks/completed-payments",
"authType": "OAUTHPOST",
"tokenURL": "https://auth.dev.customer.com/oauth/token",
"clientKey": "customer-client-id",
"clientSecret": "customer-client-secret",
"events": [
{
"name": "fedwire.payment.initiated "
}
],
"headerInfo": "[{\"audience\":\"https://api.dev.customer.com\"},{\"scope\":\"infinant:send-payment-webhook\"}]",
"payloadSecurity": "JWE",
"payloadEncryptionAlg": "RSA-OAEP-256",
"payloadEncryptionEnc": "A256GCM",
"payloadEncryptionKeyId": "payment-webhook-key-001",
"payloadEncryptionPublicKey": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----",
"version": 1
}Runtime Behavior
- A payment.completed event occurs in the platform.
- The webhook service finds webhook records subscribed to payment.completed in the events list.
- The webhook service loads the matching webhook configuration named CompletedPaymentWebhook.
- Because authType is OAUTHPOST, the webhook service requests an OAuth access token from the configured tokenURL.
- The OAuth token request body includes grant_type=client_credentials, audience, and scope.
- The webhook service encrypts the payload using the configured JWE public key.
- The webhook service sends the encrypted webhook notification to the configured url using Authorization: Bearer <access_token>.
- If the customer endpoint is temporarily unavailable, the webhook service can retry delivery according to the configured maximum retry count.
Customer Handling
- Use HTTPS for all webhook URLs.
- Avoid authType = NONE in production environments unless another approved security control is in place.
- Store clientSecret, client credentials, access tokens, private keys, and generated reports securely.
- Do not expose secrets, tokens, or private keys in browser-side code, logs, or public repositories.
- Use OAUTHPOST when the OAuth provider requires additional token request body fields such as audience or scope.
- Use JWE payload encryption when webhook payloads contain sensitive information.
- Protect the private key associated with the public key configured for JWE encryption.
- Ensure the receiving system can process the selected authentication method and payload security mode.
- Plan for temporary downtime by validating how the customer endpoint behaves when the platform retries webhook delivery.
Updated 2 months ago