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;
}