> This is Payabli documentation. For a complete page index, fetch https://docs.payabli.com/llms.txt — append .md to any page URL for lightweight markdown. For section-level indexes, query parameters, and other AI-optimized access methods, see https://docs.payabli.com/ai-agents.md

# Get application enablement progress

GET https://api-sandbox.payabli.com/api/v2/requests/{requestsReference}/enablement

Retrieves the progress of setting up an approved application's services with their processors. An application's status stays `approved` or `autoapproved` while this runs, and it moves to `activated` after every requested service is set up. Use this endpoint to see why an approved merchant isn't live yet.

Enablement doesn't send webhooks, so poll this endpoint to follow it. Until enablement starts, `state` and the other progress fields are `null`, and `services` is empty. That includes applications that are in `draft`, withdrawn, or in `error`.


Reference: https://docs.payabli.com/developers/api-reference/applications/get-application-enablement-progress

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://api-sandbox.payabli.com/api` (Sandbox, default)
- `https://api.payabli.com/api` (Production)

## Request

### Path parameters

- `requestsReference` (string, required) — The application reference.

## Response

### 200

The application's enablement progress.

- `success` (boolean, required) — Whether the request succeeded.
- `message` (string, required, nullable) — A human-readable result message.
- `traceId` (string, required, nullable) — The trace identifier for the request, useful for support.
- `data` (EnablementResult, required, nullable) — The application's enablement progress.

## Errors

### 401 Unauthorized Error

Unauthorized request.

- `isSuccess` (boolean, required) — Always `false` for error responses.
- `responseText` (string, required) — Error text describing what went wrong.
- `responseCode` (integer, optional) — Code for the response. Learn more in [API Response Codes](/developers/api-reference/api-responses).
- `responseData` (PayabliErrorBodyResponseData, optional) — Object with detailed error context.

### 404 Not Found Error

The requested resource wasn't found.

- `isSuccess` (boolean, required) — Always `false` for error responses.
- `responseText` (string, required) — Error text describing what went wrong.
- `responseCode` (integer, optional) — Code for the response. Learn more in [API Response Codes](/developers/api-reference/api-responses).
- `responseData` (PayabliErrorBodyResponseData, optional) — Object with detailed error context.

### 500 Internal Server Error

Internal server error.

- `isSuccess` (boolean, required) — Always `false` for error responses.
- `responseText` (string, required) — Error text describing what went wrong.
- `responseCode` (integer, optional) — Code for the response. Learn more in [API Response Codes](/developers/api-reference/api-responses).
- `responseData` (PayabliErrorBodyResponseData, optional) — Object with detailed error context.

## Types

### EnablementResult

The progress of setting up an approved application's services with their processors.

- `requestsReference` (string, required) — The application reference.
- `state` (string, required, nullable) — The overall enablement state. `null` when enablement hasn't started. One of: - `Submitted`: Enablement is in progress. - `Activated`: Every service is `Provisioned`. - `Failed`: Enablement stopped and isn't retried.
- `services` (list of EnablementService, required) — The enablement progress of each requested service. Empty when enablement hasn't started.
- `blockedOn` (string, required, nullable) — Why enablement isn't moving. `null` when nothing is blocking it, or when enablement hasn't started. One of: - `processor`: At least one service is waiting on its processor, for example during an outage or the processor's review. Payabli retries automatically. - `merchant_data`: Something about the merchant needs a correction, such as fields the processor refused or a missing tax ID. Check `missingFields` on each service. - `platform_configuration`: Waiting on configuration that Payabli maintains. The merchant doesn't need to act. - `enablement_failed`: Enablement stopped and isn't retried. `services` shows which service stopped. - `unclassified`: Enablement isn't complete, and the cause isn't determined yet.
- `message` (string, required, nullable) — A sentence that explains `blockedOn`. From the second attempt on, it includes the number of attempts.
- `attempts` (integer, required, nullable) — How many times Payabli has attempted enablement. `null` when enablement hasn't started.
- `firstAttemptAt` (datetime, required, nullable) — When Payabli first attempted enablement.
- `lastAttemptAt` (datetime, required, nullable) — When Payabli most recently attempted enablement.

