EBPP API - Webhooks Notifications of Multi Profile Account Model
An event is an occurrence of something that could be of interest to the biller or client within EBPP. When this happens, EBPP sends an Event object to the client using a Webhook. Clients can subscribe to the events of their choice. The Webhook invocation involves authenticating to the client system and making a POST request with the Event object to the URL specified by the client. An event posting is considered to be successful if it gets an HTTP Response code of 200. In case EBPP does not receive a successful response for an event posting, the event will be re-posted every hour for a maximum of 3 days. In case of re-posting of an event, the event id will be the same as in the original posting.
In this authentication scheme, EBPP would send API Keys, in the form of HTTP headers, as part of the webhook. These API Keys must be configured in EBPP by the client. A client can specify upto a maximum of 5 API keys to be sent in a webhook. The client can check for the authenticity of the webhook by comparing the API keys and values received in the webhook with the ones configured in EBPP.
Example :
test_header1:value1
test_header2:value2
test_header3:value3
test_header4:value4
test_header5:value5
With Basic Authentication, EBPP sends a Base64-encoded string that contains the user name and password for the client in the Authorization header of the HTTP request. The client must configure the username and password for the basic authentication in EBPP. The client can check for the authenticity of the webhook by verifying the username and password received in the webhook with the ones configured in EBPP. Please note that Base64 is not a form of encryption and is similar to sending the user name and password in clear text.
Example :
Below dXNlcm5hbWU6cGFzc3dvcmQ= refers to Base64 encoded string of the provided username and password ( username:password )
( : ( colon ) is appended in-between username and password before it is being encoded)
Authorization:Basic dXNlcm5hbWU6cGFzc3dvcmQ=
EBPP supports Open Authorization Protocol 2.0 with Auth scheme as “Bearer”. The client/biller needs to run an authorization server at its end. The client needs to configure the client id, the client secret, the token endpoint (URL) and the Auth scope in EBPP. The Grant Type to be used is "client_credentials". EBPP sends the token read from the token endpoint in the Authorization header of the webhook.
Example :
Below 4484e52dc4744374aced826a4543cd28948816ff refers to the access token issued by Autherization server.
Authorization:Bearer 4484e52dc4744374aced826a4543cd28948816ff
This section outlines the API required to exchange and manage event information being posted to the client vide Webhooks. The Event object contains the type of event that occurred and the domain object that pertains to the event. Possible events objects are PaymentEvent, PaymentSetupEvent, RefundEvent.
Listed below are the possible event types and the relevant domain object that would be sent as part of the Event object.
Event Type | Description | Data |
---|---|---|
payment.created | Triggered when a payment is scheduled or an instance of a PaymentSetup is created. |
Payment |
payment.processing | Triggered when a payment processing is initiated. | Payment |
payment.processed | Triggered when a payment processing is completed. This does not mean the funds are settled. The funds will be settled at a later time depending upon the payment method. | Payment |
payment.updated | Triggered when a pending payment is updated. | Payment |
payment.cancelled | Triggered when a pending payment is cancelled or an instance of a PaymentSetup is rejected due to limit violations. | Payment |
payment.declined | Triggered when a card payment is declined by the card issuer. | Payment |
payment.returned | Triggered when a bank payment is returned by the ACH gateway. | Payment |
payment.rejected | Triggered when a payment or an instance of a PaymentSetup is rejected due to business rule voilations. | Payment |
payment.chargedback | Triggered when a chargeback is received on a card. | Payment |
refund.created | Triggered when the refund of a payment is initiated. | Refund |
refund.processing | Triggered when a refund processing is initiated. | Refund |
payment_setup.created | Triggered when a customer enrolls for an Autopay , Recurring or a Payment Plan Setup. | PaymentSetup |
payment_setup.updated | Triggered when a customer edits an Autopay , Recurring or a Payment Plan Setup. | PaymentSetup |
payment_setup.draft.created | Triggered when a new bill amount or due date is applied to a customer account for which the customer has an active payment setup. The new bill amount or due date for a customer account could come in the Account Master File or could be applied using the Payments API. | PaymentSetup |
payment_setup.draft.skipped | Triggered when a zero bill amount is applied to a customer account that has an active payment setup. In this case, the payment instance is not created or is skipped for the payment setup. | PaymentSetup |
payment_setup.cancelled | Triggered when a customer cancels an Autopay , Recurring or a Payment Plan Setup. | PaymentSetup |
The Publish Event API is used to push notifications from EBPP to it's clients, via webhooks. EBPP sends notifications for a number of events ranging from bill due to payments. The clients who wish to consume these notifications need to specify the URL at which they want the notifications to be posted.
api_version required | string The number or reference to the version of the webhooks API. |
channel required | string The channel through which the API is invoked. Please contact support@billerpayments.com to configure channels. |
client_key required | string <= 50 characters [a-zA-Z0-9_-]{1,50} The unique identifier assigned by EBPP to the client. |
data required | object |
id required | string <= 50 characters [a-zA-Z0-9-_]{1,50} The unique identifier assigned by EBPP to the event being posted. |
pending_webhooks required | string [0-9]{1,2} The number of webhooks notifications that the client failed to process and that EBPP needs to resend for the event type. |
source_id | string [a-zA-Z0-9]{1,20} The unique identifier assigned by EBPP to the source that originated the event. For e.g., The source_id is null or empty if the event is triggered by system. It is the id of the customer, if the source_type is customer and user login id if the source_type is user or external_user. |
source_type required | string Enum: "customer" "user" "external_user" The type of source that originated the event. |
timestamp required | string The UTC timestamp, in ISO8601 format, for the moment when the event is posted to the client. |
type required | string Enum: "payment.created" "payment.processing" "payment.processed" "payment.updated" "payment.cancelled" "payment.declined" "payment.returned" "payment.rejected" "payment.chargedback" The type of the event that triggered the webhooks notification.In the event 'payment.created', the prefix 'payment' indicates the Data object in the context and the verb 'created' indicates the operation performed on the object. |
{- "api_version": "1.0",
- "channel": "Agent",
- "client_key": "123456789",
- "data": {
- "payment": {
- "amount": "110.00",
- "card_cvv_number": "",
- "confirmation_number": "RM121R32147KT5V",
- "currency_code3d": "USD",
- "custom_fields": { },
- "customer": {
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "custom_fields": { },
- "customer_reference": "IkdphX8DsEtOeOI_73823121",
- "date_of_birth": "1980-11-11T00:00:00.000Z",
- "email": "userid@example.com",
- "first_name": "Michael",
- "gender": "male",
- "home_phone": "1234567890",
- "id": "123456789",
- "last_name": "Smith",
- "locale": "en_US",
- "middle_name": "S",
- "mobile_phone": "1234567890",
- "ssn": "123456789",
- "status": "active",
- "url": "/customers/123456789",
- "work_phone": "1234567890"
}, - "customer_account": {
- "account_holder_name": "Michael Smith",
- "account_number": "478E4385e604B685",
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "current_balance": "100.50",
- "current_statement_balance": "101.50",
- "custom_fields": { },
- "customer_account_reference": "EruOehjef1ByeQ9JWM2D",
- "id": "234567891",
- "minimum_payment_due": "100.00",
- "nickname": "Smith",
- "past_amount_due": "50.00",
- "payment_due_date": "2018-11-11T00:00:00.000Z",
- "statement_date": "2018-11-01T00:00:00.000Z",
- "payoff_amount": "10000.00",
- "payoff_expiry_date": "2020-06-01T00:00:00.000Z",
- "status": "active",
- "url": "/customeraccounts/234567891"
}, - "expected_payment_settlement_date": "2018-12-12T00:00:00.000Z",
- "fee": {
- "fee_amount": "5.00",
- "fee_type": "add_to_principal",
- "id": "",
- "url": ""
}, - "funding_account": {
- "aba_routing_number": "011000206",
- "account_holder_name": "Michael Smith",
- "account_holder_type": "personal",
- "account_number": "xxxxx0206",
- "account_subtype": "savings",
- "account_type": "bank",
- "ach_eligible_flag": "yes",
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "atm_eligible_flag": "no",
- "card_cvv_number": "",
- "currency_code3d": "USD",
- "custom_fields": { },
- "expiry_date": "",
- "id": "123456789",
- "issuer_name": "BANK ISSUER NAME",
- "nickname": "Smith",
- "status": "active",
- "display_text": "xxxx1234",
- "url": "/fundingaccounts/123456789"
}, - "id": "456789321",
- "payment_amount_type": "other",
- "payment_date": "2018-12-12T00:00:00.000Z",
- "payment_entry_date": "2018-12-12T00:00:00.000Z",
- "payment_method": "ach",
- "payment_network_response": {
- "payment_auth_code": "",
- "payment_decline_code": "",
- "payment_decline_msg": "",
- "return_code": "",
- "return_code_desc": ""
}, - "payment_reference": "PBruOrpMLl1dsBQ-1234567",
- "payment_request_date": "2024-01-23",
- "payment_return_date": "2024-01-23",
- "payment_schedule_type": "one_time_payment",
- "return_code": "",
- "status": "scheduled",
- "payment_notification_email": "userid@example.com",
- "comments": "making a payment",
- "token": "string",
- "url": "/payments/456789321"
}
}, - "id": "3bad9fa7-624e-4539-adf1-eb2fe50807c9",
- "pending_webhooks": "0",
- "source_id": "123456",
- "source_type": "user",
- "timestamp": "2019-08-13T09:21:34.359+0000",
- "type": "payment.created"
}
api_version required | string The number or reference to the version of the webhooks API. |
channel required | string The channel through which the API is invoked. Please contact support@billerpayments.com to configure channels. |
client_key required | string <= 50 characters [a-zA-Z0-9_-]{1,50} The unique identifier assigned by EBPP to the client. |
data required | object |
id required | string <= 50 characters [a-zA-Z0-9-_]{1,50} The unique identifier assigned by EBPP to the event being posted. |
pending_webhooks required | string [0-9]{1,2} The number of webhooks notifications that the client failed to process and that EBPP needs to resend for the event type. |
source_id | string [a-zA-Z0-9]{1,20} The unique identifier assigned by EBPP to the source that originated the event. For e.g., The source_id is null or empty if the event is triggered by system. It is the id of the customer, if the source_type is customer and user login id if the source_type is user or external_user. |
source_type required | string Enum: "customer" "user" "external_user" The type of source that originated the event. |
timestamp required | string The UTC timestamp, in ISO8601 format, for the moment when the event is posted to the client. |
type required | string Enum: "payment_setup.created" "payment_setup.updated" "payment_setup.cancelled" "payment_setup.draft.created" "payment_setup.draft.skipped" The type of the event that triggered the webhooks notification.In the event 'payment.created', the prefix 'payment' indicates the Data object in the context and the verb 'created' indicates the operation performed on the object. |
{- "api_version": "1.0",
- "channel": "Agent",
- "client_key": "123456789",
- "data": {
- "payment_setup": {
- "amount": "",
- "card_cvv_number": "",
- "confirmation_number": "R12M121R32147KTE5V",
- "currency_code3d": "USD",
- "custom_fields": { },
- "customer": {
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "custom_fields": { },
- "customer_reference": "IkdphX8DsEtOeOI_73823121",
- "date_of_birth": "1980-11-11T00:00:00.000Z",
- "email": "userid@example.com",
- "first_name": "Michael",
- "gender": "male",
- "home_phone": "1234567890",
- "id": "123456789",
- "last_name": "Smith",
- "locale": "en_US",
- "middle_name": "S",
- "mobile_phone": "1234567890",
- "ssn": "123456789",
- "status": "active",
- "url": "/customers/123456789",
- "work_phone": "1234567890"
}, - "customer_account": {
- "account_holder_name": "Michael Smith",
- "account_number": "478E4385e604B685",
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "current_balance": "100.50",
- "current_statement_balance": "101.50",
- "custom_fields": { },
- "customer_account_reference": "EruOehjef1ByeQ9JWM2D",
- "id": "234567891",
- "minimum_payment_due": "100.00",
- "nickname": "Smith",
- "past_amount_due": "50.00",
- "payment_due_date": "2018-11-11T00:00:00.000Z",
- "statement_date": "2018-11-01T00:00:00.000Z",
- "payoff_amount": "10000.00",
- "payoff_expiry_date": "2020-06-01T00:00:00.000Z",
- "status": "active",
- "url": "/customeraccounts/234567891"
}, - "fee": {
- "fee_amount": "5.00",
- "fee_type": "add_to_principal",
- "id": "",
- "url": ""
}, - "funding_account": {
- "aba_routing_number": "011000206",
- "account_holder_name": "Michael Smith",
- "account_holder_type": "personal",
- "account_number": "xxxxx0206",
- "account_subtype": "savings",
- "account_type": "bank",
- "ach_eligible_flag": "yes",
- "address": {
- "address_city": "Piscataway",
- "address_country": "USA",
- "address_line1": "1551 South Washington Ave",
- "address_line2": "Suite 130 Piscataway",
- "address_state": "NJ",
- "address_zip1": "12345",
- "address_zip2": "1234"
}, - "atm_eligible_flag": "no",
- "card_cvv_number": "",
- "currency_code3d": "USD",
- "custom_fields": { },
- "expiry_date": "",
- "id": "123456789",
- "issuer_name": "BANK ISSUER NAME",
- "nickname": "Smith",
- "status": "active",
- "display_text": "xxxx1234",
- "url": "/fundingaccounts/123456789"
}, - "id": "678954321",
- "next_payment_date": "2018-12-20T00:00:00.000Z",
- "payment_method": "ach",
- "payment_schedule": {
- "payment_amount_type": "statement_balance",
- "payment_defer_days": "10",
- "payment_end_date": "2024-01-23",
- "payment_limit_amount": "1000.00",
- "payment_plan_id": "",
- "payment_recurring_count": "",
- "payment_recurring_type": "",
- "payment_start_date": "2024-01-23"
}, - "payment_setup_entry_date": "2018-12-12T00:00:00.000Z",
- "payment_setup_reference": "1aQVAZ3kXTF0ocGgi_1212121",
- "payment_setup_schedule_type": "autopay_enrollment",
- "status": "scheduled",
- "comments": "creating a payment setup",
- "url": "/paymentsetups/678954321"
}
}, - "id": "3bad9fa7-624e-4539-adf1-eb2fe50807c9",
- "pending_webhooks": "0",
- "source_id": "123456",
- "source_type": "user",
- "timestamp": "2019-08-13T09:21:34.359+0000",
- "type": "payment_setup.created"
}
api_version required | string The number or reference to the version of the webhooks API. |
channel required | string The channel through which the API is invoked. Please contact support@billerpayments.com to configure channels. |
client_key required | string <= 50 characters [a-zA-Z0-9_-]{1,50} The unique identifier assigned by EBPP to the client. |
data required | object |
id required | string <= 50 characters [a-zA-Z0-9-_]{1,50} The unique identifier assigned by EBPP to the event being posted. |
pending_webhooks required | string [0-9]{1,2} The number of webhooks notifications that the client failed to process and that EBPP needs to resend for the event type. |
source_id | string [a-zA-Z0-9]{1,20} The unique identifier assigned by EBPP to the source that originated the event. For e.g., The source_id is null or empty if the event is triggered by system. It is the id of the customer, if the source_type is customer and user login id if the source_type is user or external_user. |
source_type required | string Enum: "customer" "user" "external_user" The type of source that originated the event. |
timestamp required | string The UTC timestamp, in ISO8601 format, for the moment when the event is posted to the client. |
type required | string Enum: "refund.created" "refund.processing" The type of the event that triggered the webhooks notification.In the event 'payment.created', the prefix 'payment' indicates the Data object in the context and the verb 'created' indicates the operation performed on the object. |
{- "api_version": "1.0",
- "channel": "Agent",
- "client_key": "123456789",
- "data": {
- "refund": {
- "refund_reference": "aQV1A2Z6kXTF70ocGgi_1317",
- "id": "123456789",
- "url": "/customers/{ID_CUSTOMER}/refunds/{ID_REFUND}",
- "refund_type": "payment_and_fee",
- "refund_amount": "101.05",
- "fee_refund": {
- "fee_refund_amount": "5.00",
- "fee_type": "add_to_principal"
}, - "status": "scheduled",
- "confirmation_number": "RM121R32147KT5V",
- "refund_date": "string",
- "refund_entry_date": "string",
- "expected_refund_settlement_date": "string",
- "custom_fields": {
- "property1": "string",
- "property2": "string"
}, - "comments": "initiating refund",
- "source_payment": {
- "id": "12684515",
- "url": "/customers/{ID_CUSTOMER}/payments/{ID_PAYMENT}",
- "customer": {
- "id": "12684515",
- "url": "/customers/{ID_CUSTOMER}",
- "customer_reference": "IkdphX8DsEtOeOI_73823121"
}, - "customer_account": {
- "id": "12684515",
- "url": "/customers/{ID_CUSTOMER}/customeraccounts/{ID_CUSTOMER_ACCOUNT}",
- "account_number": "478E4385e604B685"
}, - "funding_account": {
- "id": "123456789",
- "url": "/customers/{ID_CUSTOMER}/fundingaccounts/{ID_FUNDING_ACCOUNT}",
- "account_number": "xxxxx0206",
- "account_type": "bank",
- "account_subtype": "savings",
- "aba_routing_number": "123456789",
- "issuer_name": "BANK ISSUER NAME",
- "nickname": "Smith",
- "display_text": "xxxx1234"
}
}, - "payment_network_response": {
- "payment_auth_code": "",
- "payment_response_code": "",
- "payment_response_msg": ""
}
}
}, - "id": "3bad9fa7-624e-4539-adf1-eb2fe50807c9",
- "pending_webhooks": "0",
- "source_id": "123456",
- "source_type": "user",
- "timestamp": "2019-08-13T09:21:34.359+0000",
- "type": "refund.created"
}