When creating or updating entities, you must reference external objects by internalId. This includes any reference to a subsidiary, location, or department. Likewise ,when you search based on these fields you must use the internalId.
GET /customers?where=subsidiary=4
SOAP APIs, like NetSuite, explicitly define every field. Therefore, custom fields are stored in arrays. If you need to support custom fields in NetSuite there are some additional steps.
Because we normalize Netsuite's SOAP API to a RESTful API at Cloud Elements, you need to use specific API calls to get information about custom fields, custom records, custom fields associated with custom records, and custom list items. All references to custom fields and records require the internalId, which you can find using the following endpoints:
GET /custom-fieldsto retrieve custom fields.GET /custom-record-typesto retrieve custom records.GET /custom-record-types/{typeId}/custom-record-fieldsto get the custom fields in custom records using theinternalIdfromGET /custom-record-types.GET /custom-record-types/{typeId}/custom-recordsto get information in the custom fields using theinternalIdfromGET /custom-record-types.GET /lookups/{fieldName}to retrieve custom list items.
See the Netsuite 2018 Human Capital API documentation for more information about these endpoints.
Use GET /custom-fields to retrieve a list of all custom fields.
The response for GET /custom-fields looks like this. Note the internalId at the top:
[
{
"internalId": "3793",
"scriptId": "custentity_wc_picture",
"name": "WC Picture",
"subtab": {
"internalId": "265",
"name": "Asset Info"
},
"type": {
"value": "entityCustomField"
},
"fieldType": "_image"
},
{
"internalId": "3794",
"scriptId": "custentity_wc_related_asset",
"name": "Related Asset",
"subtab": {
"internalId": "265",
"name": "Asset Info"
},
"type": {
"value": "entityCustomField"
},
"fieldType": "_listRecord"
}
]
Custom records can contain custom fields. We provide the following endpoints to help retrieve a list of custom records and the fields in those records.
GET /custom-record-typesGET /custom-record-types/{typeId}/custom-record-fieldsGET /custom-record-types/{typeId}/custom-records
The response for GET /custom-record-types looks like this. Note the internalId at the top which you can use as typeId:
[
{
"internalId": "67",
"scriptId": "customrecord_assetlifetimes",
"name": "FAM - Lifetimes",
"type": {
"value": "customRecordType"
}
},
{
"internalId": "74",
"scriptId": "customrecord_ncfar_assetusage",
"name": "FAM - Asset Usage",
"type": {
"value": "customRecordType"
}
},
{
"internalId": "279",
"scriptId": "customrecord_pf_kb_sol_fb",
"name": "KB Solution Feedback",
"type": {
"value": "customRecordType"
}
},
{
"internalId": "452",
"scriptId": "customrecord_suitesocial_record",
"name": "SuiteSocial Record",
"type": {
"value": "customRecordType"
}
}
]
You can access the internalId of list items with GET /lookups/{fieldname}, replacing {fieldname} with the name of a picklist.
The response for GET /lookups/currency looks like this:
[
{
"internalId": "1",
"name": "USA"
},
{
"internalId": "2",
"name": "British pound"
},
{
"internalId": "3",
"name": "Canadian dollar"
},
{
"internalId": "4",
"name": "Euro"
}
]
Cloud Elements supports searching on the following types of custom objects:
- boolean
- long
- string
- multiselect
- enums
Note: You can search on only one custom field at a time.
To search on custom fields, add custom.<type> to the field reference and value in your where clause. Also, use the backtick ( ` ) symbol to enclose the field reference. For example:
- To search on a custom boolean field:
`custom.boolean.scriptId` = 'custentity_2663_direct_debit' and `custom.boolean.value` = 'false'
- To search on a custom multiselect field:
`custom.multi.scriptId` = 'custentity_2663_direct_debit' and `custom.multi.value.internalId` = 1
- To search on a custom long field:
`custom.long.scriptId` = 'custentity1' and `custom.long.value` = 1000
When you make PATCH or POST API calls and need to update custom fields, you need to include a customFieldList and specify the ce_type.
Cloud Elements supports the following ce_type values:
- SelectCustomFieldRef
- date
- long
- integer
- float
- double
- boolean
- string
In addition to the your ce_type, the payload must also contain the scriptId, which is the unique identifier of the custom field.
The following example shows how to include a customFieldListin the JSON body of a PATCH or POST request.
{
"customFieldList": {
"customField":[
{
"scriptId": "custentity7",
"ce_type":"SelectCustomFieldRef",
"value":{
"internalId":"1"
}
}
],
"customField":[
{
"scriptId": "custentity9",
"ce_type":"date",
"value": "2015-06-25T07:00:00Z"
}
]
}
}
Each object has its own internalId, but you can still search for more than one object by replacing internalId with the object name.
For example, if an entity has an internalId of 1769, and a salesRep has an internalId of 36, you can include entity=11769 or salesRep=36 in a query.
- Instead of an
/accountsresource, Netsuite Finance supports the/ledger-accountsresources. - When working with the
/itemsobject, you need to include the_objTypeto make POST /Items/ requests. You can retrieve an_objTypeby making a GET /Items/{id} request. GET /invoicesreturns null values foramountPaidandamountRemaining. This is expected behavior as described by Netsuite below:If a standard field is set to NOT show in the UI, it is not settable through web services, either. If you try to set such a field through web services, an error message is returned.
This is true for the GET operation of web services as well. Web Services generally mimics the NetSuite UI. The fields available on the invoice form will be the only fields available in the GET response. To show the
amountPaidandamountRemainingfields on the web service response, you customize your form to show the Amount Remaining (Due) and Amount Paid fields on the forms used by your invoices.