We are currently building something exciting and will be launching soon. Registration is temporarily closed. Launching soon — registration temporarily closed.

SDK Preview

Official client libraries for Python, JavaScript, PHP, and Go. All SDKs support the same API surface: analyze, analyzers, languages, and health - across all 12 production analyzers.

4 Languages 12 Production Analyzers 43 Languages platform-wide Bearer Token Auth

SDK status: not yet published

The Python, JavaScript, PHP, and Go packages described on this page are in development and are not available on PyPI, npm, Packagist, or a public Go module. The package names shown are planned namespaces - not reserved or installable - and will only become install instructions once published under verified publisher accounts. The code samples below preview the planned client APIs. Until then, integrate directly against POST https://sentiqra.tech/v1/analyze - see the quickstart and API reference for working HTTP examples. Receipt verification does not need an SDK: use POST /v1/verify, the standalone browser verifier, or the upcoming standalone verification package (a separate release from these SDKs).

Works today: REST

A complete request you can run now - no SDK required. The analyzers field is required: pass one or two analyzer slugs.

curl -X POST https://sentiqra.tech/v1/analyze \
  -H "Authorization: Bearer $SENTIQRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Old people should not be hired, it makes me angry",
    "language": "en",
    "analyzers": [
        "emotions",
        "discrimination"
    ]
}'

Common API Surface

All SDKs expose the same methods. The only difference is language syntax.

Method Description Auth Required
analyze()Analyze text with selected analyzers. Returns signals with scores and verification receipt.Yes
analyzers()List available analyzers and their metadata.Yes
languages()List supported languages for the active analyzer.Yes
health()Check API health and connectivity.No

Analyzers

trust-safety

Harmful language detection

cybersecurity

Cybersecurity threats

crisis-intelligence

Crisis event detection

finance

Market intelligence

disinformation

Disinformation analysis

discrimination

Discrimination analysis

emotions

Emotion analysis

customer-service

Customer service intelligence

dating-safety

Romance scam & unsafe contact

fraud-scam

Fraudulent scheme detection

insurance

Insurance intelligence

wellness

Wellness signal detection

PY

Python SDK Coming soon

planned: sentiqra (PyPI)

Installation (planned - package not yet published)

sentiqra on PyPI - not yet published. Use the REST endpoint directly (see quickstart).

Planned SDK usage (preview - use REST today)

from sentiqra import Sentiqra

client = Sentiqra(api_key="sq_live_your_api_key_here")

result = client.analyze(
    text="you are a worthless idiot",
    language="en",
    analyzers=["trust-safety"],
)

for signal in result.signals:
    print(f"{signal['code']}: {signal['score']}")
# insults_derogation: 0.86
# insult: 0.99
# belittling: 0.99

print(result.verification.configuration)  # sqcfg_ZZW77NM9

Async Client

import asyncio
from sentiqra import AsyncSentiqra

async def main():
    client = AsyncSentiqra(api_key="sq_live_your_api_key_here")
    result = await client.analyze(
        text="you are a worthless idiot",
        language="en",
        analyzers=["trust-safety"],
    )
    for signal in result.signals:
        print(f"{signal['code']}: {signal['score']}")

asyncio.run(main())

Running Different Analyzers

# Cybersecurity
result = client.analyze(
    text="click here for free coins",
    language="en",
    analyzers=["cybersecurity"],
)

# Disinformation
result = client.analyze(
    text="the election was rigged",
    language="en",
    analyzers=["disinformation"],
)

# Multiple analyzers in one request (max 2)
result = client.analyze(
    text="this product is terrible and I want to cancel",
    language="en",
    analyzers=["emotions", "customer-service"],
)

Other Methods

# List available analyzers
analyzers = client.analyzers()
# [{'id': 'trust-safety', 'name': 'Trust & Safety', 'languages': ['en', 'de', ...]}, ...]

# List supported languages
langs = client.languages()
# [{'code': 'en', 'name': 'English'}, {'code': 'de', 'name': 'German'}, ...]

# Health check (no auth required)
health = client.health()
# {'status': 'ok', 'version': '1.0.0', ...}

Error Handling

from sentiqra import Sentiqra, SentiqraError

client = Sentiqra(api_key="sq_live_your_api_key_here")

try:
    result = client.analyze(text="some text", language="en")
