> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer.deel.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer.deel.com/_mcp/server.

# Validate amendment data points

POST https://api.letsdeel.com/rest/eor/contracts/{contract_id}/amendments/validate
Content-Type: application/json

Validates amendment data points for a given contract against any external validation rules before an amendment is submitted. This call should be made prior to creating an amendment to confirm that the proposed data points are acceptable.

 **Token scopes**: `contracts:write`

Reference: https://developer.deel.com/api/eor-endpoints/eor-amendments/validate-eor-amendments

## Authentication

- `Authorization` header (bearer token, required) — ## Authentication The Deel API uses bearer tokens to authenticate requests. All API calls must be made over HTTPS — calls over plain HTTP or without authentication will fail. ```curl curl -X GET 'https://api.letsdeel.com/rest/v2/contracts' \ -H 'Authorization: Bearer YOUR-TOKEN-HERE' ``` [Learn more about authentication](/api/authentication)
- `Authorization` header (bearer token, required) — Standard OAuth2 security scheme based on https://swagger.io/docs/specification/authentication/

## Servers

- `https://api.letsdeel.com/rest` (Production, default)
- `https://api-staging.letsdeel.com/rest` (Demo)

## Request

### Path parameters

- `contract_id` (string, required) — The unique identifier of the employee contract.

### Body (application/json)

This endpoint expects an object.

- `data` (map from string to any, optional) — Dynamic object containing amendment fields. Supports flexible keys such as scope, job_title, or others.

## Response

### 200

Validation result

- `data` (map from string to EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaData, optional) — Validation results keyed by amendment field

## Errors

### 400 Bad Request Error

Bad Request. The request could not be understood or was missing required parameters.

- `errors` (list of EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 401 Unauthorized Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 403 Forbidden Error

Operation failed.

- `request` (ApiErrorRequest, optional)
- `errors` (list of ApiError, optional)

### 404 Not Found Error

Resource not found (e.g., contract, profile, amendment, change request).

- `errors` (list of EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaErrorsItems, required)

### 500 Internal Server Error

Internal server error.

- `errors` (list of EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaErrorsItems, required)

## Types

### EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaData

- `valid` (boolean, optional, nullable)
- `message` (string, optional, nullable)

### EorContractsContractIdAmendmentsValidatePostResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, required)
- `message` (string, required)

### ApiErrorRequest

- `method` (string, optional) — The HTTP method of the failed request
- `url` (string, optional) — The relative URL of the failed request
- `status` (double, optional) — The status code of the response
- `api_req_id` (string, optional) — The request ID of the failed request
- `docs` (string, optional) — A link to the official documentation for the requested endpoint resource
- `source` (string, optional) — The source handler which produced the returned error
- `code` (double, optional) — The code of the source handler which produced the returned error

### ApiError

- `message` (string, optional) — A description of the returned error
- `path` (string, optional) — The JSON path where input validation failed

## Examples

### Example with scope

**Request**

```json
{
  "data": {
    "scope": "Responsible for project planning, resource allocation, and ensuring quality delivery."
  }
}
```

**Response**

```json
{
  "data": {
    "job_title": {
      "valid": true,
      "message": null
    },
    "scope": {
      "valid": false,
      "message": "Scope exceeds maximum length of 20,000 characters."
    }
  }
}
```

**SDK Code**

```python Example with scope
import requests

url = "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate"

payload = { "data": { "scope": "Responsible for project planning, resource allocation, and ensuring quality delivery." } }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Example with scope
const url = 'https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"scope":"Responsible for project planning, resource allocation, and ensuring quality delivery."}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example with scope
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate"

	payload := strings.NewReader("{\n  \"data\": {\n    \"scope\": \"Responsible for project planning, resource allocation, and ensuring quality delivery.\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example with scope
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"data\": {\n    \"scope\": \"Responsible for project planning, resource allocation, and ensuring quality delivery.\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Example with scope
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"scope\": \"Responsible for project planning, resource allocation, and ensuring quality delivery.\"\n  }\n}")
  .asString();
```

```php Example with scope
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate', [
  'body' => '{
  "data": {
    "scope": "Responsible for project planning, resource allocation, and ensuring quality delivery."
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Example with scope
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"data\": {\n    \"scope\": \"Responsible for project planning, resource allocation, and ensuring quality delivery.\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example with scope
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["data": ["scope": "Responsible for project planning, resource allocation, and ensuring quality delivery."]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example with job title

**Request**

```json
{
  "data": {
    "job_title": "Product Manager"
  }
}
```

**Response**

```json
{
  "data": {
    "job_title": {
      "valid": true,
      "message": null
    },
    "scope": {
      "valid": false,
      "message": "Scope exceeds maximum length of 20,000 characters."
    }
  }
}
```

**SDK Code**

```python Example with job title
import requests

url = "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate"

payload = { "data": { "job_title": "Product Manager" } }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript Example with job title
const url = 'https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate';
const options = {
  method: 'POST',
  headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
  body: '{"data":{"job_title":"Product Manager"}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Example with job title
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate"

	payload := strings.NewReader("{\n  \"data\": {\n    \"job_title\": \"Product Manager\"\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Example with job title
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"data\": {\n    \"job_title\": \"Product Manager\"\n  }\n}"

response = http.request(request)
puts response.read_body
```

```java Example with job title
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")
  .header("Authorization", "Bearer <token>")
  .header("Content-Type", "application/json")
  .body("{\n  \"data\": {\n    \"job_title\": \"Product Manager\"\n  }\n}")
  .asString();
```

```php Example with job title
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate', [
  'body' => '{
  "data": {
    "job_title": "Product Manager"
  }
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp Example with job title
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"data\": {\n    \"job_title\": \"Product Manager\"\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Example with job title
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
]
let parameters = ["data": ["job_title": "Product Manager"]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/eor/contracts/3w6pd6r/amendments/validate")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```