Error saving Sales Invoice via API

When trying to save a Sales Invoice via API, I am getting following error… What could I be doing wrong?

Stack:


Traceback (most recent call last):
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/app.py”, line 62, in application
response = frappe.handler.handle()
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/handler.py”, line 22, in handle
data = execute_cmd(cmd)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/handler.py”, line 53, in execute_cmd
return frappe.call(method, **frappe.form_dict)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/init.py”, line 939, in call
return fn(*args, **newargs)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/desk/form/save.py”, line 22, in savedocs
doc.save()
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/model/document.py”, line 256, in save
return self._save(*args, **kwargs)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/model/document.py”, line 279, in _save
self.insert()
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/model/document.py”, line 217, in insert
self._validate_links()
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/model/document.py”, line 714, in _validate_links
invalid_links, cancelled_links = self.get_invalid_links()
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/model/base_document.py”, line 453, in get_invalid_links
‘name’, cache=True))
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/database.py”, line 439, in get_value
order_by, cache=cache)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/database.py”, line 471, in get_values
out = self._get_value_for_many_names(doctype, filters, fieldname, debug=debug)
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/database.py”, line 624, in _get_value_for_many_names
% (field, doctype, “, “.join([”%s”]*len(names))), names, debug=debug))
File “/home/frappe/benches/bench-2018-01-15-a/apps/frappe/frappe/database.py”, line 166, in sql
self._cursor.execute(query, values)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/cursors.py”, line 163, in execute
query = self.mogrify(query, args)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/cursors.py”, line 142, in mogrify
query = query % self._escape_args(args, conn)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/cursors.py”, line 117, in _escape_args
return tuple(conn.literal(arg) for arg in args)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/cursors.py”, line 117, in

return tuple(conn.literal(arg) for arg in args)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/connections.py”, line 819, in literal
return self.escape(obj, self.encoders)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/connections.py”, line 812, in escape
return converters.escape_item(obj, self.charset, mapping=mapping)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/converters.py”, line 27, in escape_item
val = encoder(val, mapping)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/converters.py”, line 118, in escape_unicode
return u"‘%s’" % _escape_unicode(value)
File “/home/frappe/benches/bench-2018-01-15-a/env/lib/python2.7/site-packages/pymysql/converters.py”, line 73, in _escape_unicode
return value.translate(_escape_table)
AttributeError: ‘SalesTaxesandCharges’ object has no attribute ‘translate’

Json I am posting:

