SSpiderIQ
SSpiderIQ

Docs / api-reference/collections

collections

22 endpoints from the published OpenAPI import.

GET/api/v1/dashboard/content/collections

List Collections

List every collection definition in the project.

Parameters

NameInTypeRequiredDescription
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

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

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/content/collections",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections", {
  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/dashboard/content/collections", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/dashboard/content/collections

Create Collection

Create a collection definition (validates the field schema + route_base). Non-destructive create — no confirm gate. Enforces the max_collections cap.

Try it

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/content/collections' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "label": "string",
  "schema_json": {},
  "route_base": "string",
  "is_public": false
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/content/collections",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/content/collections", 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
201Successful Response
422Validation Error
GET/api/v1/dashboard/content/collections/{slug}

Get Collection

Get one collection definition by slug.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}", {
  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/dashboard/content/collections/{slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
PATCH/api/v1/dashboard/content/collections/{slug}

Update Collection

Update a collection definition (non-destructive — no confirm gate).

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "label": "string",
  "schema_json": {},
  "route_base": "string",
  "is_public": true
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"label": "string", "schema_json": {}, "route_base": "string", "is_public": true},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"label": "string", "schema_json": {}, "route_base": "string", "is_public": true})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"label": "string", "schema_json": {}, "route_base": "string", "is_public": true}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}", 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/dashboard/content/collections/{slug}

Delete Collection

Delete a collection — DESTRUCTIVE (cascades to its records + edges). Gated: dry_run=true returns a preview + confirm_token; call again with the token to commit.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
dry_runquerybooleanfalsePreview the delete + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseConsume a prior preview token and perform the delete.
Try it
Query

Examples

cURL
curl -X DELETE 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.delete(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}", {
  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/dashboard/content/collections/{slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
GET/api/v1/dashboard/content/collections/{slug}/records

List Records

List a page of a collection's records — drafts AND published (the author surface). Raises 404 for an unknown collection.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
limitqueryintegerfalse
offsetqueryintegerfalse
sortqueryanyfalse
fieldsqueryanyfalseComma-separated field ids to keep in each record's data (e.g. 'name,install_cmd'). Omit for every field. A wide schema returns tens of thousands of characters per page — narrow the projection when you only need a few fields. Unknown ids are ignored.
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records", {
  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/dashboard/content/collections/{slug}/records", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/dashboard/content/collections/{slug}/records

Create Record

Create ONE draft record (validates data against the schema). Non- destructive create — no confirm gate. Enforces the max_records cap.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "data": {},
  "seo_title": "string",
  "seo_description": "string",
  "og_image_url": "string",
  "sort": 0,
  "publish_at": "string"
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records", 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
201Successful Response
422Validation Error
POST/api/v1/dashboard/content/collections/{slug}/records/bulk

Bulk Create Records

Create 1–100 draft records ATOMICALLY (one transaction). Every record is validated before any insert — ANY failure 422s the whole batch and inserts nothing. Enforces the max_records cap for the full batch size.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/bulk' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "records": [
    {
      "slug": "string",
      "data": {},
      "seo_title": "string",
      "seo_description": "string",
      "og_image_url": "string",
      "sort": 0,
      "publish_at": "string"
    }
  ]
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/bulk",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/bulk", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/bulk", 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
201Successful Response
422Validation Error
GET/api/v1/dashboard/content/collections/{slug}/records/{record_slug}

Get Record

Get one record by its slug (drafts included — author surface).

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_slugpathstringtrue
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_slug}", {
  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/dashboard/content/collections/{slug}/records/{record_slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
PATCH/api/v1/dashboard/content/collections/{slug}/records/{record_id}

Update Record

Update a record. Editing DRAFT fields (data / slug / seo / sort / publish_at) is non-destructive — no gate. A status change (publish / archive / unpublish) IS gated: pass dry_run=true for a preview + confirm_token, then call again with the token to apply.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_idpathstringtrue
dry_runquerybooleanfalseFor a status change: preview + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseFor a status change: consume a prior preview token and apply.
Try it
Query

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "data": {},
  "seo_title": "string",
  "seo_description": "string",
  "og_image_url": "string",
  "sort": 0,
  "publish_at": "string",
  "status": "string"
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}", 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/dashboard/content/collections/{slug}/records/{record_id}

Delete Record

Delete one record — DESTRUCTIVE. Gated via dry_run/confirm_token.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_idpathstringtrue
dry_runquerybooleanfalsePreview the delete + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseConsume a prior preview token and perform the delete.
Try it
Query

Examples

cURL
curl -X DELETE 'https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.delete(
    "https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/content/collections/{slug}/records/{record_id}", {
  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/dashboard/content/collections/{slug}/records/{record_id}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
GET/api/v1/dashboard/projects/{project_id}/content/collections

List Collections

List every collection definition in the project.

Parameters

NameInTypeRequiredDescription
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections", {
  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/dashboard/projects/{project_id}/content/collections", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/dashboard/projects/{project_id}/content/collections

Create Collection

Create a collection definition (validates the field schema + route_base). Non-destructive create — no confirm gate. Enforces the max_collections cap.

Try it

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "label": "string",
  "schema_json": {},
  "route_base": "string",
  "is_public": false
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "label": "string", "schema_json": {}, "route_base": "string", "is_public": false}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections", 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
201Successful Response
422Validation Error
GET/api/v1/dashboard/projects/{project_id}/content/collections/{slug}

Get Collection

