openapi: "3.0.3" info: title: ABT Customers CRUD APIs v2 version: "1.0" description: CRUD APIs for ABT Customer database. These are NOT the functional APIs from Service Engine. servers: - url: https://api.integratielaag.nl paths: /customers: get: tags: - ABTCustomers summary: Search customer profiles description: >- Search for all customer profile list in the ABT database matching given query parameters parameters: - name: customerProfileId in: query schema: type: integer example: 1 - name: customerNumber in: query schema: type: integer example: 1000001 - name: customerStatusId in: query schema: type: array items: type: integer description: Filter on possible customer statuses. 1 = Inactive, 2 = Active, 3 = Blocked, 4 = Frozen, 5 = Cleaned - name: debtorNumber in: query schema: type: string example: DB100001 - name: debtorStatusId in: query schema: type: array items: type: integer description: Filter on possible debtor statuses. 1 = Active, 2 = Inactive - name: birthname in: query schema: type: string example: John - name: surname in: query schema: type: string example: Doe - name: prefix in: query schema: type: string example: De - name: suffix in: query schema: type: string example: PhD - name: emailAddress in: query schema: type: string format: email example: john.doe@mymailprovider.com - name: dateOfBirth in: query schema: type: string format: date example: "2000-01-01" - name: addressStreet in: query schema: type: string example: Sesamestreet - name: addressHouseNumber in: query schema: type: integer example: 1 - name: addressHouseNumberSuffix in: query schema: type: string example: A - name: addressPostalCode in: query schema: type: string example: 1234AB - name: addressCity in: query schema: type: string example: The Hague - name: addressCountry in: query schema: type: string example: NL - name: phoneNumber in: query schema: type: string example: "0123456789" - name: phoneCountryCode in: query schema: type: string example: "+31" - name: ovChipcardNumber in: query schema: type: integer example: 0123456789 - name: ovChipcardAlias in: query schema: type: string example: My ovchipcard - name: ovPasNumber in: query schema: type: string example: 0123456789 - name: ovPayTokenAlias in: query schema: type: string example: My Ov Pay Token - name: ovPayTokenXTat in: query schema: type: string example: 180d04e0-a721-447e-a1d9-b416937b43bc - name: ovPayTokenXBot in: query schema: type: string example: e1307c73-676a-4d07-967b-6141276f7c7c - name: mandateReference in: query schema: type: string example: PAYT-1 - name: iban in: query schema: type: string example: NL20INGB0001234567 - name: bic in: query schema: type: string example: NL20INGB - name: swift in: query schema: type: string example: NL20INGB - name: ascription in: query schema: type: string example: j.jansen - name: billingAlias in: query schema: type: string example: j.jansen responses: 200: description: Successfully retrieved customer profile(s) content: application/json: schema: $ref: "#/components/schemas/getCustomerProfiles" examples: fullCustomerProfile: value: customers: - customerProfileId: 1 customerNumber: 1000001 debtorNumber: DB100001 debtorStatus: debtorStatusId: 1 name: Inactive vascustomerNumber: CST005 customerPreference: language: languageId: 1 name: Dutch ietfCode: nl-NL iso639Code: nl customerStatusInstances: - customerStatus: name: Active customerStatusId: 2 fromInclusive: "2022-08-04 15:01:00.000" toInclusive: "2022-08-05 15:01:00.000" - customerStatus: name: Blocked customerStatusId: 3 fromInclusive: "2022-08-05 15:01:00.000" toInclusive: null person: birthname: Pieter surname: De valen prefix: De suffix: PhD dateOfBirth: "2002-10-29" emailAddresses: TEST@HTM.NL addresses: - addressId: 1 street: mystreet houseNumber: 1 houseNumberSuffix: null postalCode: 0000AA city: Den Haag country: NL isPreferred: false addressType: addressTypeId: 2 name: Office - addressId: 2 street: mystreet 33 houseNumber: 1 houseNumberSuffix: null postalCode: 4455CA city: Den BOSCH country: NL isPreferred: true addressType: addressTypeId: 2 name: Office phones: - phoneId: 1 number: "3112345678" countryCode: "+31" phoneType: phoneTypeId: 1 name: Home isPreferred: true - phoneId: 2 number: "333225588" countryCode: "+31" phoneType: phoneTypeId: 2 name: Work isPreferred: false ovChipcards: - ovChipCardId: 1 chipCardNumber: 1234123412341234 validUntil: "2023-01-01" alias: alias - ovChipCardId: 2 chipCardNumber: 1234123412341235 validUntil: "2025-01-01" alias: alias ovPayTokens: - ovPayTokenId: 126 tokenType: tokenTypeId: 1 name: EMV xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5678" ovpasNumber: null tokenStatus: tokenStatusId: 2 name: Active expirationDate: "2025-04-20T17:05:52.000+02:00" replacedByTokenId: 1 - ovPayTokenId: 127 tokenType: tokenTypeId: 2 name: OV-pas physical xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5674" ovpasNumber: OV34568 tokenStatus: tokenStatusId: 2 name: Active expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 auditTrails: - auditTrailId: 1 customerProfileId: 1 action: insert user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 - customerProfileId: 2 customerNumber: 1000002 debtorNumber: TEST001 debtorStatus: debtorStatusId: 1 name: Inactive vascustomerNumber: CST005 customerPreference: language: languageId: 1 name: Dutch ietfCode: nl-NL iso639Code: nl customerStatusInstances: - customerStatus: name: Active customerStatusId: 2 fromInclusive: "2022-08-04 15:01:00.000" toInclusive: "2022-08-05 15:01:00.000" - customerStatus: name: Blocked customerStatusId: 3 fromInclusive: "2022-08-05 15:01:00.000" toInclusive: null person: birthname: Pieter surname: De valen prefix: De suffix: PhD dateOfBirth: "2002-10-29" emailAddresses: TEST@HTM.NL address: - addressId: 1 street: mystreet houseNumber: 1 houseNumberSuffix: null postalCode: 0000AA city: Den Haag country: NL isPreferred: false addressType: addressTypeId: 2 name: Office - addressId: 2 street: mystreet 33 houseNumber: 1 houseNumberSuffix: null postalCode: 4455CA city: Den BOSCH country: NL isPreferred: true addressType: addressTypeId: 2 name: Office phones: - phoneId: 1 number: "3112345678" countryCode: "+31" phoneType: phoneTypeId: 1 name: Home isPreferred: true - phoneId: 2 number: "333225588" countryCode: "+31" phoneType: phoneTypeId: 2 name: Work isPreferred: false ovChipcards: - ovChipCardId: 1 chipCardNumber: 1234123412341234 validUntil: "2023-01-01" alias: alias - ovChipCardId: 2 chipCardNumber: 1234123412341235 validUntil: "2025-01-01" alias: alias ovPayTokens: - ovPayTokenId: 126 tokenType: tokenTypeId: 2 name: OV-pas physical xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5678" ovpasNumber: OV34567 tokenStatus: tokenStatusId: 2 name: active expirationDate: "2025-04-20T17:05:52.000+02:00" replacedByTokenId: 1 - ovPayTokenId: 127 tokenType: tokenTypeId: 2 name: OV-pas physical xTat: 0115b0df-db38-4702-8811-6f7de00db3ac xBot: 71a88843-32b8-4d52-ac25-de2458c47775 alias: alias lastDigits: "5674" ovpasNumber: OV34568 tokenStatus: tokenStatusId: 2 name: active expirationDate: "2024-04-20T17:05:52.000+02:00" replacedByTokenId: 2 auditTrails: - auditTrailId: 1 customerProfileId: 1 action: insert user: user timestamp: "2023-10-20T17:05:52.000+02:00" correlationId: 01c6d8b4-1cd3-4f9b-85ea-c9adca53ce95 href: null 400: description: Bad Request content: application/json: schema: $ref: "#/components/schemas/400Response" 401: description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/401Response" 404: description: Not Found content: application/json: schema: $ref: "#/components/schemas/404Response" 500: description: Internal Server Error content: application/json: schema: $ref: "#/components/schemas/500Response" security: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited post: tags: - ABTCustomers summary: Create a customer profile description: >- Create a customer profile in the ABT database with status ACTIVE and debtorStatus Inactive with a start date based on the timestamp of this post call. - Requested format for postal code: - 0000AA parameters: [] requestBody: content: application/json: schema: $ref: "#/components/schemas/postCustomerProfile" examples: minimumProfile: value: {} basicCustomerProfile: value: debtorStatusId: 2 person: birthname: Jan surname: Jansen emailAddress: j.jansen@hatseflats.nl fullCustomerProfile: value: customerPreference: languageId: 1 debtorStatusId: 2 person: birthname: Jan surname: Jansen prefix: dhr suffix: jr dateOfBirth: "1970-01-01" emailAddress: j.jansen@hatseflats.nl addresses: - street: Laan van Meerdervoort houseNumber: 5 houseNumberSuffix: B postalCode: 2500AA city: Den Haag country: NL isPreferred: true addressTypeId: 1 - street: Beeklaan houseNumber: 30 houseNumberSuffix: B postalCode: 2500AA city: Den Haag country: NL isPreferred: false addressTypeId: 2 phones: - number: "6123456789" countryCode: "+31" phoneTypeId: 1 isPreferred: true - number: "7012345678" countryCode: "+31" phoneTypeId: 2 isPreferred: false required: true responses: "201": description: Successful created a customer profile content: application/json: schema: $ref: "#/components/schemas/postCustomerProfileCustomerNumberResponse" "400": description: Bad Request content: application/json: schema: $ref: "#/components/schemas/400Response" examples: InvalidPostalCodeFormatForAddressCountryNLError: value: code: "400" type: Bad Request - Input parameters message: Invalid input parameter for country validation (NL). description: >- ECMA 262 regex \"^(?:\\d{4}[A-Z]{2})?$\" does not match input string \"2500 AA\ MissingRequiredParameterError: value: code: "400" type: Bad Request - Input parameters message: Invalid input parameter. description: >- object has missing required properties ([\"addressTypeId\"]) InvalidDataTypeError: value: code: "400" type: Bad Request - Input parameters message: Invalid input parameter. description: >- Bad Request - please verify the value for the following field \"id\ "401": description: Unauthorized content: application/json: schema: $ref: "#/components/schemas/401Response" "409": description: Conflict content: application/json: schema: $ref: "#/components/schemas/409Response" examples: emailAddressAlreadyPresent: value: code: "409" type: Conflict message: emailAddress already exists. description: "" "500": description: Internal Server Error content: application/json: schema: $ref: "#/components/schemas/500Response" security: - default: [] x-auth-type: Application & Application User x-throttling-tier: Unlimited /ovpaytokens: get: tags: - Token summary: Find OVpay tokens. description: Find OVpay tokens. parameters: - in: query name: ovPayTokenId schema: type: integer example: 71 required: false description: The id of the token. - in: query name: customerProfileId schema: type: integer example: 12 required: false description: The id of the customer profile. - in: query name: tokenTypeId schema: type: array items: type: integer example: [1, 2] explode: false required: false description: Filter on possible token types. 1 = EMV, 2 = OV-pas physical, 3 = OV-pas digital. - in: query name: xTat schema: type: string format: uuid example: 700b0516-bf8b-4e6e-bf16-13bfeb078e23 explode: false required: false description: The XTAT of the token. - in: query name: xBot schema: type: string format: uuid example: de1a9a7a-a777-4473-889c-44a3bb07daae explode: false required: false description: The XBOT of the token. - in: query name: alias schema: type: string example: Mijn OV-pas required: false description: The alias of the token. - in: query name: lastDigits schema: type: integer example: 3301 required: false description: The last digits of the token. - in: query name: ovpasNumber schema: type: string example: 63AW974 required: false description: Number of the OVpas. - in: query name: tokenStatusId schema: type: array items: type: integer example: [1, 2] explode: false required: false description: Filter on possible token statuses. 1 = expired, 2 = active, 3 = replaced, 4 = inactive, 5 = suspended, 6 = removed by customer. - in: query name: expirationDate schema: type: string format: date-time example: 2029-03-22T09:00:00 required: false description: The expiration date of the token. - in: query name: replacedByTokenId schema: type: integer example: 12 required: false description: The id of the token that replaced this token. responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/unavailable" example: { "ovPayTokens": [ { "ovPayTokenId": 71, "customerProfileId": 12, "tokenType": { "tokenTypeId": 2, "name": "OV-pas physical" }, "xTat": "700b0516-bf8b-4e6e-bf16-13bfeb078e23", "xBot": "de1a9a7a-a777-4473-889c-44a3bb07daae", "alias": "Mijn OV-pas", "lastDigits": 3301, "ovpasNumber": "63AW974", "tokenStatus": { "tokenStatusId": 2, "name": "Active" }, "expirationDate": "2029-03-22T09:00:00", "replacedByTokenId": 12, }, ], "href": null, } /directdebitmandates: get: tags: - Mandates summary: Find direct debit mandates. description: Find direct debit mandates. parameters: - in: query name: directDebitMandateId schema: type: integer example: 71 required: false description: The id of the direct debit mandate. - in: query name: customerProfileId schema: type: integer example: 12 required: false description: The id of the customer related to the mandate. - in: query name: billingInformationId schema: type: integer example: 51 required: false description: The id of the billing information related to the mandate. - in: query name: directDebitMandateTypeId schema: type: array items: type: integer example: [1, 2] explode: false required: false description: The id of the direct debit mandate type. 1 = Paper contract, 2 = PIN transaction, 3 = SEPA eMandate, 4 = Digital signature, 5 = iDEAL transaction. - in: query name: mandateAddressId schema: type: integer example: 21 required: false description: The id of the address related to the mandate. - in: query name: createdBefore schema: type: string format: date-time example: 2020-12-31T23:59:59 required: false description: Filter on created before. - in: query name: createdAfter schema: type: string format: date-time example: 2020-01-01T00:00:00 required: false description: Filter on created after. - in: query name: mandateReference schema: type: string example: CORE01 required: false description: Filter on mandate reference. - in: query name: mandateState schema: type: array items: type: string example: [SIGNED, PREPARED] explode: false required: false description: Filter on possible states of the mandate. SIGNED = signed, PREPARED = prepared, CANCELLED = cancelled. - in: query name: updatedBefore schema: type: string format: date-time example: 2020-12-31T23:59:59 required: false description: Filter on updated before. - in: query name: updatedAfter schema: type: string format: date-time example: 2020-01-01T00:00:00 required: false description: Filter on updated after. responses: 200: description: OK content: application/json: schema: $ref: "#/components/schemas/unavailable" example: [ { "directDebitMandateId": 71, "customerProfileId": 12, "billingInformationId": 51, "directDebitMandateType": { "directDebitMandateTypeId": 1, "name": "import", "description": "import", }, "mandateAddressId": 21, "created": "2024-03-22T08:55:00", "mandateReference": "CORE01", "mandateState": "SINGED", "updateTimestamp": "2024-03-22T08:55:00", }, ] components: securitySchemes: default: type: oauth2 flows: implicit: authorizationUrl: https://services.acc.api.htm.nl/authorize scopes: {} schemas: unavailable: type: object rfc9457: type: object properties: type: type: string format: url example: https://example.com/probs/out-of-credit title: type: string example: You do not have enough credit. detail: type: string example: Your current balance is 30, but that costs 50. instance: type: string example: /account/12345/msgs/abc balance: type: string example: 30 accounts: type: array items: type: string example: - /account/12345 - /account/67890 getAuditTrails: type: object properties: auditTrailId: type: integer customerProfileId: type: integer action: type: string user: type: string timestamp: type: string format: datetime correlationId: type: string getOvPayTokens: type: object properties: ovPayTokenId: type: integer tokenTypeId: type: integer xTat: type: string xBot: type: string alias: type: string lastDigits: type: integer ovpasNumber: type: string tokenStatusId: type: integer expirationDate: type: string replacedByTokenId: type: integer getOvChipcards: type: object properties: ovChipCardId: type: integer chipCardNumber: type: integer validUntil: type: string format: date alias: type: string getCustomerStatusInstance: type: object properties: customerStatus: $ref: "#/components/schemas/getCustomerStatus" fromInclusive: type: string format: date toInclusive: type: string format: date getCustomerStatus: type: object properties: customerStatusId: type: integer name: type: string getDebtorStatus: type: object properties: debtorStatusId: type: integer name: type: string getPerson: type: object properties: birthname: type: string surname: type: string prefix: type: string suffix: type: string dateOfBirth: type: string format: date emailAddresses: type: string format: email addresses: type: array items: $ref: "#/components/schemas/getAddresses" phones: type: array items: $ref: "#/components/schemas/getPhones" getAddresses: type: object properties: addressId: type: integer street: type: string houseNumber: type: integer houseNumberSuffix: type: string postalCode: type: string city: type: string country: type: string isPreferred: type: boolean addressType: $ref: "#/components/schemas/getAddressType" getAddressType: type: object properties: addressTypeId: type: integer name: type: string getPhones: type: object properties: phoneId: type: integer number: type: string countryCode: type: string phoneType: $ref: "#/components/schemas/getPhoneType" isPreferred: type: boolean getPhoneType: type: object properties: phoneTypeId: type: integer name: type: string getCustomerPreference: type: object properties: language: $ref: "#/components/schemas/getCustomerLanguage" getCustomerLanguage: type: object properties: languageId: type: integer name: type: string ietfCode: type: string iso639Code: type: string getCustomerProfiles: type: object properties: customers: type: array items: $ref: "#/components/schemas/getCustomerProfile" getCustomerProfile: type: object properties: customerNumber: type: integer debtorNumber: type: integer debtorStatus: $ref: "#/components/schemas/getDebtorStatus" vascustomerNumber: type: integer customerPreference: $ref: "#/components/schemas/getCustomerPreference" customerStatusInstances: type: array items: $ref: "#/components/schemas/getCustomerStatusInstance" person: $ref: "#/components/schemas/getPerson" ovChipcards: type: array items: $ref: "#/components/schemas/getOvChipcards" ovPayTokens: type: array items: $ref: "#/components/schemas/getOvPayTokens" auditTrails: type: array items: $ref: "#/components/schemas/getAuditTrails" ovPayTokenEntity: type: object properties: tokenType: type: object properties: tokenTypeId: type: string name: type: string xTat: type: string xBot: type: string alias: type: string lastDigits: type: integer ovpasNumber: type: string tokenStatus: type: object properties: tokenStatusId: type: integer name: type: string expirationDate: type: string replacedByTokenId: type: integer postPhone: type: object properties: phone: $ref: "#/components/schemas/phonePostEntity" personEntity: type: object properties: birthname: type: string surname: type: string prefix: type: string suffix: type: string dateOfBirth: type: string format: date emailAddress: type: string addressPostEntity: required: - addressTypeId - city - country - houseNumber - postalCode - street type: object properties: street: type: string houseNumber: type: integer houseNumberSuffix: type: string postalCode: type: string city: type: string country: type: string isPreferred: type: boolean addressTypeId: type: integer phonePostEntity: required: - countryCode - number - phoneTypeId type: object properties: number: type: string countryCode: type: string phoneTypeId: type: integer isPreferred: type: boolean defaultCustomerProfileResponse: type: object properties: customerNumber: type: integer example: 10000001 postCustomerProfile: type: object properties: debtorStatusId: type: integer customerPreference: $ref: '#/components/schemas/customerPreferencesEntity' person: $ref: '#/components/schemas/personEntity' addresses: type: array items: $ref: '#/components/schemas/addressPostEntity' phones: type: array items: $ref: '#/components/schemas/phonePostEntity' customerPreferencesEntity: type: object properties: languageId: type: string postCustomerProfileCustomerNumberResponse: type: object properties: customerNumber: type: integer example: 10000001 postCustomerProfileAddressResponse: type: object properties: customerNumber: type: integer example: 10000001 addressId: type: integer example: 1 postCustomerProfilePhoneResponse: type: object properties: customerNumber: type: integer example: 10000001 phoneId: type: integer example: 1 postCustomerProfileBillingInformationResponse: type: object properties: customerNumber: type: integer example: 10000001 billingInformationId: type: integer example: 1 postCustomerProfileDirectDebitMandateResponse: type: object properties: customerNumber: type: integer example: 10000001 directDebitMandateId: type: integer example: 1 postCustomerProfileOvChipCardResponse: type: object properties: customerNumber: type: integer example: 10000001 ovChipCardId: type: integer example: 1 patchCustomerProfileResponse: type: object properties: customerNumber: type: integer example: 10000001 patchCustomerPreferencesResponse: type: object properties: customerNumber: type: integer example: 10000001 ovPayTokenGetEntity: type: object properties: ovPayTokenId: type: integer example: 1 tokenTypeId: type: integer example: 1 xTat: type: string example: 0044831b-8e80c-4f82-r989a-8d85ee1996 xBot: type: string example: 0044831b-8e80c-4f82-r989a-8d85ee1996 lastDigits: type: string example: "0001" ovpasNumber: type: integer example: 1 alias: type: string example: alias tokenStatusId: type: integer expirationDate: type: string replacedByTokenId: type: integer getCustomerProfileOvPayTokenResponse: type: object properties: ovPayToken: type: array items: $ref: "#/components/schemas/ovPayTokenGetEntity" postCustomerProfileOvPayTokenResponse: type: object properties: ovPaytoken: type: object example: 10000001 ovPayTokenId: type: integer example: 1 400Response: type: object properties: code: type: string example: "400" type: type: string message: type: string example: Bad Request description: type: string example: >- 'Bad Request: Input parameters missing! Please fill in at least 1 valid input parameter. 401Response: type: object properties: code: type: string example: "900901" type: type: string message: type: string example: Invalid Credentials description: type: string example: >- Invalid Credentials. Make sure you have provided the correct security credentials 404Response: type: object properties: code: type: string example: "404" type: type: string example: Status report message: type: string example: Not Found description: type: string example: The requested resource is not available. 409Response: type: object properties: code: type: string example: "409" type: type: string example: Conflict message: type: string example: Entry already exists description: type: string 422Response: type: object properties: code: type: string example: "422" type: type: string example: Unprocessable entity message: type: string example: >- Forbidden state transition requested! From Active to Cleared not allowed. description: type: string 500Response: type: object properties: code: type: string example: "500" type: type: string message: type: string example: Internal Server Error description: type: string