{
“docstatus”:0,
“doctype”:“Sales Invoice”,
“name”:“New Sales Invoice 1”,
“__islocal”:1,
“__unsaved”:1,
“naming_series”:“SINV-TEST-”,
“company”:“XXXX”,
“territory”:“All Territories”,
“currency”:“INR”,
“selling_price_list”:“Standard Selling”,
“price_list_currency”:“INR”,
“total_billing_amount”:0,
“apply_discount_on”:“Grand Total”,
“letter_head”:“GPS Header”,
“invoice_copy”:“Original for Recipient”,
“reverse_charge”:“N”,
“invoice_type”:“Regular”,
“export_type”:“”,
“status”:“Draft”,
“party_account_currency”:“INR”,
“is_opening”:“No”,
“c_form_applicable”:“No”,
“terms”:“”,
“conversion_rate”:1,
“plc_conversion_rate”:1,
“rounding_adjustment”:0.0,
“base_rounding_adjustment”:0.0,
“in_words”:“”,
“base_in_words”:“”,
“base_discount_amount”:0.0,
“total_advance”:0.0,
“write_off_amount”:0.0,
“paid_amount”:0.0,
“base_paid_amount”:0.0,
“payments”:[

],
“change_amount”:0.0,
“base_change_amount”:0.0,
“total_commission”:null,
“contact_display”:null,
“contact_email”:null,
“contact_mobile”:null,
“language”:“en”,
“contact_person”:null,
“debit_to”:“Debtors - GPE”,
“sales_team”:[

],
“company_gstin”:“XXX”,
“company_address”:“Registered Address-Billing”,
“company_address_display”:“XXX
XXX\nXXX\nState Code: 27
PIN: XXX
India
\nEmail: XXX
GSTIN: XXX
”,
“place_of_supply”:27,
“billing_address_gstin”:null,
“items”:[
{
“docstatus”:0,
“doctype”:“Sales Invoice Item”,
“name”:“New Sales Invoice Item 1”,
“__islocal”:1,
“__unsaved”:1,
“stock_uom”:“Nos”,
“margin_type”:“”,
“cost_center”:“Main - GPE”,
“parent”:“New Sales Invoice 1”,
“parentfield”:“items”,
“parenttype”:“Sales Invoice”,
“idx”:1,
“__unedited”:false,
“income_account”:“Sales Online - GPE”,
“gst_hsn_code”:“8541”,
“item_code”:“GPS-SP-3W-Multi”,
“barcode”:null,
“item_group”:“Raw Material”,
“last_purchase_rate”:null,
“stock_qty”:1,
“base_price_list_rate”:150.0,
“image”:“”,
“base_amount”:150.0,
“expense_account”:“Cost of Goods Sold - GPE”,
“item_tax_rate”:“{}”,
“rate”:150.0,
“pricing_rule”:null,
“item_name”:“3W Solar PV panel multi crystalline”,
“actual_qty”:0,
“net_rate”:150.0,
“conversion_factor”:1,
“warehouse”:“Stores - GPE”,
“uom”:“Nos”,
“description”:“3W Solar PV panel multi crystalline. (Includes shipping charge of Rs.50.0)”,
“brand”:null,
“supplier”:null,
“has_serial_no”:0,
“qty”:1,
“net_amount”:150.0,
“price_list_rate”:150.0,
“weight_uom”:null,
“discount_percentage”:0.0,
“min_order_qty”:“”,
“update_stock”:0,
“amount”:150.0,
“base_rate”:150.0,
“customer_item_code”:null,
“has_batch_no”:0,
“batch_no”:null,
“valuation_rate”:0.0,
“delivered_by_supplier”:0,
“is_fixed_asset”:0,
“rate_with_margin”:150.0,
“base_rate_with_margin”:150.0,
“margin_rate_or_amount”:0,
“base_net_rate”:150.0,
“base_net_amount”:150.0,
“total_weight”:0,
“actual_batch_qty”:0,
“delivered_qty”:0
}
],
“taxes_and_charges”:[
{
“docstatus”:0,
“doctype”:“Sales Taxes and Charges”,
“name”:“New Sales Taxes and Charges 1”,
“__islocal”:1,
“__unsaved”:1,
“charge_type”:“Actual”,
“cost_center”:“Main - GPE”,
“parent”:“New Sales Invoice 1”,
“parentfield”:“taxes”,
“parenttype”:“Sales Invoice”,
“__unedited”:false,
“idx”:1,
“account_head”:“SGST 2.5% - GPE”,
“rate”:2.5,
“description”:“SGST 2.5%”,
“item_wise_tax_detail”:“{"GPS-SP-3W-Multi":[2.5,3.75]}”,
“base_total”:150.0,
“total”:150.0,
“base_tax_amount”:3.75,
“base_tax_amount_after_discount_amount”:3.75,
“tax_amount”:3.75,
“tax_amount_after_discount_amount”:3.75
},
{
“docstatus”:0,
“doctype”:“Sales Taxes and Charges”,
“name”:“New Sales Taxes and Charges 2”,
“__islocal”:1,
“__unsaved”:1,
“charge_type”:“Actual”,
“cost_center”:“Main - GPE”,
“parent”:“New Sales Invoice 1”,
“parentfield”:“taxes”,
“parenttype”:“Sales Invoice”,
“__unedited”:false,
“idx”:2,
“account_head”:“CGST 2.5% - GPE”,
“rate”:2.5,
“description”:“CGST 2.5%”,
“item_wise_tax_detail”:“{"GPS-SP-3W-Multi":[2.5,3.75]}”,
“base_total”:150.0,
“total”:150.0,
“base_tax_amount”:3.75,
“base_tax_amount_after_discount_amount”:3.75,
“tax_amount”:3.75,
“tax_amount_after_discount_amount”:3.75
}
],
“base_net_total”:150.0,
“net_total”:150.0,
“base_total”:150.0,
“total”:150.0,
“total_taxes_and_charges”:7.5,
“base_total_taxes_and_charges”:7.5,
“grand_total”:157.5,
“base_grand_total”:157.5,
“outstanding_amount”:157.5,
“rounded_total”:158,
“base_rounded_total”:158,
“customer_group”:“All Customer Groups”,
“customer”:“XXX - 1”,
“customer_name”:“XXX”,
“address_display”:“XXX\nXXX
Email: XXX”,
“shipping_address”:“XXX\nXXX
Email: XXX”,
“customer_address”:“XXX-Billing”,
“shipping_address_name”:“XXX-Billing”,
“customer_gstin”:null,
“tax_id”:null,
“due_date”:“2018-02-04”,
“po_no”:“MYPO/1314/12344”,
“po_date”:null,
“remarks”:“TEST:1516470335187:TAX_12.0”
}

I figured it out. I was calling “taxes” as “taxes_and_charges” !