Skip To Content
ArcGIS Developers

Calculate (Feature Service/Layer)


The calculate operation is performed on a feature service layer resource. It updates the values of one or more fields in an existing feature service layer based on SQL expressions or scalar values. The calculate operation can only be used if the supportsCalculate property of the layer is true.

If supportsCalculate is true and isDataVersioned is also true, then the gdbVersion parameter is supported. If supportsCalculate is true and isDataBranchVersioned is also true then the sessionID and returnEditMoment parameters are supported.


To support calculate with versioned data, the feature service must be published from ArcGIS Pro referencing a registered data source.

Neither the Shape field nor system fields can be updated using calculate. System fields include ObjectId and GlobalId.

See Calculate a field for more information on supported expressions.

Request parameters


A where clause can be used to limit the updated records. Any legal SQL where clause operating on the fields in the layer is allowed.

If you are working with ArcGIS Server 10.4 or a subsequent version, the dateFieldsTimezoneID property of the feature service identifies the time zone all dates are stored in. If your where clause is referencing a date type field and you have dateFieldsTimezoneID set to a specific time zone, make sure your where clause issues the time in that specific time zone.

You can set the dateFieldsTimezoneID property in the ArcMap Service Editor, Parameters tab, when you publish the service. If you don't have dateFieldsTimezoneID set, be sure your where clause issues the time you are querying in UTC. The dateFieldsTimezoneID property does not apply to fields that were time enabled through the Layer Properties Time tab in ArcMap at the time of publishing.


where=POP2000 > 350000

where=CITY_NAME = 'Glendora'

//Limit the records being updated to match 1 pm on February 9th, 2015 PST
where=pacific_time_date_field = Date '2015-02-09 13:00:00'

The array of field/value info objects that contain the field or fields to update and their scalar values or SQL expression. For more information on how to build expressions, see Calculate a field. If you are updating records in a date type field, be sure to issue the new date or time value in UTC. This is the case even if you have the dateFieldsTimezoneID property set and issue local time in your where clause.


As of 10.6.1, calcExpression can take null values.


"calcExpression":[{"field" : <fieldname>, "value" | "sqlExpression": <value> | "expression"},...]


"calcExpression":[{"field" : "Quality", "value" : 3}]

"calcExpression":[{"field" : "A", "sqlExpression" : "B*3"}]

The SQL format for the calcExpression. The expression can take one of two formats. It can be either standard SQL92 (standard), or it can use the native SQL of the underlying datastore (native). The default is standard. Values for date type fields must always be specified in UTC.

The supportedSqlFormatsInCalculate layer property (under advancedEditingCapabilities) indicates which of these sqlFormat values are supported. If only standard is listed, standard is the only values that can be used, even when useStandardizedQuery is set to false.

The SQL format native is supported only for admin users and when useStandardizedQuery=false.

Values: standard | native


The geodatabase version to apply the edits. This parameter applies only if the isDataVersioned property of the layer is true. This can be either a traditional version or a branch version. If the gdbVersion parameter is not specified, edits are made to the published map's version.






Set by a client during long transaction editing on a branch version. The sessionID is a GUID value that clients establish at the beginning and use throughout the edit session. The sessonID ensures isolation during the edit session. This parameter applies only if the isDataBranchVersioned property of the layer is true.




Specifies whether the response will report the time edits were applied. If returnEditMoment = true, the server will return the time edits were applied in the response's editMoment key. This parameter applies only if the isDataBranchVersioned property of the layer is true.

Values: true | false


Indicates whether to process the calculate operation in synchronous or asynchronous mode. This parameter can only be set to true if the supportsAsyncCalculate property in the layer metadata is set to true. The default value is false.

If possible, its recommended to set the async parameter to true for longer running operations that would otherwise timeout as synchronous operations. When async is set to true, the operation will return a status URL that can be requests upon to get a status. When the operation is complete, the status response property will return as Completed.


When setting this parameter to true, the requests upon the status URL return submissionTime and lastUpdatedTime to indicate when and how long the operation has been running. For some services, these properties are not supported. In those cases, a null value may be returned.

Values: true | false



The response format. The default response format is html.

Values: html | json

JSON Response syntax

When async is false:

  "success": <true|false>,
  "updatedFeatureCount": <count>, 
  "editMoment": <epochMilliseconds>

When async is true:

  "statusUrl": "<statusURL>"

JSON Response examples

When async is false:

   "success": true,
   "updatedFeatureCount": 51

When async is false, data is branch versioned, and returnEditMoment is true:

  "editMoment": 1457994488000

When async is true

  "status": "Completed",
  "submissionTime": 1572816329000,
  "lastUpdatedTime": 1572816344000,
  "recordCount": 3140