Invoice API
Last updated
Last updated
Ottu provides businesses and developers with the capability to incorporate its Invoice functionality into their existing systems, streamlining the process of invoice generation for both online and walk-in customers.
But what exactly is an Invoice? An invoice is a document dispatched by a seller to a buyer, itemizing not only the quantity and cost of products or services rendered by the seller but also detailing any applicable taxes, discounts, and shipping costs. Whether issued for a traditional walk-in customer at a brick-and-mortar establishment or an online purchaser, the invoice stands as both a record of the sale and a call for payment.
Imagine you're a business owner selling a range of products online. As orders pour in, you're faced with the arduous task of creating, sending, and tracking invoices manually. This not only consumes precious time but can also lead to errors, missed payments, and dissatisfied customers.
With Ottu's advanced Invoice API
, these challenges become a thing of the past. This robust system automates invoicing, ensuring timely dispatch, clear communication, and streamlined payment collection. Whether you're billing for a one-time purchase, tracking bulk orders, or managing advance payments, the Invoice API
has got you covered. Through its intuitive integration, you can elevate the efficiency of your business operations and enhance the overall customer experience.
Additionally, it's worth noting that this API bears significant similarities to Ottu's offering seamless integration and familiarity for businesses already leveraging Ottu's suite of tools.
Before you can integrate with Ottu's Invoice API
, several prerequisites need to be fulfilled. These prerequisites are essential to ensure that the Invoice API
functions correctly and securely.
Payment Gateway:
The Invoice API
operates seamlessly with a . Think of this gateway as the essential bridge that authorizes and facilitates transactions between your establishment and your customers. However, it's crucial to know that the Invoice API
is explicitly tailored for a Purchase Payment Gateway and does not support the Authorize type.
For a comprehensive understanding of Payment Gateways and their inner workings, do give our User Guide a read. It provides valuable insights and clarifications.
Optional: round
function
When offering customer-facing invoice generation, it's essential to display precise figures supported by clear formulas. The round
function is pivotal in achieving this accuracy.
round
funtion works?In order to ensure the precision and consistency of the financial calculations across various international transactions, Ottu relies on a standardized rounding method known as "" from Python. This method adheres to specific standards established by reputable international organizations:
Ottu relies on currency decimal specifications provided by the SIX Group through SIX Financial Information.
ISO 4217 provides currency codes and their corresponding minor units, indicating the decimal precision.
The "ROUND_HALF_UP
" method follows a careful procedure to ensure precision:
Establish Precision: Begin by determining the number of decimal digits permitted for the currency involved, according to .
Identify the Rounding Digit: Locate the digit immediately to the right of the desired precision. This digit is pivotal in determining the rounding outcome.
Apply Rounding Criteria:
If the digit to the right of the rounding digit is 5 or greater, the rounding digit is increased by one to ensure rounding up.
Conversely, if the digit to the right of the rounding digit is less than 5, the rounding digit remains unchanged, maintaining the current value.
Why round Matters for Your Interface: Ottu's backend utilizes round for precise financial workings. For merchants building a frontend for this Endpoint, it's vital to mirror round in real-time calculations. This ensures users will avoid discrepancy errors when interfacing with Ottu's backend. Certain optional fields in the API are designed to maintain this alignment between frontend input and backend processing, streamlining user experience and bolstering trust. Sources of Decimal Standards:
Once you've fulfilled these prerequisites, you're ready to integrate the Invoice API. The following sections of this document will guide you through the authentication process and the usage of various API endpoints.
Optimize your integration with the Invoice API
using our official packages, designed to significantly simplify the process. These packages efficiently handle the complexities of API integration, allowing you to focus on the critical elements of your project.
Available Packages:
While these packages enhance speed and convenience, understanding the foundational concepts detailed in the documentation is essential for robust and sustainable integration.
Supported Methods
When using Basic Authentication, it is important to ensure that the appropriate level of permissions is assigned to each user or application using the APIs. This can help to prevent unauthorized access to sensitive data.
To create a transaction, user requires specific permissions that vary depending on the plugin in use:
“Can add payment requests” for the Payment Request plugin
“Can add e-commerce payments” for the E-Commerce plugin
And also needs permission to use the required Payment Gateway
"Can use pg_code
”
To add invoice, user needs to have below permission:
“Can add Invoice”
When using the Private API Key, all permissions are granted by default, as the private API-Key
is considered to have admin permissions.
It is recommended to regularly rotate API keys
and follow secure password storage practices when using Basic Authentication
.
The Ottu Invoice API serves as a robust mechanism for merchants to seamlessly issue invoices and manage transactions on the Ottu platform. Here's a detailed breakdown of how the Ottu Invoice API
functions:
Initiating the Invoice:
Integration with Ottu Checkout API:
Communication to Customers:
Merchants can choose to send the checkout_url
to customers via Email or SMS using Ottu's communication channels.
Alternatively, merchants have the flexibility to handle the communication from their internal systems.
Customer Interaction:
Customers receive the checkout_url
and, upon clicking, are redirected to Ottu's Checkout Page.
Here, customers can conveniently view and download the detailed invoice and proceed to make a direct payment.
Transaction Completion:
Post-Transaction Customer Experience:
Ottu's Response Page offers customers the option to download the invoice along with the payment receipt for their records.
This end-to-end process ensures a seamless and secure transaction experience for both merchants and customers, integrating Ottu's Invoice API
with Ottu Checkout API
for efficient invoice generation, and payment processing.
In this section, we delve into the comprehensive details encompassing the creation of an invoice through Ottu's robust system. The invoicing process involves multiple layers, each designed to provide flexibility and customization to the merchant. Here's a breakdown of the key components:
Header/Seller Information: Merchants have the opportunity to tailor the invoice header, adding a distinctive touch to their brand. This customization includes the provision of a logo of their choice, seamlessly incorporated into the invoice.
These values, referred as VAL CALC
, serve as validators to ensure that the real-time calculations, typically conducted by the client-side system or application, align with the values computed by Ottu's backend system. Validating these fields at both the item and invoice levels helps identify any disparities between the two, thereby ensuring accuracy and reliability throughout the invoicing process.
Mandatory: Type, Currency Code, PG Codes, Invoice Number, Due Date.
Optional: Tax Rate, Discount Amount, Discount Percentage, Shipping Excluding Tax, Shipping Method, Shipping Tax Rate.
VAL CALC: Total Excluding Tax, Total Including Tax, Tax Amount, Shipping Including Tax, Subtotal, Amount.
Buyer Information: Tailored to accommodate diverse business needs, the Buyer Information section allows for custom fields configured based on the type of the invoice payment_request
, e_commerce
. This flexibility ensures that merchants can capture essential buyer details relevant to their specific invoicing context.
Invoice
type
currency_code
pg_codes
invoice_number
due_date
tax_amount
shipping_inc_tax
total_excl_tax
total_incl_tax
subtotal
amount
company_name
tax_rate
discount_amount
discount_percentage
shipping_excl_tax
shipping_tax_rate
shipping_method
Item
sku
description
quantity
unit_price
tax_amount
total_excl_tax
total_incl_tax
tax_rate
discount_amount
discount_percentage
It's important to note that:
For optional properties, if they are not relevant, exclude them entirely from the payload. Avoid sending null or zero values; it's better to omit the property altogether if unnecessary.
For a more detailed technical understanding and the implementation specifics of these operations, please refer to the OpenAPI schema in the API Schema Reference section below.
Dive into integrating the Invoice API
with our concise, step-by-step guide. Designed for seamless adoption into your existing systems, this guide will take you through the essentials of setup and utilization. It's tailored to enhance your invoicing process, ensuring accuracy and efficiency in your financial transactions. Get ready to transform and streamline your billing operations with ease.
Using a payload as minimal as the one below, you can obtain an invoice.
Applying a discount percentage of 12 to the invoice_items
object within the Invoice API
request payload:
Invoice:
Updating Invoice: Invoice is immutable; create a new one for updates.
The invoice generation process involves two levels: the invoice items level and the invoice level. The logic begins at the invoice items level and progresses through a series of calculations, incorporating discounts, taxes, and total values. The results are then aggregated at the invoice level to derive a comprehensive view of the entire transaction
Calculate quantity_price
: round(quantity
* unit_price
)
Calculate the discount on the item:
If both discount_percentage
and discount_amount
are present, throw an error message.
If only discount_percentage
is present, calculate the total discount for this item: total_discount
= (quantity_price
* discount_percentage
/100).
If only discount_amount
is present, ensure it is not more than quantity_price
and store it in total_discount
.
total_discount
= round(total_discount
) for proper number handling.
Calculate total values:
total_excl_tax
= round(quantity_price
- total_discount
)
total_excl_tax
: VAL CALC
: If provided in the payload, check for discrepancies.
tax_amount
= round(total_excl_tax
* tax_rate
/ 100)
tax_amount
: VAL CALC
total_incl_tax
= round(total_excl_tax
+ tax_amount
)
total_incl_tax
: VAL CALC
Store results for use on the Invoice level.
Calculate subtotal by:
subtotal = 0
Loop over items: subtotal
= round(subtotal
+ item.total_incl_tax
)
subtotal
: VAL CALC
Calculate the discount on the invoice:
If both discount_percentage
and discount_amount
are present, throw an error message.
If only discount_percentage
is present, calculate the total discount for the invoice: total_discount
= (subtotal
* discount_percentage
/100).
If only discount_amount
is present, ensure it is not more than the subtotal
and store it in total_discount
.
total_discount
= round(total_discount
) for proper number handling.
Calculate total values:
total_excl_tax
= round(subtotal
- total_discount
)
total_excl_tax
: VAL CALC
: If provided in the payload, check for discrepancies.
tax_amount
= round(total_excl_tax
* tax_rate
/ 100)
tax_amount
: VAL CALC
shipping_tax
= round(shipping_excl_tax
* shipping_tax_rate
/ 100)
shipping_incl_tax
= round(shipping_excl_tax
+ shipping_tax
)
shipping_incl_tax
: VAL CALC
total_incl_tax
= round(total_excl_tax
+ tax_amount
+ shipping_incl_tax
)
total_incl_tax
: VAL CALC
amount
= total_incl_tax
amount
: VAL CALC
: The amount
field is not mandatory, but if included, it serves as a verification measure. It acts as a final check to ensure that the total amount calculated on the frontend aligns with the amount the endpoint will use for the invoice creation. Any mismatch halts the process to prevent inconsistencies.
Ottu's Invoice API
is a tool provided by Ottu for businesses and developers to integrate invoice functionality into their systems. It automates the process of invoice generation, making it efficient for both online and walk-in customers.
Ottu's Invoice API
automates the invoicing process, saving time and reducing errors associated with manual creation. It provides a seamless experience for customers and merchants, ensuring timely communication and streamlined payment collection.
No, Ottu's Invoice API
does not support the PATCH method. Once an invoice is created, it is immutable and cannot be modified. Any updates require creating a new invoice.
For detailed technical understanding and implementation specifics, refer to Ottu's OpenAPI schema in the API Schema Reference section of the documentation.
To conclude, Ottu's Invoice API
presents a powerful tool for businesses and developers, offering a seamless and automated solution for invoice generation. With a focus on user-friendly integration, the API streamlines the invoicing process, providing flexibility and customization for merchants. The comprehensive features, including detailed invoice information and generation logic, ensure accuracy and efficiency. Ottu's Invoice API
stands as a valuable asset for those seeking to enhance their invoicing workflows, providing a reliable and advanced solution for a diverse range of businesses.
Optional: Payment Methods API
The serves as an initial phase aimed at collecting dynamic parameters, particularly the , essential for subsequent calls to the . Consider it a preparatory API call that furnishes you with the necessary information for the primary transactional API.
Why is it considered optional? If you are already familiar with the specific pg_code
you plan to use consistently, you have the option to skip this step by directly storing that pg_code
in your system. However, utilizing the Payment Methods API
guarantees that you stay informed about the most recent payment gateways available or any modifications in the configuration. This dynamic approach ensures a more robust and adaptable integration with Ottu.
Python SDK: Enhances access to invoice functionalities through a Pythonic interface, effectively abstracting the intricacies of API interactions to boost developer efficiency.
Django SDK: Seamlessly integrates invoice features into Django-based applications, providing Django-specific enhancements that streamline invoice transactions.
For detailed information on authentication procedures, please refer to the .
Below, we are explaining how permissions are managed using and .
Ottu Invoice API
supports different levels of permissions for the and plugins.
Merchants utilize the Invoice API
, passing the necessary parameters to initiate the creation of an invoice. Please check .
Invoice API
seamlessly integrates with the Ottu to generate a .
After completing the transaction, Ottu posts a response to the designated , providing real-time updates on the transaction status. Please refer to .
Following transaction completion, customers are redirected either to Ottu's Response Page or a specified . Please refer to .
Invoice Information: The essence of the invoice lies in the information provided by the merchant, encompassing Mandatory, Optional, or Calculated values.This information is systematically organized at two distinct levels—the and the .
Address Information: Similar to the I, Ottu's invoicing system supports both and addresses, providing a seamless and unified experience for users.
In the previous section, we discussed the different sections and levels of invoice information, where details are sourced either from the merchant's input in the Invoice API
request or calculated automatically. Below table categorizes the parameters in the Invoice API based on whether they are mandatory, optional, or calculated automatically (), at both the item and invoice levels.
All rate or percentage-related fields are limited to two decimal places. For other monetary fields, the number of decimal places is determined by the currency of the invoice, generally according to .
The Invoice API
differs from the in that it does not support the method. Once an invoice is created, it is immutable and cannot be modified. Should any updates be necessary, a new invoice must be created in place of the original.
The objective of the POST
request is to facilitate the creation of payment transactions and the subsequent generation of payment links, each of which is associated with a unique . These links can be effortlessly shared with customers through various communication channels, including email, WhatsApp, and SMS. Additionally, it is possible to incorporate the customer's and information into the transaction. Moreover, users of this API can include diverse forms of data and information within the body request.
Prior to initiating the initial payment, you can choose to invoke the to obtain the required .
The URL for the invoice PDF in the above is:
Understanding Ottu's Invoice API: Ottu's Invoice API
automates invoice generation, saving time and reducing errors for both online and walk-in customers. Please check .
Prerequisites for Integration: Ensure a Purchase and understand Ottu's. Optionally explore the for dynamic updates.
Authentication Best Practices: Use or . Regularly rotate API keys
for security.
VAL CALC Fields: fields ensure accurate figures, like Tax Amount and Shipping Including Tax.
Documentation References: Refer to Ottu's OpenAPI for technical details.
Technical Implementation Guide: Follow Ottu's for a seamless integration.
The Invoice Generation Logic is a critical component of Ottu's invoicing system, designed to ensure precision, accuracy, and consistency in financial transactions. At the core of this logic is the utilization of the round
function. For more information about round function, please check .
Before integration, ensure you have a Purchase , understand the function, and optionally explore the . For more information, please refer to .
Yes, if you are familiar with a specific pg_code
, you can skip using the. However, using it ensures you stay informed about recent payment gateways and configurations, enhancing adaptability.
can be done using or . For more information please refer to section.
They are optional and fields associated with the calculation of prices in an invoice. They play a crucial role in displaying accurate figures during the invoice creation process, such as Tax Amount
and Shipping Including Tax
. For more information, please check .
Ottu uses a specific logic for calculating totals and taxes at both the item and invoice levels. Details are provided in the section of the documentation.
Create a new Invoice
Private API key to be provided in the format Api-Key <key>
.
Api-Key vSUmxsXx.V81oYvOWFMcIywaOu57Utx6VSCmG11lo
Serializer class for Invoice
instances, inheriting from BaseInvoiceSerializer
and
CheckoutSerializer
. It provides methods for creating invoices, invoice items, and transactions.
The specified currency represents the denomination of the transaction.Nevertheless, it doesn't necessarily mandate payment in this exact currency.Due to potential currency conversions or exchanges, the final charge may be in a different currency.
The date by which the customer is expected to make payment for the invoice.
The list of items for the invoice.
A unique identifier for the invoice, typically used for tracking and referencing purposes.
The list of payment gateway codes from which a customer can select to perform the payment
The type of the payment transaction. This field represents the purpose of the payment and can be one of several pre-defined choices.
e_commerce
- Ecommercepayment_request
- Payment RequestNested serializer to save Address data into PaymentTransaction
Nested serializer to save Address data into PaymentTransaction
An established contractual arrangement with the payer, which authorizes you to securely store and subsequently utilize their payment information for specific purposes. This could encompass arrangements like recurring payments for services such as mobile subscriptions, installment-based payments for purchases, arrangements for ad-hoc charges like account top-ups, or for standard industry practices like penalty charges for missed appointments.
Note: If your intention is solely to store payment details for transactions initiated by the payer in the future, then this parameter group should not be used.
Serializer to hold the recurring data information. This is required for being able to create recurring payments and the PGs require this information.
Represents the total amount of the payment transaction, which includes the cost of the purchased items or services but excludes any additional fees or charges
A writable field that accepts an attachment file to be included in email notifications sent to the customer regarding their payment, and also be available for download on the checkout page. This field may be used to provide the customer with additional information or documentation related to their purchase. The value of this field should be a file object. Upon successful submission, the API will return the URL for downloading the attached file.
A short URL that links to the attachment associated with this payment. This URL may be included in email/sms notifications sent to the customer regarding their payment or displayed on the checkout page to allow the customer to easily access the attachment.
A writable field that accepts an attachment that has already been uploaded to the server.
(?:pdf|jpeg|png|doc|docx|jpg|xls|xlsx|txt)$
This field allows you to define specific rules and conditions that a card must meet to be eligible for payment. These stipulations apply regardless of whether a customer chooses to pay using a saved card or opts to add a new card for the transaction. By leveraging the card_acceptance_criteria
, you gain the power to fine-tune your payment processing strategy, tailoring acceptance rules to align with your business needs, security standards, and risk management policies.
Example: If you run an exclusive service that caters predominantly to premium customers, you might set criteria that only allow transactions from high-tier credit cards like VISA Platinum. This ensures that payments align with the exclusivity and branding of your services. Remember to configure these criteria thoughtfully. Striking the right balance between security, risk mitigation, and user experience is paramount.
Note: The card_acceptance_criteria
field is applicable only for direct payments and not for hosted session payments.
A short URL link that, when opened, redirects to the checkout page for this payment. This URL may be shared with the customer to allow them to easily access and complete the payment. This field is only available if the shortify_checkout_url
field is set to True.
URL that directs the customer to the Ottu Checkout Page where they can see the payment details and available payment methods for the transaction. If you need to share the payment link over SMS or WhatsApp, use checkout_short_url
instead.
The company name is used for invoice API.
The email address of the customer that is used to send payment notifications and receipts, and can be used for fraud prevention. This field is mandatory and is always sent to the payment gateway. It may also be included in the invoice, receipt, email, and displayed on the payment page.
The first name of the recipient of the payment. This field is used for various communications such as the invoice, receipt, email, SMS, or displayed on the payment page. It may also be sent to the payment gateway if necessary.
The customer ID is a unique identifier for the customer within the merchant's system. It is also used as a merchant identifier for the customer and plays a critical role in tokenization. All the customer's cards will be associated with this ID.
The last name of the recipient of the payment. This field is used for various communications such as the invoice, receipt, email, SMS, or displayed on the payment page. It may also be sent to the payment gateway if necessary.
Customer phone number associated with the payment. This might be sent to the payment gateway and depending on the gateway, it may trigger a click to pay process on the payment page. The phone number will also be included in the invoice, receipt, email, and displayed on the payment page.
The fixed amount discount applied to the full invoice amount, including taxes. If set, the discount_percentage field will be set to null. Both discount_amount and discount_percentage cannot be set simultaneously. The discount cannot be higher than the total_excl_tax
field.
The percentage-based discount applied to the full invoice amount, including taxes. If set, the discount_amount field will be automatically calculated. Both discount_amount and discount_percentage cannot be set simultaneously. The discount cannot be higher than the total_excl_tax
field.
The date and time by which the payment is due. This field may be used to help remind the customer to complete the payment before the due date.
A comma-separated list of email addresses for internal recipients who will receive customer emails. These recipients will be included in email notifications sent to the customer regarding their payment.
If defined, any payment transactions created more than the specified period of time ago will be invalidated or expired if the customer attempts to complete them. By default, this expiration period is set to 24 hours from the time of transaction creation. This feature helps ensure that payment transactions are processed promptly.
If set to true, the qr_code_url
field will be present in the response. Upon scanning it, the customer will be redirected to the checkout_url, which is the Ottu Checkout page.
false
Set this to true to include the 'sdk_setup_preload_payload' payload in the API response. This payload is only generated and added when this parameter is explicitly set to true. By default, it is false and the 'sdk_setup_preload_payload' payload will not be included.
false
The user who initiated the creation of this payment transaction, if available. This field is optional and may be used to track who created the payment transaction. Note that if the payment transaction was created via the Checkout API using an API-Key, no initiator will be associated with the payment.
This field specifies the language to be used for communication with the customer, including the payment page, receipt, invoice, email, SMS, and any other communications related to the payment transaction.
en
- Englishar
- Arabicen
Available options: A JSON field that contains the notification settings for this payment transaction, including SMS and email notifications, as well as the events for which they will be sent (e.g., 'created', 'paid', 'refund', 'canceled', etc.). This field may be used to configure and customize the notifications sent to customers and internal recipients throughout the payment process.
Specifies the type of operation to be performed by the payment gateway. If set to purchase
, the payment source will be directly charged. If set to authorize
, the payment source will only be authorized and the actual charge will be made at a later time.
The unique identifier assigned to this payment transaction. It is used for tracking purposes and is set by the merchant or the system.
An array containing all the payment methods derived from the pg_codes
input. Each object in the array contains information about a single payment gateway, including its icon and the redirect_url
that will redirect the customer to the payment gateway's payment page.
Type of payment. Choose one_off
for payments that occur only once without future commitments. Choose auto_debit
for payments that are automatically deducted, such as recurring subscriptions, installments, or unscheduled auto-debits.
Choose save_card
if you want to perform a card tokenization operation.
NOTE: If auto_debit
is selected:
agreement
and customer_id
parameters will also be mandatory.agreement.id
. This card will be locked, preventing the customer from deleting it from the system until an alternate card is chosen for auto-debit payments.NOTE: If save_card
is selected:
one_off
- One Offauto_debit
- Auto Debitsave_card
- Save Cardone_off
Available options: The type of product or service being purchased. This field may be used for tracking and reporting purposes.
A QR code that, when scanned, redirects to the checkout page for this payment. This QR code may be displayed on invoices, receipts, or other documents to allow customers to easily access the checkout page and make a payment. This parameter is only present when generate_qr_code
is set to true.
The URL where the customer will be redirected after the payment stage only if the webhook URL returns a success status. order_no
, reference_number
and session_id
will be appended to the redirect URL as query parameters.
A JSON object containing preloaded data required to initialize the checkout interface.This includes essential details such as customer information, available payment methods.and specific transaction details, all formatted according to the Checkout SDK's initialization specifications.This field streamlines the checkout process by providing necessary information upfront.enhancing user experience and efficiency.
false
Serialize data for SDK init. The SDK will use this data to initialize the payment process and to display the payment methods.
A unique identifier for each payment transaction, used to maintain the session state during the payment process.
The code of the payment gateway used for completing the transaction. This field indicates the specific gateway that processed and settled the payment, providing clarity on which payment service was ultimately utilized for this transaction.
The cost of shipping for the invoice, excluding taxes.
The cost of shipping for the invoice, including all applicable taxes.
The method or service used for shipping the items associated with the invoice.
The tax rate applied to the shipping cost, expressed as a percentage.
If set to True, the URL of the uploaded attachment will be shortened using a URL shortener service. This should be used when sharing the attachment URL via SMS or WhatsApp.
false
If set to True, the checkout URL will be shortened using a URL shortener service. This should be used when sharing the payment URL via SMS or WhatsApp.
false
The current state of the payment transaction, it helps to understand the progress of the payment.
created
- Createdpending
- Pendingattempted
- Attemptedauthorized
- Authorizedpaid
- Paidfailed
- Failedcanceled
- Canceledexpired
- Expiredinvalided
- Invalidedrefunded
- Refundedcod
- Cash on DeliveryCurrent status of the invoice. Can be one of the following: sent
, paid
, overdue
, canceled
.
sent
- Sentpaid
- Paidoverdue
- Overduecanceled
- CanceledSum of total_incl_tax's of all invoice items.
The total amount of tax applied to the invoice.
The tax rate applied to the invoice, expressed as a percentage.
The total amount of the invoice, excluding taxes.
The total amount of the invoice, including all applicable taxes.
The slug of the unit to be used for the transaction.
The name of the vendor or merchant associated with this payment. This field may be used for accounting and reporting purposes.
URL where the payment result will be sent via a POST request after the customer has completed the payment session. The payment result will be included in the request body.
Serializer class for Invoice
instances, inheriting from BaseInvoiceSerializer
and
CheckoutSerializer
. It provides methods for creating invoices, invoice items, and transactions.