- 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.4
- This operation now supports
pbfas an upload format for applying edits. A new parameter,edits, has been added to specify the format of the uploaded file specified in theUpload Format editsparameter. Support for pbf is indicated when the layer-levelUpload Id advancedproperty, underEditing Capabilities supported, listsApply Edits Upload ID Formats PBFas a value. - Reference feature services now support applying edits as pbf with control points.
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
editsparameter. Support for the new parameter is indicated when the layer-levelUpload Id supportsproperty, underApply Editsby Upload ID advanced, is set toEditing Capabilities true.
- For non-hosted feature services referencing an enterprise geodatabase, the
asyncparameter 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
asyncparameter. -
A new parameter,
return, was introduced at this release. When set toEdit Results false,applyonly returns a response of the following form:Edits Use dark colors for code blocks Copy {"success": <true|false>}The
returnparameter can be set toEdit Results falseonly whenrollbackis set toOn Failure true. Support for this new parameter is indicated by a feature service having the layer-levelsupportsproperty, 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 (JSON) |
(Optional) | Introduced at 11.4. Specifies the format of the uploaded file specified in the Values: |
| The response format. The default format is Values: |
Example usage
The following is a sample request URL used to access the apply endpoint:
https://organization.example.com/<context>/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEditsApply 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 /<context>/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: organization.example.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=pjsonExample 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 /<context>/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: organization.example.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=pjsonExample 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 /<context>/rest/services/SanFrancisco/311Incidents/FeatureServer/0/applyEdits HTTP/1.1
Host: organization.example.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=pjsonExample 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 /<context>/rest/services/SanFrancisco/pipes/FeatureServer/0/applyEdits HTTP/1.1
Host: organization.example.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=pjsonExample 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 /<context>/rest/services/SanFrancisco/pipes/FeatureServer/0/applyEdits HTTP/1.1
Host: organization.example.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=pjsonJSON 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://organization.example.com/<context>/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://organization.example.com/<context>/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://organization.example.com/<context>/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://organization.example.com/<context>/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
}
]
}