Build Ishtiga into the websites you ship.

Website builders and agencies can switch on a cited knowledge assistant for every customer automatically: create a workspace, verify the site, import its pages, and hand back an embed snippet — or answer questions headlessly from your own UI.

Keys are created by organisation owners and admins under Developers & API in the app. Usage counts toward your plan.

Authentication

Send your key as a bearer token on every request. Keys belong to one organisation and can only reach that organisation's workspaces. Keep them on your server — never in browser code.

Authorization: Bearer ishtiga_sk_…
Base URL: https://ishtiga.com/api/public/v1

Quick start

const res = await fetch("https://ishtiga.com/api/public/v1/ask", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.ISHTIGA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ workspaceId, question: "What are your opening hours?" }),
});
const { answer, sources } = await res.json();

Endpoints

GET/workspaces

List the workspaces in the organisation that owns the key, with each widget embed snippet.

curl -X GET https://ishtiga.com/api/public/v1/workspaces \
  -H "Authorization: Bearer $ISHTIGA_API_KEY"

Response

{ "workspaces": [{ "id": "…", "name": "Acme", "publicId": "…", "embedSnippet": "<script …>" }] }

POST/workspaces

Create a workspace for one of your customers. Counts toward your plan's workspace limit.

curl -X POST https://ishtiga.com/api/public/v1/workspaces \
  -H "Authorization: Bearer $ISHTIGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme Plumbing" }'

Response

{ "id": "…", "name": "Acme Plumbing", "publicId": "…", "embedSnippet": "<script …>" }

POST/websites

Add a website to a workspace. Returns a verification code to place as a DNS TXT record, a /.well-known file or a meta tag.

curl -X POST https://ishtiga.com/api/public/v1/websites \
  -H "Authorization: Bearer $ISHTIGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "workspaceId": "…", "url": "acmeplumbing.com" }'

Response

{ "siteId": "…", "origin": "https://acmeplumbing.com", "verificationToken": "ishtiga-verify=…", "verifyWith": { … } }

POST/websites/verify

Check ownership. Once verified, the site may embed the widget.

curl -X POST https://ishtiga.com/api/public/v1/websites/verify \
  -H "Authorization: Bearer $ISHTIGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "workspaceId": "…", "siteId": "…" }'

Response

{ "verified": true, "method": "dns" }

POST/crawl

Import the verified site (robots-respecting, up to 40 pages) into the workspace's knowledge. Re-run to refresh.

curl -X POST https://ishtiga.com/api/public/v1/crawl \
  -H "Authorization: Bearer $ISHTIGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "workspaceId": "…", "siteId": "…" }'

Response

{ "pages": 12, "skipped": 3 }

POST/ask

Ask a question headlessly. Returns a cited answer and the visitor intent score. Fresh answers use your monthly allowance; cached ones are free.

curl -X POST https://ishtiga.com/api/public/v1/ask \
  -H "Authorization: Bearer $ISHTIGA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "workspaceId": "…", "question": "Do you offer weekend call-outs?" }'

Response

{ "answer": "Yes — Saturday 8am–2pm [1].", "sources": [ … ], "intent": { "intent": "appointment", "score": 70 } }

Errors

Errors return JSON: { "error": "message" }

400
Invalid body or parameters
401
Missing, invalid or revoked key
402
Plan limit reached (workspaces or AI answers)
403
Website not verified
404
Unknown endpoint, workspace or website
409
Duplicate website or import already running
429
Rate limit exceeded