except SentiqraError as e:
    print(f"API error: {e.status_code} - {e.message}")
    # 401 - Invalid API key
    # 403 - Rate limited or quota exceeded
    # 400 - Bad request (invalid language, text too long)
    # 503 - Service unavailable
JS

JavaScript SDK Coming soon

planned: @sentiqra/sdk (npm)

Installation (planned - package not yet published)

@sentiqra/sdk on npm - not yet published. Use the REST endpoint directly (see quickstart).

Planned SDK usage (preview - use REST today)

const { Sentiqra } = require('@sentiqra/sdk');
// or: import { Sentiqra } from '@sentiqra/sdk';

const client = new Sentiqra({ apiKey: 'sq_live_your_api_key_here' });

const result = await client.analyze({
  text: 'you are a worthless idiot',
  language: 'en',
  analyzers: ['trust-safety'],
});

for (const signal of result.signals) {
  console.log(`${signal.code}: ${signal.score}`);
}
// insults_derogation: 0.86
// insult: 0.99
// belittling: 0.99

console.log(result.verification.configuration); // sqcfg_ZZW77NM9

Running Different Analyzers

// Cybersecurity
const r1 = await client.analyze({
  text: 'click here for free coins',
  language: 'en',
  analyzers: ['cybersecurity'],
});

// Disinformation
const r2 = await client.analyze({
  text: 'the election was rigged',
  language: 'en',
  analyzers: ['disinformation'],
});

// Multiple analyzers in one request (max 2)
const r3 = await client.analyze({
  text: 'this product is terrible and I want to cancel',
  language: 'en',
  analyzers: ['emotions', 'customer-service'],
});

Other Methods

// List available analyzers
const analyzers = await client.analyzers();
// [{ id: 'trust-safety', name: 'Trust & Safety', languages: ['en', 'de', ...] }, ...]

// List supported languages
const langs = await client.languages();
// [{ code: 'en', name: 'English' }, { code: 'de', name: 'German' }, ...]

// Health check (no auth required)
const health = await client.health();
// { status: 'ok', version: '1.0.0', ... }

Error Handling

const { Sentiqra, SentiqraError } = require('@sentiqra/sdk');

const client = new Sentiqra({ apiKey: 'sq_live_your_api_key_here' });

try {
  const result = await client.analyze({ text: 'some text', language: 'en' });
} catch (e) {
  if (e instanceof SentiqraError) {
    console.error(`API error: ${e.statusCode} - ${e.message}`);
  }
}
PHP

PHP SDK Coming soon

planned: sentiqra/sentiqra-php (Packagist)

Installation (planned - package not yet published)

sentiqra/sentiqra-php on Packagist - not yet published. Use the REST endpoint directly (see quickstart).

Planned SDK usage (preview - use REST today)

<?php
require 'vendor/autoload.php';

$client = new Sentiqra('sq_live_your_api_key_here');

$result = $client->analyze('you are a worthless idiot', 'en', ['trust-safety']);

foreach ($result['signals'] as $signal) {
    echo $signal['code'] . ': ' . $signal['score'] . "\n";
}
// insults_derogation: 0.86
// insult: 0.99
// belittling: 0.99

echo $result['verification']['configuration']; // sqcfg_ZZW77NM9

Running Different Analyzers

// Cybersecurity
$r1 = $client->analyze('click here for free coins', 'en', ['cybersecurity']);

// Disinformation
$r2 = $client->analyze('the election was rigged', 'en', ['disinformation']);

// Multiple analyzers in one request (max 2)
$r3 = $client->analyze('this product is terrible', 'en', ['emotions', 'customer-service']);

Other Methods

// List available analyzers
$analyzers = $client->analyzers();
// [['id' => 'trust-safety', 'name' => 'Trust & Safety', 'languages' => ['en', 'de', ...]], ...]

// List supported languages
$langs = $client->languages();
// [['code' => 'en', 'name' => 'English'], ['code' => 'de', 'name' => 'German'], ...]

// Health check (no auth required)
$health = $client->health();
// ['status' => 'ok', 'version' => '1.0.0', ...]

Error Handling

try {
    $result = $client->analyze('some text', 'en');
} catch (SentiqraError $e) {
    echo "API error: {$e->statusCode} - {$e->getMessage()}";
}
GO

Go SDK Coming soon

planned: github.com/sentiqra/sentiqra-go

