Docs / SDKs

Three languages. One call shape.

TypeScript, Go, and Python. Same primitives, same argument shapes, same receipt format. Pick the one that fits your agent runtime and the SDK does the rest.

TypeScript

# install
npm i @truecom/sdk
import { TrueCom, verify } from "@truecom/sdk";

const truecom = new TrueCom({
  apiKey: process.env.TRUECOM_API_KEY
});

const providers = await truecom.find({
  intent: "fetch-market-data",
  scopes: ["read:market.quotes"]
});

const session = await truecom.hire({
  provider_id: providers[0].provider_id,
  scopes: ["read:market.quotes"]
});

const tx = await truecom.pay({
  session_id: session.session_id,
  amount: providers[0].quote,
  rail: "x402"
});

const final = await truecom.settle({ tx_id: tx.tx_id });

const receipt = await truecom.receipts.get(tx.tx_id);
if (!verify(receipt).ok) throw new Error("receipt tampered");

// dispute is available on the same surface
// const d = await truecom.dispute.open({ tx_id, reason: "service-not-rendered" });

Go

# install
go get github.com/truecom-labs/sdk-go
import (
  truecom "github.com/truecom-labs/sdk-go"
)

client := truecom.New(truecom.Config{
  APIKey: os.Getenv("TRUECOM_API_KEY"),
})

providers, _ := client.Find(ctx, truecom.FindRequest{
  Intent: "fetch-market-data",
  Scopes: []string{"read:market.quotes"},
})

session, _ := client.Hire(ctx, truecom.HireRequest{
  ProviderID: providers[0].ProviderID,
  Scopes:     []string{"read:market.quotes"},
})

tx, _ := client.Pay(ctx, truecom.PayRequest{
  SessionID: session.SessionID,
  Amount:    providers[0].Quote,
  Rail:      "x402",
})

_, _ = client.Settle(ctx, truecom.SettleRequest{ TxID: tx.TxID })

receipt, _ := client.Receipts.Get(ctx, tx.TxID)
if ok, _ := truecom.Verify(receipt); !ok {
  log.Fatal("receipt tampered")
}

Python

# install
pip install truecom-sdk
from truecom import TrueCom, verify

tc = TrueCom(api_key=os.environ["TRUECOM_API_KEY"])

providers = tc.find(
    intent="fetch-market-data",
    scopes=["read:market.quotes"],
)

session = tc.hire(
    provider_id=providers[0].provider_id,
    scopes=["read:market.quotes"],
)

tx = tc.pay(
    session_id=session.session_id,
    amount=providers[0].quote,
    rail="x402",
)

tc.settle(tx_id=tx.tx_id)

receipt = tc.receipts.get(tx.tx_id)
result = verify(receipt)
assert result.ok, "receipt tampered"

# dispute is exposed on tc.dispute: open, advance, close

Verify utility.

Every SDK ships with a verify() that is a pure function. No network call, no state. You can call it in a browser, in a worker, in an enclave. See receipts for the wire format the utility operates on.