Payment Collections

This feature is available if a PSP integration has been enabled in your Solvimon account and the payment acceptor method has been set to that Stripe account on your billing entity

Invoices can be collected via all sorts of payment methods, but also by connecting a Payment Service Provider (PSP) to your Solvimon account. This integration allows for the generation of an invoice payment link that enables your customer to pay the total amount due of the invoice.

To point that payment link at a system of your own rather than a PSP, use a custom redirect payment acceptor.

Payments integration with Stripe

When you configure a Payment Service Provider on your Billing entity, invoices are automatically generated with a payment link directly attached. This feature allows your customers to conveniently pay invoices via the link provided in the invoice.

They can click the link directly from Solvimon Desk, or you can copy it to the clipboard and share it by email

Invoice Payment Status

Once payments are completed through the payment integration via Solvimon, the invoice’s payment_status is also automatically updated to reflect it. If you have an integration with an ERP system, this status can also be synchronized to update the amount receivable.

Payment status

Invoices expose a payment_status of UNPAID, PARTIALLY_PAID, PAID or OVERPAID, shown on final invoices to indicate how much of the invoiced amount has been received. An invoice can be marked PAID manually as demonstrated below, and it will also switch automatically once the invoice is paid using the payment service provider link provided. See invoice payment status for details.

How to set it up?


Collecting on an invoice

Beyond the payment link, a payment can be raised against an invoice directly. This is what you use to charge a stored payment method as part of a billing run, rather than waiting for the customer to click a link.

