This is the changelog for the Payabli C# SDK. It includes updates, bug fixes, and new features.

v1.0.0

As part of an ongoing effort to improve the consistency and usability of our SDKs, we’ve updated the SDK generation process. This update introduces breaking changes to the SDK. All breaking changes affect only method signatures and namespacing, not core record types or properties. SDK initialization, configuration, business logic, and workflows remain unchanged. For more information on precise method signatures and example usage, please see the SDK reference on GitHub.

Explicit empty request objects and body wrapping

Almost all breaking changes in the C# SDK are one of two patterns:

  1. Methods that previously took only positional parameters now require a typed XxxRequest object as the final argument, even when it carries no data (pass new XxxRequest()).
  2. Methods that previously accepted a domain type as the last argument now wrap it inside a Body property on a request envelope.
1// Pattern 1 — before / after
2await client.Bill.DeleteBillAsync(285);
3await client.Bill.DeleteBillAsync(285, new DeleteBillRequest());
4
5// Pattern 2 — before / after
6await client.Bill.EditBillAsync(285, new BillOutData { NetAmount = 3762.87 });
7await client.Bill.EditBillAsync(285, new EditBillRequest { Body = new BillOutData { NetAmount = 3762.87 } });

The tables below list every affected method (sorted by resource).

MethodChange
GetBillAsync(idBill)+ new GetBillRequest()
EditBillAsync(idBill, BillOutData)Body wrapped in EditBillRequest
DeleteBillAsync(idBill)+ new DeleteBillRequest()
ModifyApprovalBillAsync(idBill, items)+ new ModifyApprovalBillRequest { … }
MethodChange
GetApplicationAsync(appId)+ new GetApplicationRequest()
DeleteApplicationAsync(appId)+ new DeleteApplicationRequest()
GetByIdLinkApplicationAsync(boardingLinkId)+ new GetByIdLinkApplicationRequest()
GetByTemplateIdLinkApplicationAsync(templateId)+ new GetByTemplateIdLinkApplicationRequest()
GetLinkApplicationAsync(boardingLinkReference)+ new GetLinkApplicationRequest()
GetApplicationsByPaypointIdAsync(paypointId)+ new GetApplicationsByPaypointIdRequest()
UpdateApplicationAsync(appId, ApplicationData)Body wrapped in UpdateApplicationRequest
MethodChange
GetChargebackAsync(id)+ new GetChargebackRequest()
GetChargebackAttachmentAsync(id, fileName)+ new GetChargebackAttachmentRequest()
MethodChange
HistoryDeviceAsync(entry, deviceId)+ new HistoryDeviceRequest()
RemoveDeviceAsync(entry, deviceId)+ new RemoveDeviceRequest()
MethodChange
GetCustomerAsync(customerId)+ new GetCustomerRequest()
UpdateCustomerAsync(customerId, CustomerData)Body wrapped in UpdateCustomerRequest
DeleteCustomerAsync(customerId)+ new DeleteCustomerRequest()
RequestConsentAsync(customerId)+ new RequestConsentRequest()
LinkCustomerTransactionAsync(customerId, transId)+ new LinkCustomerTransactionRequest()
MethodChange
LoadPageAsync(entry, subdomain)+ new LoadPageRequest()
SavePageAsync(entry, subdomain, PayabliPages)Body wrapped in SavePageRequest
MethodChange
GetInvoiceAsync(idInvoice)+ new GetInvoiceRequest()
DeleteInvoiceAsync(idInvoice)+ new DeleteInvoiceRequest()
DeleteAttachedFromInvoiceAsync(idInvoice, filename)+ new DeleteAttachedFromInvoiceRequest()
GetInvoiceNumberAsync(entry)+ new GetInvoiceNumberRequest()
GetInvoicePdfAsync(idInvoice)+ new GetInvoicePdfRequest()
MethodChange
GetItemAsync(lineItemId)+ new GetItemRequest()
DeleteItemAsync(lineItemId)+ new DeleteItemRequest()
UpdateItemAsync(lineItemId, LineItem)Body wrapped in UpdateItemRequest
MethodChange
DetailsAsync(transId)+ new DetailsRequest()
CaptureAsync(transId, amount)+ new CaptureMoneyInRequest()
CaptureAuthAsync(transId, CaptureRequest)Renamed to CaptureAuthRequest { Body = CaptureRequest }
RefundAsync(transId, amount)+ new RefundRequest()
ReverseAsync(transId, amount)+ new ReverseRequest()
ReverseCreditAsync(transId)+ new ReverseCreditRequest()
VoidAsync(transId)+ new VoidRequest()
Refundv2Async(transId)+ new Refundv2Request()
Refundv2AmountAsync(transId, amount)+ new Refundv2AmountRequest()
Capturev2Async(transId, CaptureRequest)Renamed to Capturev2Request { Body = CaptureRequest }
Voidv2Async(transId)+ new Voidv2Request()
MethodChange
AuthorizeOutAsync(MoneyOutTypesRequestOutAuthorize)Type renamed to RequestOutAuthorize
CancelOutDeleteAsync(referenceId)+ new CancelOutDeleteRequest()
CancelOutGetAsync(referenceId)+ new CancelOutGetRequest()
GetCheckImageAsync(assetName)+ new GetCheckImageRequest()
PayoutDetailsAsync(transId)+ new PayoutDetailsRequest()
UpdateCheckPaymentStatusAsync(transId, status)+ new UpdateCheckPaymentStatusRequest()
VCardGetAsync(cardToken)+ new VCardGetRequest()
MethodChange
GetNotificationAsync(nId)+ new GetNotificationRequest()
DeleteNotificationAsync(nId)+ new DeleteNotificationRequest()
GetReportFileAsync(id)+ new GetReportFileRequest()
UpdateNotificationAsync(nId, OneOf<…>)OneOf union replaced with UpdateNotificationNotificationRequest { Body = new NotificationStandardRequest { … } }
MethodChange
GetNotificationLogAsync(uuid)+ new GetNotificationLogRequest()
RetryNotificationLogAsync(uuid)+ new RetryNotificationLogRequest()
MethodChange
OcrDocumentFormAsync(typeResult, FileContentImageOnly)Body wrapped in OcrDocumentFormRequest
OcrDocumentJsonAsync(typeResult, FileContentImageOnly)Body wrapped in OcrDocumentJsonRequest
MethodChange
GetOrganizationAsync(orgId)+ new GetOrganizationRequest()
GetBasicOrganizationAsync(entry)+ new GetBasicOrganizationRequest()
GetBasicOrganizationByIdAsync(orgId)+ new GetBasicOrganizationByIdRequest()
GetSettingsOrganizationAsync(orgId)+ new GetSettingsOrganizationRequest()
DeleteOrganizationAsync(orgId)+ new DeleteOrganizationRequest()
MethodChange
GetPaymentMethodDomainAsync(domainId)+ new GetPaymentMethodDomainRequest()
DeletePaymentMethodDomainAsync(domainId)+ new DeletePaymentMethodDomainRequest()
CascadePaymentMethodDomainAsync(domainId)+ new CascadePaymentMethodDomainRequest()
VerifyPaymentMethodDomainAsync(domainId)+ new VerifyPaymentMethodDomainRequest()
MethodChange
GetPayoutSubscriptionAsync(id)+ new GetPayoutSubscriptionRequest()
DeletePayoutSubscriptionAsync(id)+ new DeletePayoutSubscriptionRequest()
MethodChange
GetBasicEntryAsync(entry)+ new GetBasicEntryRequest()
GetBasicEntryByIdAsync(idPaypoint)+ new GetBasicEntryByIdRequest()
GetPageAsync(entry, subdomain)+ new GetPageRequest()
RemovePageAsync(entry, subdomain)+ new RemovePageRequest()
SettingsPageAsync(entry)+ new SettingsPageRequest()
SaveLogoAsync(entry, FileContent)+ new SaveLogoRequest { … }
MethodChange
ListTransfersOrgAsyncNew required positional orgId parameter added before the request object
ListBatchDetailsOrgAsyncReturn type changed: QueryResponseSettlementsQueryBatchesDetailResponse
MethodChange
GetSubscriptionAsync(subId)+ new GetSubscriptionRequest()
RemoveSubscriptionAsync(subId)+ new RemoveSubscriptionRequest()
MethodChange
GetTemplateAsync(templateId)+ new GetTemplateRequest()
DeleteTemplateAsync(templateId)+ new DeleteTemplateRequest()
GetlinkTemplateAsync(templateId, ignoreEmpty)+ new GetlinkTemplateRequest()
MethodChange
RemoveMethodAsync(methodId)+ new RemoveMethodRequest()
MethodChange
DeleteUserAsync(userId)+ new DeleteUserRequest()
EditUserAsync(userId, UserData)Body wrapped in EditUserRequest
EditMfaUserAsync(userId, MfaData)Body wrapped in EditMfaUserRequest
ResendMfaCodeAsync(usrname, entry, entryType)+ new ResendMfaCodeRequest()
MethodChange
AddVendorAsync(entry, VendorData)Body wrapped in AddVendorRequest
EditVendorAsync(idVendor, VendorData)Body wrapped in EditVendorRequest
DeleteVendorAsync(idVendor)+ new DeleteVendorRequest()
GetVendorAsync(idVendor)+ new GetVendorRequest()

Typed enums replaced certain strings

Certain fields that were previously untyped strings have been replaced with typed enums:

  • PayMethodCredit.Method changed from string ("card") to PayMethodCreditMethod.Card
  • BillOutData.Terms changed from string ("NET30") to Terms.Net30
  • BillOutData.Vendor changed from VendorData to BillOutDataVendor