Merchant Onboarding API
Last updated: November 5, 2026
Note. A new version of the Merchant Onboarding API is on our roadmap for 2027.
Contact operations
/psps/{pspid}/ownedContacts/divisions/{divisionsid}/ownedContacts/merchants/{merchantid}/ownedContacts/contacts/{contactid}/setPassword/contacts/{contactid}/contacts/{contactid}/contacts/{contactid}/lockContact/contacts/{contactid}/unlockContact/contacts/{contactid}/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}/psps/{pspid}/attachedContacts/divisions/{divisionid}/attachedContacts/merchants/{merchantid}/attachedContacts/channels/{channelId}/attachedContacts/psps/{pspid}/ownedContacts/divisions/{divisionsid}/ownedContacts/merchants/{merchantid}/ownedContacts/channels/{channelId}/ownedContactsAdd Contact
The call adds a new contact. The contact can be created at PSP, Division, or Merchant levels. It can be attached to any other entity at the desired level. The contact can be attached to the same entity at the same level, where it was created. For this, use the autoAttach parameter when creating the contact.
Endpoints
/psps/{pspid}/ownedContacts/divisions/{divisionsid}/ownedContacts/merchants/{merchantid}/ownedContactsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32Data parameters
emailrequirednamerequiredrolerequired- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kindrequired- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phoneOptionaloauthRedirectUrlOptionalmobileOptionaldescriptionOptionalautoAttachOptionalSet to true to attach the user to the same entity it is created. The default value is false.
languagerequired- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
sendCredentialsMailOptional (default to false)sendAuthenticatorMailOptional (default to false)Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/psps/{pspid}/ownedContacts/divisions/{divisionsid}/ownedContacts/merchants/{merchantid}/ownedContactsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/ownedContacts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'email=test@example.com' \
--data-urlencode 'name=Test Account' \
--data-urlencode 'role=CALLCENTER' \
--data-urlencode 'kind=SEND' \
--data-urlencode 'language=en'Response samples
{
"contactInfo": {
"email": "user_1@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd01",
"kind": "WEB_API",
"name": "User_Name",
"role": "Operator",
"state": "NEW",
"username": "user_1@moapi.com"
}
}{}Reset Contact Password
The call resets the password for an existing contact.
Endpoints
/contacts/{contactid}/setPasswordURL parameters
contactIdrequired[a-f 0-9]32Data parameters
(no parameter allowed)
Success response
messageError response
/contacts/{contactid}/setPasswordRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}/setPassword' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"message": "A new password was sent to the contact."
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Get Contact
The call gets information about an existing contact.
Endpoints
/contacts/{contactid}URL parameters
contactIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachSet to true to attach the user to the same entity it is created. The default value is false.
statelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/contacts/{contactid}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactInfo": {
"email": "user_2@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd02",
"kind": "WEB_API",
"language": "en",
"name": "User2_Name",
"role": "Operator",
"state": "NEW",
"username": "user_2@moapi.com"
}
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Edit Contact
The call edits an existing contact.
Endpoints
/contacts/{contactid}URL parameters
contactIdrequired[a-f 0-9]32Data parameters
If the request is submitted with parameters set to empty spaces - for example, email=<single space> - this will delete the previous values and leave the fields blank.
The parameters that are not included in the request are not changed. To avoid nullifying valid values, skip the parameters that do not require an update.
emailrequirednamerequiredrolerequired- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kindrequired- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phoneOptionalmobileOptionaldescriptionOptionalautoAttachOptionalstateOptionallanguageOptional- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/contacts/{contactid}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'email=test@example.com' \
--data-urlencode 'name=New Name' \
--data-urlencode 'role=ANALYSIS' \
--data-urlencode 'kind=SEND' \
--data-urlencode 'language=en'Response samples
{
"contactInfo": {
"email": "user_2@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd02",
"kind": "WEB_API",
"language": "en",
"name": "User2_Name",
"role": "Operator",
"state": "NEW",
"username": "user_2@moapi.com"
}
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Lock Contact
The call locks an existing contact.
Endpoints
/contacts/{contactid}/lockContactURL parameters
contactIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/contacts/{contactid}/lockContactRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}/lockContact' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactInfo": {
"email": "user_4@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd03",
"kind": "WEB_API",
"name": "User4_Name",
"role": "Operator",
"state": "LOCKED",
"username": "user_4@moapi.com"
}
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Unlock Contact
The call unlocks an existing contact.
Endpoints
/contacts/{contactid}/unlockContactURL parameters
contactIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/contacts/{contactid}/unlockContactRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}/unlockContact' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactInfo": {
"email": "user_4@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd03",
"kind": "WEB_API",
"name": "User4_Name",
"role": "Operator",
"state": "ACTIVE",
"username": "user_4@moapi.com"
}
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Delete Contact
The call deletes an existing contact. The contact must be detached before deleting.
Endpoints
/contacts/{contactid}URL parameters
contactIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
messageError response
/contacts/{contactid}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/contacts/{contactId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"message": " Contact successfully deleted."
}{
"error": {
"message": "Invalid contact id or missing configuration."
}
}Attach Contact
The call attaches a contact to the desired entity.
The contact can be created at one level and then attached to another entity at another level.
Endpoints
/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}URL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32contactIdrequired for all options[a-f 0-9]32Data parameters
No parameters are required
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/attachedContacts/{contactId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactInfo": {
"email": "user_4@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd03",
"kind": "WEB_API",
"name": "User4_Name",
"role": "Operator",
"state": "ACTIVE",
"username": "user_4@moapi.com"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd04"
}
}Detach Contact
The call allows detaching an attached contact.
Endpoints
/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}URL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32contactIdrequired for all options[a-f 0-9]32Data parameters
No parameters are required.
Success response
messageError response
/psps/{pspid}/attachedContacts/{contactid}/divisions/{divisionid}/attachedContacts/{contactid}/merchants/{merchantid}/attachedContacts/{contactid}/channels/{channelId}/attachedContacts/{contactid}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/attachedContacts/{contactId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"message": "Contact successfully detached from entity."
}{
"error": {
"message": "Contact doesn't exist."
}
}Get Attached Contacts list
The call lists the information about contacts that are attached to an entity. Do not confuse it with Get Owned Contacts list.
The call Get Attached Contacts list is getting the contacts that are attached to an entity but might have been created under a different entity.
Endpoints
/psps/{pspid}/attachedContacts/divisions/{divisionid}/attachedContacts/merchants/{merchantid}/attachedContacts/channels/{channelId}/attachedContactsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters are required.
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/psps/{pspid}/attachedContacts/divisions/{divisionid}/attachedContacts/merchants/{merchantid}/attachedContacts/channels/{channelId}/attachedContactsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/attachedContacts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactList": [
{
"description": "",
"email": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd05",
"kind": "WEB_API",
"mobile": "",
"name": "MO API Admin",
"phone": "",
"role": "Administrator",
"state": "ACTIVE",
"username": "moapi.admin@email.com"
},
{
"email": "user_3@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd06",
"kind": "WEB_API",
"name": "User3_Name",
"role": "Operator",
"state": "NEW",
"username": "user_3@moapi.com"
},
{
"email": "user_4@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd03",
"kind": "WEB_API",
"name": "User4_Name",
"role": "Operator",
"state": "ACTIVE",
"username": "user_4@moapi.com"
},
{
"email": "user_1@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd01",
"kind": "WEB_API",
"name": "User_Name",
"role": "Operator",
"state": "NEW",
"username": "user_1@moapi.com"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd04"
}
}Get Owned Contacts list
The call lists details about all contacts that were created or attached at the level of an entity. Do not confuse it with Get Attached Contacts list.
The call Get Owned Contacts list is getting the contacts that were created at the level of a specific entity but might have been attached to a different entity, and the contacts that were attached to this specific entity.
Endpoints
/psps/{pspid}/ownedContacts/divisions/{divisionid}/ownedContacts/merchants/{merchantid}/ownedContacts/channels/{channelId}/ownedContactsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters are required.
Success response
contactInfoid[a-f0-9]32emailusernamenamerole- CALLCENTER_RESTRICTED
- ACCOUNTING_GLOBAL
- ANALYSIS
- CALLCENTER
- OPERATOR
kind- SEND
- SYSTEM
- SUPPORT
- MOTO
- WEB_API
- OAUTH_APP
phonemobiledescriptionautoAttachstatelanguage- en (English)
- de (German)
- fr (French)
- es (Spanish)
- it (Italian)
- ru (Russian)
- pt (Portuguese)
- nl (Nederlands)
- cn (Chinese)
Error response
/psps/{pspid}/ownedContacts/divisions/{divisionid}/ownedContacts/merchants/{merchantid}/ownedContacts/channels/{channelId}/ownedContactsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/ownedContacts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"contactList": [
{
"description": "",
"email": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd05",
"kind": "WEB_API",
"mobile": "",
"name": "MO API Admin",
"phone": "",
"role": "Administrator",
"state": "ACTIVE",
"username": "moapi.admin@email.com"
},
{
"email": "user_1@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd01",
"kind": "WEB_API",
"name": "User_Name",
"role": "Operator",
"state": "NEW",
"username": "user_1@moapi.com"
},
{
"email": "user_3@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd06",
"kind": "WEB_API",
"name": "User3_Name",
"role": "Operator",
"state": "NEW",
"username": "user_3@moapi.com"
},
{
"email": "user_4@moapi.com",
"id": "ab12cd34ef56ab12cd34ef56ab12cd03",
"kind": "WEB_API",
"name": "User4_Name",
"role": "Operator",
"state": "ACTIVE",
"username": "user_4@moapi.com"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd04"
}
}Clearing Institute operations
/psps/{pspid}/clearingInstitutesGet Clearing Institutes list
The call lists the information about existing clearing institutes.
- Clearing institutes are entities defining the different acquiring connections provided by the platform.
- The availability of a clearing institute for a specific merchant/PSP is discussed before contracts are signed. Additional clearing institutes can be made available later. The clearing institutes list, available to you, should be discussed with the account manager.
Endpoints
/psps/{pspid}/clearingInstitutesURL parameters
pspIdrequired[a-f 0-9]32Data parameters
No parameters are required
Success response
country[A-Z]2id[a-f 0-9]32internationalCode[A-Z a-z 0-9], [-_ ]128name[A-Z a-z 0-9], [-_ ]128Error response
/psps/{pspid}/clearingInstitutesRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/clearingInstitutes' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"clearingInstitutes": []
}{
"clearingInstitutes": [
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd07",
"internationalCode": " ",
"name": "Acceptance Test"
},
{
"country": "NL",
"id": "ab12cd34ef56ab12cd34ef56ab12cd08",
"internationalCode": " ",
"name": "Afterpay"
},
{
"country": "CN",
"id": "ab12cd34ef56ab12cd34ef56ab12cd09",
"name": "Alipay"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd10",
"internationalCode": " ",
"name": "Amex Test"
},
{
"country": "BR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd11",
"internationalCode": " ",
"name": "AstroPay CI"
},
{
"country": "BR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd12",
"internationalCode": " ",
"name": "AstroPay Streamline CI"
},
{
"country": "ES",
"id": "ab12cd34ef56ab12cd34ef56ab12cd13",
"internationalCode": " ",
"name": "BANC SABADELL CI"
},
{
"country": "BR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd14",
"name": "BRADESCO_TEST"
},
{
"country": "LI",
"id": "ab12cd34ef56ab12cd34ef56ab12cd15",
"internationalCode": " ",
"name": "BankFrick"
},
{
"country": "UK",
"id": "ab12cd34ef56ab12cd34ef56ab12cd16",
"internationalCode": " ",
"name": "Bitnet Demo"
},
{
"country": "CN",
"id": "ab12cd34ef56ab12cd34ef56ab12cd17",
"internationalCode": " ",
"name": "CHINAPAY"
},
{
"country": "ES",
"id": "ab12cd34ef56ab12cd34ef56ab12cd18",
"internationalCode": " ",
"name": "CIELO"
},
{
"country": "AE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd19",
"internationalCode": " ",
"name": "CashU Test"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd20",
"internationalCode": " ",
"name": "Certification"
},
{
"country": "US",
"id": "ab12cd34ef56ab12cd34ef56ab12cd21",
"internationalCode": " ",
"name": "Chase_Orbital"
},
{
"country": "US",
"id": "ab12cd34ef56ab12cd34ef56ab12cd22",
"internationalCode": " ",
"name": "Chase_Stratus"
},
{
"country": "UK",
"id": "ab12cd34ef56ab12cd34ef56ab12cd23",
"internationalCode": " ",
"name": "CredoraxOmnipayDemoTest"
},
{
"country": "AT",
"id": "ab12cd34ef56ab12cd34ef56ab12cd24",
"internationalCode": " ",
"name": "DaoPay Test"
},
{
"country": "AT",
"id": "ab12cd34ef56ab12cd34ef56ab12cd25",
"name": "EPSSO_CI"
},
{
"country": "MT",
"id": "ab12cd34ef56ab12cd34ef56ab12cd26",
"name": "Entercash Test"
},
{
"country": "UK",
"id": "ab12cd34ef56ab12cd34ef56ab12cd27",
"internationalCode": " ",
"name": "FDMS_UK"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd28",
"name": "Giropay Fiducia"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd29",
"internationalCode": " ",
"name": "Iyzico Akbank Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd30",
"internationalCode": " ",
"name": "Iyzico Bankasya Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd31",
"internationalCode": " ",
"name": "Iyzico Denizbank Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd32",
"internationalCode": " ",
"name": "Iyzico Finansbank Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd33",
"internationalCode": " ",
"name": "Iyzico Isbank Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd34",
"internationalCode": " ",
"name": "Iyzico Yapikredi Demo"
},
{
"country": "TR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd35",
"internationalCode": " ",
"name": "Iyzico iPara Demo"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd36",
"internationalCode": " ",
"name": "Klarna Checkout"
},
{
"country": "SE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd37",
"internationalCode": " ",
"name": "Klarna Test"
},
{
"country": "US",
"id": "ab12cd34ef56ab12cd34ef56ab12cd38",
"internationalCode": " ",
"name": "MasterPass test"
},
{
"country": "CA",
"id": "ab12cd34ef56ab12cd34ef56ab12cd39",
"name": "Moneris Onlinetransfer"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd40",
"internationalCode": " ",
"name": "MoneyBookers Test",
"nationalCode": " "
},
{
"country": "CY",
"id": "ab12cd34ef56ab12cd34ef56ab12cd41",
"name": "Moneysafe"
},
{
"country": "UK",
"id": "ab12cd34ef56ab12cd34ef56ab12cd42",
"internationalCode": " ",
"name": "Neteller Demo"
},
{
"country": "SA",
"id": "ab12cd34ef56ab12cd34ef56ab12cd43",
"internationalCode": " ",
"name": "ONECARD"
},
{
"country": "AU",
"id": "ab12cd34ef56ab12cd34ef56ab12cd44",
"name": "POLi test"
},
{
"country": "CH",
"id": "ab12cd34ef56ab12cd34ef56ab12cd45",
"name": "POSTFINANCE_EPAY CI"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd46",
"internationalCode": " ",
"name": "PayPal Test"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd47",
"internationalCode": " ",
"name": "PayTrail test"
},
{
"country": "AT",
"id": "ab12cd34ef56ab12cd34ef56ab12cd48",
"name": "Paybox"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd49",
"internationalCode": " ",
"name": "Paydirekt demo CI"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd50",
"name": "Payolution Test"
},
{
"country": "AT",
"id": "ab12cd34ef56ab12cd34ef56ab12cd51",
"internationalCode": " ",
"name": "Paysafecard PSC"
},
{
"country": "ES",
"id": "ab12cd34ef56ab12cd34ef56ab12cd52",
"internationalCode": " ",
"name": "Payvision V2"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd53",
"internationalCode": " ",
"name": "Postbank ELV SEPA",
"nationalCode": " "
},
{
"country": "CH",
"id": "ab12cd34ef56ab12cd34ef56ab12cd54",
"name": "Postfinance Demo CI"
},
{
"country": "PL",
"id": "ab12cd34ef56ab12cd34ef56ab12cd55",
"name": "Przelewy Test"
},
{
"country": "RU",
"id": "ab12cd34ef56ab12cd34ef56ab12cd56",
"internationalCode": " ",
"name": "Qiwi Test"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd57",
"internationalCode": " ",
"name": "SOFORT-Banking_Test"
},
{
"country": "IR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd58",
"internationalCode": " ",
"name": "Shetab Primeiropay Demo"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd59",
"name": "Starfinanz GIROPAY_SEPA"
},
{
"country": "SK",
"id": "ab12cd34ef56ab12cd34ef56ab12cd60",
"internationalCode": " ",
"name": "TRUSTPAY_VA"
},
{
"country": "CN",
"id": "ab12cd34ef56ab12cd34ef56ab12cd61",
"internationalCode": " ",
"name": "TenPay"
},
{
"country": "DE",
"id": "ab12cd34ef56ab12cd34ef56ab12cd62",
"internationalCode": " ",
"name": "Trustly Demo"
},
{
"country": "GB",
"id": "ab12cd34ef56ab12cd34ef56ab12cd63",
"name": "UKASH Demo"
},
{
"country": "RU",
"id": "ab12cd34ef56ab12cd34ef56ab12cd64",
"name": "YANDEX_Test"
},
{
"country": "BR",
"id": "ab12cd34ef56ab12cd34ef56ab12cd65",
"name": "allpago Alternatives"
},
{
"country": "NL",
"id": "ab12cd34ef56ab12cd34ef56ab12cd66",
"name": "iDeal_ING_SEPA"
}
]
}Division-level operations
/psps/{pspId}/divisions/entities/byName/{pspName}/divisions/divisions/{divisionId}/divisions/{divisionId}/psps/{pspId}/divisions/divisions/{divisionId}Add Division
The call adds a new division.
Endpoints
/psps/{pspId}/divisions/entities/byName/{pspName}/divisionsURL parameters
pspIdrequired for option 1[a-f 0-9]32pspNamerequired for option 2[A-Z a-z 0-9], [-_ ]256Data parameters
namerequired[A-Z a-z 0-9], [-_]32customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
id[a-f 0-9]32divisionInfocustomerId[A-Za-z 0-9], [-_ ]32description[A-Za-z 0-9], [-_ ]50pspId[a-f 0-9]32name[A-Z a-z 0-9], [-_]256stateError response
/psps/{pspId}/divisions/entities/byName/{pspName}/divisionsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/divisions' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=New_Test_Division' \
--data-urlencode 'state=INTEGRATOR_TEST' \
--data-urlencode 'description=For testing purposes'Response samples
{
"divisionInfo": {
"description": "First_test_Division",
"id": "ab12cd34ef56ab12cd34ef56ab12cd67",
"name": "moapi_Division_1",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
},
"id": "ab12cd34ef56ab12cd34ef56ab12cd67"
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'description' is only allowed to contain the characters [A-Za-z0-9_- ]."
}
}Get Division
The call gets the information about an existing division.
Endpoints
/divisions/{divisionId}URL parameters
divisionIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
divisionInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256pspId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50Error response
/divisions/{divisionId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/divisions/{divisionId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"divisionInfo": {
"description": "First_test_Division",
"id": "ab12cd34ef56ab12cd34ef56ab12cd67",
"name": "moapi_Division_1",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd69"
}
}Edit Division
The call allows editing the information for an existing division.
Endpoints
/divisions/{divisionId}URL parameters
divisionIdrequired[a-f 0-9]32Data parameters
If the request is submitted with parameters set to empty spaces, for example name=<single space>, this will delete the previous values and leave the fields blank.
The parameters not included in the request are not changed. To avoid nullifying valid values, skip the parameters that do not require an update.
namerequired[A-Z a-z 0-9], [-_]32customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
divisionInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256pspId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50Error response
/divisions/{divisionId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/divisions/{divisionId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=New_Name' \
--data-urlencode 'state=DISABLED' \
--data-urlencode 'description=Updated description'Response samples
{
"divisionInfo": {
"description": "First_test_Division",
"id": "ab12cd34ef56ab12cd34ef56ab12cd67",
"name": "moapi_Division_0",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
},
"id": "ab12cd34ef56ab12cd34ef56ab12cd67"
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' must be between 1 and 100 characters long."
}
}Get Divisions List
The call lists the information about existing divisions.
Endpoints
/psps/{pspId}/divisionsURL parameters
pspIdrequired[a-f 0-9]32Data parameters
No parameters required.
Success response
divisionInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256pspId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50Error response
/psps/{pspId}/divisionsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/divisions' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"divisions": [
{
"customerId": "id",
"description": "A",
"id": "ab12cd34ef56ab12cd34ef56ab12cd70",
"name": "moapi_division",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
},
{
"customerId": "id",
"description": "A",
"id": "ab12cd34ef56ab12cd34ef56ab12cd71",
"name": "moapi_division_test",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
},
{
"description": "First_test_Division",
"id": "ab12cd34ef56ab12cd34ef56ab12cd67",
"name": "moapi_Division_0",
"pspId": "ab12cd34ef56ab12cd34ef56ab12cd68",
"state": "LIVE"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd04"
}
}Delete Division
The call sets the state of an existing division to ‘DISABLED’.
It is not possible to delete a division.
Endpoints
/divisions/{divisionId}URL parameters
divisionIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
Error response
/divisions/{divisionId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/divisions/{divisionId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{}Merchant-level operations
/divisions/{divisonId}/merchants/entities/byName/{pspName}/{divisionName}/merchants/merchants/{merchantId}/merchants/{merchantId}/divisions/{divisionId}/merchants/psps/{pspId}/merchants/merchants/{merchantId}Add Merchant
The call adds a new merchant.
Endpoints
/divisions/{divisionId}/merchants/entities/byName/{pspName}/{divisionName}/merchantsURL parameters
divisionIdrequired for option 1[a-f 0-9]32pspNamerequired for option 2[A-Z a-z 0-9], [-_]256divisionNamerequired for option 2[A-Z a-z 0-9], [-_]32Data parameters
namerequired[A-Z a-z 0-9], [-_]256customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
merchantInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256divisionId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50secretError response
/divisions/{divisionId}/merchants/entities/byName/{pspName}/{divisionName}/merchantsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/divisions/{divisionId}/merchants' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=New_Test_Merchant' \
--data-urlencode 'state=INTEGRATOR_TEST' \
--data-urlencode 'description=A new merchant'Response samples
{
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"merchantInfo": {
"description": "test_Merchant_1",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"name": "moapi_merchant_0",
"secret": "<secret>",
"state": "LIVE"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'state' is invalid. Only these, case-insensitive, options are allowed: disabled, live, integrator_test, connector_test."
}
}Get Merchant
The call gets information about an existing merchant.
Endpoints
/merchants/{merchantId}URL parameters
merchantIdrequired[a-f 0-9]32Data parameters
No parameters required.
Success response
merchantInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256divisionId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50secretError response
/merchants/{merchantId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"merchantInfo": {
"description": "test_Merchant_1",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"name": "moapi_merchant_0",
"secret": "<secret>",
"state": "LIVE"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd73"
}
}Edit Merchant
The call edits the information for an existing merchant.
Endpoints
/merchants/{merchantId}URL parameters
merchantIdrequired[a-f 0-9]32Data parameters
If the request is submitted with parameters set to empty spaces, for example, name=<single space>, this deletes the previous values and leaves the fields blank.
The parameters not included in the request are not changed. To avoid nullifying valid values, skip parameters that do not require an update.
namerequired[A-Z a-z 0-9], [-_]32customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
merchantInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256divisionId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50secretError response
/merchants/{merchantId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=New_Merchant_Name' \
--data-urlencode 'state=INTEGRATOR_TEST' \
--data-urlencode 'description=A new description'Response samples
{
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"merchantInfo": {
"description": "test_Merchant_0",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"name": "moapi_merchant_0",
"secret": "<secret>",
"state": "LIVE"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'description' is only allowed to contain the characters [A-Za-z0-9_- ]."
}
}Get Merchants List
The call allows listing information about existing merchants.
Endpoints
/divisions/{divisionId}/merchants/psps/{pspId}/merchantsURL parameters
divisionIdrequired for option 1[a-f 0-9]32pspIdrequired for option 2[a-f 0-9]32Data parameters
No parameters required.
Success response
merchantInfoid[a-f 0-9]32name[A-Z a-z 0-9], [-_]256divisionId[a-f 0-9]32statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Za-z0-9], [-_ ]50secretError response
/divisions/{divisionId}/merchants/psps/{pspId}/merchantsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/divisions/{divisionId}/merchants' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"merchants": [
{
"description": "test_Merchant_4",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd74",
"name": "moapi_merchant_4",
"secret": "<secret>",
"state": "LIVE"
},
{
"description": "test_Merchant_3",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd75",
"name": "moapi_merchant_3",
"secret": "<secret>",
"state": "LIVE"
},
{
"description": "test_Merchant_2",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd76",
"name": "moapi_merchant_2",
"secret": "<secret>",
"state": "LIVE"
},
{
"description": "test_Merchant_1",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd72",
"name": "moapi_merchant_0",
"secret": "<secret>",
"state": "LIVE"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd68"
}
}Delete Merchant
The call sets the state of an existing merchant to ‘DISABLED’.
It is not possible to delete a merchant.
Endpoints
/merchants/{merchantId}URL parameters
merchantIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
Error response
/merchants/{merchantId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"merchantInfo": {
"description": "test_Merchant_4",
"divisionId": "ab12cd34ef56ab12cd34ef56ab12cd67",
"id": "ab12cd34ef56ab12cd34ef56ab12cd74",
"name": "moapi_merchant_4",
"secret": "<secret>",
"state": "DISABLED"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd77"
}
}Channel-level operations
/merchants/{merchantId}/channels/entities/byName/{pspName}/{divisionName}/{name}/channels/channels/{channelId}/channels/{channelId}/merchants/{merchantId}/channels/channels/{channelId}Add Channel
The call adds a new channel.
Endpoints
/merchants/{merchantId}/channels/entities/byName/{pspName}/{divisionName}/{name}/channelsURL parameters
merchantIdrequired for option 1[a-f 0-9]32pspNamerequired for option 2[A-Z a-z 0-9], [-_]256divisionNamerequired for option 2[A-Z a-z 0-9], [-_]32namerequired for option 2[A-Za-z0-9], [-_]32Data parameters
namerequired[A-Z a-z 0-9], [-_]32customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
id[a-f 0-9]32accessTokenchannelInfotypechannel[a-f 0-9]32sender[a-f 0-9]32secretlogin[a-f 0-9]32pwd[A-Z a-z 0-9]24statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Z a-z 0-9], [-_ ]50Error response
errormessage/merchants/{merchantId}/channels/entities/byName/{pspName}/{divisionName}/{name}/channelsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/channels' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=Test_Channel_Name' \
--data-urlencode 'state=INTEGRATOR_TEST' \
--data-urlencode 'description=Channel description'Response samples
{
"channelInfo": {
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd78",
"description": "moapi_Channel_1",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_0",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
},
"id": "ab12cd34ef56ab12cd34ef56ab12cd78"
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' is required."
}
}Get Channel
The call gets information about an existing channel.
Endpoints
/channels/{channelId}URL parameters
channelIdrequired[a-f 0-9]32Data parameters
No parameters required.
Success response
id[a-f 0-9]32channelInfotypechannel[a-f 0-9]32sender[a-f 0-9]32secretlogin[a-f 0-9]32pwd[A-Z a-z 0-9]24statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Z a-z 0-9], [-_ ]50Error response
/channels/{channelId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"channelInfo": {
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd78",
"description": "moapi_Channel_1",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_0",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd80"
}
}Edit Channel
The call edits the information for an existing channel.
Endpoints
/channels/{channelId}URL parameters
channelIdrequired[a-f 0-9]32Data parameters
If the request is submitted with parameters set to empty spaces, for example, name=<single space>, this deletes the previous values and leaves the fields blank.
The parameters not included in the request are not changed. To avoid nullifying valid values, skip the parameters that do not require an update.
namerequired[A-Z a-z 0-9], [-_]32customerIdOptional[A-Z a-z 0-9], [-_ ]32descriptionOptional[A-Z a-z 0-9], [-_ ]50staterequiredSuccess response
id[a-f 0-9]32channelInfotypechannel[a-f 0-9]32sender[a-f 0-9]32secretlogin[a-f 0-9]32pwd[A-Z a-z 0-9]24statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Z a-z 0-9], [-_ ]50Error response
/channels/{channelId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=New_Channel_Name' \
--data-urlencode 'state=INTEGRATOR_TEST' \
--data-urlencode 'description=New channel description'Response samples
{
"channelInfo": {
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd78",
"description": "moapi_Channel_0",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_0",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
},
"id": "ab12cd34ef56ab12cd34ef56ab12cd78"
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' must be between 1 and 100 characters long."
}
}Get Channels List
The call allows listing information about existing channels.
Endpoints
/merchants/{merchantId}/channelsURL parameters
merchantIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
id[a-f 0-9]32channelInfotypechannel[a-f 0-9]32sender[a-f 0-9]32secretlogin[a-f 0-9]32pwd[A-Z a-z 0-9]24statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Z a-z 0-9], [-_ ]50Error response
/merchants/{merchantId}/channelsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/channels' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"channels": [
{
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd78",
"description": "moapi_Channel_1",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_0",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
},
{
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd81",
"description": "moapi_Channel_1",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_1",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
},
{
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd82",
"description": "moapi_Channel_2",
"login": "ab12cd34ef56ab12cd34ef56ab12cd79",
"name": "moapi_Channel_2",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd72",
"state": "LIVE",
"type": "MERCHANT"
}
]
}{
"error": {
"code": "999.999.999",
"message": "Error - Internal error"
}
}Delete Channel
This sets the state of an existing channel to ‘DISABLED’. It is not possible to delete a channel.
Endpoints
/channels/{channelId}URL parameters
channelIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
id[a-f 0-9]32channelInfotypechannel[a-f 0-9]32sender[a-f 0-9]32secretlogin[a-f 0-9]32pwd[A-Z a-z 0-9]24statecustomerId[A-Z a-z 0-9], [-_ ]32description[A-Z a-z 0-9], [-_ ]50Error response
/channels/{channelId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"channelInfo": {
"accessToken": "<access-token>",
"channel": "ab12cd34ef56ab12cd34ef56ab12cd83",
"description": "moapi_Channel_5",
"login": "ab12cd34ef56ab12cd34ef56ab12cd84",
"name": "moapi_Channel_5",
"pwd": "<password>",
"secret": "<secret>",
"sender": "ab12cd34ef56ab12cd34ef56ab12cd74",
"state": "DISABLED",
"type": "MERCHANT"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd85"
}
}Merchant Account operations
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionsid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/merchantAccounts/{merchantAccountId}/merchantAccounts/{merchantAccountId}/merchantAccounts/{merchantAccountId}/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccounts/attachedMerchantAccounts/{attachedMerchantAccountId}/attachedMerchantAccounts/{attachedMerchantAccountId}/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelid}/attachedMerchantAccounts/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelid}/attachedMerchantAccounts/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionsid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelid}/ownedMerchantAccounts/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionsid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelid}/ownedMerchantAccounts/merchantAccounts/{merchantAccountId}+/merchants/*/setting/merchantAccounts/{merchantAccountId}/ebicsAdd Merchant Account
The call adds a Merchant Account. The Merchant Account is uniquely associated with a Clearing Institute. Depending on the Clearing Institute selected, the field mapping will be different for the Merchant Account Configuration.
The complete mapping is presented in 02 Merchant Account Configuration by Clearing Institute. The Merchant Account can be created at PSP, Division or Merchant levels. Then, it can be attached to any other entity, at the desired level. The contact can be attached to the same entity, at the same level, where it was created.
Endpoints
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionsid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelid}/ownedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32Data parameters
name[A-Z a-z 0-9], [-_]256stateclearingInstituteIdclearingInstituteName[a-f 0-9]32iban[A-Z a-z 0-9], [-_ ]32key[A-Z a-z 0-9], [-_ ]500terminalIdanyanypassword[A-Z a-z 0-9], [-_ ]128username[A-Z a-z 0-9], [-_ ]128merchantCategorytransactionCategorycvvInstructioncvvRejectionPolicyavsCheckActiveavsRejectionPolicyavsReviewPolicydebitAdviceProcedurerecurringCodesupports3DSecuremerchant3DNameanyanymerchant3DUrlanyanymerchantIsoCountryCodevisaMerchantId[A-Z]2visaMerchantAcquirerBinmasterMerchantIdmasterMerchantAcquirerBinamexMerchantIdamexMerchantAcquirerBinbcmcMerchantIdbcmcMerchantAcquirerBindinersMerchantIddinersMerchantAcquirerBindinersMerchantPwdjcbMerchantIdjcbMerchantAcquirerBinbankfileGenerationPattern[A-Z a-z 0-9], [-_:@ ]20- Weekly bank files are generated only one time during the selected day of the week.
For example, MONDAY@13:00 UTC will generate one bank file on Monday at 13:00 UTC. - Daily bank files can be generated up to three times a day.
For example,
DAILY@5:00 UTC will generate one bank file daily at 5:00 UTC.
DAILY@5:00 UTC+DAILY@13:00 UTC will generate two bank files daily at 5:00 and 13:00 UTC.
DAILY@5:00 UTC+DAILY@13 UTC+DAILY@18:00 UTC will generate three bank files daily at 5:00, 13:00, and 18:00 UTC.
velocityDispachingActivevelocityDispatchingSetting[A-Z a-z 0-9], [-_; ]32ticketSizeDispatchingActiveticketSizeDispatchingSetting[A-Z a-z 0-9], [-_; ]32recurringDispatchingSettingshopperDispatchingSettingshopperDispatchingScopeshopperDispatchingValiditypaymentDispatchingSettingpendingTimeoutInMins[0-9]pendingForAcquirerTimeoutInMins[0-9]uploadUseruploadPasswordconnectorSpecificParameter.<parameter>[A-Z a-z 0-9], [-_ ]anyvisaAcquirerMerchantIdmasterAcquirerMerchantIdamexAcquirerMerchantIdSuccess response
id[a-f 0-9]32merchantAccountname[A-Z a-z 0-9], [-_]256stateclearingInstitute[A-Z a-z 0-9], [-_ ]32iban[A-Z a-z 0-9], [-_ ]32key[A-Z a-z 0-9], [-_ ]500terminalIdanyanypassword[A-Z a-z 0-9], [-_ ]128username[A-Z a-z 0-9], [-_ ]128merchantId[a-f 0-9]32merchantName[A-Z a-z 0-9], [-_ ]32merchantCategorytransactionCategorycvvInstructioncvvRejectionPolicyavsCheckActiveavsRejectionPolicyavsReviewPolicydebitAdviceProcedurerecurringCOdesupports3DSecuremerchant3DNameanyanymerchant3DUrlanyanymerchantIsoCountryCodevisaMerchantId[A-Z]2visaMerchantAcquirerBinmasterMerchantIdmasterMerchantAcquirerBinamexMerchantIdamexMerchantAcquirerBinbcmcMerchantIdbcmcMerchantAcquirerBindinersMerchantIddinersMerchantAcquirerBindinersMerchantPwdjcbMerchantIdjcbMerchantAcquirerBinbankfileGenerationPattern[A-Z a-z 0-9], [-_ ]20- Weekly bank files are generated only one time during the selected day of the week.
For example, MONDAY@13:00 UTC will generate one bank file on Monday at 13:00 UTC. - Daily bank files can be generated up to three times a day.
For example,
DAILY@5:00 UTC will generate one bank file daily at 5:00 UTC.
DAILY@5:00 UTC+DAILY@13:00 UTC will generate two bank files daily at 5:00 and 13:00 UTC.
DAILY@5:00 UTC+DAILY@13 UTC+DAILY@18:00 UTC will generate three bank files daily at 5:00, 13:00, and 18:00 UTC.
velocityDispachingActivevelocityDispatchingSetting[A-Z a-z 0-9], [-_ ]32ticketSizeDispatchingActiveticketSizeDispatchingSetting[A-Z a-z 0-9], [-_; ]32recurringDispatchingSettingshopperDispatchingSettingshopperDispatchingScopeshopperDispatchingValiditypaymentDispatchingSettingpendingTimeoutInMins[0-9]pendingForAcquirerTimeoutInMins[0-9]uploadUseruploadPasswordconnectorSpecificParameter.<parameter>[A-Z a-z 0-9], [-_ ]anyError response
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionsid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelid}/ownedMerchantAccountsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/ownedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=Test_merchant_account' \
--data-urlencode 'state=TEST' \
--data-urlencode 'clearingInstituteId=ff8081816030b48a016030b49a6c0014' \
--data-urlencode 'iban=TT1234TTT00000000' \
--data-urlencode 'username=testusername' \
--data-urlencode 'password=testpassword' \
--data-urlencode 'merchantCategory=RETAIL' \
--data-urlencode 'transactionCategory=ECOMMERCE' \
--data-urlencode 'avsCheckActive=TRUE' \
--data-urlencode 'avsRejectionPolicy=A' \
--data-urlencode 'avsReviewPolicy=A' \
--data-urlencode 'debitAdviceProcedure=DD' \
--data-urlencode 'recurringCode=NONE' \
--data-urlencode 'supports3DSecure=TRUE' \
--data-urlencode 'merchant3DName=test' \
--data-urlencode 'merchant3DUrl=https://test.com/3d' \
--data-urlencode 'merchantIsoCountryCode=630' \
--data-urlencode 'bankfileGenerationPattern=DAILY@5:00 UTC' \
--data-urlencode 'velocityDispachingActive=TRUE' \
--data-urlencode 'velocityDispatchingSetting=12;11;2;DAY' \
--data-urlencode 'ticketSizeDispatchingActive=TRUE' \
--data-urlencode 'ticketSizeDispatchingSetting=2;10' \
--data-urlencode 'recurringDispatchingSetting=ALL' \
--data-urlencode 'shopperDispatchingSetting=ALL' \
--data-urlencode 'shopperDispatchingScope=PSP' \
--data-urlencode 'shopperDispatchingValidity=10' \
--data-urlencode 'paymentDispatchingSetting=CREDITS' \
--data-urlencode 'uploadUser=uploadUsername' \
--data-urlencode 'uploadPassword=uploadPass' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_CITY=subMerchantCity' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_EMAIL=subMerchantEmail' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_STATE=subMerchantState'Response samples
{
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantAccount": {
"avsCheckActive": "false",
"avsRejectionPolicy": "N",
"avsReviewPolicy": "",
"bankfileGenerationPattern": "",
"clearingInstitute": "Klarna Test",
"connectorSpecificParameter": {
"AD_SUB_MERCHANT_STATE": "subMerchantState",
"AD_SUB_MERCHANT_CITY": "subMerchantCity",
"AD_SUB_MERCHANT_EMAIL": "subMerchantEmail"
},
"cvvInstruction": "CHECK",
"cvvRejectionPolicy": "N",
"debitAdviceProcedure": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantCategory": "",
"name": "moapi_Klarna_MA_1",
"password": "7JyRENbxSreJEYv",
"paymentDispatchingSetting": "ALL",
"recurringCode": "NONE",
"recurringDispatchingSetting": "ALL",
"shopperDispatchingScope": "CHANNEL",
"shopperDispatchingSetting": "ALL",
"shopperDispatchingValidity": "90",
"state": "LIVE",
"ticketSizeDispatchingSetting": "null;null",
"transactionCategory": "ANY",
"username": "129",
"velocityDispachtingActive": "false"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). either a clearingInstituteId or a clearingInstituteName is necessary."
}
}Get Merchant Account
The call gets the information about an existing merchant account.
Endpoints
/merchantAccounts/{merchantAccountId}URL parameters
merchantAccountIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
name[A-Z a-z 0-9], [-_ ]256stateclearingInstitute[A-Z a-z 0-9], [-_ ]32iban[A-Z a-z 0-9], [-_ ]32key[A-Z a-z 0-9], [-_ ]500terminalIdanyanypassword[A-Z a-z 0-9], [-_ ]128username[A-Z a-z 0-9], [-_ ]128merchantCategorytransactionCategorycvvInstructioncvvRejectionPolicyavsCheckActiveavsRejectionPolicyavsReviewPolicydebitAdviceProcedurerecurringCOdesupports3DSecuremerchant3DNameanyanymerchant3DUrlanyanymerchantIsoCountryCodevisaMerchantId[A-Z]2visaMerchantAcquirerBinmasterMerchantIdmasterMerchantAcquirerBinamexMerchantIdamexMerchantAcquirerBinbcmcMerchantIdbcmcMerchantAcquirerBindinersMerchantIddinersMerchantAcquirerBindinersMerchantPwdjcbMerchantIdjcbMerchantAcquirerBinbankfileGenerationPattern[A-Z a-z 0-9], [-_ ]20- Weekly bank files are generated one time during the selected day of the week.
For example, MONDAY@13:00 UTC will generate one bank file on Monday at 13:00 UTC. - Daily bank files can be generated as many as three times a day.
For example:
DAILY@5:00 UTC will generate one bank file daily at 5:00 UTC.
DAILY@5:00 UTC+DAILY@13:00 UTC will generate two bank files daily at 5:00 and 13:00 UTC.
DAILY@5:00 UTC+DAILY@13 UTC+DAILY@18:00 UTC will generate three bank files daily at 5:00, 13:00, and 18:00 UTC.
velocityDispachingActivevelocityDispatchingSetting[A-Z a-z 0-9], [-_ ]32ticketSizeDispatchingActiveticketSizeDispatchingSetting[A-Z a-z 0-9], [-_; ]32recurringDispatchingSettingshopperDispatchingSettingshopperDispatchingScopeshopperDispatchingValiditypaymentDispatchingSettingpendingTimeoutInMins[0-9]pendingForAcquirerTimeoutInMins[0-9]uploadUseruploadPasswordconnectorSpecificParameter.<parameter>[A-Z a-z 0-9], [-_ ]anyvisaAcquirerMerchantIdmasterAcquirerMerchantIdamexAcquirerMerchantIdError response
/merchantAccounts/{merchantAccountId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/merchantAccounts/{merchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantAccount": {
"avsCheckActive": "false",
"avsRejectionPolicy": "N",
"avsReviewPolicy": "",
"bankfileGenerationPattern": "",
"clearingInstitute": "Klarna Test",
"connectorSpecificParameter": {
"AD_SUB_MERCHANT_STATE": "subMerchantState",
"AD_SUB_MERCHANT_CITY": "subMerchantCity",
"AD_SUB_MERCHANT_EMAIL": "subMerchantEmail"
},
"cvvInstruction": "CHECK",
"cvvRejectionPolicy": "N",
"debitAdviceProcedure": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantCategory": "",
"name": "moapi_Klarna_MA_1",
"password": "7JyRENbxSreJEYv",
"paymentDispatchingSetting": "ALL",
"recurringCode": "NONE",
"recurringDispatchingSetting": "ALL",
"shopperDispatchingScope": "CHANNEL",
"shopperDispatchingSetting": "ALL",
"shopperDispatchingValidity": "90",
"state": "LIVE",
"ticketSizeDispatchingSetting": "null;null",
"transactionCategory": "ANY",
"username": "129",
"velocityDispachtingActive": "false"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find merchant account with id : ab12cd34ef56ab12cd34ef56ab12cd87"
}
}Edit Merchant Account
The call edits an existing merchant account.
Endpoints
/merchantAccounts/{merchantAccountId}URL parameters
merchantAccountIdrequired[a-f 0-9]32Data parameters
If the request is submitted with parameters set to empty spaces, for example, terminalIDs=<single space>, the previous value is deleted and the field is blank.
Parameters not included in the request are not changed. To avoid nullifying valid values, skip parameters that do not require an update.
name[A-Z a-z 0-9], [-_ ]256stateclearingInstituteIdclearingInstituteName[a-f 0-9]32iban[A-Z a-z 0-9], [-_ ]32key[A-Z a-z 0-9], [-_ ]500terminalIdanyanypassword[A-Z a-z 0-9], [-_ ]128username[A-Z a-z 0-9], [-_ ]128merchantCategorytransactionCategorycvvInstructioncvvRejectionPolicyavsCheckActiveavsRejectionPolicyavsReviewPolicydebitAdviceProcedurerecurringCodesupports3DSecuremerchant3DNameanyanymerchant3DUrlanyanymerchantIsoCountryCodevisaMerchantId[A-Z]2visaMerchantAcquirerBinmasterMerchantIdmasterMerchantAcquirerBinamexMerchantIdamexMerchantAcquirerBinbcmcMerchantIdbcmcMerchantAcquirerBindinersMerchantIddinersMerchantAcquirerBindinersMerchantPwdjcbMerchantIdjcbMerchantAcquirerBinbankfileGenerationPattern[A-Z a-z 0-9], [-_:@ ]20- Weekly bank files are generated only one time during the selected day of the week.
For example, MONDAY@13:00 UTC will generate one bank file on Monday at 13:00 UTC. - Daily bank files can be generated up to three times a day.
For example,
DAILY@5:00 UTC will generate one bank file daily at 5:00 UTC.
DAILY@5:00 UTC+DAILY@13:00 UTC will generate two bank files daily at 5:00 and 13:00 UTC.
DAILY@5:00 UTC+DAILY@13 UTC+DAILY@18:00 UTC will generate three bank files daily at 5:00, 13:00, and 18:00 UTC.
velocityDispachingActivevelocityDispatchingSetting[A-Z a-z 0-9], [-_; ]32ticketSizeDispatchingActiveticketSizeDispatchingSetting[A-Z a-z 0-9], [-_; ]32recurringDispatchingSettingshopperDispatchingSettingshopperDispatchingScopeshopperDispatchingValiditypaymentDispatchingSettingpendingTimeoutInMins[0-9]pendingForAcquirerTimeoutInMins[0-9]uploadUseruploadPasswordconnectorSpecificParameter.<parameter>[A-Z a-z 0-9], [-_ ]anySuccess response
name[A-Z a-z 0-9], [-_ ]256stateclearingInstitute[A-Z a-z 0-9], [-_ ]32iban[A-Z a-z 0-9], [-_ ]32key[A-Z a-z 0-9], [-_ ]500terminalIdanyanypassword[A-Z a-z 0-9], [-_ ]128username[A-Z a-z 0-9], [-_ ]128merchantCategorytransactionCategorycvvInstructioncvvRejectionPolicyavsCheckActiveavsRejectionPolicyavsReviewPolicydebitAdviceProcedurerecurringCodesupports3DSecuremerchant3DNameanyanymerchant3DUrlanyanymerchantIsoCountryCodevisaMerchantId[A-Z]2visaMerchantAcquirerBinmasterMerchantIdmasterMerchantAcquirerBinamexMerchantIdamexMerchantAcquirerBinbcmcMerchantIdbcmcMerchantAcquirerBindinersMerchantIddinersMerchantAcquirerBindinersMerchantPwdjcbMerchantIdjcbMerchantAcquirerBinbankfileGenerationPattern[A-Z a-z 0-9], [-_ ]20- Weekly bank files are generated one time during the selected day of the week.
For example, MONDAY@13:00 UTC will generate one bank file on Monday at 13:00 UTC. - Daily bank files can be generated as many as three times a day.
For example,
DAILY@5:00 UTC will generate one bank file daily at 5:00 UTC.
DAILY@5:00 UTC+DAILY@13:00 UTC will generate two bank files daily at 5:00 and 13:00 UTC.
DAILY@5:00 UTC+DAILY@13 UTC+DAILY@18:00 UTC will generate three bank files daily at 5:00, 13:00, and 18:00 UTC.
velocityDispachingActivevelocityDispatchingSetting[A-Z a-z 0-9], [-_ ]32ticketSizeDispatchingActiveticketSizeDispatchingSetting[A-Z a-z 0-9], [-_; ]32For example, 2;10
recurringDispatchingSettingshopperDispatchingSettingshopperDispatchingScopeshopperDispatchingValiditypaymentDispatchingSettingpendingTimeoutInMins[0-9]pendingForAcquirerTimeoutInMins[0-9]uploadUseruploadPasswordconnectorSpecificParameter.<parameter>[A-Z a-z 0-9], [-_ ]anyError response
/merchantAccounts/{merchantAccountId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchantAccounts/{merchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'name=Test_merchant_account' \
--data-urlencode 'state=TEST' \
--data-urlencode 'clearingInstituteId=ff8081816030b48a016030b49a6c0014' \
--data-urlencode 'iban=TT1234TTT00000000' \
--data-urlencode 'username=testusername' \
--data-urlencode 'password=testpassword' \
--data-urlencode 'merchantCategory=RETAIL' \
--data-urlencode 'transactionCategory=ECOMMERCE' \
--data-urlencode 'avsCheckActive=TRUE' \
--data-urlencode 'avsRejectionPolicy=A' \
--data-urlencode 'avsReviewPolicy=A' \
--data-urlencode 'debitAdviceProcedure=DD' \
--data-urlencode 'recurringCode=NONE' \
--data-urlencode 'supports3DSecure=TRUE' \
--data-urlencode 'merchant3DName=test' \
--data-urlencode 'merchant3DUrl=https://test.com/3d' \
--data-urlencode 'merchantIsoCountryCode=630' \
--data-urlencode 'bankfileGenerationPattern=DAILY@5:00 UTC' \
--data-urlencode 'velocityDispachingActive=TRUE' \
--data-urlencode 'velocityDispatchingSetting=12;11;2;DAY' \
--data-urlencode 'ticketSizeDispatchingActive=TRUE' \
--data-urlencode 'ticketSizeDispatchingSetting=2;10' \
--data-urlencode 'recurringDispatchingSetting=ALL' \
--data-urlencode 'shopperDispatchingSetting=ALL' \
--data-urlencode 'shopperDispatchingScope=PSP' \
--data-urlencode 'shopperDispatchingValidity=10' \
--data-urlencode 'paymentDispatchingSetting=CREDITS' \
--data-urlencode 'uploadUser=uploadUsername' \
--data-urlencode 'uploadPassword=uploadPass' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_CITY=subMerchantCity' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_EMAIL=subMerchantEmail' \
--data-urlencode 'connectorSpecificParameter.AD_SUB_MERCHANT_STATE=subMerchantState'Response samples
{
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantAccount": {
"avsCheckActive": "false",
"avsRejectionPolicy": "N",
"avsReviewPolicy": "",
"bankfileGenerationPattern": "",
"clearingInstitute": "Klarna Test",
"connectorSpecificParameter": {
"AD_SUB_MERCHANT_STATE": "subMerchantState",
"AD_SUB_MERCHANT_CITY": "subMerchantCity",
"AD_SUB_MERCHANT_EMAIL": "subMerchantEmail"
},
"cvvInstruction": "CHECK",
"cvvRejectionPolicy": "N",
"debitAdviceProcedure": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"merchantCategory": "",
"name": "moapi_Klarna_MA_0",
"password": "7JyRENbxSreJEYv",
"paymentDispatchingSetting": "ALL",
"recurringCode": "NONE",
"recurringDispatchingSetting": "ALL",
"shopperDispatchingScope": "CHANNEL",
"shopperDispatchingSetting": "ALL",
"shopperDispatchingValidity": "90",
"state": "LIVE",
"ticketSizeDispatchingSetting": "null;null",
"transactionCategory": "ANY",
"username": "129",
"velocityDispachtingActive": "false"
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find merchant account with id : ab12cd34ef56ab12cd34ef56ab12cd87"
}
}Delete Merchant Account
The call sets the state of an existing merchant account to ‘DISABLED’.
It is not possible to delete a merchant account.
Endpoints
/merchantAccounts/{merchantAccountId}URL parameters
merchantAccountIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
No response body.
Error response
/merchantAccounts/{merchantAccountId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/merchantAccounts/{merchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{
"error": {
"code": "200.300.406",
"message": "Unable to find merchant account with id : ab12cd34ef56ab12cd34ef56ab12cd88"
}
}Attach Merchant Account
The call allows to attachment of a merchant account to the desired entity.
The merchant account can be created at one level and then attached to another entity at another level.
Endpoints
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
merchantAccountId[A-Z a-z 0-9], [-_ ]32fallbackMerchantAccountIdOptional[A-Z a-z 0-9], [-_ ]32processTransactionsWithoutBinIdentificationOptionaltrue or falsecurrency[A-Z]binCountryLimit[A-Z], [;]binRangeLimit[0-9]For example, “420000:440000;510000:520000” or “000000:999999” or “” or “42000000:44000000;51000000:52000000” or “00000000:99999999”
subTypesclearingInstituteIdclearingInstituteName[a-f 0-9]32customDescriptor1 customDescriptor2 customDescriptor3Optional[A-Z a-z 0-9], [-_ ]selectionDescriptor1 selectionDescriptor2 selectionDescriptor3Optional[A-Z a-z 0-9], [-_ ]Success response
attachedMerchantAccountid[A-Z a-z 0-9], [-_ ]32currency[A-Z]binCountryLimit[A-Z]binRangeLimit[0-9]For example, “420000:440000;510000:520000” or “000000:999999” or “” or “42000000:44000000;51000000:52000000” or “00000000:99999999”
processTransactionsWithoutBinIdentificationtrue or falsesubTypesclearingInstitute[A-Z a-z 0-9], [-_ ]32descriptor[A-Z a-z 0-9], [-_ ]255Error response
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/attachedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'merchantAccountId=ff8081816953558101695716b6c70014' \
--data-urlencode 'fallbackMerchantAccountId=ff8081817ad3d41d017ad3d45370010a' \
--data-urlencode 'currency=EUR' \
--data-urlencode 'binCountryLimit=DE;RO;US' \
--data-urlencode 'binRangeLimit=000000:999999' \
--data-urlencode 'processTransactionsWithoutBinIdentification=true' \
--data-urlencode 'subTypes=VISA' \
--data-urlencode 'clearingInstituteId=ff8081816030b48a016030b49a6c0014' \
--data-urlencode 'customDescriptor1=AAA' \
--data-urlencode 'customDescriptor2=BBB' \
--data-urlencode 'customDescriptor3=CCC' \
--data-urlencode 'selectionDescriptor1=CHANNEL_NAME' \
--data-urlencode 'selectionDescriptor2=INVOICE_ID' \
--data-urlencode 'selectionDescriptor3=TRANSACTION_ID'Response samples
{
"attachedMerchantAccount": {
"binCountryLimit": "",
"binRangeLimit": "",
"clearingInstitute": "Klarna Test",
"currency": "EUR",
"descriptor": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd89",
"merchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd86",
"processTransactionsWithoutBinIdentification": false,
"subTypes": "VISA"
},
"id": "ab12cd34ef56ab12cd34ef56ab12cd89"
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'subTypes' is required."
}
}Edit Attached Merchant Account
The call edits an attached merchant account.
Endpoints
/attachedMerchantAccounts/{attachedMerchantAccountId}URL parameters
attachedMerchantAccountIdrequired[a-f 0-9]32Data parameters
merchantAccountId[a-f 0-9]32fallbackMerchantAccountId[a-f 0-9]32processTransactionsWithoutBinIdentificationOptionaltrue or falsecurrency[A-Z]binCountryLimit[A-Z], [;]binRangeLimit[0-9]subTypesclearingInstituteIdclearingInstituteName[a-f 0-9]32customDescriptor1 customDescriptor2 customDescriptor3Optional[A-Z a-z 0-9], [-_ ]selectionDescriptor1 selectionDescriptor2 selectionDescriptor3Optional[A-Z a-z 0-9], [-_ ]Success response
attachedMerchantAccountid[A-Z a-z 0-9], [-_ ]32currency[A-Z]binCountryLimit[A-Z], [;]binRangeLimit[0-9], [:;]processTransactionsWithoutBinIdentificationtrue or falsesubTypesclearingInstitute[A-Z a-z 0-9], [-_ ]32descriptor[A-Z a-z 0-9], [-_ ]255Error response
/attachedMerchantAccounts/{attachedMerchantAccountId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/attachedMerchantAccounts/{attachedMerchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'merchantAccountId=ff8081816953558101695716b6c70014' \
--data-urlencode 'fallbackMerchantAccountId=ff8081817ad3d41d017ad3d45370010a' \
--data-urlencode 'currency=EUR' \
--data-urlencode 'binCountryLimit=DE;RO;US' \
--data-urlencode 'binRangeLimit=000000:999999' \
--data-urlencode 'processTransactionsWithoutBinIdentification=true' \
--data-urlencode 'subTypes=VISA' \
--data-urlencode 'clearingInstituteId=ff8081816030b48a016030b49a6c0014' \
--data-urlencode 'customDescriptor1=AAA' \
--data-urlencode 'customDescriptor2=BBB' \
--data-urlencode 'customDescriptor3=CCC' \
--data-urlencode 'selectionDescriptor1=CHANNEL_NAME' \
--data-urlencode 'selectionDescriptor2=INVOICE_ID' \
--data-urlencode 'selectionDescriptor3=TRANSACTION_ID'Response samples
{
"id": "1200818141111c3klq1f8410103f4064",
"attachedMerchantAccount": {
"id": "1200818141111c3klq1f8410103f4064",
"processTransactionsWithoutBinIdentification": false,
"currency": "EUR",
"binCountryLimit": "DE;NL",
"binRangeLimit": "420000:440000",
"subTypes": "VISA",
"clearingInstitute": "MyCI",
"descriptor": ""
}
}{
"error": {
"code": "200.300.406",
"message": "Unable to find attached merchant account with id : ab12cd34ef56ab12cd34ef56ab12cd90"
}
}Detach Merchant Account
The call detaches an attached merchant account.
Endpoints
/attachedMerchantAccounts/{attachedMerchantAccountId}URL parameters
attachedMerchantAccountIdrequired[a-f 0-9]32Data parameters
No parameters are required.
Success response
No response body.
Error response
/attachedMerchantAccounts/{attachedMerchantAccountId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/attachedMerchantAccounts/{attachedMerchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{}Get Attached Merchant Account list
The call lists the information about merchant accounts that are attached to a specific entity. Do not confuse with 09 Get Owned Merchant Account list.
The call Get Attached Merchant Account list is getting the merchant accounts that are attached to an entity, but might have been created under a different entity.
Endpoints
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters are required
Success response
attachedMerchantAccountfallbackMerchantAccountIdid[A-Z a-z 0-9], [-_ ]32currency[A-Z]binCountryLimit[A-Z]binRangeLimit[0-9]processTransactionsWithoutBinIdentificationtrue or falsesubTypesclearingInstitute[A-Z a-z 0-9], [-_ ]32descriptor[A-Z a-z 0-9], [-_ ]255Error response
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/attachedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"attachedMerchantAccounts": [
{
"binCountryLimit": "",
"binRangeLimit": "",
"clearingInstitute": "Klarna Test",
"currency": "EUR",
"descriptor": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd89",
"merchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd86",
"processTransactionsWithoutBinIdentification": false,
"subTypes": "VISA"
},
{
"binCountryLimit": "",
"binRangeLimit": "",
"clearingInstitute": "Klarna Test",
"currency": "EUR",
"descriptor": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd91",
"merchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd92",
"processTransactionsWithoutBinIdentification": false,
"subTypes": "VISA"
},
{
"binCountryLimit": "",
"binRangeLimit": "",
"clearingInstitute": "Klarna Test",
"currency": "EUR",
"descriptor": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd93",
"merchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd86",
"processTransactionsWithoutBinIdentification": false,
"subTypes": "VISA"
},
{
"binCountryLimit": "",
"binRangeLimit": "",
"clearingInstitute": "Klarna Test",
"currency": "EUR",
"descriptor": "",
"id": "ab12cd34ef56ab12cd34ef56ab12cd94",
"merchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd90",
"processTransactionsWithoutBinIdentification": false,
"fallbackMerchantAccountId": "ab12cd34ef56ab12cd34ef56ab12cd86",
"subTypes": "VISA"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd95"
}
}Get Owned Merchant Account list
The call lists the information about all merchant accounts that were created or attached at the level of a specific entity. Do not confuse with the Get Attached Merchant Account list.
The call Get Owned Merchant Account list is getting the merchant accounts that were created at the level of a specific entity but might have been attached to a different entity, and the merchant accounts that were attached to this specific entity.
Endpoints
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelId}/ownedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters are required
Success response
id[a-f 0-9]32name[A-Z a-z 0-9], [-_ ]256clearingInstitute[A-Z a-z 0-9], [-_ ]32See 03 Clearing Institute operations for the list of operations and the merchant account configuration per clearing institute.
supports3DSecureError response
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelId}/ownedMerchantAccountsRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/psps/{pspId}/ownedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"merchantAccounts": [
{
"clearingInstitute": "Klarna Test",
"id": "ab12cd34ef56ab12cd34ef56ab12cd90",
"name": "moapi_Klarna_MA_2"
},
{
"clearingInstitute": "Klarna Test",
"id": "ab12cd34ef56ab12cd34ef56ab12cd92",
"name": "moapi_Klarna_MA_3"
},
{
"clearingInstitute": "Klarna Test",
"id": "ab12cd34ef56ab12cd34ef56ab12cd96",
"name": "moapi_Klarna_MA_4"
},
{
"clearingInstitute": "Klarna Test",
"id": "ab12cd34ef56ab12cd34ef56ab12cd86",
"name": "moapi_Klarna_MA_0"
}
]
}{
"error": {
"code": "200.300.406",
"message": "Unable to find entity (e.g. division, merchant, or channel) with id : ab12cd34ef56ab12cd34ef56ab12cd04"
}
}3D Secure setup
The 3D Secure setup requires executing two calls in sequence.
Endpoints
/merchantAccounts/{merchantAccountId}/merchants/{merchantid}/settingURL parameters
merchantAccountIdrequired[a-f 0-9]32Data parameters
/merchantAccounts/{merchantAccountId}supports3DSecurerequiredtrue/falsebooleanmerchant3DNamerequiredmerchant3DUrlrequiredmerchantIsoCountryCoderequiredmerchant3DIdrequiredmerchant3DCategoryrequiredVisa configurationvisaAcquirerMerchantIdvisaMerchantAcquirerBin_v2requiredvisaRequestorId_v2requiredvisaRequestorNamerequiredMasterCard configurationmasterAcquirerMerchantIdmasterMerchantAcquirerBin_v2requiredmasterRequestorId_v2requiredmasterRequestorNamerequiredAmerican Express configurationamexAcquirerMerchantIdamexMerchantAcquirerBin_v2requiredamexRequestorId_v2requiredamexRequestorNamerequiredDiners configurationdinersMerchantIdrequireddinersMerchantAcquirerBin_v2requireddinersRequestorId_v2requireddinersRequestorNamerequiredBCMC configurationbcmcMerchantAcquirerBin_v2requiredbcmcRequestorId_v2requiredbcmcRequestorNamerequiredJCB configurationjcbMerchantAcquirerBin_v2jcbRequestorId_v2jcbRequestorNameCashlinkMalta configurationcashlinkMaltaMerchantAcquirerBin_v2requiredcashlinkMaltaRequestorId_v2requiredcashlinkMaltaRequestorNamerequired/merchants/*/settingkeyrequiredvaluerequired- None
- No 3DSecure
- 3DSecure
- 3DSecurePassThrough
Success response
merchantAccountId[a-f 0-9]32to be addedError response
/merchantAccounts/{merchantAccountId}/merchants/{merchantid}/settingRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchantAccounts/{merchantAccountId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'supports3DSecure=TRUE' \
--data-urlencode 'merchant3DName=Merchant 3D name' \
--data-urlencode 'merchant3DUrl=https://test.com/3d' \
--data-urlencode 'merchantIsoCountryCode=630' \
--data-urlencode 'visaMerchantId=12345' \
--data-urlencode 'visaMerchantAcquirerBin=4200' \
--data-urlencode 'masterMerchantId=654321' \
--data-urlencode 'masterMerchantAcquirerBin=5200'Response samples
{
"key": "*/type:entity/module:ctpe/processing:risk/risk:threeDSecure/config:threeDType",
"value": "3DSecure"
}Generate EBICS PDF file
The call generates an EBICS PDF to receive the link for a chosen merchant account. Before executing the call, make sure the merchant account is working with EBICS.
Use the method GET to request the PDF URL without changing the settings for the three parameters listed in the Data Parameters table.
Endpoints
/merchantAccounts/{merchantAccountId}/ebicsURL parameters
merchantAccountIdrequired[a-f 0-9]32Data parameters
initializerequiredtrue/falseBooleandtausActivatedConditionaltrue/falseBooleanIf this parameter is sent with the value "true", then the PDF URL is returned unsigned.
mt940ActivatedConditionaltrue/falseBooleanIf this parameter is sent with the value "true", then the PDF URL is returned unsigned.
Success response
ebicstrue/falseBooleaninitializedtrue/falseBooleandtausActivatedtrue/falseBooleanmt940Activatedtrue/falseBooleanpdfURLthe URLBooleanError response
/merchantAccounts/{merchantAccountId}/ebicsResponse samples
{
"ebics": {
"initialized": "true",
"dtausActivated": "false",
"mt940Activated": "false",
"pdfURL": "…"
}
}{}Detach All Attached Merchant Accounts
The call detaches all merchant accounts that are attached to a specific entity.
Endpoints
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters required
Success response
No response body
Error response
/psps/{pspid}/attachedMerchantAccounts/divisions/{divisionid}/attachedMerchantAccounts/merchants/{merchantid}/attachedMerchantAccounts/channels/{channelId}/attachedMerchantAccountsRequest sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/attachedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{
"error": {
"message": "Unauthorized - Invalid credentials"
}
}Delete All Owned Merchant Accounts
The call deletes all owned merchant accounts that are created for a specific entity.
Endpoints
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelId}/ownedMerchantAccountsURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
No parameters required
Success response
Error response
/psps/{pspid}/ownedMerchantAccounts/divisions/{divisionid}/ownedMerchantAccounts/merchants/{merchantid}/ownedMerchantAccounts/channels/{channelId}/ownedMerchantAccountsRequest sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/ownedMerchantAccounts' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{
"error": {
"code": "999.999.999",
"message": "Merchant account still has usages. Unable to delete merchant account with id : ab12cd34ef56ab12cd34ef56ab12cd97"
}
}RiRo settings operations
/psps/{pspid}/setting/divisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/setting/psps/{pspid}/setting/divisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/settingGet RiRo setting value
The call views the RiRo settings. Check the Keys for configuring RiRo settings for the complete list of keys.
Endpoints
psps/{pspid}/settingdivisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/settingURL parameters
pspIdrequired[a-f 0-9]32divisionIdrequired[a-f 0-9]32merchantIdrequired[a-f 0-9]32channelIdrequired[a-f 0-9]32Data parameters
keyrequiredSuccess response
keyvalueTypevalueError response
psps/{pspid}/settingdivisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/settingRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/setting?key=%2A/type:entity/module:frontend/processing:frontend/frontend:DD/DD:active' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"key": "*/type:entity/module:frontend/processing:frontend/frontend:CC/CC:active",
"value": ""
}{
"error": {
"code": "200.300.404",
"message": "Parameter 'key' not valid or missing."
},
"key": ""
}Update RiRo setting value
The call allows modification of the RiRo settings. Check the Keys for configuring RiRo settings for the complete list of keys.
Endpoints
psps/{pspid}/settingdivisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/settingURL parameters
pspIdrequired[a-f 0-9]32divisionIdrequired[a-f 0-9]32merchantIdrequired[a-f 0-9]32channelIdrequired[a-f 0-9]32Data parameters
keyrequiredvaluerequiredSuccess response
keyvalueTypevalueError response
psps/{pspid}/settingdivisions/{divisionsid}/settingmerchants/{merchantId}/settingchannels/{channelid}/settingRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/setting' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'key=*/type:entity/module:frontend/processing:frontend/frontend:DD/DD:active' \
--data-urlencode 'value=false'Response samples
{
"key": "*/type:entity/module:frontend/processing:frontend/frontend:CC/CC:active",
"value": "false"
}{
"error": {
"code": "200.300.404",
"message": "Parameter 'value' not valid. It must be either 'true' or 'false', case-insensitive."
},
"key": "*/type:entity/module:frontend/processing:frontend/frontend:CC/CC:active",
"value": "disabled"
}API Tokens operations
merchants/{merchantId}/apiTokensapiTokens/{apiTokenId}merchants/{merchantId}/apiTokensapiTokens/{apiTokenId}/suspendapiTokens/{apiTokenId}/activateapiTokens/{apiTokenId}apiTokens/{apiTokenId}Get API Token List for Merchant
The call lists the information about all API Tokens that were created at the merchant specified by merchant id.
Endpoints
merchants/{merchantId}/apiTokensURL parameters
merchantIdrequired[a-f 0-9]32Data parameters
No parameters are required
Success response
apiTokensid[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9]*5,=6lastUsedTimeYYYY-MM-DD HH:mm:ssstateACTIVE/SUSPENDED/DELETEDError response
merchants/{merchantId}/apiTokensRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/apiTokens' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"apiTokens": [
{
"alias": "opp_merchant_XML",
"createdTime": "2017-07-24 08:38:03",
"id": "ab12cd34ef56ab12cd34ef56ab12cd98",
"lastDigits": "R5NzI=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
},
{
"alias": "SYSTEM_OPP_Merchant_2",
"createdTime": "2026-02-24 17:31:07",
"id": "ab12cd34ef56ab12cd34ef56ab12cd99",
"lastDigits": "lDYmg=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
},
{
"alias": "SYSTEM_OPP_Merchant_4",
"createdTime": "2026-03-05 15:50:42",
"id": "ab12cd34ef56ab12cd34ef56ab12cd100",
"lastDigits": "UyREA=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
},
{
"alias": "SYSTEM_OPP_Merchant_1",
"createdTime": "2026-02-24 10:01:57",
"id": "ab12cd34ef56ab12cd34ef56ab12cd101",
"lastDigits": "pRUlU=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
},
{
"alias": "SYSTEM_OPP_Merchant_3",
"createdTime": "2026-03-04 13:55:59",
"id": "ab12cd34ef56ab12cd34ef56ab12cd102",
"lastDigits": "hIVWQ=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
}
]
}{
"result": {
"code": "200.300.406",
"description": "Page not found",
"timestamp": "2026-03-09 13:54:39"
},
"buildNumber": "20141216-153400.r1.static",
"ndc": "4s5fktukd7scerjk3zgowtbjtqo3ssxf"
}Get API Token
The call provides the information about the API token specified by ID.
Endpoints
/apiTokens/{apiTokenId}URL parameters
apiTokenIdrequired[a-f 0-9]32Data parameters
No parameters are required
Success response
id[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9]*5,=6lastUsedTimeYYYY-MM-DD HH:mm:ssstateACTIVE/SUSPENDED/DELETEDError response
/apiTokens/{apiTokenId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/apiTokens/{apiTokenId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"apiToken": {
"alias": "opp_merchant_XML",
"createdTime": "2017-07-24 08:38:03",
"id": "ab12cd34ef56ab12cd34ef56ab12cd98",
"lastDigits": "R5NzI=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
}
}{
"result": {
"code": "200.300.406",
"description": "Page not found",
"timestamp": "2026-03-09 13:54:39"
},
"buildNumber": "20141216-153400.r1.static",
"ndc": "4s5fktukd7scerjk3zgowtbjtqo3ssxf"
}Create API Token for Merchant
The call adds a new api token for a merchant
Endpoints
/merchants/{merchantId}/apiTokensURL parameters
merchantIdrequired[a-f 0-9]32Data parameters
No body
Success response
id[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40apiBearerToken[A-Z a-z 0-9 =]createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9 =]6lastUsedTimeYYYY-MM-DD HH:mm:ssstateACTIVE/SUSPENDED/DELETEDError response
errormessage/merchants/{merchantId}/apiTokensRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/merchants/{merchantId}/apiTokens' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"apiToken": {
"alias": "SYSTEM_OPP_Merchant_6",
"apiBearerToken": "<api-bearer-token>",
"createdTime": "2026-03-23 09:21:23",
"id": "ab12cd34ef56ab12cd34ef56ab12cd103",
"lastDigits": "JMTUs=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
}
}Suspend API Token
The call suspend an api token
Endpoints
apiTokens/{apiTokenId}/suspendURL parameters
apiTokenIdrequired[a-f 0-9]32Data parameters
No body
Success response
id[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9]*5,=6lastUsedTimeYYYY-MM-DD HH:mm:ssstateSUSPENDEDError response
errormessageapiTokens/{apiTokenId}/suspendRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/apiTokens/{apiTokenId}/suspend' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"apiToken": {
"alias": "SYSTEM_OPP_Merchant_6",
"createdTime": "2026-03-23 09:21:23",
"id": "ab12cd34ef56ab12cd34ef56ab12cd103",
"lastDigits": "JMTUs=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "SUSPENDED"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' is required."
}
}Activate API Token
The call to activate an API token
Endpoints
apiTokens/{apiTokenId}/activateURL parameters
apiTokenIdrequired[a-f 0-9]32Data parameters
No body
Success response
id[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9]*5,=6lastUsedTimeYYYY-MM-DD HH:mm:ssstateACTIVEError response
errormessageapiTokens/{apiTokenId}/activateRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/apiTokens/{apiTokenId}/activate' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"apiToken": {
"alias": "SYSTEM_OPP_Merchant_6",
"createdTime": "2026-03-23 09:21:23",
"id": "ab12cd34ef56ab12cd34ef56ab12cd103",
"lastDigits": "JMTUs=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' is required."
}
}Update API Token
The call to update an api token
Endpoints
apiTokens/{apiTokenId}URL parameters
apiTokenIdrequired[a-f 0-9]32Data parameters
aliasrequired[A-Z a-z 0-9], [-_]40Success response
id[a-f 0-9]32alias[A-Z a-z 0-9],[-_]40createdTimeYYYY-MM-DD HH:mm:sslastDigits[A-Z a-z 0-9]*5,=6lastUsedTimeYYYY-MM-DD HH:mm:ssstateACTIVE/SUSPENDEDError response
errormessageapiTokens/{apiTokenId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/apiTokens/{apiTokenId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'alias=newalias'Response samples
{
"apiToken": {
"alias": "SYSTEM_OPP_Merchant_6",
"createdTime": "2026-03-23 09:21:23",
"id": "ab12cd34ef56ab12cd34ef56ab12cd103",
"lastDigits": "JMTUs=",
"lastUsedTime": "1970-01-01 00:00:00",
"state": "ACTIVE"
}
}{
"error": {
"code": "200.300.404",
"message": "Error - POST parameter validation failure(s). 'name' is required."
}
}Delete API Token
The call to delete an api token
Endpoints
apiTokens/{apiTokenId}URL parameters
apiTokenIdrequired[a-f 0-9]32Success response
Error response
errormessageapiTokens/{apiTokenId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/apiTokens/{apiTokenId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"error": {
"message": "Error deleting API token: CCS returned unexpected status code (400) - API_TOKEN_INVALID_DELETE_STATE - Only suspended tokens can be deleted"
}
}Webhook operations
/psps/{pspid}/webhooks/divisions/{divisionsid}/webhooks/merchants/{merchantid}/webhooks/channels/{channelId}/webhooks/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}/psps/{pspid}/webhooks/divisions/{divisionsid}/webhooks/merchants/{merchantid}/webhooks/channels/{channelId}/webhooks/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}/psps/{pspId}/webhooks/{webhookId}/validate/divisions/{divisionsId}/webhooks/{webhookid}/validate/merchants/{merchantId}/webhooks/{webhookId}/validate/channels/{channelId}/webhooks/{webhookId}/validate/psps/{pspId}/webhooks/{webhookId}/state/divisions/{divisionsId}/webhooks/{webhookid}/state/merchants/{merchantId}/webhooks/{webhookId}/state/channels/{channelId}/webhooks/{webhookId}/stateAdd Webhook
The call adds a webhook.
The webhook can be created at PSP, division, merchant, or channel levels.
Endpoints
/PSPs/{pspId}/webhooks/divisions/{divisionsId}/webhooks/merchants/{merchantId}/webhooks/channels/{channelId}/webhooksURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32Data parameters
endpointstarts with http or httpsnotificationTypes.{group}Possible groups and their corresponding event values are:
payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO
registrations - ALL
schedules - ALL,SD,RS,DS
risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE
Restrictions:
ALL cannot be combined with other values.
Multiple event values can be combined using commas, e.g. notificationTypes.payments=PA,CB.
At least one event must be present.
presetALL - full payload
NON_CUSTOMER_DATA - exclude sensitive fields
wrapperPossible values are:
(default) - hex string
JSON - wrapped in JSON
secret[0-9 a-f A-F]64emailsSuccess response
Response is a webhook object with the following structure:
id[a-f 0-9]32entityId[a-f 0-9]32confirmedfalse/trueactivefalse/trueendpointstarts with http or httpsnotificationTypes.{group}Each group is an array in which possible values are:
payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO
registrations - ALL
schedules - ALL,SD,RS,DS
risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE
presetALL - full payload
NON_CUSTOMER_DATA - exclude sensitive fields
wrapperPossible values are:
(default) - hex string
JSON - wrapped in JSON
secret[0-9 a-f A-F]64emailsThe newly added webhook is inactive by default. Use Update Webhook State to activate it.
Error response
/PSPs/{pspId}/webhooks/divisions/{divisionsId}/webhooks/merchants/{merchantId}/webhooks/channels/{channelId}/webhooksRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'endpoint=https://example.com' \
--data-urlencode 'notificationTypes.payments=PA,CP,DB' \
--data-urlencode 'notificationTypes.registrations=ALL' \
--data-urlencode 'preset=ALL' \
--data-urlencode 'emails=alerts@example.com'Response samples
{
"webhook": {
"active": false,
"confirmed": false,
"emails": [
"alerts@example.com"
],
"entityId": "ab12cd34ef56ab12cd34ef56ab12cd104",
"id": "ab12cd34ef56ab12cd34ef56ab12cd105",
"notificationTypes": {
"payments": [
"PA",
"CP",
"DB"
],
"registrations": [
"ALL"
]
},
"preset": "ALL",
"secret": "<64-character-hex-secret>",
"endpoint": "https://example.com"
}
}{
"error": {
"code": "200.300.404",
"message": "secret ('foo'): must match [0-9a-fA-F]{64}"
}
}Get Webhook
The call gets information about an existing webhook.
The webhook can be retrieved at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}URL parameters
| pspId | The ID of the PSP. | [a-f 0-9] | 32 | Required for Option 1 |
| divisionId | The ID of the division. | [a-f 0-9] | 32 | Required for Option 2 |
| merchantId | The ID of the merchant. | [a-f 0-9] | 32 | Required for Option 3 |
| channelId | The ID of the channel. | [a-f 0-9] | 32 | Required for Option 4 |
| webhookId | The ID of the webhook. | [a-f 0-9] | 32 | Required |
Data parameters
No parameters required.
Success response
| 200: OK | The request was successful. |
Response is a webhook object with the following structure:
| id | The webhook ID. | [a-f 0-9] | 32 |
| entityId | The entity (PSP, division, merchant, or channel) ID, where the webhook is attached to. | [a-f 0-9] | 32 |
| confirmed | The flag indicating whether the webhook is validated. | false/true | - |
| active | The flag indicating whether the webhook is active. | false/true | - |
| endpoint | The public endpoint that will receive the webhook notifications. | starts with http or https | - |
| notificationTypes.{group} | Subscribed events. Each group is an array in which possible values are: payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO registrations - ALL schedules - ALL,SD,RS,DS risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE | - | - |
| preset | Possible values are: ALL - full payload NON_CUSTOMER_DATA - exclude sensitive fields | - | - |
| wrapper | Format of the payload. Possible values are: (default) - hex string JSON - wrapped in JSON | - | - |
| secret | A 64-character hex string used to encrypt the payload. | [0-9 a-f A-F] | 64 |
| emails | Array of email addresses to receive daily failure summaries. | - | - |
Response Example
Error response
| 200.*.* | Used to tunnel errors. Check the error message. |
Example
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}Request sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks/{webhookId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"webhook": {
"active": false,
"confirmed": false,
"emails": [
"alerts@example.com"
],
"entityId": "ab12cd34ef56ab12cd34ef56ab12cd104",
"id": "ab12cd34ef56ab12cd34ef56ab12cd105",
"notificationTypes": {
"payments": [
"PA",
"CP",
"DB"
],
"registrations": [
"ALL"
]
},
"preset": "ALL",
"secret": "<64-character-hex-secret>",
"endpoint": "https://example.com"
}
}{
"error": {
"code": "200.300.406",
"message": "Webhook not found: ab12cd34ef56ab12cd34ef56ab12cd106"
}
}Edit Webhook
The call edits a webhook.
The webhook can be edited at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookId}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}URL parameters
| pspId | The ID of the PSP. | [a-f 0-9] | 32 | Required for Option 1 |
| divisionId | The ID of the division. | [a-f 0-9] | 32 | Required for Option 2 |
| merchantId | The ID of the merchant. | [a-f 0-9] | 32 | Required for Option 3 |
| channelId | The ID of the channel. | [a-f 0-9] | 32 | Required for Option 4 |
| webhookId | The ID of the webhook. | [a-f 0-9] | 32 | Required |
Data parameters
If the request is submitted with parameters set to empty spaces, for example, name=<single space>, this deletes the previous values and leaves the fields blank.
The parameters not included in the request are not changed. To avoid nullifying valid values, skip the parameters that do not require an update.
| endpoint | The public endpoint that will receive the webhook notifications. | starts with http or https | - |
| notificationTypes.{group} | Events to subscribe to. Possible groups and their corresponding event values are: payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO registrations - ALL schedules - ALL,SD,RS,DS risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE Restrictions: ALL cannot be combined with other values. Multiple event values can be combined using commas, e.g. notificationTypes.payments=PA,CB. At least one event must be present. | - | - |
| preset | Possible values are: ALL - full payload NON_CUSTOMER_DATA - exclude sensitive fields | - | - |
| wrapper | Format of the payload. Possible values are: (default) - hex string JSON - wrapped in JSON | - | - |
| secret | A 64-character hex string used to encrypt the payload. If empty, a random secret is generated. | [0-9 a-f A-F] | 64 |
| emails | One or more email addresses to receive daily failure summaries. Use commas to separate email addresses. | - | - |
Success response
| 200: OK | The request was successful. |
Response is a webhook object with the following structure:
| id | The webhook ID. | [a-f 0-9] | 32 |
| entityId | The entity (PSP, division, merchant, or channel) ID, where the webhook is attached to. | [a-f 0-9] | 32 |
| confirmed | The flag indicating whether the webhook is validated. | false/true | - |
| active | The flag indicating whether the webhook is active. | false/true | - |
| endpoint | The public endpoint that will receive the webhook notifications. | starts with http or https | - |
| notificationTypes.{group} | Subscribed events. Each group is an array in which possible values are: payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO registrations - ALL schedules - ALL,SD,RS,DS risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE | - | - |
| preset | Possible values are: ALL - full payload NON_CUSTOMER_DATA - exclude sensitive fields | - | - |
| wrapper | Format of the payload. Possible values are: (default) - hex string JSON - wrapped in JSON | - | - |
| secret | A 64-character hex string used to encrypt the payload. | [0-9 a-f A-F] | 64 |
| emails | Array of email addresses to receive daily failure summaries. | - | - |
Example
Error response
| 200.*.* | Used to tunnel errors. Check the error message. |
Example
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookId}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}Request sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks/{webhookId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'notificationTypes.payments=PA,DB' \
--data-urlencode 'notificationTypes.registrations=' \
--data-urlencode 'preset=NON_CUSTOMER_DATA' \
--data-urlencode 'wrapper=JSON'Response samples
{
"webhook": {
"active": false,
"confirmed": false,
"emails": [
"alerts@example.com"
],
"entityId": "ab12cd34ef56ab12cd34ef56ab12cd104",
"id": "ab12cd34ef56ab12cd34ef56ab12cd105",
"notificationTypes": {
"payments": [
"PA",
"DB"
]
},
"preset": "NON_CUSTOMER_DATA",
"secret": "<64-character-hex-secret>",
"endpoint": "https://example.com",
"wrapper": "JSON"
}
}{
"error": {
"code": "200.300.404",
"message": "Parameter 'notificationTypes.payments': 'ALL' cannot be combined with other notification types."
}
}List Webhooks
The call allows listing information about existing webhooks.
The webhooks can be retrieved at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/divisions/{divisionsId}/webhooks/merchants/{merchantId}/webhooks/channels/{channelId}/webhooksURL parameters
| pspId | The ID of the PSP. | [a-f 0-9] | 32 | Required for Option 1 |
| divisionId | The ID of the division. | [a-f 0-9] | 32 | Required for Option 2 |
| merchantId | The ID of the merchant. | [a-f 0-9] | 32 | Required for Option 3 |
| channelId | The ID of the channel. | [a-f 0-9] | 32 | Required for Option 4 |
Data parameters
No parameters required.
Success response
| 200: OK | The request was successful. |
Response is a webhooks array, where each element has the following structure:
| id | The webhook ID. | [a-f 0-9] | 32 |
| entityId | The entity (PSP, division, merchant, or channel) ID, where the webhook is attached to. | [a-f 0-9] | 32 |
| confirmed | The flag indicating whether the webhook is validated. | false/true | - |
| active | The flag indicating whether the webhook is active. | false/true | - |
| endpoint | The public endpoint that will receive the webhook notifications. | starts with http or https | - |
| notificationTypes.{group} | Subscribed events. Each group is an array in which possible values are: payments - ALL,AD,PA,CB,CD,CP,CR,DB,RB,RC,RF,RL,RV,CL,CT,PO registrations - ALL schedules - ALL,SD,RS,DS risks - ALL,MD,EA,RI,3D,SA,EN,IC,DP,CG,TG,SF,IS,VD,DV,AF,GK,RD,TM,FT,KT,AR,AL,PL,FN,FZ,RE,RX,AC,CS,FO,EX,SE | - | - |
| preset | Possible values are: ALL - full payload NON_CUSTOMER_DATA - exclude sensitive fields | - | - |
| wrapper | Format of the payload. Possible values are: (default) - hex string JSON - wrapped in JSON | - | - |
| secret | A 64-character hex string used to encrypt the payload. | [0-9 a-f A-F] | 64 |
| emails | Array of email addresses to receive daily failure summaries. | - | - |
Response Example
/psps/{pspId}/webhooks/divisions/{divisionsId}/webhooks/merchants/{merchantId}/webhooks/channels/{channelId}/webhooksRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"webhooks": [
{
"active": false,
"confirmed": false,
"emails": [
"alerts@example.com"
],
"entityId": "ab12cd34ef56ab12cd34ef56ab12cd104",
"id": "ab12cd34ef56ab12cd34ef56ab12cd105",
"notificationTypes": {
"payments": [
"PA",
"CP",
"DB"
],
"registrations": [
"ALL"
]
},
"preset": "ALL",
"secret": "<64-character-hex-secret>",
"endpoint": "https://example.com"
}
]
}Delete Webhook
The call deletes an existing webhook.
The webhook can be deleted at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}URL parameters
| pspId | The ID of the PSP. | [a-f 0-9] | 32 | Required for Option 1 |
| divisionId | The ID of the division. | [a-f 0-9] | 32 | Required for Option 2 |
| merchantId | The ID of the merchant. | [a-f 0-9] | 32 | Required for Option 3 |
| channelId | The ID of the channel. | [a-f 0-9] | 32 | Required for Option 4 |
| webhookId | The ID of the webhook. | [a-f 0-9] | 32 | Required |
Data parameters
No parameters required.
Success response
| 200: OK | The request was successful. |
Response Example
Error response
| 200.*.* | Used to tunnel errors. Check the error message. |
Example
/psps/{pspId}/webhooks/{webhookId}/divisions/{divisionsId}/webhooks/{webhookid}/merchants/{merchantId}/webhooks/{webhookId}/channels/{channelId}/webhooks/{webhookId}Request sample
curl -X DELETE \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks/{webhookId}' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{}{
"error": {
"code": "200.300.406",
"message": "Webhook not found: ab12cd34ef56ab12cd34ef56ab12cd106"
}
}Validate Webhook
The call sends a test webhook request to the registered endpoint. If the request is successful (2xx), the webhook is marked as confirmed.
Use this endpoint if you only want to validate your endpoint, without activating it. To validate and activate at the same time, use Update Webhook State.
The webhook can be validated at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/{webhookId}/validate/divisions/{divisionsId}/webhooks/{webhookid}/validate/merchants/{merchantId}/webhooks/{webhookId}/validate/channels/{channelId}/webhooks/{webhookId}/validateURL parameters
| pspId | The ID of the PSP. | [a-f 0-9] | 32 | Required for Option 1 |
| divisionId | The ID of the division. | [a-f 0-9] | 32 | Required for Option 2 |
| merchantId | The ID of the merchant. | [a-f 0-9] | 32 | Required for Option 3 |
| channelId | The ID of the channel. | [a-f 0-9] | 32 | Required for Option 4 |
| webhookId | The ID of the webhook. | [a-f 0-9] | 32 | Required |
Data parameters
No parameters required.
Success response
| 200: OK | The request was successful. |
Response is a validation object with the following structure:
| body | The response body. | - | - |
| header | The response headers. | - | - |
| statusCode | The HTTP response status code. | - | - |
If the statusCode is successful (2xx), the webhook is marked as confirmed.
Response Example
Error response
| 200.*.* | Used to tunnel errors. Check the error message. |
Example
/psps/{pspId}/webhooks/{webhookId}/validate/divisions/{divisionsId}/webhooks/{webhookid}/validate/merchants/{merchantId}/webhooks/{webhookId}/validate/channels/{channelId}/webhooks/{webhookId}/validateRequest sample
curl -X GET \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks/{webhookId}/validate' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>'Response samples
{
"validation": {
"body": "This URL has no default content configured.",
"headers": {
"transfer-encoding": "chunked",
"x-token-id": "7854d338-b0c1-4533-aed2-5b42f979664b",
"server": "nginx",
"cache-control": "no-cache, private",
"content-type": "text/html; charset=UTF-8",
"x-request-id": "f8069f1d-06fa-405b-b265-fe318919eb0d",
"date": "Wed, 21 Oct 2026 08:51:41 GMT",
"content-security-policy": "base-uri 'self'; form-action 'none'; script-src 'none'; worker-src 'none'; frame-src 'none';"
},
"statusCode": 200
}
}{
"error": {
"code": "200.300.406",
"message": "Webhook not found: ab12cd34ef56ab12cd34ef56ab12cd106"
}
}Update Webhook State
The call activates or deactivates the webhook. In case of activation, a test webhook request is sent (the same action as Validate Webhook). If the request is successful (2xx), the webhook becomes active.
The webhook state can be updated at PSP, division, merchant, or channel levels.
Endpoints
/psps/{pspId}/webhooks/{webhookId}/state/divisions/{divisionsId}/webhooks/{webhookid}/state/merchants/{merchantId}/webhooks/{webhookId}/state/channels/{channelId}/webhooks/{webhookId}/stateURL parameters
pspIdrequired for option 1[a-f 0-9]32divisionIdrequired for option 2[a-f 0-9]32merchantIdrequired for option 3[a-f 0-9]32channelIdrequired for option 4[a-f 0-9]32webhookIdrequired[a-f 0-9]32Data parameters
No parameters required.
Success response
Response is a validation object with the following structure:
bodyheaderstatusCodeIf the statusCode is successful (2xx), the webhook is marked as confirmed and active.
Error response
/psps/{pspId}/webhooks/{webhookId}/state/divisions/{divisionsId}/webhooks/{webhookid}/state/merchants/{merchantId}/webhooks/{webhookId}/state/channels/{channelId}/webhooks/{webhookId}/stateRequest sample
curl -X POST \
'https://eu-test.oppwa.com/bip/webapi/v1/channels/{channelId}/webhooks/{webhookId}/state' \
-H 'accept: application/json' \
-H 'credentials: <username>:<password>' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
--data-urlencode 'active=true'Response samples
{
"validation": {
"body": "This URL has no default content configured. <a href=\"https://webhook.site/#!/edit/7854d338-b0c1-4533-aed2-5b42f979664b\">Change response in Webhook.site</a>.",
"headers": {
"transfer-encoding": "chunked",
"x-token-id": "7854d338-b0c1-4533-aed2-5b42f979664b",
"server": "nginx",
"cache-control": "no-cache, private",
"content-type": "text/html; charset=UTF-8",
"x-request-id": "e416c6ab-5ea8-456f-b5da-3f97acbc6cca",
"date": "Wed, 21 Oct 2026 08:52:04 GMT",
"content-security-policy": "signup-to-remove-csp-header 'webhook.site/register'; base-uri 'self'; form-action 'none'; script-src 'none'; worker-src 'none'; frame-src 'none';"
},
"statusCode": 200
}
}{
"error": {
"code": "200.300.406",
"message": "Webhook not found: ab12cd34ef56ab12cd34ef56ab12cd106"
}
}