POST
/v:version/payments
1curl -X POST https://api.solvimon.com/v1/payments \
2 -H "X-API-KEY: <apiKey>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "external_reference": "string",
6 "result": "AUTHORIZED"
7}'
Response
1{
2 "object_type": "string",
3 "id": "string",
4 "created_at": "string",
5 "timestamp": "2024-01-15T09:30:00Z",
6 "customer_id": "string",
7 "customer": {
8 "object_type": "string",
9 "id": "string",
10 "created_at": "string",
11 "parent_customer_id": "string",
12 "parent_customer_ids": [
13 "string"
14 ],
15 "reference": "string",
16 "status": "DRAFT",
17 "timezone": "string",
18 "type": "ORGANIZATION",
19 "email": "string",
20 "notification_preferences": [
21 {
22 "type": "INVOICE",
23 "channels": [
24 {
25 "type": "EMAIL",
26 "enabled": true
27 }
28 ]
29 }
30 ],
31 "locale": "string",
32 "individual": {
33 "name": {
34 "first_name": "string",
35 "last_name": "string",
36 "infix": "string"
37 },
38 "residential_address": {
39 "line1": "string",
40 "line2": "string",
41 "city": "string",
42 "postal_code": "string",
43 "state": "string",
44 "country": "AD"
45 }
46 },
47 "organization": {
48 "legal_name": "string",
49 "tax_id": "string",
50 "tax_ids": [
51 {
52 "id": "string",
53 "type": "GENERIC_TAX_ID",
54 "display_name": "string",
55 "tax_id_validation_result": {
56 "id": "string",
57 "validation_date": "string",
58 "source": "string",
59 "valid": "VALID",
60 "message": "string"
61 }
62 }
63 ],
64 "registration_number": "string",
65 "tax_exempt": true,
66 "tax_exempt_note": "string",
67 "registered_address": {
68 "line1": "string",
69 "line2": "string",
70 "city": "string",
71 "postal_code": "string",
72 "state": "string",
73 "country": "AD"
74 },
75 "tax_registrations": [
76 {
77 "id": "string",
78 "description": "string",
79 "tax_id": "string",
80 "tax_ids": [
81 {
82 "id": "string",
83 "type": "GENERIC_TAX_ID",
84 "display_name": "string",
85 "tax_id_validation_result": {
86 "id": "string",
87 "validation_date": "string",
88 "source": "string",
89 "valid": "VALID",
90 "message": "string"
91 }
92 }
93 ],
94 "registration_number": "string",
95 "registered_address": {
96 "line1": "string",
97 "line2": "string",
98 "city": "string",
99 "postal_code": "string",
100 "state": "string",
101 "country": "AD"
102 }
103 }
104 ]
105 },
106 "custom_fields": [
107 {
108 "id": "string",
109 "reference": "string",
110 "value": "string",
111 "values": [
112 "string"
113 ],
114 "integration_details": {
115 "id": "string",
116 "reference": "string",
117 "payment_gateway_variant": "ADYEN",
118 "adyen": {
119 "recurring_detail_reference": "string"
120 },
121 "stripe": {
122 "payment_method_id": "string"
123 }
124 },
125 "integration_id": "string"
126 }
127 ],
128 "pricing_plan_subscription_selector": {
129 "data": [
130 {
131 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
132 "value": "string"
133 }
134 ],
135 "rules": [
136 {
137 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
138 "type": "EQUALS"
139 }
140 ],
141 "filters": [
142 {
143 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
144 "type": "EQUALS",
145 "value": "string"
146 }
147 ],
148 "fallback": "LATEST"
149 },
150 "linked_integrations": [
151 {
152 "id": "string",
153 "link_details": [
154 {
155 "url": "string",
156 "custom_field_name": "string"
157 }
158 ]
159 }
160 ],
161 "roles": [
162 "DEFAULT"
163 ],
164 "seller_details": {
165 "default_billing_entity_id": "string"
166 },
167 "processing_only": true
168 },
169 "invoice_id": "string",
170 "payment_acceptor_id": "string",
171 "payment_acceptor_reference": "string",
172 "payment_method_id": "string",
173 "payment_method_details": {
174 "type": "CARD",
175 "card": {
176 "brand": "string",
177 "name": "string",
178 "expiry_date": {
179 "expiry_month": 1,
180 "expiry_year": 1
181 },
182 "last_four_digits": "string",
183 "country": "string"
184 },
185 "online_banking": {
186 "variant": "string",
187 "owner_name": "string",
188 "iban": "string",
189 "bic": "string",
190 "country": "AD"
191 },
192 "buy_now_pay_later": {
193 "variant": "string"
194 },
195 "direct_debit": {
196 "variant": "string",
197 "owner_name": "string",
198 "iban": "string",
199 "bic": "string",
200 "country": "AD"
201 },
202 "digital_wallet": {
203 "variant": "string"
204 },
205 "unknown": {
206 "variant": "string"
207 }
208 },
209 "integration_payment_method_reference": "string",
210 "external_reference": "string",
211 "reference": "string",
212 "amount": {
213 "quantity": "string",
214 "currency": "AED"
215 },
216 "result": "AUTHORIZED",
217 "result_details": {
218 "code": "string",
219 "reason": "string",
220 "external_code": "string",
221 "external_reason": "string"
222 },
223 "dunning_action_details": {
224 "attempt": 1,
225 "external_reference": "string",
226 "next_attempt_scheduled": true
227 },
228 "updated_at": "string",
229 "context": {
230 "type": "INVOICE",
231 "related_resource_ids": [
232 {
233 "type": "PLATFORM",
234 "id": "string"
235 }
236 ],
237 "metadata": {},
238 "init_pricing_plan_subscription": {
239 "template_pricing_plan_subscription_id": "string",
240 "pricing_plan_subscription_id": "string",
241 "billing_entity_id": "string",
242 "customer_details": {
243 "object_type": "string",
244 "id": "string",
245 "created_at": "string",
246 "parent_customer_id": "string",
247 "parent_customer_ids": [
248 "string"
249 ],
250 "reference": "string",
251 "status": "DRAFT",
252 "timezone": "string",
253 "type": "ORGANIZATION",
254 "email": "string",
255 "notification_preferences": [
256 {
257 "type": "INVOICE",
258 "channels": [
259 {
260 "type": "EMAIL",
261 "enabled": true
262 }
263 ]
264 }
265 ],
266 "locale": "string",
267 "individual": {
268 "name": {
269 "first_name": "string",
270 "last_name": "string",
271 "infix": "string"
272 },
273 "residential_address": {
274 "line1": "string",
275 "line2": "string",
276 "city": "string",
277 "postal_code": "string",
278 "state": "string",
279 "country": "AD"
280 }
281 },
282 "organization": {
283 "legal_name": "string",
284 "tax_id": "string",
285 "tax_ids": [
286 {
287 "id": "string",
288 "type": "GENERIC_TAX_ID",
289 "display_name": "string",
290 "tax_id_validation_result": {
291 "id": "string",
292 "validation_date": "string",
293 "source": "string",
294 "valid": "VALID",
295 "message": "string"
296 }
297 }
298 ],
299 "registration_number": "string",
300 "tax_exempt": true,
301 "tax_exempt_note": "string",
302 "registered_address": {
303 "line1": "string",
304 "line2": "string",
305 "city": "string",
306 "postal_code": "string",
307 "state": "string",
308 "country": "AD"
309 },
310 "tax_registrations": [
311 {
312 "id": "string",
313 "description": "string",
314 "tax_id": "string",
315 "tax_ids": [
316 {
317 "id": "string",
318 "type": "GENERIC_TAX_ID",
319 "display_name": "string",
320 "tax_id_validation_result": {
321 "id": "string",
322 "validation_date": "string",
323 "source": "string",
324 "valid": "VALID",
325 "message": "string"
326 }
327 }
328 ],
329 "registration_number": "string",
330 "registered_address": {
331 "line1": "string",
332 "line2": "string",
333 "city": "string",
334 "postal_code": "string",
335 "state": "string",
336 "country": "AD"
337 }
338 }
339 ]
340 },
341 "custom_fields": [
342 {
343 "id": "string",
344 "reference": "string",
345 "value": "string",
346 "values": [
347 "string"
348 ],
349 "integration_details": {
350 "id": "string",
351 "reference": "string",
352 "payment_gateway_variant": "ADYEN",
353 "adyen": {
354 "recurring_detail_reference": "string"
355 },
356 "stripe": {
357 "payment_method_id": "string"
358 }
359 },
360 "integration_id": "string"
361 }
362 ],
363 "pricing_plan_subscription_selector": {
364 "data": [
365 {
366 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
367 "value": "string"
368 }
369 ],
370 "rules": [
371 {
372 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
373 "type": "EQUALS"
374 }
375 ],
376 "filters": [
377 {
378 "field": "BILLING_ENTITY_REGISTERED_ADDRESS_COUNTRY",
379 "type": "EQUALS",
380 "value": "string"
381 }
382 ],
383 "fallback": "LATEST"
384 },
385 "linked_integrations": [
386 {
387 "id": "string",
388 "link_details": [
389 {
390 "url": "string",
391 "custom_field_name": "string"
392 }
393 ]
394 }
395 ],
396 "roles": [
397 "DEFAULT"
398 ],
399 "seller_details": {
400 "default_billing_entity_id": "string"
401 },
402 "processing_only": true
403 },
404 "pricing_plan_schedule_customizations": [
405 {
406 "pricing_plan_schedule_id": "string",
407 "seats_values": [
408 {
409 "pricing_item_config_id": "string",
410 "number": "string",
411 "amount": {
412 "quantity": "string",
413 "currency": "AED"
414 },
415 "start_at": "2024-01-15T09:30:00Z",
416 "end_at": "string"
417 }
418 ],
419 "enabled_pricings": [
420 {
421 "pricing_id": "string",
422 "start_at": "2024-01-15T09:30:00Z",
423 "end_at": "2024-01-15T09:30:00Z"
424 }
425 ],
426 "promotion_codes": [
427 "string"
428 ],
429 "pricing_currency": "AED",
430 "billing_period": {
431 "type": "DAY",
432 "value": 1
433 }
434 }
435 ],
436 "enabled_pricings": [
437 {
438 "pricing_id": "string",
439 "start_at": "2024-01-15T09:30:00Z",
440 "end_at": "2024-01-15T09:30:00Z"
441 }
442 ]
443 },
444 "create_payment_method": {
445 "payment_method_id": "string"
446 },
447 "payment_request": {
448 "payment_request_id": "string"
449 },
450 "pay_invoice": {
451 "invoice_id": "string"
452 },
453 "charge_on_demand": {
454 "pricing_plan_schedule_id": "string",
455 "pricing_items": [
456 {
457 "pricing_item_id": "string"
458 }
459 ],
460 "start_at": "2024-01-15T09:30:00Z"
461 },
462 "direct": {
463 "adyen": {
464 "capture_delay_hours": 1,
465 "auto_rescue": {
466 "enabled": true,
467 "period": {
468 "type": "DAY",
469 "value": 1
470 }
471 }
472 }
473 },
474 "create_pricing_plan_schedule": {
475 "pricing_plan_subscription_id": "string",
476 "pricing_plan_version_id": "string",
477 "pricing_id": "string",
478 "start_at": "2024-01-15T09:30:00Z"
479 }
480 }
481}

