SSpiderIQ
SSpiderIQ

Docs / api-reference/auth-profile

Auth Profile

8 endpoints from the published OpenAPI import.

GET/api/v1/auth/me

Get User Me

Get current user's full profile including brand memberships.

This endpoint is used by the settings page to display user info and the list of brands the user belongs to.

Try it

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/auth/me' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/auth/me",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/me", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/auth/me", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
PATCH/api/v1/auth/profile

Update Profile

Update the current user's profile fields.

Updatable fields: firstname, lastname, mobile

Try it

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/auth/profile' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "firstname": "string",
  "lastname": "string",
  "mobile": "string"
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/auth/profile",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"firstname": "string", "lastname": "string", "mobile": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/profile", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"firstname": "string", "lastname": "string", "mobile": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"firstname": "string", "lastname": "string", "mobile": "string"}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/auth/profile", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/auth/profile/photo

Upload Profile Photo

Upload a profile photo.

Accepts: image/png, image/jpeg, image/gif, image/svg+xml Max size: 2MB Stored as base64 data URL in database.

Try it

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/auth/profile/photo' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "file": "string"
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/auth/profile/photo",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"file": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/profile/photo", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"file": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"file": "string"}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/auth/profile/photo", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
DELETE/api/v1/auth/profile/photo

Remove Profile Photo

Remove the current user's profile photo.

Try it

Examples

cURL
curl -X DELETE 'https://spideriq.ai/api/v1/auth/profile/photo' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.delete(
    "https://spideriq.ai/api/v1/auth/profile/photo",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/profile/photo", {
  method: "DELETE",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("DELETE", "https://spideriq.ai/api/v1/auth/profile/photo", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
GET/api/v1/auth/connectors

Get Connectors

Get list of OAuth providers connected to this account.

Returns providers like 'google', 'github' with connection status.

Try it

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/auth/connectors' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/auth/connectors",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/connectors", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/auth/connectors", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
GET/api/v1/auth/workspaces

List projects the caller can operate on

Returns every workspace (project) the authenticated caller has access to. Used by spideriq use <project> to resolve a project name and write ./spideriq.json for per-session binding (Phase 11+12 Lock 3).

  • api_client / PAT: returns the single client the token is scoped to.
  • client_user / brand_admin: returns clients they are provisioned for.
  • super_admin: returns all active clients.
Try it

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/auth/workspaces' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/auth/workspaces",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/workspaces", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/auth/workspaces", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
GET/api/v1/auth/whoami

Who am I + which project is my token bound to?

Unified identity endpoint for agents and dashboard users. Returns the current client_id plus human-readable project_name so an agent can verify its binding before a destructive deploy. Expired PATs receive a distinguishable {error: 'token_expired'} 401 instead of a generic 'invalid token' message.

Try it

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/auth/whoami' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/auth/whoami",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/whoami", {
  method: "GET",
  headers: { "Authorization": "Bearer <token>" }
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://spideriq.ai/api/v1/auth/whoami", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
PATCH/api/v1/auth/me/notifications-dnd

Patch Notifications Dnd

Update the caller's DND/timezone fields on dashboard_users.

Used by the Notifications settings tab Card 1. Quiet hours are interpreted in the user's timezone by the sidecar (slice 3.2), so all three (tz, start, end) move together — clients re-send the timezone whenever they change it, but absent fields preserve the existing value. Setting clear_window=true clears both dnd_start and dnd_end together (the only way to disable quiet hours).

Try it

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/auth/me/notifications-dnd' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "timezone": "string",
  "dnd_start": "string",
  "dnd_end": "string",
  "dnd_days_off": 0,
  "clear_window": false
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/auth/me/notifications-dnd",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"timezone": "string", "dnd_start": "string", "dnd_end": "string", "dnd_days_off": 0, "clear_window": false},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/auth/me/notifications-dnd", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"timezone": "string", "dnd_start": "string", "dnd_end": "string", "dnd_days_off": 0, "clear_window": false})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"timezone": "string", "dnd_start": "string", "dnd_end": "string", "dnd_days_off": 0, "clear_window": false}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/auth/me/notifications-dnd", body)
	req.Header.Set("Authorization", "Bearer <token>")
	req.Header.Set("Content-Type", "application/json")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error