SDKs & Libraries

All first-party SDKs are generated from the same OpenAPI 3.1 spec we publish the API from, so they track the reference exactly — every code sample in the docs type-checks against the current release. Community libraries are listed with their maintainers; we don't control their release cadence.

JavaScript / TypeScript

@thirdpartyapi/sdk

OFFICIAL

Node 18+. Works in Deno and Bun too, though our CI only tests Node.

Typed responses, retries with jitter baked in, and a tiny helper for cursor pagination so you don't hand-roll it at 2am.

# npm
npm install @thirdpartyapi/sdk
# or: pnpm add @thirdpartyapi/sdk
import ThirdPartyApi from "@thirdpartyapi/sdk";

const tpa = new ThirdPartyApi({ apiKey: process.env.THIRDPARTY_KEY });

const result = await tpa.verify.email({ email: "ada@example.com" });

if (result.state === "deliverable") {
  console.log(`safe to send (${result.qualityScore})`);
}

Python

thirdpartyapi

OFFICIAL

Python 3.9+. No runtime dependencies beyond httpx.

Both a sync client and an async one. Dataclasses for every response, so your IDE knows what quality_score is before runtime does.

# pip
pip install thirdpartyapi
# or: pip install "thirdpartyapi[async]"
from thirdpartyapi import Client

client = Client()  # reads THIRDPARTY_KEY from the environment

geo = client.geo.ip("98.207.254.17")
print(geo.city, geo.org, geo.is_vpn)

Go

thirdpartyapi-go

OFFICIAL

Go 1.21+. Context-aware: every method takes a context.Context first, as is right and proper.

Version 2.0 shipped with the v2.2.0 webhook-signature scheme. The 1.x line still compiles but is frozen.

go get github.com/third-party-api/thirdpartyapi-go/v2
import (
    tpapi "github.com/third-party-api/thirdpartyapi-go/v2"
)

client := tpapi.NewClient(tpapi.WithAPIKey(os.Getenv("THIRDPARTY_KEY")))

person, err := client.Enrich.ContactByEmail(ctx, "ada@lovelace.dev")
if err != nil {
    return fmt.Errorf("enrich failed: %w", err)
}
fmt.Println(person.FullName, person.Title)

PHP

third-party-api/php

OFFICIAL

PHP 8.1+. Uses Guzzle under the hood; a PSR-18 adapter is pluggable if you're on something else.

# Composer
composer require third-party-api/php
$tpa = \ThirdPartyApi\Client::fromEnv();

$result = $tpa->verifyEmail('ada@example.com');

if ($result->state === 'risky') {
    error_log("careful with this one");
}

Community libraries

third_party_api (Ruby)

COMMUNITY

Maintained by Marta K. and two co-maintainers who stepped up in late 2025. Gem name is third_party_api.

The Ruby SDK was first-party until 2023; our Ruby usage inside the company was one script and a grudge, so we handed it to people who actually write Ruby. It's in better shape now than it ever was under our roof.

# Gemfile
gem "third_party_api"
require "third_party_api"

client = ThirdPartyApi::Client.new(api_key: ENV["THIRDPARTY_KEY"])
result = client.verify.email(email: "ada@example.com")

puts "#{result.state} — score #{result.quality_score}"

More community ports

COMMUNITY
LanguagePackageMaintainerNotes
Rustthirdpartyapi-rs@henningTokio-based, well-documented
Elixirthird_party_api (hex)@cline-labsOnly covers verification so far
Javaio.thirdpartyapi:sdk@slowikmMaven Central, targets 21+

Written a library we're missing? Open a PR against the forum post that mirrors this page — we link rather than vendor, so your release process stays yours.

Versioning policy

First-party SDKs follow the API's major version: SDK 2.x talks to API v2 and refuses to start against v1 (moot since October 2024, but still). We won't ship a breaking SDK change without a minor-version runway and a note in the changelog. Community libraries version however their maintainers see fit — pin accordingly.