Dashboard Client

Base URL https://api.example.com
POST /api/v1/dashboard/client/jobs/spiderMaps/submit

Submit Spider Maps Job

Submit a SpiderMaps job via dashboard session auth. This wraps the existing job submission logic but uses session cookies instead of Bearer token authentication.

Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/jobs/spiderMaps/submit
curl -X POST 'https://api.example.com/api/v1/dashboard/client/jobs/spiderMaps/submit' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
  -d '{}'
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/jobs/spiderMaps/submit",
    headers={"Authorization": "Bearer ", "Content-Type": "application/json"},
    json={},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/jobs/spiderMaps/submit", {
  method: "POST",
  headers: { "Authorization": "Bearer ", "Content-Type": "application/json" },
  body: JSON.stringify({})
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{}`)
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/jobs/spiderMaps/submit", body)
	req.Header.Set("Authorization", "Bearer ")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
Request body
{}
GET /api/v1/dashboard/client/jobs

List Client Jobs

List jobs for the authenticated client user. For super_admins: - If X-Selected-Client-Id header is provided, filter to that client - Otherwise, show all jobs For client_user/brand_admin: - Always filter to their client_id

Parameters
page integer query
page_size integer query
type_filter any query
status_filter any query
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/jobs
curl -X GET 'https://api.example.com/api/v1/dashboard/client/jobs' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/jobs",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/jobs", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/jobs", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/jobs/{job_id}/status

Get Job Status

Get status for a specific job.

Parameters
job_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/jobs/{job_id}/status
curl -X GET 'https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/status' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/status",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/status", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/status", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/jobs/{job_id}/results

Get Job Results

Get results for a completed job. Super_admins can access any job's results. Client users can only access their own client's jobs.

Parameters
job_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/jobs/{job_id}/results
curl -X GET 'https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/results' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/results",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/results", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/results", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
POST /api/v1/dashboard/client/jobs/{job_id}/cancel

Cancel Job

Cancel a queued or processing job. Super_admins can cancel any job. Client users can only cancel their own client's jobs.

Parameters
job_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/jobs/{job_id}/cancel
curl -X POST 'https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/cancel' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/cancel",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/cancel", {
  method: "POST",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/jobs/{job_id}/cancel", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
POST /api/v1/dashboard/client/research/submit

Submit Company Research

Submit a company research job via dashboard session auth. Supports both super_admin (with X-Selected-Client-Id header) and client users.

Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/research/submit
curl -X POST 'https://api.example.com/api/v1/dashboard/client/research/submit' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
  -d '{}'
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/research/submit",
    headers={"Authorization": "Bearer ", "Content-Type": "application/json"},
    json={},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/submit", {
  method: "POST",
  headers: { "Authorization": "Bearer ", "Content-Type": "application/json" },
  body: JSON.stringify({})
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{}`)
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/research/submit", body)
	req.Header.Set("Authorization", "Bearer ")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
Request body
{}
GET /api/v1/dashboard/client/research

List Company Research

List company research jobs for the authenticated user.

Parameters
page integer query
page_size integer query
status any query
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/research
curl -X GET 'https://api.example.com/api/v1/dashboard/client/research' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/research",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/research", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/research/{research_id}/status

Get Research Status

Get status for a specific research job.

Parameters
research_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/research/{research_id}/status
curl -X GET 'https://api.example.com/api/v1/dashboard/client/research/{research_id}/status' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/research/{research_id}/status",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/{research_id}/status", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/research/{research_id}/status", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/research/{research_id}/results

Get Research Results

Get results for a completed research job.

Parameters
research_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/research/{research_id}/results
curl -X GET 'https://api.example.com/api/v1/dashboard/client/research/{research_id}/results' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/research/{research_id}/results",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/{research_id}/results", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/research/{research_id}/results", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
POST /api/v1/dashboard/client/research/{research_id}/pause

Pause Research

Pause a running research job.

Parameters
research_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/research/{research_id}/pause
curl -X POST 'https://api.example.com/api/v1/dashboard/client/research/{research_id}/pause' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/research/{research_id}/pause",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/{research_id}/pause", {
  method: "POST",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/research/{research_id}/pause", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
POST /api/v1/dashboard/client/research/{research_id}/resume

Resume Research

Resume a paused research job.

Parameters
research_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/research/{research_id}/resume
curl -X POST 'https://api.example.com/api/v1/dashboard/client/research/{research_id}/resume' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/research/{research_id}/resume",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/{research_id}/resume", {
  method: "POST",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/research/{research_id}/resume", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
POST /api/v1/dashboard/client/research/{research_id}/cancel

Cancel Research

Cancel a research job.

Parameters
research_id string path required
Responses
  • 200Successful Response
  • 422Validation Error
POST /api/v1/dashboard/client/research/{research_id}/cancel
curl -X POST 'https://api.example.com/api/v1/dashboard/client/research/{research_id}/cancel' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.post(
    "https://api.example.com/api/v1/dashboard/client/research/{research_id}/cancel",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/research/{research_id}/cancel", {
  method: "POST",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("POST", "https://api.example.com/api/v1/dashboard/client/research/{research_id}/cancel", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/locations/countries

List Countries Dashboard

List all available countries with location counts. Used for campaign creation country dropdown.

Responses
  • 200Successful Response
GET /api/v1/dashboard/client/locations/countries
curl -X GET 'https://api.example.com/api/v1/dashboard/client/locations/countries' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/locations/countries",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/locations/countries", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/locations/countries", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/locations/regions

List Regions Dashboard

List all admin regions (states/provinces) for a country. Used for campaign creation region filter.

Parameters
country_code string query required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/locations/regions
curl -X GET 'https://api.example.com/api/v1/dashboard/client/locations/regions' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/locations/regions",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/locations/regions", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/locations/regions", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/locations/stats

Get Country Stats Dashboard

Get location statistics for a country. Used to show how many locations match different filter modes.

Parameters
country_code string query required
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/locations/stats
curl -X GET 'https://api.example.com/api/v1/dashboard/client/locations/stats' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/locations/stats",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/locations/stats", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/locations/stats", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}
GET /api/v1/dashboard/client/locations

List Locations Dashboard

List locations with filtering and pagination. Used for campaign creation location selection (custom mode).

Parameters
country_code any query
search any query
location_type any query
page integer query
page_size integer query
Responses
  • 200Successful Response
  • 422Validation Error
GET /api/v1/dashboard/client/locations
curl -X GET 'https://api.example.com/api/v1/dashboard/client/locations' \
  -H 'Authorization: Bearer '
import httpx

resp = httpx.get(
    "https://api.example.com/api/v1/dashboard/client/locations",
    headers={"Authorization": "Bearer "},
)
resp.raise_for_status()
print(resp.json())
const resp = await fetch("https://api.example.com/api/v1/dashboard/client/locations", {
  method: "GET",
  headers: { "Authorization": "Bearer " }
});
const data = await resp.json();
console.log(data);
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://api.example.com/api/v1/dashboard/client/locations", nil)
	req.Header.Set("Authorization", "Bearer ")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}