### PayabliErrorBodyResponseData

Object with detailed error context.

- `explanation` (string, optional) — Human-readable explanation of what happened.
- `todoAction` (string, optional) — Suggested resolution.

### EnablementService

The enablement progress of one service the application requested.

- `service` (string, required) — The service, such as `Card`.
- `rail` (string, required) — Whether the service moves money in (`MoneyIn`) or out (`MoneyOut`).
- `state` (string, required) — The service's enablement state. One of: - `Pending`: Not sent to the processor yet. - `Submitted`: Sent to the processor, waiting for a response. - `Approved`: The processor approved the service. - `Provisioned`: The service is set up and ready to use. - `HeldForInput`: Needs a correction or more information. Enablement resumes after someone acts. - `Failed`: Enablement failed for this service.
- `message` (string, required, nullable) — A sentence about the service when its last attempt didn't go through, or when it failed. When the processor refused fields or reported them as missing, the sentence names them. `null` otherwise.
- `missingFields` (list of string, required, nullable) — The boarding API fields the processor refused or reported as missing, such as `addresses.cityLocality`. `null` when the processor named none.

## Examples

### GetApplicationEnablement

**Response**

```json
{
  "success": true,
  "message": "Application boarding status",
  "traceId": "0HNP4OL9M4GDO:00000001",
  "data": {
    "requestsReference": "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    "state": "Submitted",
    "services": [
      {
        "service": "Card",
        "rail": "MoneyIn",
        "state": "Submitted",
        "message": null,
        "missingFields": null
      }
    ],
    "blockedOn": "processor",
    "message": "Boarding is waiting on a processor for at least one service and is retried automatically. The service list says which. It has been attempted 63 times so far.",
    "attempts": 63,
    "firstAttemptAt": "2026-10-12T18:41:18.945616+00:00",
    "lastAttemptAt": "2026-10-12T19:43:10.983059+00:00"
  }
}
```

**SDK Code**

```python GetApplicationEnablement
import requests

url = "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement"

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

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

print(response.json())
```

```javascript GetApplicationEnablement
const url = 'https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement';
const options = {method: 'GET', 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 GetApplicationEnablement
package main

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

func main() {

	url := "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement"

	req, _ := http.NewRequest("GET", 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 GetApplicationEnablement
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")

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

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

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

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

HttpResponse<String> response = Unirest.get("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp GetApplicationEnablement
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift GetApplicationEnablement
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
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()
```

### GetApplicationEnablementNotStarted

**Response**

```json
{
  "success": true,
  "message": "Application boarding status",
  "traceId": "0HNP4OM1AUIS4:00000002",
  "data": {
    "requestsReference": "3f3caa7b-bdfe-4bf1-814b-30d54859247c",
    "state": null,
    "services": [],
    "blockedOn": null,
    "message": null,
    "attempts": null,
    "firstAttemptAt": null,
    "lastAttemptAt": null
  }
}
```

**SDK Code**

```python GetApplicationEnablementNotStarted
import requests

url = "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement"

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

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

print(response.json())
```

```javascript GetApplicationEnablementNotStarted
const url = 'https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement';
const options = {method: 'GET', 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 GetApplicationEnablementNotStarted
package main

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

func main() {

	url := "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement"

	req, _ := http.NewRequest("GET", 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 GetApplicationEnablementNotStarted
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")

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

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

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

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

HttpResponse<String> response = Unirest.get("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")
  .header("Authorization", "Bearer <token>")
  .asString();
```

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

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

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

```csharp GetApplicationEnablementNotStarted
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift GetApplicationEnablementNotStarted
import Foundation

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

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/v2/requests/3f3caa7b-bdfe-4bf1-814b-30d54859247c/enablement")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
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()
```