Wiki source code of 2. Customer

Last modified by Thomas Hedström on 2025/02/14 16:16
Show last authors
1 (% class="jumbotron" %)
2 (((
3 (% class="container" %)
4 (((
5 Integrate to **PayEx Customer API **
6 )))
7 )))
8
9 == Introduction ==
10
11 (% class="lead" %)
12 This api is used to create/read customers or change properties related to the customer.
13
14 [[image:customerapi-2025-02.PNG||alt="1612164561442-820.png"]]
15
16
17 Each resource in the API corresponds to its own route. All routes are structured according to a specific standard, explained below
18
19 The below route is an example of a route towards resource2Id, to operate on this resource you must also include the ids of its parentresources in the route.
20 //lf-api.payex.com/ledger/**{Subdomain}**/v1/**{LedgerNumber}**/resource1/**{resource1Id}**/resource2/**{resource2Id}**//
21
22 (% class="table-bordered table-striped" %)
23 |=(% style="width: 604px;" %)Route segment|=(% style="width: 2790px;" %)Description
24 |(% style="width:604px" %)Subdomain|(% style="width:2790px" %)In this part of the API it will be **customer**
25 |(% style="width:604px" %)LedgerNumber|(% style="width:2790px" %)The ledger identifier/number at PayEx
26 |(% style="width:604px" %)resource1Id|(% style="width:2790px" %)Identifier of resource1
27 |(% style="width:604px" %)resource2Id|(% style="width:2790px" %)identifier of resource2, subresource to resource1
28
29 (% class="wikigeneratedid" %)
30 Routes that occurs in examples of this documentation will use the following identifiers
31
32 (% class="table-bordered table-striped" %)
33 |=(% style="width: 488px;" %)Resource|=(% style="width: 2271px;" %)Identifier
34 |(% style="width:488px" %)LedgerNumber|(% style="width:2271px" %)XXX
35 |(% style="width:488px" %)Customer|(% style="width:2271px" %)NNN (CustomerNo)
36
37 (% id="HChangelog" %)
38 == Changelog ==
39
40 2023-01-17
41 Added //surpluses// property to the Customer resource with planned release 2024-01-23
42
43 2023-11-27
44 Added new resource Surpluses & added a general 404 not-found to problems list.
45
46 2024-04-26
47
48 Added TaxIdentificationNumber to the Customer resource with planned release 2024-05-28
49
50 2024-05-15
51
52 Added Consent and underlying resources with planned release 2024-05-28. Updated Introduction API overview visual.
53
54 2025-02-14
55
56 Added operation Update-Kyc-Answers and updates to the Customer resource Operations list to reflect that. Planned release 2025-03-04
57
58 Added resource Kyc-Questions. Planned release 2025-03-04
59
60
61 == Customer ==
62
63 The **customer **resource is located under **ledger/customer/v1/ **api**. **The customer- and its sub-resources are used to create, read and modify information related to customers.
64
65 ==== (% style="color:inherit; font-family:inherit" %)Get a specific customer(%%) ====
66
67 {{code language="http" title="**Request**"}}
68 GET /ledger/customer/v1/XXX/customers/NNN HTTP/1.1
69 Host: -
70 Authorization: Bearer <Token>
71 Content-Type: application/json
72 {{/code}}
73
74 ==== ====
75
76 {{code language="http" title="**Response**"}}
77 HTTP/1.1 200 OK
78 Content-Type: application/json
79
80 {
81 "@id" : "/ledger/customer/v1/XXX/customers/9999",
82 "customerNo" : "9999",
83 "nationalIdentifier": {
84 "regNo" : "YYYYMMDD-NNNN",
85 "countryCode" : "SE"
86 },
87 "vatNo" : "SE101010101001",
88 "legalEntity" : "consumer|business",
89 "name" : "Britt-Marie Axelstopp",
90 "emailAddress" : "britt@axelstopp.com",
91 "protectedIdentity": false,
92 "preferredLanguageCode": "SV",
93 "legalStatus": "active",
94 "msisdn" : "+91485918841",
95 "activeConsents": [
96 "Betalingsservice",
97 "Avtalegiro"
98 ],
99 "eDIAddressInfo" : {
100 "VAN": "ABCXYZ",
101 "InterChangeRecipient": "Recipient_ID1",
102 "BuyerId": "123465"
103 },
104 "legalAddress" : "/ledger/customer/v1/XXX/customers/9999/legal-address",
105 "billingAddress" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
106 "surpluses": "/ledger/customer/v1/XXX/customers/9999/surpluses",
107 "operations" :
108 [
109 {
110 "rel": "partial-update-customer",
111 "method": "PATCH",
112 "href": "/ledger/customer/v1/XXX/customers/9999"
113 },
114 {
115 "rel": "add-billing-address",
116 "method": "POST",
117 "href": "/ledger/customer/v1/XXX/customers/9999/billing-address"
118 },
119 {
120 "rel": "update-kyc-answers",
121 "method": "POST",
122 "href": "/ledger/customer/v1/XXX/customers/9999/update-kyc-answers"
123 }
124 ]
125 }
126 {{/code}}
127
128 ==== Get a specific customer using $expand ====
129
130 if the entire customer model is needed, you can expand property references to other resources, in this example to get the customer model including the addresses on a single call.
131
132 (% class="box infomessage" %)
133 (((
134 Performance is affected when expand is used as more resources are retrieved. Only use $expand if you always need the referenced properties, otherwise it should be retrevied on demand.
135 )))
136
137 {{code language="http" title="**Request**"}}
138 GET /ledger/customer/v1/XXX/customers/NNN?$expand=legaladdress,billingaddress HTTP/1.1
139 Host: -
140 Authorization: Bearer <Token>
141 Content-Type: application/json
142 {{/code}}
143
144
145 {{code language="http" title="**Response**"}}
146 HTTP/1.1 200 OK
147 Content-Type: application/json
148
149 {
150 "@id" : "/ledger/customer/v1/XXX/customers/9999",
151 "customerNo" : "9999",
152 "nationalIdentifier": {
153 "regNo" : "YYYYMMDD-NNNN",
154 "countryCode" : "SE"
155 },
156 "vatNo" : "SE101010101001",
157 "legalEntity" : "consumer|business",
158 "name" : "Britt-Marie Axelstopp",
159 "emailAddress" : "britt@axelstopp.com",
160 "protectedIdentity": false,
161 "preferredLanguageCode": "SV",
162 "legalStatus": "active",
163 "msisdn" : "+91485918841",
164 "activeConsents": [
165 "Betalingsservice",
166 "Avtalegiro"
167 ],
168 "eDIAddressInfo" : {
169 "VAN": "ABCXYZ",
170 "InterChangeRecipient": "Recipient_ID1",
171 "BuyerId": "123456"
172 },
173 "legalAddress" : {
174 "addressee" : "Britt-Marie Axelstopp",
175 "streetAddress" : "The street 18",
176 "coAddress" : "c/o Jansson",
177 "city" : "STOCKHOLM",
178 "zipCode" : "15961",
179 "countryCode" : "SE",
180 "operations" :
181 [
182 {
183 "rel" : "update",
184 "href" : "/ledger/customer/v1/XXX/customers/9999/legal-address",
185 "method" : "PUT"
186 },
187 {
188 "rel" : "update-legal-address-from-population-register",
189 "href" : "/ledger/customer/v1/XXX/customers/9999/legal-address",
190 "method" : "POST"
191 }
192 ]
193 },
194 "billingAddress" : {
195 "addressee" : "Kalle Axelstopp",
196 "streetAddress" : "Axelgatan 18",
197 "city" : "STOCKHOLM",
198 "zipCode" : "16872",
199 "countryCode" : "se",
200 "operations" :
201 [
202 {
203 "rel" : "update",
204 "href" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
205 "method" : "PUT"
206 },
207 {
208 "rel" : "delete",
209 "href" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
210 "method" : "DELETE"
211 }
212 ]
213 },
214 "surpluses": "/ledger/customer/v1/XXX/customers/9999/surpluses",
215 "operations" :
216 [
217 {
218 "rel" : "add-billing-address",
219 "href" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
220 "method" : "POST"
221 }
222 ]
223 }
224 {{/code}}
225
226
227 ----
228
229 ==== Create new customer ====
230
231
232 (% id="HImportanttonote21" %)
233 ===== Important to note! =====
234
235 * Standard length of customerNo in Norway and Denmark is 7 characters (numeric only).
236 * Only use numeric characters and not with a leading zero for customerNo in Sweden, in order to use AutoGiro (Direct Debit).
237 * Dependency to legalEntity:
238 ** [[Late fee>>url:https://developer.payex.com/xwiki/wiki/developer/view/Main/Invoicing/invoice-service/invoice-service-apis/Supplementary%20features/?HLatefee]] will be added instead of reminder fee or collection claim fee when legalEntity is set to "business" (if specially contracted with PayEx and configured in ledger).
239 ** SSN (regNo) for private individuals will not be displayed in ledger reports due to GDPR. regNO will only be displayed when legalEntity is set till "business".
240 ** When invoice/claim is distributed by e-mail: If legalEntity is set to "consumer" the e-mail message will only include a link to PayEx Invoice Portal where the invoice/claim is available, otherwise a copy of the invoice/claim will be added in the e-mail message as a pdf-file.
241 ** Finland only: Different claim processes will be used depending on "consumer" or "business".
242
243 A new customer is created by making a POST call to the API.
244 See below table of properties that is supported when creating a new customer. The table below also reflects what properties you can expect when retreiving a customer through a "GET" request.
245
246 (% class="table-bordered table-striped" %)
247 |=(% style="width: 509px;" %)Property|=(% style="width: 161px;" %)Required|=(% style="width: 1852px;" %)Comment *
248 |(% style="width:509px" %)customerNo|(% style="width:161px" %)Yes*|(% style="width:1852px" %)Normally required, //exception is when the configuration on the ledger is set for payex to generate customer numbers, in that case CustomerNo must not be set in request.//
249 |(% style="width:509px" %)__**nationalIdentifier**__|(% style="width:161px" %)No*|(% style="width:1852px" %)Normally optional, //exception is when the configuration on the ledger is set for payex to generate customer numbers, in that case nationalIdentifier is required.//
250 |(% style="width:509px" %) nationalIdentifier.regNo|(% style="width:161px" %)Yes|(% style="width:1852px" %)
251 |(% style="width:509px" %) nationalIdentifier.countryCode|(% style="width:161px" %)Yes|(% style="width:1852px" %)
252 |(% style="width:509px" %)vatNo|(% style="width:161px" %)No*|(% style="width:1852px" %)Required if reverse tax is used
253 |(% style="width:509px" %)legalEntity|(% style="width:161px" %)No|(% style="width:1852px" %)
254 |(% style="width:509px" %)name|(% style="width:161px" %)Yes|(% style="width:1852px" %)
255 |(% style="width:509px" %)preferredLanguageCode|(% style="width:161px" %)No|(% style="width:1852px" %)
256 |(% style="width:509px" %)emailAddress|(% style="width:161px" %)No|(% style="width:1852px" %)
257 |(% style="width:509px" %)msisdn|(% style="width:161px" %)No|(% style="width:1852px" %)
258 |(% style="width:509px" %)protectedIdentity|(% style="width:161px" %)No|(% style="width:1852px" %)
259 |(% style="width:509px" %)distributionType|(% style="width:161px" %)No|(% style="width:1852px" %)
260 |(% style="width:509px" %)taxIdentificationNumber|(% style="width:161px" %)No|(% style="width:1852px" %)
261 |(% style="width:509px" %)__**eDIAddressInfo**__|(% style="width:161px" %)No|(% style="width:1852px" %)
262 |(% style="width:509px" %) eDIAddressInfo.van|(% style="width:161px" %)No*|(% style="width:1852px" %)This field is required for distribution method EInvoiceB2B (EDI) to be used
263 |(% style="width:509px" %) eDIAddressInfo.interChangeRecipient|(% style="width:161px" %)No|(% style="width:1852px" %)
264 |(% style="width:509px" %) eDIAddressInfo.BuyerId|(% style="width:161px" %)Yes|(% style="width:1852px" %)
265 |(% style="width:509px" %)**__legalAddress__**|(% style="width:161px" %)Yes|(% style="width:1852px" %)
266 |(% style="width:183px" %) addressee|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
267 |(% style="width:183px" %) streetAddress|(% style="width:1602px" %)No|(% style="width:1852px" %)
268 |(% style="width:183px" %) coAddress|(% style="width:1602px" %)No|(% style="width:1852px" %)
269 |(% style="width:183px" %) city|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
270 |(% style="width:183px" %) zipCode|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
271 |(% style="width:183px" %) countryCode|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
272 |(% style="width:509px" %)**__billingAddress__**|(% style="width:161px" %)No|(% style="width:1852px" %)
273 |(% style="width:183px" %) addressee|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
274 |(% style="width:183px" %) streetAddress|(% style="width:1602px" %)No|(% style="width:1852px" %)
275 |(% style="width:183px" %) coAddress|(% style="width:1602px" %)No|(% style="width:1852px" %)
276 |(% style="width:183px" %) city|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
277 |(% style="width:183px" %) zipCode|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
278 |(% style="width:183px" %) countryCode|(% style="width:1602px" %)Yes|(% style="width:1852px" %)
279
280 ===== Examples =====
281
282 (% class="wikigeneratedid" %)
283 Standard create customer
284
285 {{code language="http" title="**Request**"}}
286 POST /ledger/customer/v1/XXX/customers HTTP/1.1
287 Host: -
288 Authorization: Bearer <Token>
289 Content-Type: application/json
290
291 {
292 "customerNo" : "9999",
293 "nationalIdentifier": {
294 "regNo" : "YYYYMMDD-NNNN",
295 "countryCode" : "SE"
296 },
297 "vatNo" : "SE101010101001",
298 "legalEntity" : "consumer|business",
299 "name" : "Britt-Marie Axelstopp",
300 "emailAddress" : "britt@axelstopp.com",
301 "msisdn" : "+91485918841",
302 "eDIAddressInfo" : {
303 "VAN": "ABCXYZ",
304 "InterChangeRecipient": "Recipient_ID1",
305 "BuyerId": "123456"
306 },
307 "legalAddress" : {
308 "addressee" : "Britt-Marie Axelstopp",
309 "streetAddress" : "The street 18",
310 "coAddress" : "c/o Jansson",
311 "city" : "STOCKHOLM",
312 "zipCode" : "15961",
313 "countryCode" : "SE"
314 },
315 "distributionType": "postal",
316 "taxIdentificationNumber" : "123456789"
317 }
318 {{/code}}
319
320 (% id="HAccountresourceproperties" %)
321 ==== ====
322
323 {{code language="http" title="**Response**"}}
324 HTTP/1.1 201 CREATED
325 Content-Type: application/json
326
327 {
328 "@id" : "/ledger/customer/v1/XXX/customers/9999",
329 "customerNo" : " 9999"
330 }
331 {{/code}}
332
333 (% class="wikigeneratedid" id="HCreatecustomerwithbilling-address" %)
334 Create customer with billing-address
335
336 {{code language="http" title="**Request**"}}
337 POST /ledger/customer/v1/XXX/customers HTTP/1.1
338 Host: -
339 Authorization: Bearer <Token>
340 Content-Type: application/json
341
342 {
343 "customerNo" : "9999",
344 "nationalIdentifier": {
345 "regNo" : "YYYYMMDD-NNNN",
346 "countryCode" : "SE"
347 },
348 "vatNo" : "SE101010101001",
349 "legalEntity" : "consumer|business",
350 "name" : "Britt-Marie Axelstopp",
351 "emailAddress" : "britt@axelstopp.com",
352 "msisdn" : "+91485918841",
353 "eDIAddressInfo" : {
354 "VAN": "ABCXYZ",
355 "InterChangeRecipient": "Recipient_ID1",
356 "BuyerId": "123456"
357 },
358 "legalAddress" : {
359 "addressee" : "Britt-Marie Axelstopp",
360 "streetAddress" : "The street 18",
361 "coAddress" : "c/o Jansson",
362 "city" : "STOCKHOLM",
363 "zipCode" : "15961",
364 "countryCode" : "SE"
365 },
366 "billingAddress" : {
367 "addressee" : "Kalle Axelstopp",
368 "streetAddress" : "Axelgatan 18",
369 "city" : "STOCKHOLM",
370 "zipCode" : "16872",
371 "countryCode" : "SE"
372 }
373 }
374 {{/code}}
375
376 (% id="HAccountresourceproperties" %)
377 ==== ====
378
379 {{code language="http" title="**Response**"}}
380 HTTP/1.1 201 CREATED
381 Content-Type: application/json
382
383 {
384 "@id" : "/ledger/customer/v1/XXX/customers/9999",
385 "customerNo" : " 9999"
386 }
387 {{/code}}
388
389 ==== ====
390
391 ----
392
393 ==== Update customer ====
394
395 Some properties of the customer can be updated through this API. Properties will only be updated if included in the request. //To delete a property, for example, the property must be included in the request and have the value set to null (see examples below). //
396
397 The following customer properties is possible to update through a patch call
398
399 (% class="table-bordered table-striped" %)
400 |=(% style="width: 509px;" %)Property
401 |(% style="width:509px" %)emailAddress
402 |(% style="width:509px" %)legalStatus
403 |(% style="width:509px" %)preferredLanguageCode
404 |(% style="width:509px" %)protectedIdentity
405 |(% style="width:509px" %)msisdn
406 |(% style="width:509px" %)distributionType
407 |(% style="width:509px" %)taxIdentificationNumber
408 |(% style="width:509px" %)__**eDIAddressInfo**__
409 |(% style="width:509px" %) eDIAddressInfo.van
410 |(% style="width:509px" %) eDIAddressInfo.interChangeRecipient
411 |(% style="width:509px" %) eDIAddressInfo.BuyerId
412
413 ===== Examples =====
414
415 Update all properties
416
417 {{code language="http" title="**Request**"}}
418 PATCH /ledger/customer/v1/XXX/customers/NNN HTTP/1.1
419 Host: -
420 Authorization: Bearer <Token>
421 Content-Type: application/json
422
423 {
424 "emailAddress" : "britt@axelstopp.com",
425 "protectedIdentity": false,
426 "preferredLanguageCode": "SV",
427 "legalStatus": "active",
428 "msisdn" : "+91485918841",
429 "eDIAddressInfo" : {
430 "VAN": "ABCXYZ",
431 "InterChangeRecipient": "Recipient_ID1",
432 "BuyerId": "123456"
433 },
434 "distributionType": "postal",
435 "taxIdentificationNumber" : "987654321"
436 }
437 {{/code}}
438
439 Update only emailAddress
440
441 {{code language="http" title="**Request**"}}
442 PATCH /ledger/customer/v1/XXX/customers/NNN HTTP/1.1
443 Host: -
444 Authorization: Bearer <Token>
445 Content-Type: application/json
446
447 {
448 "emailAddress" : "britt@axelstopp.com"
449 }
450 {{/code}}
451
452 Update emailAddress and delete msisdn
453
454 {{code language="http" title="**Request**"}}
455 PATCH /ledger/customer/v1/XXX/customers/NNN HTTP/1.1
456 Host: -
457 Authorization: Bearer <Token>
458 Content-Type: application/json
459
460 {
461 "emailAddress" : "britt@axelstopp.com",
462 "msisdn" : null
463 }
464 {{/code}}
465
466 Remove EDIAddressInfo on a customer
467
468 {{code language="http" title="**Request**"}}
469 PATCH /ledger/customer/v1/XXX/customers/NNN HTTP/1.1
470 Host: -
471 Authorization: Bearer <Token>
472 Content-Type: application/json
473
474 {
475 "eDIAddressInfo" : null
476 }
477 {{/code}}
478
479
480 ----
481
482 (% id="HAccountresourceproperties" %)
483 ==== Customer resource properties ====
484
485 (% class="table-bordered table-striped" %)
486 |=(% style="width: 343px;" %)Property|=(% style="width: 137px;" %)Data type|=(% style="width: 230px;" %)Format|=(% style="width: 1076px;" %)Description
487 |(% style="width:343px" %)@id |(% style="width:137px" %)string|(% style="width:230px" %) |(% style="width:1076px" %)Uri of the specific customer
488 |(% style="width:343px" %)customerNo|(% style="width:137px" %)string|(% style="width:230px" %)MinLength: 1
489 MaxLength: 15*
490 numeric, 1-9 |(% style="width:1076px" %)The unique identifier of the customer
491 MaxLength may differ depending on configuration
492 KID (Norway)
493 |(% style="width:343px" %)__**nationalIdentifier**__|(% style="width:137px" %)object|(% style="width:230px" %) |(% style="width:1076px" %)
494 |(% style="width:343px" %) nationalIdentifier.regNo|(% style="width:137px" %)string|(% style="width:230px" %)Country specific|(% style="width:1076px" %)Sweden: YYYYMMDD-NNNC
495 Norway: DDMMYYNNNNN
496 |(% style="width:343px" %) nationalIdentifier.countryCode|(% style="width:137px" %)string|(% style="width:230px" %)[[ISO 3166-1 alpha-2>>url:https://sv.wikipedia.org/wiki/ISO_3166]]|(% style="width:1076px" %)
497 |(% style="width:343px" %)vatNo|(% style="width:137px" %)string|(% style="width:230px" %)MinLength: 7
498 MaxLength: 17
499 Regex pattern:
500 [A-Z]{2}.*|(% style="width:1076px" %)Customer VAT registration number. Mandatory if reverse tax is used. Must conform to country specific algorithm
501 |(% style="width:343px" %)legalEntity|(% style="width:137px" %)string|(% style="width:230px" %) |(% style="width:1076px" %)Valid values:
502 "consumer"
503 "business"
504 |(% style="width:343px" %)name|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 72
505 Regex?|(% style="width:1076px" %)Full name of end-customer
506 |(% style="width:343px" %)emailAddress|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 254
507 Regex pattern: [^@]+@[^\.]+\..+|(% style="width:1076px" %)
508 |(% style="width:343px" %)protectedIdentity|(% style="width:137px" %)bool|(% style="width:230px" %) |(% style="width:1076px" %)Set to true if the customer has protected identity
509 Postal distribution will be handled by "Skatteverket". **Only supported in Sweden**
510 |(% style="width:343px" %)preferredLanguageCode|(% style="width:137px" %)string|(% style="width:230px" %) |(% style="width:1076px" %)(((
511 Valid values:
512
513 * **SV**
514 * **NO**
515 * **DA**
516 * **FI**
517 * **EN**
518 )))
519 |(% style="width:343px" %)legalStatus|(% style="width:137px" %)string|(% style="width:230px" %) |(% style="width:1076px" %)(((
520 Valid values:
521
522 * active
523 * deceased
524 )))
525 |(% style="width:343px" %)msisdn|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 15
526 Minlength: 5
527 +NNNN|(% style="width:1076px" %) "Mobile Subscriber Integrated Services Digital Network Number", ie. Cellphone number
528 Countrycode is always required as the example below
529 +46720000000
530 |(% style="width:343px" %)distributionType|(% style="width:137px" %)string|(% style="width:230px" %) |(% style="width:1076px" %)Sets distribution type. Allowed values are:(((
531 * **postal **
532 * **noDistribution **
533 )))
534 |(% style="width:343px" %)taxIdentificationNumber|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 20
535 Minlength: 1|(% style="width:1076px" %)Is an identification number used by the Internal Revenue Service (IRS) in the administration of tax laws
536 |(% style="width:343px" %)**activeConsents**|(% style="width:137px" %)object|(% style="width:230px" %) |(% style="width:1076px" %)List of strings with possible values:(((
537 * (((
538 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
539 **Autogiro**
540 )))
541 * (((
542 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
543 **Avtalegiro**
544 )))
545 * (((
546 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
547 **Betalingsservice**
548 )))
549 * (((
550 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
551 **RecurringCard**
552 )))
553 * (((
554 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
555 **RecurringInvoiceToken**
556 )))
557 * (((
558 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
559 **EInvoice**
560 )))
561 * (((
562 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
563 **Kivra**
564 )))
565 * (((
566 (% data-pm-slice="1 1 [~"table~",{~"isNumberColumnEnabled~":false,~"layout~":~"default~",~"__autoSize~":false,~"localId~":~"c8de3c26-1280-4cb1-a8ea-e56f5b08d910~"},~"tableRow~",null,~"tableCell~",{~"colspan~":1,~"rowspan~":1,~"colwidth~":null,~"background~":null}]" %)
567 **EBoks**
568 )))
569 )))
570 |(% style="width:343px" %)__**eDIAddressInfo**__|(% style="width:137px" %)object|(% style="width:230px" %) |(% style="width:1076px" %)EDI addressing info
571 |(% style="width:343px" %) eDIAddressInfo.van|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 255|(% style="width:1076px" %)(((
572 Buyer VAN identifier (OperatorId)
573 )))
574 |(% style="width:343px" %) eDIAddressInfo.interChangeRecipient|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 13|(% style="width:1076px" %)Routing address. EAN
575 |(% style="width:343px" %) eDIAddressInfo.BuyerId|(% style="width:137px" %)string|(% style="width:230px" %)Maxlength: 13|(% style="width:1076px" %)NAD_BY/Buyerparty. EAN/Corporate identity number
576 |(% style="width:343px" %)legalAddress|(% style="width:137px" %)uri|(% style="width:230px" %) |(% style="width:1076px" %)reference to the customers legal address
577 |(% style="width:343px" %)billingAddress|(% style="width:137px" %)uri|(% style="width:230px" %) |(% style="width:1076px" %)reference to the customer billing address
578 |(% style="width:343px" %)surpluses|(% style="width:137px" %)uri|(% style="width:230px" %) |(% style="width:1076px" %)reference to the customer surpluses
579
580 ==== Operations ====
581
582 Depending on the current permissions the following operations is supported on the customer resource
583
584 ===== add-billing-address =====
585
586 Method: POST
587 This operation will be available if no billing-address exists on the customer, see [[billing-address>>Main.Invoicing.invoice-service.Implementation guide.Technical reference.API.CustomerApi.WebHome||anchor="HAddabilling-address"]] resource for more details
588
589 ----
590
591 == Update-kyc-answers ==
592
593
594 ==== Create Update-kyc-answer ====
595
596 When exposed on customer resources operations list it's a indication previous KYC answers up for renewal. Able update KYC with this operation even if current aren't expired but won't be suggested on the customer resource
597
598 {{code language="http" title="**Request**"}}
599 POST /ledger/customer/v1/{ownerNo}/customers/{customerNo}/update-kyc-answers HTTP/1.1
600 Host: -
601 Authorization: Bearer<Token>
602 Content-Type: application/json
603
604 {
605 "answers": [
606 {
607 "questionCode": "taxable_outside_sweden",
608 "answerCode": "no"
609 },
610 {
611 "questionCode": "multiple_citizenship",
612 "answerCode": "yes"
613 },
614 {
615 "questionCode": "citizen_ship_country_codes",
616 "answerCode": "SWE"
617 },
618 {
619 "questionCode": "citizen_ship_country_codes",
620 "answerCode": "NOR"
621 }
622 ]
623 }
624 {{/code}}
625
626
627 **Request object specification**
628
629 (% class="table-bordered table-striped" %)
630 |=Property |=Data type|=Format|=Required|=Description
631 |=answers |array | |Yes |
632 | questionCode |string | |Yes |The code definition of the question
633 | answerCode |string | |Yes |The code definition of the answer
634
635 {{code language="http" title="**Response**"}}
636 HTTP/1.1 204 NoContent
637 Content-Type: application/json
638 {}
639 {{/code}}
640
641
642 **Possible problems**
643
644 (% class="table-bordered table-striped" %)
645 |=Http status |=Problem type |=Description
646 |400 |validation |Occurs if the validation of the request fails, it is described in the problem why the input is invalid.
647 |404 |not-found |Occurs if the customer found or if kyc is not configured on this ledger.
648 |409 |kyc-configuration |Occurs if ledger is not currently configured for KYC
649 |500 |fatal |Unexpected error, logs may give details about the problem
650
651 == Surpluses ==
652
653 A surplus is the remaining value from a payment that was greater than the current debt, also referred as an 'overpayment'. Each instance of an overpayment will create a new surplus. A surplus will often have a connection to an account or invoice based of where the payment was placed but surpluses without connection to an account or invoice also exist. Surpluses can be used to settle upcoming debt or be disbursed.
654
655 ==== Get specified Surplus information ====
656
657 {{code language="http" title="**Request**"}}
658 GET /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY HTTP/1.1
659 Host: -
660 Authorization: Bearer <Token>
661 Content-Type: application/json
662 {{/code}}
663
664
665 {{code language="http" title="**Response**"}}
666 HTTP/1.1 200 OK
667 Content-Type: application/json
668
669 {
670 "surplusId": "YYY",
671 "balance": 10.00,
672 "currency": "SEK",
673 "date": "2023-01-01T00:00:00",
674 "status": "open",
675 "invoice": "/ledger/invoice/v1/XXX/invoices/AAA",
676 "account": "/ledger/account/v1/XXX/accounts/BBB",
677 "operations": [],
678 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses/YYY"
679
680 {{/code}}
681
682 ==== Get list of Surpluses Information ====
683
684 {{code language="http" title="**Request**"}}
685 GET /ledger/customer/v1/XXX/customers/NNN/surpluses HTTP/1.1
686 Host: -
687 Authorization: Bearer <Token>
688 Content-Type: application/json
689 {{/code}}
690
691
692 {{code language="http" title="**Response**"}}
693 HTTP/1.1 200 OK
694 Content-Type: application/json
695
696 {
697 "items": [
698 {
699 "surplusId": "123",
700 "balance": 10.00,
701 "currency": "SEK",
702 "date": "2023-01-01T00:00:00",
703 "status": "open",
704 "invoice": "/ledger/invoice/v1/XXX/invoices/AAA",
705 "operations": [],
706 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses/123"
707
708 },
709 {
710 "surplusId": "456",
711 "balance": 20.00,
712 "currency": "SEK",
713 "date": "2023-01-02T00:00:00",
714 "status": "pending-disbursement",
715 "account": "/ledger/account/v1/XXX/accounts/BBB",
716 "operations": [],
717 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses/456"
718
719 },
720 {
721 "surplusId": "789",
722 "balance": 30.00,
723 "currency": "SEK",
724 "date": "2023-01-03T00:00:00",
725 "status": "pending-regulate",
726 "invoice": "/ledger/invoice/v1/XXX/invoices/AAA",
727 "operations": [],
728 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses/789"
729
730 }
731 ],
732 "navigation": {
733 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses",
734 "first": "/ledger/customer/v1/XXX/customers/NNN/surpluses?skip=0",
735 "previous": "/ledger/customer/v1/XXX/customers/NNN/surpluses?skip=0"
736 }
737 }
738 {{/code}}
739
740
741 ==== Surpluses resource properties ====
742
743 (% class="table-bordered table-striped" %)
744 |=(% style="width: 248px;" %)Property|=(% style="width: 108px;" %)Data type|=(% style="width: 233px;" %)Format|=(% style="width: 1196px;" %)Description
745 |(% style="width:248px" %)@id |(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: |(% style="width:1196px" %)Uri of the specific surplus
746 |(% style="width:248px" %)surplusId|(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: 50|(% style="width:1196px" %)Value is not considered case sensitive
747 |(% style="width:248px" %)balance|(% style="width:108px" %)string|(% style="width:233px" %) |(% style="width:1196px" %)Amount value for the surplus, always a positive value
748 |(% style="width:248px" %)currency|(% style="width:108px" %)string|(% style="width:233px" %)[[ISO 4217>>https://sv.wikipedia.org/wiki/ISO_4217]]|(% style="width:1196px" %)
749 |(% style="width:248px" %)date|(% style="width:108px" %)date|(% style="width:233px" %)yyyy-MM-ddTHH:mm:ss|(% style="width:1196px" %)Surplus creation date
750 |(% style="width:248px" %)status|(% style="width:108px" %)string|(% style="width:233px" %) |(% style="width:1196px" %)Expected statuses: open ~| pending-disbursement ~| pending-regulate
751 After a surplus has been depleted it will no longer be returned from the API
752 |(% style="width:248px" %)invoice|(% style="width:108px" %)string|(% style="width:233px" %) |(% style="width:1196px" %)Relative Uri to the connected source of the surplus through the Invoice API. A surplus can have a connection to an account or invoice but not both.
753 |(% style="width:248px" %)account|(% style="width:108px" %)string|(% style="width:233px" %) |(% style="width:1196px" %)Relative Uri to the connected source of the surplus through the Account API. A surplus can have a connection to an account or invoice but not both.
754
755 ----
756
757 == (% style="color:inherit; font-family:inherit" %)Active-Disbursement-Orders(%%) ==
758
759 This shows if current surplus has been ordered to disburse the surplus to the end customer.
760
761 ==== Get active disbursement orders ====
762
763
764 {{code language="http" title="**Request**"}}
765 GET /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders HTTP/1.1
766 Host: -
767 Authorization: Bearer <Token>
768 Content-Type: application/json
769 {{/code}}
770
771
772 {{code language="http" title="**Response**"}}
773 HTTP/1.1 200 OK
774 Content-Type: application/json
775
776 {
777 "items": [
778 {
779 "operations": [],
780 "swedishBankAccount": {
781 "accountNo": "3300-1010101010",
782 "accountType": "BKSE"
783 }
784 }
785 ],
786 "navigation": {
787 "@id": "/ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders"
788 }
789 }
790 {{/code}}
791
792 (% id="HOperations" %)
793 ==== Operations ====
794
795 Depending on the current permissions the following operations is supported on the surplus resource
796
797 (% id="Hadd-billing-address" %)
798 ===== add-disbursement-orders =====
799
800 Method: POST
801 This operation will be available if agreed with payex.
802
803 (% id="HActive-payment-ordersresourceproperties" %)
804 ==== request properties ====
805
806 (% class="table-bordered table-striped" %)
807 |=Property|=Data type|=Required|=Description
808 |__**norwegianBankAccount**__|object|No*|
809 | accountNo|string|Yes|
810 |__**swedishBankAccount**__|object|No*|
811 | clearingNo|string|Yes|
812 | accountNo|string|Yes|
813 |__**international**__|object|No*|
814 | iban|string|Yes|
815 | bic|string|Yes|
816 |__**swedishSus**__|object|No*|
817 |**nationalIdentifier**|object|Yes|
818 | regNo|string|Yes|
819 | countryCode|string|Yes|
820 |**address**|object|Yes|
821 | addressee|string|Yes|
822 | streetAddress|string|No|
823 | coAddress|string|No|
824 | city|string|Yes|
825 | zipCode|string|Yes|
826 | countryCode|string|Yes|
827 | | | |
828
829 //* One and only one of the specified objects can be set at each request//
830
831 Examples
832
833 Create disbursement with swedish bank account
834
835 {{code language="http" title="**Request**"}}
836 POST /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders HTTP/1.1
837 Host: -
838 Authorization: Bearer <Token>
839 Content-Type: application/json
840
841 {
842 "SwedishBankAccount" : {
843 "AccountNo":"944-1049000",
844 "AccountType":"BGSE"
845 }
846 }
847 {{/code}}
848
849 Create a disbursement order with a norwegian bankaccount
850
851 {{code language="http" title="**Request**"}}
852 POST /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders HTTP/1.1
853 Host: -
854 Authorization: Bearer <Token>
855 Content-Type: application/json
856
857 {
858 "norwegianBankAccount" : {
859 "accountNo" : "1234"
860 }
861 }
862 {{/code}}
863
864 Create a disbursement order with an international bankaccount
865
866 {{code language="http" title="**Request**"}}
867 POST /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders HTTP/1.1
868 Host: -
869 Authorization: Bearer <Token>
870 Content-Type: application/json
871
872 {
873 "international" : {
874 "iban" : "123456",
875 "bic" : "SWED..."
876 }
877 }
878 {{/code}}
879
880 Create disbursement order using "Swedbanks lön- och utbetalningssystem (SUS)"
881
882 {{code language="http" title="**Request**"}}
883 POST /ledger/customer/v1/XXX/customers/NNN/surpluses/YYY/active-disbursement-orders HTTP/1.1
884 Host: -
885 Authorization: Bearer <Token>
886 Content-Type: application/json
887
888 {
889 "swedishSus" : {
890 "nationalIdentifier": {
891 "regNo" : "YYYYMMDD-NNNN",
892 "countryCode" : "SE"
893 },
894 "address" : {
895 "addressee" : "Kalle Axelstopp",
896 "streetAddress" : "Axelgatan 18",
897 "coAddress" : null,
898 "city" : "STOCKHOLM",
899 "zipCode" : "16872",
900 "countryCode" : "se",
901 }
902 }
903 }
904 {{/code}}
905
906 (% aria-label="macro:code widget" contenteditable="false" role="region" tabindex="-1" %)
907 (((
908
909 )))
910
911 == (% style="color:inherit; font-family:inherit" %)Legal-address(%%) ==
912
913 The legal address is where claims is normally sent to. It is required for a customer to have a legal address registered
914
915 ==== Get the legal address of the customer ====
916
917 {{code language="http" title="**Request**"}}
918 GET /ledger/customer/v1/XXX/customers/NNN/legal-address HTTP/1.1
919 Host: -
920 Authorization: Bearer <Token>
921 Content-Type: application/json
922 {{/code}}
923
924
925 {{code language="http" title="**Response**"}}
926 HTTP/1.1 200 OK
927 Content-Type: application/json
928
929 {
930 "addressee" : "Britt-Marie Axelstopp",
931 "streetAddress" : "The street 18",
932 "coAddress" : "c/o Jansson",
933 "city" : "STOCKHOLM",
934 "zipCode" : "15961",
935 "countryCode" : "SE",
936 "operations" :
937 [
938 {
939 "rel" : "update",
940 "href" : "/ledger/customer/v1/XXX/customers/9999/legal-address",
941 "method" : "PUT"
942 },
943 {
944 "rel" : "update-legal-address-from-population-register",
945 "href" : "/ledger/customer/v1/XXX/customers/9999/legal-address/update-legal-address-from-population-register",
946 "method" : "POST"
947 }
948 ]
949 }
950 {{/code}}
951
952 ==== Operations ====
953
954 Depending on the current permissions the following operations is supported on the legal address resource
955
956 ===== Update (replace) =====
957
958 Method: PUT
959 Use this operation to update the address, this "PUT" operation will replace the existing billing-address with the address specified in the request body.
960
961 (% class="table-bordered table-striped" %)
962 |=(% style="width: 183px;" %)Property|=(% style="width: 1602px;" %)Required
963 |(% style="width:183px" %)addressee|(% style="width:1602px" %)Yes
964 |(% style="width:183px" %)streetAddress|(% style="width:1602px" %)No
965 |(% style="width:183px" %)coAddress|(% style="width:1602px" %)No
966 |(% style="width:183px" %)city|(% style="width:1602px" %)Yes
967 |(% style="width:183px" %)zipCode|(% style="width:1602px" %)Yes
968 |(% style="width:183px" %)countryCode|(% style="width:1602px" %)Yes
969
970 Example
971
972 {{code language="http" title="**Request**"}}
973 PUT /ledger/customer/v1/XXX/customers/NNN/legal-address HTTP/1.1
974 Host: -
975 Authorization: Bearer <Token>
976 Content-Type: application/json
977
978 {
979 "addressee" : "Kalle Axelstopp",
980 "streetAddress" : "Axelgatan 18",
981 "city" : "STOCKHOLM",
982 "zipCode" : "16872",
983 "countryCode" : "SE"
984 }
985 {{/code}}
986
987
988 ----
989
990 ===== update-legal-address-from-population-register =====
991
992 Method: POST
993 Execution of this operation will result in an attempt to retrieve (and replace) the customer's legal address from the population registry.
994
995 (% class="box infomessage" %)
996 (((
997 Access to this operation is not normally granted, unless otherwise agreed.
998 )))
999
1000 {{code language="http" title="**Request**"}}
1001 POST /ledger/customer/v1/XXX/customers/NNN/legal-address/update-legal-address-from-population-register HTTP/1.1
1002 Host: -
1003 Authorization: Bearer <Token>
1004 Content-Type: application/json
1005
1006 {
1007 }
1008 {{/code}}
1009
1010 ----
1011
1012 ==== Legal-address resource properties ====
1013
1014 (% class="table-bordered table-striped" %)
1015 |=(% style="width: 161px;" %)Property|=(% style="width: 121px;" %)Data type|=(% style="width: 195px;" %)Format|=(% style="width: 1309px;" %)Description
1016 |(% style="width:161px" %)addressee|(% style="width:121px" %)string|(% style="width:195px" %)Maxlength: 72|(% style="width:1309px" %)Fullname
1017 |(% style="width:161px" %)streetAddress|(% style="width:121px" %)string|(% style="width:195px" %)Maxlength: 72|(% style="width:1309px" %)
1018 |(% style="width:161px" %)coAddress|(% style="width:121px" %)string|(% style="width:195px" %)Maxlength: 72|(% style="width:1309px" %)Care of (C/O) name. This is optional.
1019 |(% style="width:161px" %)city|(% style="width:121px" %)string|(% style="width:195px" %)Maxlength: 27|(% style="width:1309px" %)
1020 |(% style="width:161px" %)zipCode|(% style="width:121px" %)string|(% style="width:195px" %)Maxlength: 9|(% style="width:1309px" %)ZipCode without whitespaces
1021 |(% style="width:161px" %)countryCode|(% style="width:121px" %)string|(% style="width:195px" %)[[ISO 3166-1 alpha-2>>url:https://sv.wikipedia.org/wiki/ISO_3166]]|(% style="width:1309px" %)
1022
1023 ----
1024
1025 == Billing-address ==
1026
1027 The billing address is where invoices/bills/letters etc. is normally sent to.This address is optional
1028
1029 ==== Get the billing address of the customer ====
1030
1031 {{code language="http" title="**Request**"}}
1032 GET /ledger/customer/v1/XXX/customers/NNN/billing-address HTTP/1.1
1033 Host: -
1034 Authorization: Bearer <Token>
1035 Content-Type: application/json
1036 {{/code}}
1037
1038
1039 {{code language="http" title="**Response**"}}
1040 HTTP/1.1 200 OK
1041 Content-Type: application/json
1042
1043 {
1044 "addressee" : "Kalle Axelstopp",
1045 "streetAddress" : "Axelgatan 18",
1046 "coAddress" : "c/o Jansson",
1047 "city" : "STOCKHOLM",
1048 "zipCode" : "16872",
1049 "countryCode" : "SE",
1050 "operations" :
1051 [
1052 {
1053 "rel" : "update",
1054 "href" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
1055 "method" : "PUT"
1056 },
1057 {
1058 "rel" : "delete",
1059 "href" : "/ledger/customer/v1/XXX/customers/9999/billing-address",
1060 "method" : "DELETE"
1061 }
1062 ]
1063 }
1064 {{/code}}
1065
1066 ==== Add a billing-address ====
1067
1068 (% class="table-bordered table-striped" %)
1069 |=(% style="width: 183px;" %)Property|=(% style="width: 1602px;" %)Required
1070 |(% style="width:183px" %)addressee|(% style="width:1602px" %)Yes
1071 |(% style="width:183px" %)streetAddress|(% style="width:1602px" %)No
1072 |(% style="width:183px" %)coAddress|(% style="width:1602px" %)No
1073 |(% style="width:183px" %)city|(% style="width:1602px" %)Yes
1074 |(% style="width:183px" %)zipCode|(% style="width:1602px" %)Yes
1075 |(% style="width:183px" %)countryCode|(% style="width:1602px" %)Yes
1076
1077 {{code language="http" title="**Request**"}}
1078 POST /ledger/customer/v1/XXX/customers/NNN/billing-address HTTP/1.1
1079 Host: -
1080 Authorization: Bearer <Token>
1081 Content-Type: application/json
1082
1083 {
1084 "addressee" : "Kalle Axelstopp",
1085 "streetAddress" : "Axelgatan 18",
1086 "city" : "STOCKHOLM",
1087 "zipCode" : "16872",
1088 "countryCode" : "SE"
1089 }
1090 {{/code}}
1091
1092 ==== Operations ====
1093
1094 Depending on the current permissions the following operations is supported on the billing address resource
1095
1096 ===== Update (replace) =====
1097
1098 Method: PUT
1099 Use this operation to update the address, the "PUT" body of the request should be accoring to the properties of the resource.
1100
1101 (% class="table-bordered table-striped" %)
1102 |=(% style="width: 183px;" %)Property|=(% style="width: 1602px;" %)Required
1103 |(% style="width:183px" %)addressee|(% style="width:1602px" %)Yes
1104 |(% style="width:183px" %)streetAddress|(% style="width:1602px" %)No
1105 |(% style="width:183px" %)coAddress|(% style="width:1602px" %)No
1106 |(% style="width:183px" %)city|(% style="width:1602px" %)Yes
1107 |(% style="width:183px" %)zipCode|(% style="width:1602px" %)Yes
1108 |(% style="width:183px" %)countryCode|(% style="width:1602px" %)Yes
1109
1110 {{code language="http" title="**Request**"}}
1111 PUT /ledger/customer/v1/XXX/customers/NNN/billing-address HTTP/1.1
1112 Host: -
1113 Authorization: Bearer <Token>
1114 Content-Type: application/json
1115
1116 {
1117 "addressee" : "Kalle Axelstopp",
1118 "streetAddress" : "Axelgatan 18",
1119 "city" : "STOCKHOLM",
1120 "zipCode" : "16872",
1121 "countryCode" : "SE"
1122 }
1123 {{/code}}
1124
1125 ===== Delete =====
1126
1127 Method: DELETE
1128 Use this operation to delete the billing address.
1129
1130 {{code language="http" title="**Request**"}}
1131 DELETE /ledger/customer/v1/XXX/customers/NNN/billing-address HTTP/1.1
1132 Host: -
1133 Authorization: Bearer <Token>
1134 Content-Type: application/json
1135
1136 {
1137 }
1138 {{/code}}
1139
1140 ==== Billing-address resource properties ====
1141
1142 (% class="table-bordered table-striped" %)
1143 |=Property|=(% style="width: 94px;" %)Data type|=(% style="width: 255px;" %)Format|=(% style="width: 1053px;" %)Description
1144 |addressee|(% style="width:94px" %)string|(% style="width:255px" %)Maxlength: 72|(% style="width:1053px" %)Fullname
1145 |streetAddress|(% style="width:94px" %)string|(% style="width:255px" %)Maxlength: 72|(% style="width:1053px" %)
1146 |coAddress|(% style="width:94px" %)string|(% style="width:255px" %)Maxlength: 72|(% style="width:1053px" %)Care of (C/O) name. This is optional.
1147 |city|(% style="width:94px" %)string|(% style="width:255px" %)Maxlength: 27|(% style="width:1053px" %)
1148 |zipCode|(% style="width:94px" %)string|(% style="width:255px" %)Maxlength: 9|(% style="width:1053px" %)ZipCode without whitespaces
1149 |countryCode|(% style="width:94px" %)string|(% style="width:255px" %)[[ISO 3166-1 alpha-2>>url:https://sv.wikipedia.org/wiki/ISO_3166]]|(% style="width:1053px" %)
1150
1151 ----
1152
1153 == Consent ==
1154
1155 The consent resource is used to get the underlying resources that display information or enable registration of a customer's consent.
1156
1157 ==== Get the underlying consent resources of the customer ====
1158
1159 {{code language="http" title="**Request**"}}
1160 GET /ledger/customer/v1/XXX/customers/NNN/consent HTTP/1.1
1161 Host: -
1162 Authorization: Bearer <Token>
1163 Content-Type: application/json
1164 {{/code}}
1165
1166
1167 {{code language="http" title="**Response**"}}
1168 HTTP/1.1 200 OK
1169 Content-Type: application/json
1170
1171 {
1172 "recurringCard": "/ledger/customer/v1/XXX/customers/NNN/consent/recurring-card",
1173 "recurringCardRedirectRegistration": "/ledger/customer/v1/XXX/customers/NNN/consent/recurring-card-redirect-registration"
1174 }
1175 {{/code}}
1176
1177 ==== Consent resource properties ====
1178
1179 (% class="table-bordered table-striped" %)
1180 |=Property|=(% style="width: 94px;" %)Data type|=(% style="width: 255px;" %)Format|=(% style="width: 1053px;" %)Description
1181 |recurringCard|(% style="width:94px" %)string|(% style="width:255px" %)Path|(% style="width:1053px" %)Endpoint to resource
1182 |recurringCardRedirectRegistration|(% style="width:94px" %)string|(% style="width:255px" %)Path|(% style="width:1053px" %)Endpoint to resource
1183
1184 ----
1185
1186 ==== Recurring-card ====
1187
1188 This resource provides details about the customer's active Recurring Card Consent and the ability to remove it.
1189
1190 ===== Get customer active Recurring Card Consent =====
1191
1192 {{code language="http" title="**Request**"}}
1193 GET /ledger/customer/v1/XXX/customers/NNN/consent/recurring-card HTTP/1.1
1194 Host: -
1195 Authorization: Bearer <Token>
1196 Content-Type: application/json
1197 {{/code}}
1198
1199
1200 {{code language="http" title="**Response**"}}
1201 HTTP/1.1 200 OK
1202 Content-Type: application/json
1203
1204 {
1205 "cardToken": "2eb28854-07ec-4e88-b672-7c61cc54b461",
1206 "consentExpiryDate": "04-2035",
1207 "instrumentDisplayName": "551000******1232",
1208 "cardExpiryDate": "04/2035"
1209 }
1210 {{/code}}
1211
1212 ===== Delete customer active Recurring Card Consent =====
1213
1214 {{code language="http" title="**Request**"}}
1215 DELETE /ledger/customer/v1/XXX/customers/NNN/consent/recurring-card HTTP/1.1
1216 Host: -
1217 Authorization: Bearer <Token>
1218 Content-Type: application/json
1219
1220 {
1221 }
1222 {{/code}}
1223
1224 {{code language="http" title="**Response**"}}
1225 HTTP/1.1 204 NoContent
1226 Content-Type: application/json
1227
1228 {
1229 }
1230 {{/code}}
1231
1232 ===== Recurring-card resource properties =====
1233
1234 (% class="table-bordered table-striped" %)
1235 |=Property|=(% style="width: 94px;" %)Data type|=(% style="width: 255px;" %)Format|=(% style="width: 1053px;" %)Description
1236 |cardToken|(% style="width:94px" %)string|(% style="width:255px" %)Guid|(% style="width:1053px" %)Card Token Id
1237 |consentExpiryDate|(% style="width:94px" %)string|(% style="width:255px" %)Date (MM-yyyy)|(% style="width:1053px" %)Expiry date of the consent
1238 |instrumentDisplayName|(% style="width:94px" %)string|(% style="width:255px" %)Masked number|(% style="width:1053px" %)Masked card number used in the presentation layer
1239 |cardExpiryDate|(% style="width:94px" %)string|(% style="width:255px" %)Date (MM/yyyy)|(% style="width:1053px" %)Expiry date of the card
1240
1241 ----
1242
1243 ==== Recurring-card-redirect-registration ====
1244
1245 Initializes the customer's Recurring Card registration with redirect to SwedbankPay. The resource should be inquired until the status reaches an end status. Only one registration can be active at a time.
1246
1247 ===== Start a Recurring Card registration =====
1248
1249 (% class="table-bordered table-striped" %)
1250 |=(% style="width: 509px;" %)Property|=(% style="width: 161px;" %)Required|=(% style="width: 1852px;" %)Comment
1251 |(% style="width:509px" %)completeUrl|(% style="width:161px" %)Yes|(% style="width:1852px" %)Redirect Url to be used if the user completes the card verification process.
1252 |(% style="width:509px" %)cancelUrl|(% style="width:161px" %)Yes|(% style="width:1852px" %)Redirect Url to be used if the user cancels the card verification process.
1253 |(% style="width:509px" %)language|(% style="width:161px" %)Yes|(% style="width:1852px" %)A language specified in the ISO 639-1 language code and with two letter country codes in the format "xx-YY". The following pairs are available: "en-US", "sv-SE", "nb-NO", "da-DK" and "fi-FI".
1254
1255 {{code language="http" title="**Request**"}}
1256 POST /ledger/customer/v1/XXX/customers/NNN/consent/recurring-card-redirect-registration HTTP/1.1
1257 Host: -
1258 Authorization: Bearer <Token>
1259 Content-Type: application/json
1260
1261 {
1262 "completeUrl": "https://www.google.com/search?q=cancelurl",
1263 "cancelUrl": "https://www.google.com/search?q=completeurl",
1264 "language": "en-US"
1265 }
1266 {{/code}}
1267
1268
1269 {{code language="http" title="**Response**"}}
1270 HTTP/1.1 200 OK
1271 Content-Type: application/json
1272
1273 {
1274 "redirectUrl": "https://ecom.externalintegration.payex.com/checkout/abc123",
1275 "status": "Initialized",
1276 "@id": "/ledger/customer/v1/xxx/customers/yyy/consent/recurring-card-redirect-registration"
1277 }
1278 {{/code}}
1279
1280 ===== Get Recurring Card Redirect Registration =====
1281
1282 {{code language="http" title="**Request**"}}
1283 GET /ledger/customer/v1/XXX/customers/NNN/consent/recurring-card-redirect-registration HTTP/1.1
1284 Host: -
1285 Authorization: Bearer <Token>
1286 Content-Type: application/json
1287
1288 {
1289 }
1290 {{/code}}
1291
1292
1293 {{code language="http" title="**Response**"}}
1294 HTTP/1.1 200 OK
1295 Content-Type: application/json
1296
1297 {
1298 "redirectUrl": "https://ecom.externalintegration.payex.com/checkout/abc123",
1299 "status": "Initialized"
1300 }
1301 {{/code}}
1302
1303 ===== Recurring-card-redirect-registration resource properties =====
1304
1305 (% class="table-bordered table-striped" %)
1306 |=Property|=(% style="width: 94px;" %)Data type|=(% style="width: 255px;" %)Format|=(% style="width: 1053px;" %)Description
1307 |redirectUrl|(% style="width:94px" %)string|(% style="width:255px" %)Url|(% style="width:1053px" %)The redirect url to a flow that confirms the validity of card information without reserving or charging any amount.
1308 |status|(% style="width:94px" %)string|(% style="width:255px" %) |(% style="width:1053px" %)Status of the card validity verification process. One of the following: "Initialized", "Completed", "Aborted" or "Failed".
1309
1310 ----
1311
1312 == Find customer ==
1313
1314 The **find customer **resource is located under **ledger/customer/v1/ **api**. **It is used to find customer with nationalIdentifier.
1315
1316 (% class="table-bordered table-striped" %)
1317 |=(% style="width: 222px;" %)Property|=(% style="width: 1562px;" %)Required
1318 |(% style="width:222px" %)nationalIdentifier.regNo|(% style="width:1562px" %)Yes
1319 |(% style="width:222px" %)nationalIdentifier.countryCode|(% style="width:1562px" %)Yes
1320
1321 {{code language="http" title="**Request**"}}
1322 POST /ledger/customer/v1/XXX/find-customer HTTP/1.1
1323 Host: -
1324 Authorization: Bearer <Token>
1325 Content-Type: application/json
1326
1327 {
1328 "nationalIdentifier": {
1329 "regNo" : "YYYYMMDD-NNNN",
1330 "countryCode" : "SE"
1331 }
1332 }
1333 {{/code}}
1334
1335 {{code language="http" title="**Response**"}}
1336 HTTP/1.1 200 OK
1337 Content-Type: application/json
1338
1339 {
1340 "@id" : "/ledger/customer/v1/XXX/customers/9999",
1341 "customerNo" : " 9999"
1342 }
1343 {{/code}}
1344
1345 (% id="HAccountresourceproperties" %)
1346 ==== Find customer resource properties ====
1347
1348 (% class="table-bordered table-striped" %)
1349 |=(% style="width: 248px;" %)Property|=(% style="width: 108px;" %)Data type|=(% style="width: 233px;" %)Format|=(% style="width: 1196px;" %)Description
1350 |(% style="width:248px" %)@id |(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: |(% style="width:1196px" %)Uri of the specific customer
1351 |(% style="width:248px" %)customerNo|(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: 15|(% style="width:1196px" %)
1352 |(% style="width:248px" %)nationalIdentifier.regNo|(% style="width:108px" %)string|(% style="width:233px" %)Country specific|(% style="width:1196px" %)Sweden: YYYYMMDD-NNNC
1353 Norway: DDMMYYNNNNN
1354 |(% style="width:248px" %)nationalIdentifier.countryCode|(% style="width:108px" %)string|(% style="width:233px" %)[[ISO 3166-1 alpha-2>>url:https://sv.wikipedia.org/wiki/ISO_3166]]|(% style="width:1196px" %)
1355
1356 ----
1357
1358 == Generate customer ==
1359
1360 The **generate consumer customer by reg no **resource is located under **ledger/customer/v1/ **api**. **It is used to genarate a customer with a nationalIdentifier. It will retreive an legal address from the population register and create a consumer customer.
1361
1362 (% class="box infomessage" %)
1363 (((
1364 Access to this operation is not normally granted, unless otherwise agreed.
1365 )))
1366
1367 (% class="table-bordered table-striped" %)
1368 |=(% style="width: 222px;" %)Property|=(% style="width: 1562px;" %)Required
1369 |(% style="width:222px" %)customerNo|(% style="width:1562px" %)No
1370 |(% style="width:222px" %)nationalIdentifier.regNo|(% style="width:1562px" %)Yes
1371 |(% style="width:222px" %)nationalIdentifier.countryCode|(% style="width:1562px" %)Yes
1372 |(% style="width:222px" %)emailAddress|(% style="width:1562px" %)No
1373 |(% style="width:222px" %)msisdn|(% style="width:1562px" %)No
1374
1375 {{code language="http" title="**Request**"}}
1376 POST /ledger/customer/v1/XXX/generate-consumer-customer-by-reg-no HTTP/1.1
1377 Host: -
1378 Authorization: Bearer <Token>
1379 Content-Type: application/json
1380
1381 {
1382 "nationalIdentifier": {
1383 "regNo" : "YYYYMMDD-NNNN",
1384 "countryCode" : "SE"
1385 },
1386 "emailAddress" : "britt@axelstopp.com",
1387 "msisdn" : "+91485918841",
1388 "customerNo" : "9999"
1389 }
1390 {{/code}}
1391
1392 {{code language="http" title="**Response**"}}
1393 HTTP/1.1 201 CREATED
1394 Content-Type: application/json
1395
1396 {
1397 "@id" : "/ledger/customer/v1/XXX/customers/9999",
1398 "customerNo" : " 9999"
1399 }
1400 {{/code}}
1401
1402 (% id="HAccountresourceproperties" %)
1403 ==== Generate customer resource properties ====
1404
1405 (% class="table-bordered table-striped" %)
1406 |=(% style="width: 248px;" %)Property|=(% style="width: 108px;" %)Data type|=(% style="width: 233px;" %)Format|=(% style="width: 1196px;" %)Description
1407 |(% style="width:248px" %)@id |(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: |(% style="width:1196px" %)Uri of the specific customer
1408 |(% style="width:248px" %)customerNo|(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: 15|(% style="width:1196px" %)
1409 |(% style="width:248px" %)nationalIdentifier.regNo|(% style="width:108px" %)string|(% style="width:233px" %)Country specific|(% style="width:1196px" %)Sweden: YYYYMMDD-NNNC
1410 Norway: DDMMYYNNNNN
1411 |(% style="width:248px" %)nationalIdentifier.countryCode|(% style="width:108px" %)string|(% style="width:233px" %)[[ISO 3166-1 alpha-2>>url:https://sv.wikipedia.org/wiki/ISO_3166]]|(% style="width:1196px" %)
1412 |(% style="width:248px" %)emailAddress|(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: 254
1413 Regex pattern: [^@]+@[^\.]+\..+|(% style="width:1196px" %)
1414 |(% style="width:248px" %)msisdn|(% style="width:108px" %)string|(% style="width:233px" %)Maxlength: 15|(% style="width:1196px" %) "Mobile Subscriber Integrated Services Digital Network Number", ie. Cellphone number
1415 +46720000000
1416
1417 {{display reference="developer:Main.Invoicing.ledger-api-general-docs.api-section-problems.WebHome"/}}
1418
1419 ----
1420
1421 == Kys-Questions ==
1422
1423 The **Kys-Questions** resource is located under **ledger/customer/v1/ **api**. **Get the company Know-your-customer(KYC) questions and possible answers, if company no configured questions then it returns Http Status 404
1424
1425 (% class="box infomessage" %)
1426 (((
1427 This endpoint has an optional query parameter **Language**, used to set desired translations for the questions by **Language Code(ISO 639-1)**. If not set or if language code is not supported then translations defaults to EN(English).
1428 Just as the questions, accepted languages differs by configurations, if you are missing a translation please contact our support.
1429
1430 Example: ///ledger/customer/v1/{ledgerNo}/Kyc-Questions?**language=sv **//
1431 )))
1432
1433 Get KYC questions from ledger using company number as identifier
1434
1435 ==== Get list of Kyc-questions ====
1436
1437 {{code language="http" title="**Request**"}}
1438 GET /ledger/customer/v1/{ownerNo}/kyc-questions?language={language} HTTP/1.1
1439 Host: -
1440 Authorization: Bearer<Token>
1441 Content-Type: application/json
1442
1443 {{/code}}
1444
1445 Get CompanyInstance KYC questions if configured or a 404 company-kyc-questions-not-configured response if not
1446
1447 {{code language="http" title="**Response**"}}
1448 HTTP/1.1 200 OK
1449 Content-Type: application/json
1450
1451 {
1452 "kycQuestions": [
1453 {
1454 "questionText": "What is your current employment?",
1455 "answer": {
1456 "type": "single",
1457 "required": true,
1458 "possibleAnswers": [
1459 {
1460 "answerCode": "selfemployed",
1461 "answerText": "Own business"
1462 },
1463 {
1464 "answerCode": "private_employee",
1465 "answerText": "Private employee"
1466 },
1467 {
1468 "answerCode": "goverment_employee",
1469 "answerText": "Government employee"
1470 }
1471 ]
1472 },
1473 "questionCode": "employment"
1474 },
1475 {
1476 "questionText": "What is your yearly income",
1477 "answer": {
1478 "type": "single",
1479 "required": true,
1480 "possibleAnswers": [
1481 {
1482 "answerCode": "incomeinterval1",
1483 "answerText": "0-100 000 SEK"
1484 },
1485 {
1486 "answerCode": "incomeinterval2",
1487 "answerText": "100 001-200 000 SEK"
1488 },
1489 {
1490 "answerCode": "incomeinterval3",
1491 "answerText": "200 001-300 000 SEK"
1492 },
1493 {
1494 "answerCode": "incomeinterval4",
1495 "answerText": "Over 300 001 SEK"
1496 }
1497 ]
1498 },
1499 "questionCode": "income"
1500 }
1501 ],
1502 "operations": []
1503 }
1504 {{/code}}
1505
1506
1507
1508 **Possible problems**
1509
1510 (% class="table-bordered table-striped" %)
1511 |=Http status |=Problem type |=Description
1512 |400 |general-validation-error |Validation error when accessing resource . Please refer to the problems property for additional details.
1513 |404 |company-kyc-questions-not-configured |The requested resource '' was not found.
1514 |500 |internal-server-error |The requested resource '' could not be processed. Please contact support.
1515 |500 |handled-exception |The requested resource '' could not be processed. Please contact support.
1516 |500 |unhandled-exception |The requested resource '' could not be processed. Please contact support.
1517
1518 **Response object specification**
1519
1520 (% class="table-bordered table-striped" %)
1521 |=Property |=Data type|=Format|=Description
1522 |@id |string | |Uri identifier of the current resource
1523 |=kycQuestions |array of question's| |
1524 | question.questionCode |string | |The code definition of the question. Use this value when creating an answer request for /customers/{customerNo}/update-kyc-answers
1525 | question.questionText |string | |The translated text of the question
1526 |= answer |object | |
1527 | type |string | |(((
1528 The type of the expected answer:
1529
1530 * **single | **one answer only
1531 * **multi **| possible multiple answer
1532 * **text** | free text answer
1533 )))
1534 | required |boolean | |If the answer is required
1535 | textValidationRegEx |string | |The regex the answer should match, not all answers has a defined RegEx.
1536 |= possibleAnswers |array of possibleAwnser's| |
1537 | possibleAwnser.answerCode |string | |The code definition of the answer. Use this value when creating an answer request for /customers/{customerNo}/update-kyc-answers
1538 | possibleAwnser.answerText |string | |The translated text of the answer
1539 |= subQuestions |array of question's| |Is recursive structure of **kycQuestions** but limited to depth of 1, meaning a sub question can't have sub questions.
1540 |operations |array | |List of operations that is possible to perform on the current resource, read more about the ~[~[hypermedia part of the response>>https://developer.payex.com/xwiki/wiki/developer/view/Main/Invoicing/ledger-api-general-docs/restful-pattern-guideline/#HHyper-mediaresponse]]
1541
1542 {{display reference="developer:Main.Invoicing.ledger-api-general-docs.api-section-problems.WebHome"/}}
1543
1544
1545 === Problem types ===
1546
1547 (% class="box infomessage" %)
1548 (((
1549 Note, each problem typecode is preceded by "ledger/customer/v1/problems/" in this API, e.g. the error "validation" in the table below will appear as typecode "ledger/customer/v1/problems/validation".
1550 )))
1551
1552 (% class="table-bordered table-striped" %)
1553 |=(% style="width: 537px;" %)Problem type (code)|=(% style="width: 172px;" %)Httpstatus|=(% style="width: 796px;" %)Description
1554 |(% style="width:537px" %)validation|(% style="width:172px" %)400|(% style="width:796px" %)occurs if any of the inputvalidation fails, it is described in the problem which parameter that failed the validation
1555 |(% style="width:537px" %)forbidden|(% style="width:172px" %)403|(% style="width:796px" %)occurs if access to method is not allowed.
1556 |(% style="width:537px" %)not-found|(% style="width:172px" %)404|(% style="width:796px" %)specified resource not found
1557 |(% style="width:537px" %)customer-not-found|(% style="width:172px" %)404|(% style="width:796px" %)specified customer number does not exists
1558 |(% style="width:537px" %)legal-address-does-not-exists|(% style="width:172px" %)404|(% style="width:796px" %)legal address does not exists for the specified customer
1559 |(% style="width:537px" %)billing-address-does-not-exists|(% style="width:172px" %)404|(% style="width:796px" %)billing address does not exists for the specified customer
1560 |(% style="width:537px" %) |(% style="width:172px" %) |(% style="width:796px" %)