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

# Enable an app

POST https://api.letsdeel.com/rest/apps/{app_id}/enable

Enables an integration app that belongs to your organization so it can obtain tokens again. Consents and tokens revoked when the app was disabled are not restored. An app that is awaiting review or unpublished cannot be enabled. Returns the app.

 **Token scopes**: `apps:write`

 **Beta**: this version requires the `X-Beta: true` request header and its contract may change before it is promoted to stable. It is scheduled to become stable on 2027-02-02.

Reference: https://docs.deel.wtf/api/reference/endpoints/apps/enable-app-by-id-v-2026-11-02

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

- `app_id` (string, required) — Unique identifier of the app.

### Headers

- `X-Beta` (enum, required, default: true) — Opts in to the beta version of this endpoint. Must be `true`.
  - Allowed values: `true`

## Response

### 200

The enabled app.

- `data` (AppsAppIdEnablePostResponsesContentApplicationJsonSchemaData, required) — An app that belongs to your organization.

## Errors

### 400 Bad Request Error

Bad Request. The app id is not a valid identifier.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 401 Unauthorized Error

Unauthorized. Authentication credentials were missing or invalid.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 403 Forbidden Error

Forbidden. You do not have permission to access this resource.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 404 Not Found Error

Not Found. No app with this id belongs to your organization.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 409 Conflict Error

Conflict. The app is awaiting review or unpublished, so it cannot be enabled.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 429 Too Many Requests Error

Too Many Requests. The rate limit has been exceeded.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

### 500 Internal Server Error

Internal Server Error. An unexpected error occurred.

- `errors` (list of AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems, required) — The list of errors that caused the request to fail.

## Types

### AppsAppIdEnablePostResponsesContentApplicationJsonSchemaData

An app that belongs to your organization.

- `id` (string, required) — Unique identifier of the app.
- `name` (string, required) — Name of the app.
- `type` (enum, required) — Kind of app. Integration apps connect your organization to Deel.
  - Allowed values: `integration`
- `audience` (enum, required) — Whom the app acts for: `personal` for the user who authorizes it, `organization` for the organization.
  - Allowed values: `personal`, `organization`
- `logo_url` (string, required) — URL of the app logo. Empty when the app has no logo.
- `api_access` (enum, required) — Whether API access is switched on for the app: `disabled` after the app is disabled, by you or by Deel, until it is enabled again.
  - Allowed values: `enabled`, `disabled`
- `created_at` (string, required) — Time at which the app was created.
- `created_by` (AppsAppIdEnablePostResponsesContentApplicationJsonSchemaDataCreatedBy, required, nullable) — Who created the app, or null when unknown.
- `updated_at` (string, required) — Time at which the app was last updated.
- `client_type` (enum, required) — Whether the app can keep a secret. `confidential` apps authenticate with a client secret.
  - Allowed values: `public`, `confidential`
- `description` (string, required) — What the app does. Empty when none was set.
- `website_url` (string, required) — Website of the app. Empty when none was set.
- `redirect_uris` (list of string, required) — URLs Deel may send the user back to after they authorize the app.

### AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItems

- `code` (string, required) — Machine-readable error code.
- `message` (string, required) — Human-readable description of the error.
- `details` (AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItemsDetails, optional) — Additional information about the error, when available.

### AppsAppIdEnablePostResponsesContentApplicationJsonSchemaDataCreatedBy

Who created the app, or null when unknown.

- `name` (string, required, nullable) — Name of the person who created the app.
- `status` (enum, required) — Whether the creator still belongs to your organization (`active`) or no longer does (`left`).
  - Allowed values: `active`, `left`

### AppsAppIdEnablePostResponsesContentApplicationJsonSchemaErrorsItemsDetails

Additional information about the error, when available.

## Examples

**Response**

```json
{
  "data": {
    "id": "00000000-0000-0000-0000-000000000000",
    "name": "Payroll sync",
    "type": "integration",
    "audience": "organization",
    "logo_url": "https://cdn.example.com/logo.png",
    "api_access": "enabled",
    "created_at": "2024-01-01T12:00:00Z",
    "created_by": {
      "name": "Ada Lovelace",
      "status": "active"
    },
    "updated_at": "2024-01-02T12:00:00Z",
    "client_type": "confidential",
    "description": "Syncs approved timesheets to our payroll system.",
    "website_url": "https://example.com",
    "redirect_uris": [
      "https://example.com/oauth/callback"
    ]
  }
}
```

**SDK Code**

```python
import requests

url = "https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable"

headers = {
    "X-Beta": "true",
    "Authorization": "Bearer <token>"
}

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

print(response.json())
```

```javascript
const url = 'https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable';
const options = {method: 'POST', headers: {'X-Beta': 'true', 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/apps/00000000-0000-0000-0000-000000000000/enable"

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

	req.Header.Add("X-Beta", "true")
	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/apps/00000000-0000-0000-0000-000000000000/enable")

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

request = Net::HTTP::Post.new(url)
request["X-Beta"] = 'true'
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.post("https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable")
  .header("X-Beta", "true")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'X-Beta' => 'true',
  ],
]);

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

```csharp
using RestSharp;

var client = new RestClient("https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable");
var request = new RestRequest(Method.POST);
request.AddHeader("X-Beta", "true");
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "X-Beta": "true",
  "Authorization": "Bearer <token>"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.letsdeel.com/rest/apps/00000000-0000-0000-0000-000000000000/enable")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
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()
```