Get one collection definition by slug.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}", {
  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/dashboard/projects/{project_id}/content/collections/{slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
PATCH/api/v1/dashboard/projects/{project_id}/content/collections/{slug}

Update Collection

Update a collection definition (non-destructive — no confirm gate).

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "label": "string",
  "schema_json": {},
  "route_base": "string",
  "is_public": true
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"label": "string", "schema_json": {}, "route_base": "string", "is_public": true},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"label": "string", "schema_json": {}, "route_base": "string", "is_public": true})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"label": "string", "schema_json": {}, "route_base": "string", "is_public": true}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}", 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/dashboard/projects/{project_id}/content/collections/{slug}

Delete Collection

Delete a collection — DESTRUCTIVE (cascades to its records + edges). Gated: dry_run=true returns a preview + confirm_token; call again with the token to commit.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
dry_runquerybooleanfalsePreview the delete + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseConsume a prior preview token and perform the delete.
Try it
Query

Examples

cURL
curl -X DELETE 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.delete(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}", {
  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/dashboard/projects/{project_id}/content/collections/{slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
GET/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records

List Records

List a page of a collection's records — drafts AND published (the author surface). Raises 404 for an unknown collection.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
limitqueryintegerfalse
offsetqueryintegerfalse
sortqueryanyfalse
fieldsqueryanyfalseComma-separated field ids to keep in each record's data (e.g. 'name,install_cmd'). Omit for every field. A wide schema returns tens of thousands of characters per page — narrow the projection when you only need a few fields. Unknown ids are ignored.
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records", {
  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/dashboard/projects/{project_id}/content/collections/{slug}/records", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
POST/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records

Create Record

Create ONE draft record (validates data against the schema). Non- destructive create — no confirm gate. Enforces the max_records cap.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "data": {},
  "seo_title": "string",
  "seo_description": "string",
  "og_image_url": "string",
  "sort": 0,
  "publish_at": "string"
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records", 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
201Successful Response
422Validation Error
POST/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/bulk

Bulk Create Records

Create 1–100 draft records ATOMICALLY (one transaction). Every record is validated before any insert — ANY failure 422s the whole batch and inserts nothing. Enforces the max_records cap for the full batch size.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
Try it
Query

Examples

cURL
curl -X POST 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/bulk' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "records": [
    {
      "slug": "string",
      "data": {},
      "seo_title": "string",
      "seo_description": "string",
      "og_image_url": "string",
      "sort": 0,
      "publish_at": "string"
    }
  ]
}'
Python
import httpx

resp = httpx.post(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/bulk",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/bulk", {
  method: "POST",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"records": [{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string"}]}`)
	req, _ := http.NewRequest("POST", "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/bulk", 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
201Successful Response
422Validation Error
GET/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_slug}

Get Record

Get one record by its slug (drafts included — author surface).

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_slugpathstringtrue
formatqueryanyfalseResponse format. json (default) and llm return JSON; yaml returns text/yaml; md returns text/markdown. Any other value is a 422.
Try it
Query

Examples

cURL
curl -X GET 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_slug}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.get(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_slug}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_slug}", {
  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/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_slug}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error
PATCH/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}

Update Record

Update a record. Editing DRAFT fields (data / slug / seo / sort / publish_at) is non-destructive — no gate. A status change (publish / archive / unpublish) IS gated: pass dry_run=true for a preview + confirm_token, then call again with the token to apply.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_idpathstringtrue
dry_runquerybooleanfalseFor a status change: preview + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseFor a status change: consume a prior preview token and apply.
Try it
Query

Examples

cURL
curl -X PATCH 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}' \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
  "slug": "string",
  "data": {},
  "seo_title": "string",
  "seo_description": "string",
  "og_image_url": "string",
  "sort": 0,
  "publish_at": "string",
  "status": "string"
}'
Python
import httpx

resp = httpx.patch(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}",
    headers={"Authorization": "Bearer <token>", "Content-Type": "application/json"},
    json={"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}", {
  method: "PATCH",
  headers: { "Authorization": "Bearer <token>", "Content-Type": "application/json" },
  body: JSON.stringify({"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"})
});
const data = await resp.json();
console.log(data);
Go
package main

import (
	"net/http"
	"strings"
)

func main() {
	body := strings.NewReader(`{"slug": "string", "data": {}, "seo_title": "string", "seo_description": "string", "og_image_url": "string", "sort": 0, "publish_at": "string", "status": "string"}`)
	req, _ := http.NewRequest("PATCH", "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}", 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/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}

Delete Record

Delete one record — DESTRUCTIVE. Gated via dry_run/confirm_token.

Parameters

NameInTypeRequiredDescription
slugpathstringtrue
record_idpathstringtrue
dry_runquerybooleanfalsePreview the delete + receive a confirm_token without mutating.
confirm_tokenqueryanyfalseConsume a prior preview token and perform the delete.
Try it
Query

Examples

cURL
curl -X DELETE 'https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}' \
  -H 'Authorization: Bearer <token>'
Python
import httpx

resp = httpx.delete(
    "https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}",
    headers={"Authorization": "Bearer <token>"},
)
resp.raise_for_status()
print(resp.json())
JavaScript
const resp = await fetch("https://spideriq.ai/api/v1/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}", {
  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/dashboard/projects/{project_id}/content/collections/{slug}/records/{record_id}", nil)
	req.Header.Set("Authorization", "Bearer <token>")
	resp, _ := http.DefaultClient.Do(req)
	defer resp.Body.Close()
}

Responses

StatusDescription
200Successful Response
422Validation Error