> This is Payabli documentation. For a complete page index, fetch https://docs.payabli.com/llms.txt — append .md to any page URL for lightweight markdown. For section-level indexes, query parameters, and other AI-optimized access methods, see https://docs.payabli.com/ai-agents.md

## 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](https://github.com/payabli/sdk-csharp/blob/main/reference.md).

### 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.

```csharp
// Pattern 1 — before / after
await client.Bill.DeleteBillAsync(285);
await client.Bill.DeleteBillAsync(285, new DeleteBillRequest());

// Pattern 2 — before / after
await client.Bill.EditBillAsync(285, new BillOutData { NetAmount = 3762.87 });
await client.Bill.EditBillAsync(285, new EditBillRequest { Body = new BillOutData { NetAmount = 3762.87 } });
```

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

#### Bill

| Method                                   | Change                                  |
| ---------------------------------------- | --------------------------------------- |
| `GetBillAsync(idBill)`                   | + `new GetBillRequest()`                |
| `EditBillAsync(idBill, BillOutData)`     | Body wrapped in `EditBillRequest`       |
| `DeleteBillAsync(idBill)`                | + `new DeleteBillRequest()`             |
| `ModifyApprovalBillAsync(idBill, items)` | + `new ModifyApprovalBillRequest { … }` |

#### Boarding

| Method                                            | Change                                          |
| ------------------------------------------------- | ----------------------------------------------- |
| `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`      |

#### ChargeBacks

| Method                                       | Change                                   |
| -------------------------------------------- | ---------------------------------------- |
| `GetChargebackAsync(id)`                     | + `new GetChargebackRequest()`           |
| `GetChargebackAttachmentAsync(id, fileName)` | + `new GetChargebackAttachmentRequest()` |

#### Cloud

| Method                                | Change                         |
| ------------------------------------- | ------------------------------ |
| `HistoryDeviceAsync(entry, deviceId)` | + `new HistoryDeviceRequest()` |
| `RemoveDeviceAsync(entry, deviceId)`  | + `new RemoveDeviceRequest()`  |

#### Customer

| Method                                              | Change                                   |
| --------------------------------------------------- | ---------------------------------------- |
| `GetCustomerAsync(customerId)`                      | + `new GetCustomerRequest()`             |
| `UpdateCustomerAsync(customerId, CustomerData)`     | Body wrapped in `UpdateCustomerRequest`  |
| `DeleteCustomerAsync(customerId)`                   | + `new DeleteCustomerRequest()`          |
| `RequestConsentAsync(customerId)`                   | + `new RequestConsentRequest()`          |
| `LinkCustomerTransactionAsync(customerId, transId)` | + `new LinkCustomerTransactionRequest()` |

#### HostedPaymentPages

| Method                                          | Change                            |
| ----------------------------------------------- | --------------------------------- |
| `LoadPageAsync(entry, subdomain)`               | + `new LoadPageRequest()`         |
| `SavePageAsync(entry, subdomain, PayabliPages)` | Body wrapped in `SavePageRequest` |

#### Invoice

| Method                                                | Change                                     |
| ----------------------------------------------------- | ------------------------------------------ |
| `GetInvoiceAsync(idInvoice)`                          | + `new GetInvoiceRequest()`                |
| `DeleteInvoiceAsync(idInvoice)`                       | + `new DeleteInvoiceRequest()`             |
| `DeleteAttachedFromInvoiceAsync(idInvoice, filename)` | + `new DeleteAttachedFromInvoiceRequest()` |
| `GetInvoiceNumberAsync(entry)`                        | + `new GetInvoiceNumberRequest()`          |
| `GetInvoicePdfAsync(idInvoice)`                       | + `new GetInvoicePdfRequest()`             |

#### LineItem

| Method                                  | Change                              |
| --------------------------------------- | ----------------------------------- |
| `GetItemAsync(lineItemId)`              | + `new GetItemRequest()`            |
| `DeleteItemAsync(lineItemId)`           | + `new DeleteItemRequest()`         |
| `UpdateItemAsync(lineItemId, LineItem)` | Body wrapped in `UpdateItemRequest` |

#### MoneyIn

| Method                                      | Change                                                    |
| ------------------------------------------- | --------------------------------------------------------- |
| `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()`                                   |

#### MoneyOut

| Method                                                | Change                                    |
| ----------------------------------------------------- | ----------------------------------------- |
| `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()`                 |

#### Notification

| Method                                   | Change                                                                                                               |
| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| `GetNotificationAsync(nId)`              | + `new GetNotificationRequest()`                                                                                     |
| `DeleteNotificationAsync(nId)`           | + `new DeleteNotificationRequest()`                                                                                  |
| `GetReportFileAsync(id)`                 | + `new GetReportFileRequest()`                                                                                       |
| `UpdateNotificationAsync(nId, OneOf<…>)` | `OneOf` union replaced with `UpdateNotificationNotificationRequest { Body = new NotificationStandardRequest { … } }` |

#### Notificationlogs

