DeepCurrent’s hosted growth engine handles enrichment, qualification, and execution for you. Describe your target, pick your channels, set a volume, and DeepCurrent builds and runs the campaign.
How it works
You define a goal_plan — the target company or domain, the channels you want to use (email, LinkedIn, etc.), and how many contacts you want to reach. DeepCurrent resolves your goal into a delivery plan, quotes the credit cost, and runs the enrichment pipeline when you confirm.
Results land in your Downloads page when the run completes.
Quote tokens are single-use and expire. Get a fresh quote before each run. If a run fails after the token is consumed, you will need to re-quote before retrying.
The 4-step workflow
Resolve
Submit your growth goal. DeepCurrent validates the shape of your plan and returns a goal_plan object ready for quoting.curl -X POST https://api.deepcurrent.app/api/v1/growth/resolve \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"goal_text": "Find and reach out to 50 decision-makers at Hyperliquid via email",
"constraints": {},
"input_assets": {}
}'
You can also supply a structured goal_plan directly if you already know the target:{
"goal_plan": {
"target": { "domain": "hyperliquid.xyz" },
"channels": ["email"],
"volume": 50
}
}
The response includes a goal_plan you will pass to the quote step, along with quotable: true when the plan is ready.{
"goal_type": "targeted_outreach",
"quotable": true,
"suggested_next_action": "Confirm this quote to start the growth run.",
"goal_plan": {
"target": { "domain": "hyperliquid.xyz" },
"channels": ["email"],
"volume": 50,
"pipeline_id": "full_pipeline"
}
}
Quote
Pass the goal_plan from the resolve response to get a credit cost and a quote_token.curl -X POST https://api.deepcurrent.app/api/v1/growth/quote \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"goal_plan": {
"target": { "domain": "hyperliquid.xyz" },
"channels": ["email"],
"volume": 50,
"pipeline_id": "full_pipeline"
}
}'
A successful quote response:{
"ok": true,
"quotable": true,
"quote_token": "eyJ...",
"expiry": "2025-04-08T15:30:00Z",
"credits_total": 750,
"cost_breakdown": {
"enrichment": 500,
"email_verification": 250
},
"expected_artifacts": {
"contacts": 50,
"verified_emails": 40
},
"suggested_next_action": "Confirm this quote to start the growth run."
}
If ok is false, check error_code and detail for what to fix before re-quoting. Run
Confirm the quote to start execution. You get a run_id back immediately — the job runs asynchronously.curl -X POST https://api.deepcurrent.app/api/v1/growth/run \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"quote_token": "eyJ...",
"goal_plan": {
"target": { "domain": "hyperliquid.xyz" },
"channels": ["email"],
"volume": 50,
"pipeline_id": "full_pipeline"
}
}'
{
"status": "running",
"run_id": "7c9e6679-...",
"preview": {
"message": "Enrichment has been queued.",
"pipeline_id": "full_pipeline"
}
}
Save the run_id — you need it to check progress. Poll for status
Check progress by polling the run status endpoint. The progress field shows percentage completion (0–100).curl https://api.deepcurrent.app/api/v1/growth/runs/7c9e6679-... \
-H "Authorization: Bearer YOUR_API_KEY"
While running:{
"run_id": "7c9e6679-...",
"status": "running",
"progress": {
"percent": 62,
"message": "Enriching contacts and verifying emails..."
}
}
When complete:{
"run_id": "7c9e6679-...",
"status": "completed",
"progress": { "percent": 100 },
"export_handles": [
{
"label": "Verified contacts",
"kind": "csv",
"download_url": "https://..."
}
],
"preview": {
"delivered_contacts": 50,
"verified_emails": 43
}
}
Completed runs are also available on your Downloads page at app.deepcurrent.app/downloads.
Worked example (Python)
import time
import requests
BASE = "https://api.deepcurrent.app/api/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
goal_plan = {
"target": {"domain": "hyperliquid.xyz"},
"channels": ["email"],
"volume": 50,
"pipeline_id": "full_pipeline"
}
# Step 1 — Resolve
resolve = requests.post(f"{BASE}/growth/resolve", headers=HEADERS, json={
"goal_text": "Reach 50 decision-makers at Hyperliquid via email",
"input_assets": {}
}).json()
goal_plan = resolve["goal_plan"]
# Step 2 — Quote
quote = requests.post(f"{BASE}/growth/quote", headers=HEADERS, json={
"goal_plan": goal_plan
}).json()
assert quote["ok"], f"Quote failed: {quote.get('detail')}"
# Step 3 — Run
run = requests.post(f"{BASE}/growth/run", headers=HEADERS, json={
"quote_token": quote["quote_token"],
"goal_plan": goal_plan,
}).json()
run_id = run["run_id"]
# Step 4 — Poll
while True:
status = requests.get(f"{BASE}/growth/runs/{run_id}", headers=HEADERS).json()
print(f"Progress: {status['progress'].get('percent', 0)}%")
if status["status"] in ("completed", "failed", "cancelled"):
break
time.sleep(10)
print("Done:", status["status"])