API Discovery & Spec Endpoints
DreamFactory exposes OpenAPI 3.0 specs for every service. This is the first thing an LLM or programmatic client should do — discover what's available and read the spec before making calls. If you want to generate a database-backed REST API, DreamFactory can auto-create all endpoints from your existing schema.
Step 1: List All Services
curl -s http://your-df-host/api/v2/system/service \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN" \
| python3 -c "
import sys, json
for s in json.load(sys.stdin)['resource']:
print(s['name'], '-', s['type'], '-', s['label'])
"
This gives you every service name — used as the URL namespace in /api/v2/{name}/.
Step 2: Get the OpenAPI Spec for a Service
DF 7.5+ (newer versions)
Each service exposes its own spec directly:
GET /api/v2/{service_name}/_spec
curl -s http://your-df-host/api/v2/system/_spec \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
DF 7.4.x and earlier
Use the api_docs service instead:
GET /api/v2/api_docs/{service_name}
# Full system API spec
curl -s http://your-df-host/api/v2/api_docs/system \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
# Spec for a database service named 'mysql'
curl -s http://your-df-host/api/v2/api_docs/mysql \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
Get all specs at once
# Full combined spec for all services
curl -s http://your-df-host/api/v2/api_docs \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
Step 3: Extract Paths from Spec
import requests, json
APIKEY = "your-api-key"
TOKEN = "your-session-token"
HOST = "http://your-df-host"
# Get spec for a service
spec = requests.get(
f"{HOST}/api/v2/api_docs/system",
headers={
"X-DreamFactory-API-Key": APIKEY,
"X-DreamFactory-Session-Token": TOKEN,
}
).json()
# List all endpoints
for path, methods in sorted(spec["paths"].items()):
for method in methods:
if method in ["get", "post", "put", "patch", "delete"]:
summary = methods[method].get("summary", "")
print(f"{method.upper():7} /api/v2{path} — {summary}")
What the Spec Tells You
Each path entry includes:
- summary — one-line description
- description — full explanation
- parameters — query params with types and descriptions
- requestBody —
$refto schema incomponents/schemas - responses — response schemas
The components/schemas section has the full field definitions for every request and response object.
Check DF Version
curl -s http://your-df-host/api/v2/system/environment \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN" \
| python3 -c "import sys,json; e=json.load(sys.stdin); print(e['platform']['version'])"
- 7.5+: Use
GET /api/v2/{service}/_spec - 7.4.x and earlier: Use
GET /api/v2/api_docs/{service}
Available Service Types
To see all service types you can create:
curl -s http://your-df-host/api/v2/system/service_type?fields=name,label,group \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
This returns the valid type values for POST /api/v2/system/service.
Retrieving OpenAPI Specs — Code Examples
Once you know a service name, you can retrieve its OpenAPI spec programmatically. The examples below work for both LLM agents and developer tooling.
cURL
# DF 7.5+ — fetch the spec for a service named 'mysql'
curl -s http://your-df-host/api/v2/mysql/_spec \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
# DF 7.4.x and earlier — use api_docs
curl -s http://your-df-host/api/v2/api_docs/mysql \
-H "X-DreamFactory-API-Key: YOUR_API_KEY" \
-H "X-DreamFactory-Session-Token: YOUR_TOKEN"
JavaScript (fetch)
const DF_HOST = 'http://your-df-host';
const SERVICE = 'mysql';
const headers = {
'X-DreamFactory-API-Key': 'YOUR_API_KEY',
'X-DreamFactory-Session-Token': 'YOUR_TOKEN',
};
// DF 7.5+ endpoint
const response = await fetch(`${DF_HOST}/api/v2/${SERVICE}/_spec`, { headers });
const spec = await response.json();
// Print all available paths
Object.keys(spec.paths).forEach(path => console.log(path));
Both approaches return an OpenAPI 3.0 document you can feed directly to an LLM context window, an API client generator, or a documentation tool.
Troubleshooting
Spec endpoint returns 403
A 403 response means the API key or session token you are using is bound to a role that does not have access to the spec endpoint for that service.
Fix: In the DreamFactory admin panel, open the role attached to your API key, navigate to Access Overview, and ensure the target service is listed with at least GET access on the _spec component (or * for all components). See Role-Based Access Control for details.
Spec shows empty paths object
An OpenAPI document with paths: {} means the service was found but has no routable endpoints. This usually means the service is not fully activated or its underlying connection is broken.
Fix: Navigate to API Generation & Connections in the admin panel, open the service, and verify the connection test passes. For database services, confirm the database is reachable and credentials are correct.
Endpoint not found (404)
A 404 on the spec URL usually means the service name in the URL does not match any configured service.
Fix: Run the Step 1 listing call to retrieve exact service names, then substitute the correct name value (case-sensitive) into your spec URL.