Retainer Invoices
A lot of businesses collect an advance payment (or retainer) for products sold or services rendered by them. This amount collected will not be an income but a liability to the company. The revenue is earned only when the product is delivered or the service is completed, if not delivered or completed the advance payment made will be returned to the customer.
Attribute
retainerinvoice_number_startswith and retainerinvoice_number_contains. Max-length [100]sent, draft, overdue, paid, void, unpaid, partially_paid and viewedplace of contact given for the contact will be taken)standard and adaptivepaypal, authorize_net, payflow_pro, stripe, 2checkout and braintree{
    "retainerinvoice_id": 982000000567114,
    "retainerinvoice_number": "RET-00003",
    "date": "2013-11-17",
    "status": "draft",
    "is_pre_gst": false,
    "place_of_supply": "TN",
    "project_id": 982000000567154,
    "project_name": "string",
    "last_payment_date": " ",
    "reference_number": " ",
    "customer_id": 982000000567001,
    "customer_name": "Bowman & Co",
    "contact_persons_associated": [
        {
            "contact_person_id": 982000000567003,
            "contact_person_name": "David",
            "first_name": "David",
            "last_name": "Sujin",
            "contact_person_email": "willsmith@bowmanfurniture.com",
            "phone": "+1-925-921-9201",
            "mobile": "+1-4054439562",
            "communication_preference": {
                "is_email_enabled": true,
                "is_whatsapp_enabled": true
            }
        }
    ],
    "currency_id": 982000000000190,
    "currency_code": "USD",
    "currency_symbol": "USD",
    "exchange_rate": 1,
    "is_viewed_by_client": true,
    "client_viewed_time": true,
    "is_inclusive_tax": false,
    "location_id": "460000000038080",
    "location_name": "string",
    "line_items": [
        {
            "line_item_id": 982000000567021,
            "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
            "item_order": 1,
            "rate": 120,
            "bcy_rate": 120,
            "tax_id": 982000000557028,
            "tax_name": "VAT",
            "tax_type": "tax",
            "tax_percentage": 12.5,
            "item_total": 120,
            "location_id": "460000000038080",
            "location_name": "string"
        }
    ],
    "sub_total": 153,
    "total": 40.6,
    "taxes": [
        {
            "tax_name": "VAT",
            "tax_amount": 19.13
        }
    ],
    "payment_made": 26.91,
    "payment_drawn": 26.91,
    "balance": 40.6,
    "allow_partial_payments": true,
    "price_precision": 2,
    "payment_options": {
        "payment_gateways": [
            {
                "configured": true,
                "additional_field1": "standard",
                "gateway_name": "paypal"
            }
        ]
    },
    "is_emailed": false,
    "documents": [],
    "billing_address": {
        "address": "Suite 125, McMillan Avenue",
        "street2": "McMillan Avenue",
        "city": "San Francisco",
        "state": "CA",
        "zip": 94134,
        "country": "U.S.A",
        "fax": "+86-10-82637827"
    },
    "shipping_address": {
        "address": "Suite 125, McMillan Avenue",
        "city": "San Francisco",
        "state": "CA",
        "zip": 94134,
        "country": "U.S.A",
        "fax": "+86-10-82637827"
    },
    "notes": "Looking forward for your business.",
    "terms": "Terms & Conditions apply",
    "custom_fields": [
        {
            "index": 1,
            "show_on_pdf": false,
            "value": "The value of the custom field",
            "label": "Delivery Date"
        }
    ],
    "template_id": 982000000000143,
    "template_name": "Service - Classic",
    "page_width": "8.27in",
    "page_height": "11.69in",
    "orientation": "portrait",
    "template_type": "classic",
    "created_time": "2013-11-18T02:31:51-0800",
    "last_modified_time": "2013-11-18T02:31:51-0800",
    "created_by_id": 14909000000072000,
    "attachment_name": "new file",
    "can_send_in_mail": true,
    "invoice_url": "https://invoice.zoho.com/SecurePayment?CInvoiceID=23d84d0cf64f9a72ea0c66fded25a08c8bafd0ab508aff05323a9f80e2cd03fdc5dd568d3d6407bbda969d3e870d740b6fce549a9438c4ea"
}
          Create a retainerinvoice
            Create a retainer invoice for your customer.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Arguments
