Download all
Docs · Reference · SDKs

SDKs

Thin wrappers around the REST API. Each one ships a single class with a single method so anything more is up to you. URLs in the snippets below point at the production Tellr stack.

Browser

One script tag with no configuration. Auto initializes on every page load then writes a 30 minute session cookie.

html
<script
  src="https://cdn.tellr.tech/v1/c.js"
  data-key="pk_••••"
  data-collector="https://collect.tellr.tech"
></script>

Node.js

ts
import Tellr from '@tellr/node';

const tellr = new Tellr({
  apiKey: process.env.TELLR_KEY!,
  baseUrl: 'https://api.tellr.tech', // omit on production
});

const r = await tellr.check({
  session_token: req.cookies._tellr_session,
  end_user: { email },
});

if (r.verdict === 'block') return res.status(403).end();

Python

py
import tellr
client = tellr.Client(
    api_key=os.environ['TELLR_KEY'],
    base_url='https://api.tellr.tech',  # omit on production
)

r = client.check(
    session_token=cookies['_tellr_session'],
    end_user={'email': email},
)
if r['verdict'] == 'block':
    return Response(status=403)

Ruby

rb
require 'tellr'
tellr = Tellr::Client.new(
  api_key: ENV['TELLR_KEY'],
  base_url: 'https://api.tellr.tech',
)

r = tellr.check(
  session_token: cookies['_tellr_session'],
  end_user: { email: params[:email] },
)
render plain: "We've seen you before.", status: 403 if r.verdict == 'block'

Go

go
tellr := tellr.New(tellr.Config{
    APIKey:  os.Getenv("TELLR_KEY"),
    BaseURL: "https://api.tellr.tech",
})

r, err := tellr.Check(ctx, tellr.CheckRequest{
    SessionToken: cookie("_tellr_session"),
    EndUser:      tellr.EndUser{Email: email},
})
if err != nil { /* … */ }
if r.Verdict == "block" {
    http.Error(w, "We've seen you before.", 403); return
}

PHP

php
<?php
$tellr = new \Tellr\Client(
  api_key: getenv('TELLR_KEY'),
  base_url: 'https://api.tellr.tech',
);
$r = $tellr->check([
  'session_token' => $_COOKIE['_tellr_session'] ?? null,
  'end_user' => ['email' => $_POST['email']],
]);
if ($r['verdict'] === 'block') {
  http_response_code(403);
  exit;
}