The payment’s context says what the payment is for: paying a specific invoice, a direct payment, an on-demand charge, or a payment request. The result reports the outcome, using AUTHORIZED, PENDING, REFUSED, CANCELLED, ERROR, REFUNDED, or CHARGED_BACK, with the provider’s detail in result_details.

To see what has already been collected or attempted on an invoice, read GET /v{version}/invoices/{resourceId}/payments for the payments and GET /v{version}/invoices/{resourceId}/payment-attempts for the attempt chain behind them.

The rest of collections

TopicWhere
Which instruments a customer can pay with, and how they are storedPayment options
Bank accounts debited under a mandateDirect debit
What happens when a payment fails, and how invoices are chasedDunning & payment retries
Instalments and recurring collection outside the invoice cyclePayment schedules, covered in Dunning & payment retries
Sending the customer somewhere you control to payCustom redirect
Adyen setup, including automatic retriesAdyen

Refunds and reversals

Two different operations, easily confused:

  • Refund returns funds for a payment that was captured. Use POST /v{version}/payments/{resourceId}/refund. The payment result becomes REFUNDED.
  • Reverse cancels a payment that has not settled, so the funds are never taken. Use POST /v{version}/payments/{resourceId}/reverse.

Neither changes the invoice itself. To correct what was invoiced, issue a credit note; see Correcting invoices.