Search Covenants
curl --request GET \
--url https://api.example.com/v1/covenantsimport requests
url = "https://api.example.com/v1/covenants"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/covenants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/covenants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/covenants"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/covenants")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/covenants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyCovenants
Search Covenants
Search and filter structured covenant data
GET
/
v1
/
covenants
Search Covenants
curl --request GET \
--url https://api.example.com/v1/covenantsimport requests
url = "https://api.example.com/v1/covenants"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/v1/covenants', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/v1/covenants",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/v1/covenants"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/v1/covenants")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/v1/covenants")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyOverview
Search and filter structured covenant data extracted from credit agreements and indentures. Returns financial covenants (leverage ratios, coverage tests), negative covenants (liens, asset sales), and protective covenants (change of control).Request
Company Filters
string
Filter by company ticker.Example:
CHTRCovenant Filters
string
Filter by covenant type:
financial, negative, incurrence, protectivestring
Filter by financial metric:
leverage_ratio, first_lien_leverage, interest_coverage, fixed_charge_coveragenumber
Minimum threshold value.
number
Maximum threshold value.
boolean
Filter for covenants with scheduled tightening.
Response Options
string
Comma-separated fields to return.Example:
covenant_name,threshold_value,threshold_typeinteger
default:"50"
Results per page. Maximum 100.
integer
default:"0"
Pagination offset.
Covenant Types
| Type | Description | Examples |
|---|---|---|
financial | Maintenance or incurrence tests with numerical thresholds | Leverage ratio, interest coverage |
negative | Restrictions on company actions | Limitations on liens, debt, asset sales |
incurrence | Tests applied when taking specific actions | Debt incurrence ratio |
protective | Bondholder protection provisions | Change of control, make-whole |
Test Metrics
| Metric | Description |
|---|---|
leverage_ratio | Total Debt / EBITDA |
first_lien_leverage | First Lien Debt / EBITDA |
secured_leverage | Secured Debt / EBITDA |
net_leverage_ratio | Net Debt / EBITDA |
interest_coverage | EBITDA / Interest Expense |
fixed_charge_coverage | (EBITDA - CapEx) / Fixed Charges |
Examples
Find Leverage Covenants
curl "https://api.debtstack.ai/v1/covenants?covenant_type=financial&test_metric=leverage_ratio" \
-H "X-API-Key: ds_xxxxx"
import requests
response = requests.get(
"https://api.debtstack.ai/v1/covenants",
params={
"covenant_type": "financial",
"test_metric": "leverage_ratio"
},
headers={"X-API-Key": "ds_xxxxx"}
)
for cov in response.json()["data"]:
print(f"{cov['ticker']}: {cov['threshold_type']} {cov['threshold_value']}x leverage")
Response
{
"data": [
{
"id": "3be913dd-b4a7-4af6-8333-271caea2283c",
"ticker": "CHTR",
"company_name": "Charter Communications, Inc.",
"instrument_name": "Term A-7 Loan",
"cusip": null,
"covenant_type": "incurrence",
"covenant_name": "Leverage Ratio Incurrence Test",
"test_metric": "leverage_ratio",
"threshold_value": 6.0,
"threshold_type": "maximum",
"test_frequency": "incurrence",
"description": "The Company may incur Indebtedness if the Leverage Ratio would be not greater than 6.0 to 1.0",
"has_step_down": false,
"step_down_schedule": null,
"cure_period_days": null,
"put_price_pct": null,
"extraction_confidence": 0.95,
"source_document_date": "2024-12-09"
}
],
"meta": {
"total": 125,
"limit": 50,
"offset": 0,
"covenant_types": ["financial", "negative", "incurrence", "protective"]
}
}
More Examples
Company’s All Covenants
curl "https://api.debtstack.ai/v1/covenants?ticker=CHTR" \
-H "X-API-Key: ds_xxxxx"
Change of Control Provisions
curl "https://api.debtstack.ai/v1/covenants?covenant_type=protective" \
-H "X-API-Key: ds_xxxxx"
Tight Leverage Covenants (under 5x)
curl "https://api.debtstack.ai/v1/covenants?test_metric=leverage_ratio&max_threshold=5.0" \
-H "X-API-Key: ds_xxxxx"

