Introduction
Tabby is a Buy Now Pay Later (BNPL) service that allows consumers to make purchases and pay for them later in installments. It operates as an intermediary between merchants and customers, providing flexible payment options for online and in-store purchases.
How Tabby Works?
- At Checkout: Customers select Tabby as a payment option during checkout on partnering merchant websites or physical stores.
- Approval: Tabby assesses the customer's eligibility for the payment plan in real time based on various factors.
- Payment Options
- Pay Later: Allows customers to pay for their purchases in installments over time (usually within weeks or months).
- Pay in Installments: Provides options for dividing the payment into equal parts without interest.
Step 1. Create A Project I have created a new project with Name Integration.
This is an MVC Core project.

My project Structure looks Like the one Below.

There is one controller PaymentController, 3 Model Classes For Handling API Response and Request
API_CLS.cs
This class structure is based on an API request and response. I'd require the specifics of the API, such as the request parameters, expected response structure, and data types involved. Without the API details, I can offer a generic example to demonstrate how a class might be designed based on an API request and response.
using System.ComponentModel;
namespace Inegration.Models
{
public class API_Class
{
}
public class BuyerHistory
{
public string registered_since { get; set; }
public int loyalty_level { get; set; }
public int wishlist_count { get; set; }
public bool is_social_networks_connected { get; set; }
public bool is_phone_number_verified { get; set; }
public bool is_email_verified { get; set; }
}
public class Buyer
{
public string phone { get; set; }
public string email { get; set; }
public string name { get; set; }
public string dob { get; set; }
public string id { get; set; }
}
public class Item
{
public string title { get; set; }
public string description { get; set; }
public int quantity { get; set; }
public decimal unit_price { get; set; }
public decimal discount_amount { get; set; }
public string reference_id { get; set; }
public string image_url { get; set; }
public string product_url { get; set; }
public string gender { get; set; }
public string category { get; set; }
public string color { get; set; }
public string product_material { get; set; }
public string size_type { get; set; }
public string size { get; set; }
public string brand { get; set; }
}
public class OrderHistory
{
public string purchased_at { get; set; }
public decimal amount { get; set; }
public string payment_method { get; set; }
public string Status { get; set; }
public Buyer buyer { get; set; }
public ShippingAddress shipping_address { get; set; }
public List<Item> items { get; set; }
}
public class ShippingAddress
{
public string city { get; set; }
public string address { get; set; }
public string zip { get; set; }
}
public class Attachment
{
public string body { get; set; }
public string content_type { get; set; }
}
public class Payment
{
public string browserTimeLabel { get; set; }
[DisplayName("Amount")]
public string amount { get; set; }
[DisplayName("Currency")]
public string currency { get; set; }
[DisplayName("Description")]
public string description { get; set; }
public Buyer buyer { get; set; }
public BuyerHistory buyer_history { get; set; }
public Order order { get; set; }
public List<OrderHistory> order_history { get; set; }
public ShippingAddress shipping_address { get; set; }
public Meta meta { get; set; }
public Attachment attachment { get; set; }
[DisplayName("Language")]
public string lang { get; set; }
public string merchant_code { get; set; }
public MerchantUrls merchant_urls { get; set; }
}
public class Order
{
public string tax_amount { get; set; }
public string shipping_amount { get; set; }
public string discount_amount { get; set; }
public DateTime updated_at { get; set; }
public string reference_id { get; set; }
public List<Item> items { get; set; }
}
public class Meta
{
public string order_id { get; set; }
public string customer { get; set; }
}
public class MerchantUrls
{
public string success { get; set; }
public string cancel { get; set; }
public string failure { get; set; }
}
}
CLS_Response.Cs
This is the Payment Return Json response Class.
namespace Inegration.Models
{
public class CLS_Response
{
}
public class InstallmentDetails
{
public string due_date { get; set; }
public object old_amount { get; set; }
public string amount { get; set; }
public string principal { get; set; }
public string service_fee { get; set; }
}
public class InstallmentProduct
{
public string downpayment { get; set; }
public string downpayment_percent { get; set; }
public object downpayment_increased_reason { get; set; }
public string amount_to_pay { get; set; }
public object old_downpayment_total { get; set; }
public string downpayment_total { get; set; }
public string order_amount { get; set; }
public string next_payment_date { get; set; }
public List<InstallmentDetails> installments { get; set; }
public bool pay_after_delivery { get; set; }
public string pay_per_installment { get; set; }
public string web_url { get; set; }
public string qr_code { get; set; }
public int id { get; set; }
public int installments_count { get; set; }
public string installment_period { get; set; }
public string service_fee { get; set; }
}
public class AvailableProducts
{
public List<InstallmentProduct> installments { get; set; }
}
public class Configuration
{
public string currency { get; set; }
public string app_type { get; set; }
public bool new_customer { get; set; }
public object available_limit { get; set; }
public object min_limit { get; set; }
public AvailableProducts available_products { get; set; }
public string country { get; set; }
public string expires_at { get; set; }
public bool is_bank_card_required { get; set; }
public object blocked_until { get; set; }
public bool hide_closing_icon { get; set; }
public object pos_provider { get; set; }
public bool is_tokenized { get; set; }
public string disclaimer { get; set; }
public string help { get; set; }
public bool is_ipqs_required { get; set; }
public Products products { get; set; }
}
public class Products
{
public Installments installments { get; set; }
}
public class Installments
{
public string type { get; set; }
public bool is_available { get; set; }
public object rejection_reason { get; set; }
}
public class Payment2
{
public string id { get; set; }
public DateTime created_at { get; set; }
public DateTime expires_at { get; set; }
public string status { get; set; }
public bool is_test { get; set; }
public Product product { get; set; }
public string amount { get; set; }
public string currency { get; set; }
public string description { get; set; }
public Buyer buyer { get; set; }
public ShippingAddress shipping_address { get; set; }
public Order order { get; set; }
public List<object> captures { get; set; }
public List<object> refunds { get; set; }
public BuyerHistory buyer_history { get; set; }
public List<object> order_history { get; set; }
public object meta { get; set; }
public bool cancelable { get; set; }
}
public class Product
{
public string type { get; set; }
public int installments_count { get; set; }
public string installment_period { get; set; }
}
public class Juicyscore
{
public string session_id { get; set; }
public string referrer { get; set; }
public string time_zone { get; set; }
public string useragent { get; set; }
}
public class Merchant
{
public string name { get; set; }
public string address { get; set; }
public string logo { get; set; }
}
public class RootObject
{
public string web_url { get; set; }
public string id { get; set; }
public object warnings { get; set; }
public Configuration configuration { get; set; }
public string api_url { get; set; }
public object token { get; set; }
public string flow { get; set; }
public Payment payment { get; set; }
public string status { get; set; }
public Customer customer { get; set; }
public Juicyscore juicyscore { get; set; }
public MerchantUrls merchant_urls { get; set; }
public object product_type { get; set; }
public string lang { get; set; }
public string locale { get; set; }
public object seon_session_id { get; set; }
public Merchant merchant { get; set; }
public string merchant_code { get; set; }
public bool terms_accepted { get; set; }
public object promo { get; set; }
public InstallmentPlan installment_plan { get; set; }
public bool is_ipqs_requested { get; set; }
}
public class Customer
{
public object id { get; set; }
public string phone { get; set; }
public string email { get; set; }
public object is_identity_auth_skipped { get; set; }
}
public class InstallmentPlan
{
public object installments { get; set; }
}
}





fname lnamePosted Jan 16, 2024, 2:06 PM
What about the end point api should I use to send and Tabby SMS to the buyer ,for telling him how he can complete the payment through tabby. Because I use an desktop POS, and the buyer cannot pay directly (there is no website). 'I need auto Payment links'
Anandu G NathPosted Jan 15, 2024, 3:59 AM
First you can Contact to tabby ,They will register your company details on their portal and give you the testing credentials.
fname lnamePosted Jan 14, 2024, 10:29 AM
How I can get token for testing?!!!