| Method                            | Change                                |
| --------------------------------- | ------------------------------------- |
| `GetNotificationLogAsync(uuid)`   | + `new GetNotificationLogRequest()`   |
| `RetryNotificationLogAsync(uuid)` | + `new RetryNotificationLogRequest()` |

#### Ocr

| Method                                                   | Change                                   |
| -------------------------------------------------------- | ---------------------------------------- |
| `OcrDocumentFormAsync(typeResult, FileContentImageOnly)` | Body wrapped in `OcrDocumentFormRequest` |
| `OcrDocumentJsonAsync(typeResult, FileContentImageOnly)` | Body wrapped in `OcrDocumentJsonRequest` |

#### Organization

| Method                                 | Change                                    |
| -------------------------------------- | ----------------------------------------- |
| `GetOrganizationAsync(orgId)`          | + `new GetOrganizationRequest()`          |
| `GetBasicOrganizationAsync(entry)`     | + `new GetBasicOrganizationRequest()`     |
| `GetBasicOrganizationByIdAsync(orgId)` | + `new GetBasicOrganizationByIdRequest()` |
| `GetSettingsOrganizationAsync(orgId)`  | + `new GetSettingsOrganizationRequest()`  |
| `DeleteOrganizationAsync(orgId)`       | + `new DeleteOrganizationRequest()`       |

#### PaymentLink

| Method                                                              | Change                                          |
| ------------------------------------------------------------------- | ----------------------------------------------- |
| `GetPayLinkFromIdAsync(paylinkId)`                                  | + `new GetPayLinkFromIdRequest()`               |
| `DeletePayLinkFromIdAsync(payLinkId)`                               | + `new DeletePayLinkFromIdRequest()`            |
| `PushPayLinkFromIdAsync(payLinkId, PushPayLinkRequest)`             | Body wrapped in `PushPayLinkFromIdRequest`      |
| `UpdatePayLinkOutFromIdAsync(paylinkId, PaymentPageRequestBodyOut)` | Body wrapped in `UpdatePayLinkOutFromIdRequest` |

#### PaymentMethodDomain

| Method                                      | Change                                      |
| ------------------------------------------- | ------------------------------------------- |
| `GetPaymentMethodDomainAsync(domainId)`     | + `new GetPaymentMethodDomainRequest()`     |
| `DeletePaymentMethodDomainAsync(domainId)`  | + `new DeletePaymentMethodDomainRequest()`  |
| `CascadePaymentMethodDomainAsync(domainId)` | + `new CascadePaymentMethodDomainRequest()` |
| `VerifyPaymentMethodDomainAsync(domainId)`  | + `new VerifyPaymentMethodDomainRequest()`  |

#### PayoutSubscription

| Method                              | Change                                    |
| ----------------------------------- | ----------------------------------------- |
| `GetPayoutSubscriptionAsync(id)`    | + `new GetPayoutSubscriptionRequest()`    |
| `DeletePayoutSubscriptionAsync(id)` | + `new DeletePayoutSubscriptionRequest()` |

#### Paypoint

| Method                               | Change                             |
| ------------------------------------ | ---------------------------------- |
| `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 { … }`      |

#### Query

| Method                     | Change                                                                         |
| -------------------------- | ------------------------------------------------------------------------------ |
| `ListTransfersOrgAsync`    | New required positional `orgId` parameter added before the request object      |
| `ListBatchDetailsOrgAsync` | Return type changed: `QueryResponseSettlements` → `QueryBatchesDetailResponse` |

#### Subscription

| Method                           | Change                              |
| -------------------------------- | ----------------------------------- |
| `GetSubscriptionAsync(subId)`    | + `new GetSubscriptionRequest()`    |
| `RemoveSubscriptionAsync(subId)` | + `new RemoveSubscriptionRequest()` |

#### Templates

| Method                                          | Change                           |
| ----------------------------------------------- | -------------------------------- |
| `GetTemplateAsync(templateId)`                  | + `new GetTemplateRequest()`     |
| `DeleteTemplateAsync(templateId)`               | + `new DeleteTemplateRequest()`  |
| `GetlinkTemplateAsync(templateId, ignoreEmpty)` | + `new GetlinkTemplateRequest()` |

#### TokenStorage

| Method                        | Change                        |
| ----------------------------- | ----------------------------- |
| `RemoveMethodAsync(methodId)` | + `new RemoveMethodRequest()` |

#### User

| Method                                          | Change                               |
| ----------------------------------------------- | ------------------------------------ |
| `DeleteUserAsync(userId)`                       | + `new DeleteUserRequest()`          |
| `EditUserAsync(userId, UserData)`               | Body wrapped in `EditUserRequest`    |
| `EditMfaUserAsync(userId, MfaData)`             | Body wrapped in `EditMfaUserRequest` |
| `ResendMfaCodeAsync(usrname, entry, entryType)` | + `new ResendMfaCodeRequest()`       |

#### Vendor

| Method                                  | Change                              |
| --------------------------------------- | ----------------------------------- |
| `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`