Through its integration with Zoho, Digifabster optimizes business workflows, enabling seamless data exchange and efficient order management.
How to connect
1. From Zoho API Console (https://api-console.zoho.com) we need client_id and client_secret
2. From organization in Zoho Books (https://books.zoho.com/app#/organizations) we need zoho_organization_id
3. In Zoho API Console (https://api-console.zoho.com) you need set up correct redirect url (https://digifabster.com/manage/complete_zoho_registration/ by default)
Status Flow
Triggers
In this case a request will be sent to Zoho when the Digifabster Order gets one of the processing statuses.
By default they are:
– Manufacturing status: Placed
– Payment status: Paid.
NOTE: The set of statuses can be configured.
Records mapping
By establishing the correspondence between data fields in our database and those in the Zoho system, we ensure that information is accurately interpreted and utilized.
By default in Zoho we create: Contact, Contact Person, Sales Order, Invoice.
Contact
By default we sent – contact_name, company_name, billing_address, shipping_address.
contact_name – DF Order company name
(contact_name is derived from the DF Order address or from the first and last names, depending on whether the billing or delivery addresses exists)
company_name – DF Order company name
(company_name is derived from the DF Order address or from the first and last names, depending on whether the billing or delivery addresses exists)
billing_address – DF Order billing address
shipping_address – DF Order delivery address
Both of addresses uses next mapping:
"address": df_address.street_address,
"street2": df_address.apartment,
"city": df_address.city,
"state": df_address.state,
"zip": df_address.postcode,
"country": df_address.country,
NOTE: A set of fields can be configured.
Contact Person
By default we sent – contact_id, first_name, last_name, email
contact_id – Zoho Contact ID which was created in a previous step
first_name – DF Order first name
last_name – DF Order last name
email – DF Order email
NOTE: A set of fields can be configured.
Sales Order
By default we sent – customer_id, date, line_items, delivery_method, shipment_date, contact_persons.
customer_id – Zoho Contact ID which was created in a previous step
date – DF Order creation date
example: 2021-10-26
line_items – DF Order purchases (description, quantity, rate, discount)
description – string with next data
Order #<df_order_id>, Model <df_model_title>, Material <df_material_title>: <df_material_description>, Notes: <df_order_notes>
quantity – DF Purchase amount
example: “10”
rate – DF Purchase unit price
example “1000.01”
discount – DF Order full discount
example: “85”
formula: (1 - (1 - purchase.discount_rate) * (1 - order.discount_rate)) * 100
delivery_method – DF Order delivery type title
example: “Pick Up” or your custom shipping title (string) or delivery title from EasyPost (string)
shipment_date – DF Order shipment date
example: 2021-10-26
contact_persons – array with contact persons ids which were created in a previous step
NOTE: A set of fields can be configured
We sent the DF Order startup cost to Zoho Books as one of the line items.
Invoice
By default we sent – customer_id, date, line_items, reference_number, contact_persons
customer_id – Zoho Contact ID which was created in a previous step
date – DF Order creation date
example: 2021-10-26
line_items – DF Order purchases (same as Sales Order line items)
reference_number – Zoho Sales Order number which was created in a previous step
contact_persons – array with contact persons ids which were created in a previous step
Create or Update logic
After first creating an entity (Sales Order, Invoice) we store sales_order_id, invoice_id in DF, which are used to update already existing entities in Zoho Books.
We send an entity update request to Zoho every time we change an order in DF, as long as its status matches the trigger conditions (see Status Flow)
For a Contact, we first query all contacts, then match the contact from DF with the contact from Zoho by contact_name (it is unique to Zoho). If we find a contact in Zoho, we update it and then use it to create a Sales Order and Invoice, otherwise we first create a new contact in Zoho.
We don’t update the contact_name in Contact entity.
We don't update Contact Persons, we only create them and add them to the Contact entity.
For Contact Persons, we first query for all contact_persons at the required contact_id (it is needed for Sales Order and Invoice), then we send a creation request with a new contact_person (it will be added to contact persons array).
Updating occurs with the same set of fields that are relevant for each entity (Contact, Sales Order, Invoice).
After successfully creating entities in Zoho Books, inside DF it will be displayed like this:
Webhooks
We don’t provide webhooks for Zoho Books integration and only work one way (DF -> Zoho Books)
Taxes
If you want DF to be able to send to Zoho Books Tax, you must provide tax_id.
Here are quick instructions on how to get it:
1. You need to know your refresh_token (we can give it to you after connecting, or you can get it through the API as described in the documentation: https://www.zoho.com/books/api/v3/oauth/#overview)
2. Along with the refresh_token you need to make a request to get the access_token: https://accounts.zoho.com/oauth/v2/token?refresh_token=<refresh_token>&client_id=<client_id>&client_secret=<client_secret>&grant_type=refresh_token
3. Now, along with the access_token, you can make a request for a list of Taxes in your Zoho Books:
NOTE: to find <client_id>, <client_secret> and <organization_id> you can see in How to connect