> This page is for API, version 2026-01-01 (Stable) (default).
> For other versions, use one of these documentation indexes:
> - 2026-01-01 (Stable) (default): https://docs.deel.wtf/api/stable/llms.txt

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

# Delete task

DELETE https://api.letsdeel.com/rest/contracts/{contract_id}/tasks/{task_id}

Removes a task from a contract when it should be dropped altogether rather than edited, and records an optional explanation with the removal. This removal cannot be undone through the API, so use it only when the task is not needed any more.

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

Reference: https://docs.deel.wtf/api/embedded/ic-endpoints/tasks/delete-contract-task

## 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.deel.training/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 Deel contract.
- `task_id` (string, required) — The unique identifier of the task to be deleted.

### Query parameters

- `reason` (string, optional) — The reason for deleting the task. This can be used for auditing purposes.

## Response

### 200

The task was successfully deleted.

- `data` (ContractsContractIdTasksTaskIdDeleteResponsesContentApplicationJsonSchemaData, required)

## Errors

### 400 Bad Request Error

Invalid request. For example, missing required parameters or invalid format.

- `any`

### 401 Unauthorized Error

Operation failed.

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

### 403 Forbidden Error

Permission denied. The user does not have the required access to delete the task.

- `any`

### 404 Not Found Error

The specified task or contract was not found.

- `any`

### 500 Internal Server Error

Operation failed.

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

## Types

### ContractsContractIdTasksTaskIdDeleteResponsesContentApplicationJsonSchemaData

- `deleted` (boolean, required) — Indicates whether the task was successfully deleted.

### 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

**Response**

```json
{
  "data": {
    "deleted": true
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000"

querystring = {"reason":"Task is no longer required due to scope changes."}

headers = {"Authorization": "Bearer <token>"}

response = requests.delete(url, headers=headers, params=querystring)

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.';
const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};

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

```go
package main

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

func main() {

	url := "https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes."

	req, _ := http.NewRequest("DELETE", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

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

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

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

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.")

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

request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'

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

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.delete("https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('DELETE', 'https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.");
var request = new RestRequest(Method.DELETE);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/contracts/37nex2x/tasks/123e4567-e89b-12d3-a456-426614174000?reason=Task+is+no+longer+required+due+to+scope+changes.")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers

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()
```