Developers

Quickstart

Run the SBA price ceiling for one business and read where each number came from. You need a founding-broker account on acquestor.com.

1. Get an API key#

On acquestor.com, open Account → API keys → Create key. You'll be asked to sign in again first. Give the key a name, pick its scopes (tools:run is enough for this page) and set its monthly credit limit. The secret is shown once and starts with acquestor_live_; Acquestor stores only a hash of it.

sh
export ACQUESTOR_API_KEY="acquestor_live_..."

During the beta, API keys are for founding brokers. Buyers and sellers use Acquestor in their AI host through the MCP server instead.

2. Run the SBA price ceiling#

The ceiling is the highest price an SBA 7(a)-financed buyer can pay under the rules in force on a date. It needs seller's discretionary earnings (SDE), a manager salary or an area to take the market salary from, and a capex reserve, which may be 0.

sh
curl https://api.acquestor.com/v1/value/sba-ceiling \
  -H "Authorization: Bearer $ACQUESTOR_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"sde": 156000, "manager_salary": 80000, "capex_reserve": 0, "as_of": "2026-10-05"}'
ts
const res = await fetch("https://api.acquestor.com/v1/value/sba-ceiling", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ACQUESTOR_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({ sde: 156000, manager_salary: 80000, capex_reserve: 0, as_of: "2026-10-05" }),
});
const result = await res.json();
console.log(res.headers.get("Acquestor-Credits-Charged"), result.data.max_price);
python
import os, uuid, requests

r = requests.post(
    "https://api.acquestor.com/v1/value/sba-ceiling",
    headers={
        "Authorization": f"Bearer {os.environ['ACQUESTOR_API_KEY']}",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={"sde": 156000, "manager_salary": 80000, "capex_reserve": 0, "as_of": "2026-10-05"},
)
r.raise_for_status()
result = r.json()
print(result["data"]["max_price"])

No manager salary? Pass area instead ("area": "US" for the national estimate, an OEWS area code, or "state": "TX"), and the BLS median wage for general and operations managers there becomes a sourced assumption you can see in the inputs.

3. Read the response#

Captured from the code on its test data set and abbreviated to the headline figures; your figures depend on the rules and rates in force on as_of.

json
{
  "data": {
    "max_price": {
      "value": 426001,
      "unit": "USD",
      "source": "c1"
    },
    "max_loan": {
      "value": 383401,
      "unit": "USD",
      "source": "c1"
    },
    "price_to_sde": {
      "value": 2.73,
      "unit": "x",
      "source": "c1"
    }
  },
  "computation": {
    "id": "c1",
    "method": "sba_ceiling",
    "method_version": "1.0.0",
    "computed_at": "2026-10-05T15:02:11.000Z",
    "rule_sets": [
      "sba-sop-50-10-8.1@2026-09-25",
      "sba-rate-caps@2026-03-01"
    ],
    "inputs": {
      "sde": {
        "value": 156000,
        "unit": "USD",
        "source": "u1"
      },
      "manager_salary": {
        "value": 80000,
        "unit": "USD",
        "source": "u1"
      },
      "capex_reserve": {
        "value": 0,
        "unit": "USD",
        "source": "u1"
      },
      "prime_rate": {
        "value": 0.07,
        "unit": "rate",
        "source": "s1",
        "as_of": "2026-10-02"
      },
      "coverage": {
        "value": 1.25,
        "unit": "x",
        "source": "r1"
      },
      "term_months": {
        "value": 120,
        "unit": "months",
        "source": "r1"
      },
      "equity_injection_share": {
        "value": 0.1,
        "unit": "share",
        "source": "r1"
      },
      "max_spread": {
        "value": 0.03,
        "unit": "rate",
        "source": "r2"
      }
    }
  },
  "sources": [
    {
      "id": "u1",
      "basis": "client_supplied",
      "route": "served_directly",
      "as_of": "2026-10-05",
      "name": "Supplied by the calling client",
      "line": "Supplied by the calling AI client or API caller, Oct 5, 2026; used for this request only"
    },
    {
      "id": "r1",
      "source_id": "sba-sop-50-10-8.1",
      "name": "SOP 50 10 8.1, Lender and Development Company Loan Programs",
      "publisher": "U.S. Small Business Administration",
      "dataset": "SOP 50 10 8.1",
      "basis": "rule",
      "route": "served_directly",
      "licence_status": "cleared",
      "as_of": "2026-10-01",
      "effective_from": "2026-10-01",
      "effective_to": null,
      "url": "https://legacy.sba.gov/document/information-notice-5000-882227-issuance-technical-updates-sop-50-10-81",
      "line": "Source: SBA SOP 50 10 8.1, effective Oct 1, 2026"
    },
    {
      "id": "s1",
      "source_id": "frb-h15-prime",
      "name": "H.15 Selected Interest Rates: bank prime loan rate",
      "publisher": "Board of Governors of the Federal Reserve System",
      "dataset": "H.15 bank prime loan rate",
      "basis": "public_record",
      "route": "served_directly",
      "licence_status": "cleared",
      "as_of": "2026-10-02",
      "url": "https://www.federalreserve.gov/releases/h15/",
      "line": "Source: Federal Reserve, H.15 bank prime loan rate, as of Oct 2, 2026",
      "retrieved_at": "2026-10-05"
    },
    {
      "id": "r2",
      "source_id": "sba-notice-5000-875051",
      "name": "Procedural Notice 5000-875051, 7(a) maximum interest rates",
      "publisher": "U.S. Small Business Administration",
      "dataset": "Procedural Notice 5000-875051",
      "basis": "rule",
      "route": "served_directly",
      "licence_status": "cleared",
      "as_of": "2026-03-01",
      "effective_from": "2026-03-01",
      "effective_to": null,
      "url": "https://www.naggl.org/wp-content/uploads/2026/05/5000-875051.pdf",
      "line": "Source: SBA Procedural Notice 5000-875051, effective Mar 1, 2026"
    }
  ],
  "gaps": [],
  "disclaimer": "informational",
  "charge": {
    "credits": 5,
    "price_class": "quick_tool",
    "balance_after": 4995,
    "ledger_entry_id": "18fcdc80-6c5e-4de8-a992-61f2f96ea4b3"
  }
}

Follow any number to its source:

  1. data.max_price.source is c1, the computation.
  2. The computation lists its inputs, and each input names its own source.
  3. prime_rate points to s1: the Federal Reserve Board's H.15 bank prime loan rate, with the date of the rate used. Each source also carries line, ready to show beside the number.
  4. sde points to u1: a figure you supplied in this request. API and MCP callers' figures carry basis: client_supplied and serve that request only.

charge and the Acquestor-Credits-Charged header say what the call cost. During the beta that comes out of your monthly allowance.

4. When something is missing#

Leave out capex_reserve and nothing runs. The API answers 422 and names the input. It never fills it with a default it can't source.

json
{
  "type": "https://docs.acquestor.com/problems/missing_input",
  "title": "Missing or invalid input",
  "status": 422,
  "code": "missing_input",
  "detail": "capex_reserve is required",
  "missing": [
    "capex_reserve"
  ],
  "instance": "/api/v1/value/sba-ceiling"
}

Next#