Installation (planned - package not yet published)

github.com/sentiqra/sentiqra-go on Go module - not yet published. Use the REST endpoint directly (see quickstart).

Planned SDK usage (preview - use REST today)

package main

import (
    "fmt"
    "github.com/sentiqra/sentiqra-go"
)

func main() {
    client := sentiqra.New("sq_live_your_api_key_here")

    result, err := client.Analyze(
        "you are a worthless idiot", "en",
        sentiqra.WithAnalyzers("trust-safety"),
    )
    if err != nil {
        panic(err)
    }

    for _, signal := range result.Signals {
        fmt.Printf("%s: %.2f\n", signal.Code, signal.Score)
    }
    // insults_derogation: 0.86
    // insult: 0.99
    // belittling: 0.99

    fmt.Println(result.Verification.Configuration) // sqcfg_ZZW77NM9
}

Running Different Analyzers

// Cybersecurity
r1, _ := client.Analyze("click here for free coins", "en",
    sentiqra.WithAnalyzers("cybersecurity"))

// Disinformation
r2, _ := client.Analyze("the election was rigged", "en",
    sentiqra.WithAnalyzers("disinformation"))

// Multiple analyzers in one request (max 2)
r3, _ := client.Analyze("this product is terrible", "en",
    sentiqra.WithAnalyzers("emotions", "customer-service"))

Other Methods

// List available analyzers
analyzers, _ := client.Analyzers()
// []Analyzer{ID: "trust-safety", Name: "Trust & Safety", Languages: ["en", "de", ...]}, ...}

// List supported languages
langs, _ := client.Languages()
// []Language{Code: "en", Name: "English"}, ...}

// Health check (no auth required)
health, _ := client.Health()
// &HealthResponse{Status: "ok", Version: "1.0.0"}

Error Handling

result, err := client.Analyze("some text", "en")
if err != nil {
    if sqErr, ok := err.(*sentiqra.Error); ok {
        fmt.Printf("API error: %d - %s\n", sqErr.StatusCode, sqErr.Message)
    }
    return
}

Analysis Response Format

All SDKs parse this JSON response into typed objects:

{
    "language": "en",
    "language_source": "declared",
    "signals": [
        {
            "analyzer": "trust-safety",
            "code": "insults_derogation",
            "label": "Insults & Derogation",
            "score": 0.86,
            "level": "category"
        },
        {
            "analyzer": "trust-safety",
            "code": "insult",
            "label": "Insult",
            "score": 0.99,
            "level": "label",
            "parent": "insults_derogation"
        },
        {
            "analyzer": "trust-safety",
            "code": "belittling",
            "label": "Belittling",
            "score": 0.99,
            "level": "label",
            "parent": "insults_derogation"
        }
    ],
    "meta": {
        "analyzers": [
            {
                "name": "trust-safety",
                "status": "completed",
                "applicability": "analyzable",
                "assessment": "signals_detected",
                "signal_count": 3,
                "billed": true
            }
        ]
    },
    "usage": {
        "analyzer_runs": 1,
        "billed": true
    },
    "verification": {
        "version": 3,
        "configuration": "sqcfg_ZZW77NM9",
        "fingerprint": "fp2_8a72c4...19f",
        "input_commitment": "ic3_31bd5e...a42",
        "signature": "sig_ed25519_4c1f...e2a",
        "key_id": "edk_af4f218e",
        "binding_key_id": "bk_31bd5e42f7a019c8"
    }
}

SDK-Parsed Fields

  • signals - array of detected signals
  • signals[].analyzer - analyzer that produced the signal
  • signals[].code - stable machine identifier
  • signals[].label - human-readable label
  • signals[].score - signal-match strength (0.0–1.0)
  • signals[].confidence - band name, present only in the reduced.v1 output profile
  • signals[].level - "category" or "label"
  • signals[].parent - parent category code (label-level only)
  • verification - configuration, fingerprint, input commitment, Ed25519 signature, and key ID
  • usage - billing info (analyzer_runs count)

Score Interpretation

A score expresses signal-match strength under a particular analyzer configuration. It is not a probability that the signal or a downstream action is correct. Validate action thresholds on representative labeled data. There is no universal threshold that means "auto-action" - the right cutoff depends on your cost of a false positive versus a false negative in your use case. Scores are not comparable across labels or analyzers unless validated on your own labeled traffic.