Docs · Reference · SDKs
SDKs
Thin wrappers around the REST API. Each one ships a single class with a single method — anything more is up to you. URLs in the snippets below point at your local Tellr stack.
Browser
One script tag, no configuration. Auto-initializes on every page load and writes a 30-minute session cookie.
html
<script src="http://localhost:8081/v1/c.js" data-key="pk_••••" data-collector="http://localhost:8081" ></script>
Node.js
ts
import Tellr from '@tellr/node';
const tellr = new Tellr({
apiKey: process.env.TELLR_KEY!,
baseUrl: 'http://localhost:8080', // 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='http://localhost:8080', # 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: 'http://localhost:8080',
)
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: "http://localhost:8080",
})
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: 'http://localhost:8080',
);
$r = $tellr->check([
'session_token' => $_COOKIE['_tellr_session'] ?? null,
'end_user' => ['email' => $_POST['email']],
]);
if ($r['verdict'] === 'block') {
http_response_code(403);
exit;
}