- URL:
- https://<root>/<serviceName>/FeatureServer/<layerId>/applyEdits
- Methods:
POST
- Required Capability:
- Create, Update, Delete. Create is required to add features, Update is required to update features, and Delete is required to delete features.
- Version Introduced:
- 10.0
Description
The apply
operation adds, updates, and deletes features to the associated feature layer or table in a single call and returns the results of the edits that are grouped by the type of edit (add
, update
, and delete
). Each grouping contains an array of edit result objects that identify a single feature and indicates whether the edits were successful. If the edits were unsuccessful, the edit result object includes an error code and error description. This operation is performed on a feature service layer resource.
Services can be published from enterprise geodatabase layers that have attribute rules. Attribute rules are applied to the back-end datasets and take effect when edits are applied. Types of attribute rules include calculation rules that automatically apply a calculated value to a field and constraint rules that cause an edit to return an error if the constraint is violated. For an example, see the constraint rule violation JSON response below.
New at 11.3
- Four new field types are now supported:
esri
,Field Type Time Only esri
,Field Type Date Only esri
,Field Type Timestamp Offset esri
.Field Type Big Integer - Reference feature services will return control points in the JSON response from query results and accept features with control points when applying edits. Control points are special vertices used to apply symbol effects to line or polygon features. Geometries are persisted in the geodatabase with an identifier as to whether each vertex is a control point.
New at 11.1
- This operation now includes the
edits
parameter. Support for the new parameter is indicated when the layer-levelUpload Id supports
property, underApply Editsby Upload ID advanced
, is set toEditing Capabilities true
.
- For non-hosted feature services referencing an enterprise geodatabase, the
async
parameter now uses a geoprocessing service, which allows for longer running operations. - For hosted feature services, a field's default value is now applied when a row is added with no provided value when using either this operation or Append.
New at 11.0
The following are new at 11.0:
-
ArcGIS Enterprise hosted feature services now support the
async
parameter. -
A new parameter,
return
, was introduced at this release. When set toEdit Results false
,apply
only returns a response of the following form:Edits Use dark colors for code blocks Copy {"success": <true|false>}
The
return
parameter can be set toEdit Results false
only whenrollback
is set toOn Failure true
. Support for this new parameter is indicated by a feature service having the layer-levelsupports
property, underReturned Edit Results advanced
, set toEditing Capabilities true
.
New at 10.9.1
The layer-level apply
operation for hosted feature services in ArcGIS Online, and non-hosted feature services in ArcGIS Enterprise, includes an option to process requests asynchronously. This option is ideal for longer-running edit operations that may time out otherwise. The async
parameter can be used if the layer resource has the supports
layer property set to true
(under advanced
).
New at 10.9
A new parameter, time
, has been added at 10.9. Setting time
to true
indicates that the client is capable of working with date field data values that are not in UTC. For more information about this parameter, see the Request parameters table below.
Request parameters
Parameter | Details |
---|---|
(Optional. At least one of the following parameters must be included in the request: | The array of features to be added. The structure of each feature in the array is the same as the structure of the JSON feature object returned by the ArcGIS REST API. Features to be added to a feature layer should include the geometry. Records to be added to a table should not include geometry. If Syntax
Example
|
(Optional. At least one of the following parameters must be included in the request: | The array of features to be updated. The structure of each feature in the array is the same as the structure of the JSON feature object returned by the ArcGIS REST API and includes a If
If
Syntax
Example 1:
Example 2, when
|
(Optional. At least one of the following parameters must be included in the request: | The object IDs of the features or records to be deleted. If Syntax
Example
|
| The geodatabase version to apply the edits. This parameter applies only if the Syntax
Example
|
(Optional) | Introduced at 10.5. This is only applicable for ArcGIS Server services. Specifies whether the response will report the time that edits were applied. If set to Values: |
(Optional) | Specifies whether the edits will be applied only if all submitted edits succeed. If Values: |
(Optional) | When set to Values: |
(Optional) | This parameter adds, updates, or deletes attachments. It applies only when the Attachments to be added or updated can use either pre-uploaded data or base 64 encoded data. Syntax:
Example:
|
(Optional) | Introduced at ArcGIS Enterprise 11.1. Specifies an array of adds and updates (similar to attachments) for feature layer assets assets associated with a 3D Object Feature Layer. For more information, see the Apply Edits with Asset Maps section below. |
(Optional) | Indicates to the server whether the client is true curve capable. When set to Values: |
(Optional) | Introduced at 10.6. The Syntax
Example
|
(Optional) | Introduced at 10.6. The When set to Values: |
(Optional) | Introduced at 10.8. This parameter applies a datum transformation while projecting input geometries from their spatial reference to the layer's source spatial reference. When specifying transformations, you need to think about which datum transformation is best for this projection. For a list of valid datum transformation ID values and well-known text strings, see Using spatial references. For more information on datum transformations, see the transformation parameter in the Project operation. Syntax
Example
|
| Setting It's possible to define a service's time zone of date fields as unknown. Setting the time zone to unknown means that date values will be returned as is from the database, rather than as date values in UTC. Non-hosted feature services can be set to use an unknown time zone using ArcGIS Server Manager. Setting the time zones to unknown also sets the Most clients released prior to ArcGIS Enterprise 10.9 will not be able to work with feature services that have an unknown time setting. The Value: |
| New at 10.9.1. The The Async Values: |
(Optional) | Introduced at 11.0. Determines whether the request returns results per edit or a standard success response. When set to
The Values: |
(Optional) | Introduced at ArcGIS Enterprise 11.1 for hosted and non-hosted feature services. This parameter references an upload ID from an uploaded file containing service edits. This parameter provides the option to pre-upload edits to the ArcGIS Server and reference them through this parameter, rather than provide edits in-line with the Syntax example
Example
Example upload file content
|
| The response format. The default format is Values: |
Example usage
The following is a sample request URL used to access the apply
endpoint:
https://machine.domain.com/webadaptor/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits
Apply Edits for 3D Object Feature Layer
The layer level apply
operation has a parameter called asset
which is used to perform adds and updates to a 3D Object Feature Layer.
Both 3D Feature Layer aware clients and 3D Feature Layer unaware clients or applications can access the apply
operation. Applications or clients that are 3D Feature Layer aware will send the asset
field and omit geometry
. An application or client that is not 3D Feature Layer aware will send a multipatch feature where the geometry contains all the information, and will not send the asset
parameter. The layer supports both kinds of clients.
Example adds
request with asset
:
adds=[
{
"attributes": {
"OWNER": "Joe Smith",
"VALUE": 94820.37,
"APPROVED": true,
"LASTUPDATE": 1227663551096,
"GlobalID": "{064185b3-d827-fa42-a9bb-aff1ccb9b6a1}"
}
}
]
assetMaps={
"adds":[
{
"globalId": "{c9e887e9-c8bd-4014-be62-03e5b0f7b25f}"
"parentGlobalId": "{064185b3-d827-fa42-a9bb-aff1ccb9b6a1}"
"assetName": "geometry.glb",
"assetHash": "6486ee53c8faba18045ef29d382f1c8227bde3a25d37f7a62fe0d2259a3a14dd",
"flags": ["PROJECT_VERTICES"]
}
]
}
The updates
array will also have a corresponding entry in asset
for each feature, similar to those the adds
array has. As with the existing apply
, attributes and asset
are each optional and will result in a partial update of the feature (i.e., only attributes, only shape). The existing geometry and the new asset
are mutually exclusive.
Response Syntax:
{
"addResults": [<editResult1>, <editResult2>],
"updateResults": [<editResult1>, <editResult2>],
"deleteResults": [<editResult1>, <editResult2>],
"attachments": {
"addResults": [<attachmentEditResult1>, <attachmentEditResult2>],
"updateResults": [<attachmentEditResult1>, <attachmentEditResult2>],
"deleteResults": [<attachmentEditResult1>, <attachmentEditResult2>]
}
"assetMaps": {
"addResults": [<assetMapsEditResult1>, <assetMapsEditResult2>],
"updateResults": [<assetMapsResult1>, <assetMapsEditResult2>]
}
}
Example response:
{
"addResults": [
{
"objectId": 618,
"globalId": "{74100804-E229-49b8-8CDC-9B5D3EF03EDA}",
"success": true
},
{
"objectId": 619,
"globalId": "{39B856DC-AFE4-4c02-B433-A9361ACD91CF}",
"success": true
}
],
"updateResults": [
{
"objectId": 50,
"globalId": "{9537AFCE-BF6B-4931-93E8-403E12D76916}",
"success": false,
"error": {
"code": 1019,
"description": "Violated attribute constraint rule. [Error No: -1, ]"
}
}
],
"deleteResults": [
{
"objectId": 25,
"globalId": "{1A9F8368-F9BB-428B-BB03-F45724362DB5}",
"success": true
},
{
"objectId": 26,
"globalId": "{6CE34136-EC3A-40D7-80BF-E1D9BE33812A}",
"success": true
}
],
"assetMaps": {
"addResults": [
{
"GlobalID": "{c9e887e9-c8bd-4014-be62-03e5b0f7b25f}",
"success": true
},
{
"GlobalId": "{62ed3f5e-467a-444d-ad25-ed7e559ef14b}",
"success": true
}
],
"updateResults": [
{
"GlobalId": "{9db72076-e109-467e-94c7-3d5a3a4ef9ef}",
"success": true
}
]
}
}
Example one
The following is a sample POST request that demonstrates adding an array of features using the apply
operation on a feature service layer resource, formatted for readability:
POST /webadaptor/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: machine.domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length: []
adds=[
{
"attributes": {
"req_id": "508389",
"req_type": "Graffiti Complaint - Public Property",
"req_date": "09\/19\/2009",
"req_time": "18:44",
"address": "11TH ST and HARRISON ST",
"x_coord": "6008925.0",
"y_coord": "2108713.8",
"district": "6",
"status": 1
},
"geometry": {
"x": -122.41247978999991,
"y": 37.770630098000083
}
},
{
"attributes": {
"req_id": "508395",
"req_type": "Graffiti Complaint - Public Property",
"req_date": "09\/19\/2009",
"req_time": "19:01",
"address": "13TH ST and MANCHESTER ST",
"x_coord": "6008929.0",
"y_coord": "2108713.9",
"district": "6",
"status": 1
},
"geometry": {
"x": -121.42248867898987,
"y": 38.790630098000452
}
}
]&updates=&deletes=&gdbVersion=&rollbackOnFailure=true&useGlobalIds=false&returnEditMoment=false&trueCurveClient=true&attachments=&timeReferenceUnknownClient=false&datumTransformation=&async=false&returnEditResults=true&f=pjson
Example two
The following is a sample POST request that demonstrates updating an array of features using the apply
operation on a feature service layer resource, formatted for readability:
POST /webadaptor/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: machine.domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length: []
adds=&updates=[
{
"attributes": {
"objectid: 1234567
"req_id": "508389",
"req_type": "Graffiti Complaint - Private Property",
"req_date": "09\/19\/2009",
"req_time": "18:44",
"address": "11TH ST and HARRISON ST",
"x_coord": "6008925.0",
"y_coord": "2108713.8",
"district": "6",
"status": 2
},
"geometry": {
"x": -122.41247978999991,
"y": 37.770630098000083
}
},
{
"attributes": {
"req_id": "508395",
"req_type": "Graffiti Complaint - Public Property",
"req_date": "09\/19\/2009",
"req_time": "19:01",
"address": "13TH ST and MANCHESTER ST",
"x_coord": "6008929.0",
"y_coord": "2108713.9",
"district": "6",
"status": 2
},
"geometry": {
"x": -121.42248867898987,
"y": 38.790630098000452
}
}
]&deletes=&gdbVersion=&rollbackOnFailure=true&useGlobalIds=false&returnEditMoment=false&trueCurveClient=true&attachments=&timeReferenceUnknownClient=false&datumTransformation=&async=false&returnEditResults=true&f=pjson
Example three
The following is a sample POST request that demonstrates deleting features using the apply
operation on a feature service layer resource, formatted for readability:
POST /webadaptor/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: machine.domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length: []
adds=&updates=&deletes=37, 462&gdbVersion=&rollbackOnFailure=true&useGlobalIds=false&returnEditMoment=false&trueCurveClient=true&attachments=&timeReferenceUnknownClient=false&datumTransformation=&async=false&returnEditResults=true&f=pjson
Example four
The following is a sample POST request to set vertices as control points for a feature. The control points are set in the ids
array. The index of each ids
array value matches up with the vertex at the same index in the geometry. In this example, the first and third vertices are set as being control points (value 1 on the ids
array).
POST /webadaptor/rest/services/SanFrancisco/pipes/FeatureServer/0/applyEdits HTTP/1.1
Host: machine.domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length: []
adds=&updates= [
{
"attributes": {
"OBJECTID": 2
},
"geometry": {
"paths": [
[
[
-13123272.572900001,
3495029.6371000037
],
[
-12883437.2676,
3497028.2646000013
],
[
-12744038.6544,
3498189.9196999967
],
[
-12631303.591699999,
3499129.3786000013
]
]
],
"ids": [
[
1,
0,
1,
0
]
]
}
}
]&deletes=&gdbVersion=&rollbackOnFailure=true&useGlobalIds=false&returnEditMoment=false&trueCurveClient=true&attachments=&timeReferenceUnknownClient=false&datumTransformation=&async=false&returnEditResults=true&f=pjson
Example five
The following is a sample POST request that demonstrates adding a new feature that includes the following field types: esri
, esri
, esri
, and esri
:
POST /webadaptor/rest/services/SanFrancisco/pipes/FeatureServer/0/applyEdits HTTP/1.1
Host: machine.domain.com
Content-Type: application/x-www-form-urlencoded
Content-Length: []
updates=&adds=[
{
"attributes": {
"dateonlyfld": "2023-08-23",
"timestampoffsetfld": "2003-01-25T17:00:00-05:00",
"timeonlyfld": "15:54:36",
"abigint": 10111222333
},
"geometry": {
"x": -116.64799770499997,
"y": 34.13584615600007
}
}
]&deletes=&gdbVersion=&rollbackOnFailure=true&useGlobalIds=false&returnEditMoment=false&trueCurveClient=true&attachments=&timeReferenceUnknownClient=false&datumTransformation=&async=false&returnEditResults=true&f=pjson
JSON Response syntax
{
"addResults": [<editResult1>, <editResult2>],
"updateResults": [<editResult1>, <editResult2>],
"deleteResults": [<editResult1>, <editResult2>],
"attachments": {
"addResults": [<attachmentEditResult1>, <attachmentEditResult2>],
"updateResults": [<attachmentEditResult1>, <attachmentEditResult2>],
"deleteResults": [<attachmentEditResult1>, <attachmentEditResult2>]
}
}
JSON Response examples
Example one
The sample response below demonstrates a general successful response for the apply
operation that included adds
, updates
, and deletes
in the request:
{
"addResults": [
{
"objectId": 618,
"success": true
},
{
"success": false,
"error": {
"code": -2147217395,
"description": "Setting of Value for depth failed."
}
}
],
"updateResults": [
{
"objectId": 50,
"success": true
}
],
"deleteResults": [
{
"objectId": 25,
"success": true
},
{
"objectId": 26,
"success": true
}
]
}
Example two
The example below shows use
is true
and the attachments
parameter is set:
{
"addResults": [
{
"objectId": 618,
"globalId": "{74100804-E229-49b8-8CDC-9B5D3EF03EDA}",
"success": true
},
{
"objectId": 619,
"globalId": "{39B856DC-AFE4-4c02-B433-A9361ACD91CF}",
"success": true
}
],
"updateResults": [
{
"objectId": 50,
"globalId": "{9537AFCE-BF6B-4931-93E8-403E12D76916}",
"success": true
}
],
"deleteResults": [
{
"objectId": 25,
"globalId": "{1A9F8368-F9BB-428B-BB03-F45724362DB5}",
"success": true
},
{
"objectId": 26,
"globalId": "{6CE34136-EC3A-40D7-80BF-E1D9BE33812A}",
"success": true
}
],
"attachments": {
"addResults": [
{
"objectId": 500,
"globalId": "{55E85F98-FBDD-4129-9F0B-848DD40BD911}",
"success": true
},
{
"objectId": 501,
"globalId": "{3373EE9A-4619-41B7-918B-DB54575465BB}",
"success": true
}
],
"updateResults": [
{
"objectId": 600,
"globalId": "{8FDD9AEF-E05E-440A-9426-1D7F301E1EBA}",
"success": true
}
],
"deleteResults": [
{
"objectId": 800,
"globalId": "{95059311-741C-4596-88EF-C437C50F7C00}",
"success": true
},
{
"objectId": 801,
"globalId": " {18F43B1C-2754-4D05-BCB0-C4643C331C29}",
"success": true
}
]
}
}
Example three
The example below shows a constraint rule is violated and roll
is true
:
{
"error": {
"code": 400,
"extendedCode": -2147207418,
"message": "Unable to complete operation.",
"details": [
"Violated attribute constraint rule. [Error No: -1, ]",
"Operation rolled back."
]
}
}
Example four
The example below shows a constraint rule is violated and roll
is false
:
{
"addResults": [],
"updateResults": [
{
"objectId": 2,
"globalId": "{B703ACAC-A1A8-4F49-BB19-1E684A67A265}",
"success": false,
"error": {
"code": 1019,
"extendedCode": -2147207418,
"description": "Violated attribute constraint rule. [Error No: -1, ]"
}
},
{
"objectId": 1,
"globalId": "{2FACC38A-3E3E-43A5-A6EB-BC9075407EC8}",
"success": true
}
],
"deleteResults": []
}
Example five
The example below shows async
is true
and a status URL is returned:
{
"statusUrl": "https://machine.domain.com/webadaptor/rest/services/testservice/FeatureServer/jobs/sf_j9563cb9e-8cf4-4c99-945d-09e43d408ac7/status"
}
Making a request to a job status URL will return the following response once the operation has completed:
{
"status": "COMPLETED",
"resultUrl": " https://machine.domain.com/webadaptor/rest/directories/arcgisoutput/testservice _MapServer/j9563cb9e-8cf4-4c99-945d-09e43d408ac7.json"
}
The result
returned in the example above gives access to the results of apply
:
{
"addResults": [
{
"objectId": 53,
"globalId": "{2AF16CAD-D5B8-4F4C-BF36-432FBF660C0B}",
"success": true
}
],
"updateResults": [ ],
"deleteResults": [ ]
}
Example six
This example shows an error case in which an edit is attempted for a capability that is not supported and async
is set to true
. As with example 5, a status
value is returned in the response:
{
"statusUrl": "https://machine.domain.com/webadaptor/rest/services/VRNVA/FeatureServer/jobs/sf_j7aadb493-7987-44cb-9a4c-53e1f9fd97bf/status"
}
Making a request to a job status URL will return the following response once the operation has completed:
{
"status": "COMPLETED",
"resultUrl": "https://machine.domain.com/webadaptor/rest/directories/arcgisoutput/VRNVA_MapServer/j7aadb493-7987-44cb-9a4c-53e1f9fd97bf.json"
}
In this case, however, information returned from the result
value contains the error:
{
"error" : {
"code" : 400,
"message" : "Requested operation is not supported by this service.",
"details" : []
}
}
Example seven
The example below shows a response in which return
is false
and the operation is successful:
{
"success": true
}
Example eight
The sample response below is returned when the request sets the edits
parameter to reference a file where features and attachments were added, updated, and deleted from layer 0:
{
"attachments": {
"addResults": [
{
"success": true,
"globalId": "{FAA66666-766F-47CA-993B-8A3FC57616A1}",
"objectId": 63
}
],
"updateResults": [
{
"success": true,
"globalId": "{469E2233-1F07-43BE-B2C6-155273AA71C5}",
"objectId": 25
}
],
"deleteResults": [
{
"success": true,
"globalId": "{D1DE4DE4-196A-4D00-9773-13E4135C40D5}",
"objectId": 24
}
]
},
"addResults": [
{
"success": true,
"globalId": "{B99CA10D-9FDB-447D-9E8B-44AEDC540629}",
"objectId": 109
}
],
"updateResults": [
{
"success": true,
"globalId": "{D46CA10D-9FDB-447D-9E8B-44AEDC540629}",
"objectId": 22
}
],
"deleteResults": [
{
"success": true,
"globalId": "{69958E11-C6F6-424E-8EEF-E24C0E9B86A6}",
"objectId": 21
}
]
}