standard and adaptivepaypal, authorize_net, payflow_pro, stripe, 2checkout and braintreeplace of contact given for the contact will be taken)Query Parameters
true and falseparameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695")
  .post(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("POST", "/books/v3/retainerinvoices?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "customer_id": 982000000567001,
    "reference_number": " ",
    "date": "2013-11-17",
    "contact_persons_associated": [
        {
            "contact_person_id": 982000000567003,
            "communication_preference": {
                "is_email_enabled": true,
                "is_whatsapp_enabled": true
            }
        }
    ],
    "custom_fields": [
        {
            "index": 1,
            "show_on_pdf": false,
            "value": "The value of the custom field",
            "label": "Delivery Date"
        }
    ],
    "notes": "Looking forward for your business.",
    "terms": "Terms & Conditions apply",
    "location_id": "460000000038080",
    "line_items": [
        {
            "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
            "item_order": 1,
            "rate": 120
        }
    ],
    "payment_options": {
        "payment_gateways": [
            {
                "configured": true,
                "additional_field1": "standard",
                "gateway_name": "paypal"
            }
        ]
    },
    "template_id": 982000000000143,
    "place_of_supply": "TN"
}
            {
    "code": 0,
    "message": "The retainer invoice has been created.",
    "retainerinvoice": {
        "retainerinvoice_id": 982000000567114,
        "retainerinvoice_number": "RET-00003",
        "date": "2013-11-17",
        "status": "draft",
        "is_pre_gst": false,
        "place_of_supply": "TN",
        "project_id": 982000000567154,
        "project_name": "string",
        "last_payment_date": " ",
        "reference_number": " ",
        "customer_id": 982000000567001,
        "customer_name": "Bowman & Co",
        "contact_persons_associated": [
            {
                "contact_person_id": 982000000567003,
                "contact_person_name": "David",
                "first_name": "David",
                "last_name": "Sujin",
                "contact_person_email": "willsmith@bowmanfurniture.com",
                "phone": "+1-925-921-9201",
                "mobile": "+1-4054439562",
                "communication_preference": {
                    "is_email_enabled": true,
                    "is_whatsapp_enabled": true
                }
            }
        ],
        "currency_id": 982000000000190,
        "currency_code": "USD",
        "currency_symbol": "USD",
        "exchange_rate": 1,
        "is_viewed_by_client": true,
        "client_viewed_time": true,
        "is_inclusive_tax": false,
        "location_id": "460000000038080",
        "location_name": "string",
        "line_items": [
            {
                "line_item_id": 982000000567021,
                "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
                "item_order": 1,
                "rate": 120,
                "bcy_rate": 120,
                "tax_id": 982000000557028,
                "tax_name": "VAT",
                "tax_type": "tax",
                "tax_percentage": 12.5,
                "item_total": 120,
                "location_id": "460000000038080",
                "location_name": "string"
            }
        ],
        "sub_total": 153,
        "total": 40.6,
        "taxes": [
            {
                "tax_name": "VAT",
                "tax_amount": 19.13
            }
        ],
        "payment_made": 26.91,
        "payment_drawn": 26.91,
        "balance": 40.6,
        "allow_partial_payments": true,
        "price_precision": 2,
        "payment_options": {
            "payment_gateways": [
                {
                    "configured": true,
                    "additional_field1": "standard",
                    "gateway_name": "paypal"
                }
            ]
        },
        "is_emailed": false,
        "documents": [],
        "billing_address": {
            "address": "Suite 125, McMillan Avenue",
            "street2": "McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "shipping_address": {
            "address": "Suite 125, McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "notes": "Looking forward for your business.",
        "terms": "Terms & Conditions apply",
        "custom_fields": [
            {
                "index": 1,
                "show_on_pdf": false,
                "value": "The value of the custom field",
                "label": "Delivery Date"
            }
        ],
        "template_id": 982000000000143,
        "template_name": "Service - Classic",
        "page_width": "8.27in",
        "page_height": "11.69in",
        "orientation": "portrait",
        "template_type": "classic",
        "created_time": "2013-11-18T02:31:51-0800",
        "last_modified_time": "2013-11-18T02:31:51-0800",
        "created_by_id": 14909000000072000,
        "attachment_name": "new file",
        "can_send_in_mail": true,
        "invoice_url": "https://invoice.zoho.com/SecurePayment?CInvoiceID=23d84d0cf64f9a72ea0c66fded25a08c8bafd0ab508aff05323a9f80e2cd03fdc5dd568d3d6407bbda969d3e870d740b6fce549a9438c4ea"
    }
}
                List a retainer invoices
            List all retainer invoices with pagination.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Query Parameters
customer_name, retainer invoice_number, date,  due_date, total, balance and  created_time Status.All, Status.Sent,  Status.Draft, Status.OverDue, Status.Paid, Status.Void, Status.Unpaid, Status.PartiallyPaid, Status.Viewed and Date.PaymentExpectedDateheaders_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "success",
    "retainerinvoices": [
        {
            "retainerinvoice_id": 982000000567114,
            "customer_name": "Bowman & Co",
            "retainerinvoice_number": "RET-00003",
            "customer_id": 982000000567001,
            "status": "draft",
            "reference_number": " ",
            "project_or_estimate_name": "new project",
            "date": "2013-11-17",
            "currency_id": 982000000000190,
            "currency_code": "USD",
            "is_viewed_by_client": true,
            "client_viewed_time": true,
            "total": 40.6,
            "balance": 40.6,
            "created_time": "2013-11-18T02:31:51-0800",
            "last_modified_time": "2013-11-18T02:31:51-0800",
            "is_emailed": false,
            "last_payment_date": " ",
            "has_attachment": true
        },
        {...},
        {...}
    ],
    "page_context": {
        "page": 1,
        "per_page": 200,
        "has_more_page": false,
        "report_name": "Retainer Invoices",
        "applied_filter": "Status.All",
        "sort_column": "created_time",
        "sort_order": "D"
    }
}
                update a retainerinvoice
            Update an existing invoice.
              
              OAuth Scope : ZohoBooks.invoices.UPDATE
          
Arguments
standard and adaptivepaypal, authorize_net, payflow_pro, stripe, 2checkout and braintreeplace of contact given for the contact will be taken)Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695")
  .put(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'PUT',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("PUT", "/books/v3/retainerinvoices/982000000567114?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "PUT",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request PUT \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "customer_id": 982000000567001,
    "reference_number": " ",
    "date": "2013-11-17",
    "contact_persons_associated": [
        {
            "contact_person_id": 982000000567003,
            "communication_preference": {
                "is_email_enabled": true,
                "is_whatsapp_enabled": true
            }
        }
    ],
    "custom_fields": [
        {
            "index": 1,
            "show_on_pdf": false,
            "value": "The value of the custom field",
            "label": "Delivery Date"
        }
    ],
    "notes": "Looking forward for your business.",
    "terms": "Terms & Conditions apply",
    "location_id": "460000000038080",
    "line_items": [
        {
            "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
            "item_order": 1,
            "rate": 120
        }
    ],
    "payment_options": {
        "payment_gateways": [
            {
                "configured": true,
                "additional_field1": "standard",
                "gateway_name": "paypal"
            }
        ]
    },
    "template_id": 982000000000143,
    "place_of_supply": "TN",
    "project_id": 982000000567154
}
            {
    "code": 0,
    "message": "Retainer Invoice information has been updated.",
    "retainerinvoice": {
        "retainerinvoice_id": 982000000567114,
        "retainerinvoice_number": "RET-00003",
        "date": "2013-11-17",
        "status": "draft",
        "is_pre_gst": false,
        "place_of_supply": "TN",
        "project_id": 982000000567154,
        "project_name": "string",
        "last_payment_date": " ",
        "reference_number": " ",
        "customer_id": 982000000567001,
        "customer_name": "Bowman & Co",
        "contact_persons_associated": [
            {
                "contact_person_id": 982000000567003,
                "contact_person_name": "David",
                "first_name": "David",
                "last_name": "Sujin",
                "contact_person_email": "willsmith@bowmanfurniture.com",
                "phone": "+1-925-921-9201",
                "mobile": "+1-4054439562",
                "communication_preference": {
                    "is_email_enabled": true,
                    "is_whatsapp_enabled": true
                }
            }
        ],
        "currency_id": 982000000000190,
        "currency_code": "USD",
        "currency_symbol": "USD",
        "exchange_rate": 1,
        "is_viewed_by_client": true,
        "client_viewed_time": true,
        "is_inclusive_tax": false,
        "location_id": "460000000038080",
        "location_name": "string",
        "line_items": [
            {
                "line_item_id": 982000000567021,
                "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
                "item_order": 1,
                "rate": 120,
                "bcy_rate": 120,
                "tax_id": 982000000557028,
                "tax_name": "VAT",
                "tax_type": "tax",
                "tax_percentage": 12.5,
                "item_total": 120,
                "location_id": "460000000038080",
                "location_name": "string"
            }
        ],
        "sub_total": 153,
        "total": 40.6,
        "taxes": [
            {
                "tax_name": "VAT",
                "tax_amount": 19.13
            }
        ],
        "payment_made": 26.91,
        "payment_drawn": 26.91,
        "balance": 40.6,
        "allow_partial_payments": true,
        "price_precision": 2,
        "payment_options": {
            "payment_gateways": [
                {
                    "configured": true,
                    "additional_field1": "standard",
                    "gateway_name": "paypal"
                }
            ]
        },
        "is_emailed": false,
        "documents": [],
        "billing_address": {
            "address": "Suite 125, McMillan Avenue",
            "street2": "McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "shipping_address": {
            "address": "Suite 125, McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "notes": "Looking forward for your business.",
        "terms": "Terms & Conditions apply",
        "custom_fields": [
            {
                "index": 1,
                "show_on_pdf": false,
                "value": "The value of the custom field",
                "label": "Delivery Date"
            }
        ],
        "template_id": 982000000000143,
        "template_name": "Service - Classic",
        "page_width": "8.27in",
        "page_height": "11.69in",
        "orientation": "portrait",
        "template_type": "classic",
        "created_time": "2013-11-18T02:31:51-0800",
        "last_modified_time": "2013-11-18T02:31:51-0800",
        "created_by_id": 14909000000072000,
        "attachment_name": "new file",
        "can_send_in_mail": true,
        "invoice_url": "https://invoice.zoho.com/SecurePayment?CInvoiceID=23d84d0cf64f9a72ea0c66fded25a08c8bafd0ab508aff05323a9f80e2cd03fdc5dd568d3d6407bbda969d3e870d740b6fce549a9438c4ea"
    }
}
                Get a retainer invoice
            Get the details of a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices/982000000567114?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "success",
    "retainerinvoice": {
        "retainerinvoice_id": 982000000567114,
        "retainerinvoice_number": "RET-00003",
        "date": "2013-11-17",
        "status": "draft",
        "is_pre_gst": false,
        "place_of_supply": "TN",
        "project_id": 982000000567154,
        "project_name": "string",
        "last_payment_date": " ",
        "reference_number": " ",
        "customer_id": 982000000567001,
        "customer_name": "Bowman & Co",
        "contact_persons_associated": [
            {
                "contact_person_id": 982000000567003,
                "contact_person_name": "David",
                "first_name": "David",
                "last_name": "Sujin",
                "contact_person_email": "willsmith@bowmanfurniture.com",
                "phone": "+1-925-921-9201",
                "mobile": "+1-4054439562",
                "communication_preference": {
                    "is_email_enabled": true,
                    "is_whatsapp_enabled": true
                }
            }
        ],
        "currency_id": 982000000000190,
        "currency_code": "USD",
        "currency_symbol": "USD",
        "exchange_rate": 1,
        "is_viewed_by_client": true,
        "client_viewed_time": true,
        "is_inclusive_tax": false,
        "location_id": "460000000038080",
        "location_name": "string",
        "line_items": [
            {
                "line_item_id": 982000000567021,
                "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
                "item_order": 1,
                "rate": 120,
                "bcy_rate": 120,
                "tax_id": 982000000557028,
                "tax_name": "VAT",
                "tax_type": "tax",
                "tax_percentage": 12.5,
                "item_total": 120,
                "location_id": "460000000038080",
                "location_name": "string"
            }
        ],
        "sub_total": 153,
        "total": 40.6,
        "taxes": [
            {
                "tax_name": "VAT",
                "tax_amount": 19.13
            }
        ],
        "payment_made": 26.91,
        "payment_drawn": 26.91,
        "balance": 40.6,
        "allow_partial_payments": true,
        "price_precision": 2,
        "payment_options": {
            "payment_gateways": [
                {
                    "configured": true,
                    "additional_field1": "standard",
                    "gateway_name": "paypal"
                }
            ]
        },
        "is_emailed": false,
        "documents": [],
        "billing_address": {
            "address": "Suite 125, McMillan Avenue",
            "street2": "McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "shipping_address": {
            "address": "Suite 125, McMillan Avenue",
            "city": "San Francisco",
            "state": "CA",
            "zip": 94134,
            "country": "U.S.A",
            "fax": "+86-10-82637827"
        },
        "notes": "Looking forward for your business.",
        "terms": "Terms & Conditions apply",
        "custom_fields": [
            {
                "index": 1,
                "show_on_pdf": false,
                "value": "The value of the custom field",
                "label": "Delivery Date"
            }
        ],
        "template_id": 982000000000143,
        "template_name": "Service - Classic",
        "page_width": "8.27in",
        "page_height": "11.69in",
        "orientation": "portrait",
        "template_type": "classic",
        "created_time": "2013-11-18T02:31:51-0800",
        "last_modified_time": "2013-11-18T02:31:51-0800",
        "created_by_id": 14909000000072000,
        "attachment_name": "new file",
        "can_send_in_mail": true,
        "invoice_url": "https://invoice.zoho.com/SecurePayment?CInvoiceID=23d84d0cf64f9a72ea0c66fded25a08c8bafd0ab508aff05323a9f80e2cd03fdc5dd568d3d6407bbda969d3e870d740b6fce549a9438c4ea"
    }
}
                Delete a retainer invoice
            Delete an existing retainer invoice. Invoices which have payment or credits note applied cannot be deleted.
              
              OAuth Scope : ZohoBooks.invoices.DELETE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695"
type: DELETE
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695")
  .delete(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'DELETE',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("DELETE", "/books/v3/retainerinvoices/982000000567114?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "DELETE",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request DELETE \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "The retainer invoice has been deleted."
}
                Mark a retainer invoice as sent
            Mark a draft retainer invoice as sent.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695"
type: POST
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695")
  .post(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/sent?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "Retainer Invoice status has been changed to Sent."
}
                Update retainer invoice template
            Update the pdf template associated with the retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.UPDATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695"
type: PUT
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695")
  .put(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'PUT',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("PUT", "/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "PUT",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request PUT \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/templates/982000000000143?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "Retainer Invoice information has been updated."
}
                Void a retainer invoice
            Mark an invoice status as void. Upon voiding, the payments and credits associated with the retainer invoices will be unassociated and will be under customer credits.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695"
type: POST
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695")
  .post(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/void?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "Retainer Invoice status has been changed to 'Void'."
}
                Mark as draft
            Mark a voided retainer invoice as draft. 
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695"
type: POST
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695")
  .post(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/status/draft?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "Status of retainer invoice changed from void to draft."
}
                Submit a retainer invoice for approval
            Submit a retainer invoice for approval.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695"
type: POST
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695")
  .post(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/submit?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "The Retainer Invoice has been successfully submitted for approval."
}
                Approve a retainer invoice.
            Approve a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695"
type: POST
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695")
  .post(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/approve?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "You have approved the Retainer Invoice."
}
                Email a retainer invoice
            Email a retainer invoice to the customer. Input json string is not mandatory. If input json string is empty, mail will be send with default mail content.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Arguments
Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695")
  .post(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "send_from_org_email_id": false,
    "to_mail_ids": [
        "willsmith@bowmanfurniture.com"
    ],
    "cc_mail_ids": [
        "peterparker@bowmanfurniture.com"
    ],
    "subject": "Retainer Invoice from Zillium Inc (Retainer Invoice#: RET-00001)",
    "body": "Dear Customer,         <br><br><br><br>Thanks for your business.         <br><br><br><br>The retainer invoice RET-00001 is attached with this email. You can choose the easy way out and <a href= https://invoice.zoho.com/SecurePayment?CInvoiceID=b9800228e011ae86abe71227bdacb3c68e1af685f647dcaed747812e0b9314635e55ac6223925675b371fcbd2d5ae3dc  >pay online for this invoice.</a>         <br><br>Here's an overview of the invoice for your reference.         <br><br><br><br>Invoice Overview:         <br><br>Invoice  : INV-00001         <br><br>Date : 05 Aug 2013         <br><br>Amount : $541.82         <br><br><br><br>It was great working with you. Looking forward to working with you again.<br><br><br>\\nRegards<br>\\nZillium Inc<br>\\n\","
}
            {
    "code": 0,
    "message": "Your retainer invoice has been sent."
}
                Get retainer invoice email content
            Get the email content of a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/email?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "success",
    "gateways_configured": true,
    "deprecated_placeholders_used": [],
    "body": "Dear Customer,         <br><br><br><br>Thanks for your business.         <br><br><br><br>The retainer invoice RET-00001 is attached with this email. You can choose the easy way out and <a href= https://invoice.zoho.com/SecurePayment?CInvoiceID=b9800228e011ae86abe71227bdacb3c68e1af685f647dcaed747812e0b9314635e55ac6223925675b371fcbd2d5ae3dc  >pay online for this invoice.</a>         <br><br>Here's an overview of the invoice for your reference.         <br><br><br><br>Invoice Overview:         <br><br>Invoice  : INV-00001         <br><br>Date : 05 Aug 2013         <br><br>Amount : $541.82         <br><br><br><br>It was great working with you. Looking forward to working with you again.<br><br><br>\\nRegards<br>\\nZillium Inc<br>\\n\",",
    "error_list": [],
    "subject": "Retainer Invoice from Zillium Inc (Retainer Invoice#: RET-00001)",
    "to_contacts": [
        {
            "first_name": "David",
            "selected": false,
            "phone": "+1-925-921-9201",
            "email": "willsmith@bowmanfurniture.com",
            "last_name": "Sujin",
            "salutation": "Mr",
            "contact_person_id": 982000000567003,
            "mobile": "+1-4054439562"
        }
    ],
    "attachment_name": "new file",
    "email_template_id": "string",
    "file_name": "RET-00001.pdf",
    "from_emails": [
        {
            "user_name": "John Smith",
            "selected": false,
            "email": "willsmith@bowmanfurniture.com"
        }
    ],
    "customer_id": 982000000567001
}
                Update billing address
            Updates the billing address for this retainer invoice alone.
              
              OAuth Scope : ZohoBooks.invoices.UPDATE
          
Arguments
Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695")
  .put(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'PUT',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("PUT", "/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "PUT",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request PUT \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/address/billing?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "address": "B-1104, 11F, \nHorizon International Tower, \nNo. 6, ZhiChun Road, HaiDian District",
    "city": "Beijing",
    "state": "Beijing",
    "zip": 1000881,
    "country": "string",
    "fax": "+86-10-82637827"
}
            {
    "code": 0,
    "message": "Billing address updated"
}
                List retainer invoice templates
            Get all retainer invoice pdf templates.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/templates?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/templates?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/templates?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices/templates?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/templates?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/templates?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "success",
    "templates": [
        {
            "template_name": "Service - Classic",
            "template_id": 982000000000143,
            "template_type": "classic"
        },
        {...},
        {...}
    ]
}
                Add attachment to a retainer invoice
            Attach a file to an invoice.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Arguments
Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695")
  .post(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "can_send_in_mail": true,
    "attachment": "string"
}
            Get a retainer invoice attachment
            Returns the file attached to the retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/attachment?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              Delete an attachment
            Delete the file attached to the retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.DELETE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695"
type: DELETE
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695")
  .delete(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'DELETE',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("DELETE", "/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "DELETE",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request DELETE \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/documents/982000000567115?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              Add comment
            Add a comment for a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.CREATE
          
Arguments
Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695"
type: POST
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695")
  .post(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'POST',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("POST", "/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "POST",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request POST \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "description": "comment added",
    "payment_expected_date": " ",
    "show_comment_to_clients": true
}
            List retainer invoice comments & history
            Get the complete history and comments of a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.READ
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695"
type: GET
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695")
  .get()
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'GET',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("GET", "/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "GET",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request GET \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "success",
    "comments": [
        {
            "comment_id": 982000000567019,
            "retainerinvoice_id": 982000000567114,
            "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
            "commented_by_id": 982000000554041,
            "commented_by": "John David",
            "comment_type": "system",
            "operation_type": "Added",
            "date": "2013-11-17",
            "date_description": "yesterday",
            "time": "2:38 AM",
            "transaction_id": "982000000567204",
            "transaction_type": "retainer_payment"
        },
        {...},
        {...}
    ]
}
                Update comment
            Update an existing comment of a retainer invoice.
              
              OAuth Scope : ZohoBooks.invoices.UPDATE
          
Arguments
Path Parameters
Query Parameters
parameters_data='{"field1":"value1","field2":"value2"}';
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695"
type: PUT
headers: headers_data
content-type: application/json
parameters: parameters_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"field1\":\"value1\",\"field2\":\"value2\"}");
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695")
  .put(body)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .addHeader("content-type", "application/json")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'PUT',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f',
    'content-type': 'application/json'
  },
  body: '{"field1":"value1","field2":"value2"}'
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
payload = "{\"field1\":\"value1\",\"field2\":\"value2\"}"
headers = {
    'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    'content-type': "application/json"
    }
conn.request("PUT", "/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "PUT",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f",
    "content-type": "application/json"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.write(JSON.stringify({field1: 'value1', field2: 'value2'}));
req.end();
              curl --request PUT \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f' \
  --header 'content-type: application/json' \
  --data '{"field1":"value1","field2":"value2"}'
              {
    "description": "string",
    "show_comment_to_clients": true
}
            {
    "code": 0,
    "message": "The comment has been updated.",
    "comment": {
        "comment_id": 982000000567019,
        "retainerinvoice_id": 982000000567114,
        "description": "500GB, USB 2.0 interface 1400 rpm, protective hard case.",
        "commented_by_id": 982000000554041,
        "commented_by": "John David",
        "date": "2013-11-17",
        "date_description": "yesterday",
        "time": "2:38 AM",
        "comment_type": "system"
    }
}
                Delete a comment
            Delete a retainer invoice comment.
              
              OAuth Scope : ZohoBooks.invoices.DELETE
          
Path Parameters
Query Parameters
headers_data = Map();
headers_data.put("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f");
response = invokeUrl
[
url: "https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695"
type: DELETE
headers: headers_data
connection: <connection_name>
];
info response;
              OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
  .url("https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695")
  .delete(null)
  .addHeader("Authorization", "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f")
  .build();
Response response = client.newCall(request).execute();
              const options = {
  method: 'DELETE',
  headers: {
    Authorization: 'Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
  }
};
fetch('https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
              import http.client
conn = http.client.HTTPSConnection("www.zohoapis.com")
headers = { 'Authorization': "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f" }
conn.request("DELETE", "/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
              const http = require("https");
const options = {
  "method": "DELETE",
  "hostname": "www.zohoapis.com",
  "port": null,
  "path": "/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695",
  "headers": {
    "Authorization": "Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f"
  }
};
const req = http.request(options, function (res) {
  const chunks = [];
  res.on("data", function (chunk) {
    chunks.push(chunk);
  });
  res.on("end", function () {
    const body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});
req.end();
              curl --request DELETE \
  --url 'https://www.zohoapis.com/books/v3/retainerinvoices/982000000567114/comments/982000000567019?organization_id=10234695' \
  --header 'Authorization: Zoho-oauthtoken 1000.41d9xxxxxxxxxxxxxxxxxxxxxxxxc2d1.8fccxxxxxxxxxxxxxxxxxxxxxxxx125f'
              {
    "code": 0,
    "message": "The comment has been deleted."
}
                
{ "code": 0, "message": "Comments added." }