Try our quick and easy data matching wizard: Create match reports for CSV/TSV datasets on company names, individual names, and addresses in seconds: Start Now!

Batch Data Matching, Paid Per Use with x402

Match an entire CSV or TSV file in a single paid call. Pay in USDC on Base, one cent per record. No API key, no signup.

Built for AI agents and autonomous data pipelines that discover, pay, and process on their own.

x402 Protocol USDC on Base Agent-Ready

Pay Per Record, for the Entire File

The Batch Data Matching API processes a entire file in one call and groups records by an AI-powered similarity key (SimKey). Pricing is one cent per record in the file, whether or not a given record finds a match. With x402, an agent can call it without an account: it pays per record in USDC and gets the matched output back, all in one flow.

$0.01
Per Record
0
API Keys Required
10,000
Max Records Per Call
1
Call Per Entire File

Why x402 for Agents

No Credentials to Manage

An autonomous agent can match a dataset without a pre-provisioned API key or signup. It funds a wallet once, then discovers and pays for matching on demand, in real time.

Predictable, Per-Record Cost

Pricing is one cent per record, settled in USDC. An agent can compute its exact cost before paying: records times one cent, capped at 10,000 records per call.

Discoverable, Not Documented

The endpoint publishes itself through the x402 Bazaar, a well-known manifest, and an OpenAPI spec. Agents can find it and learn how to call it without reading a page like this one.

How the Payment Flow Works

This endpoint is priced per record, so it uses a quote-then-pay flow rather than a fixed price. An agent can learn the exact cost before committing any funds.

1

Discover the Ceiling

Call /match with no parameters to get a 402 advertising the maximum possible price (the per-record rate times the 10,000 record cap).

2

Get an Exact Quote

Call again with your file URL and column mapping, but no payment. The server counts the records and returns a 402 with the exact price for your file.

3

Pay and Process

Retry with the signed USDC payment for the quoted amount. The server verifies on-chain, runs the match, and streams the results back.

4

Receive Matches

The response streams CSV or TSV: each record with its SimKey appended, grouped into clusters of records that refer to the same entity.

File + Mapping No payment
402 Exact Quote records x $0.01
Sign & Pay USDC on Base
Matched Output CSV/TSV by SimKey

Why a quote step? Because the cost depends on your file's record count, the bare call advertises a ceiling so an agent never commits to an unknown amount. The agent learns the exact price in step 2 and only signs a payment for that quoted value in step 3. Most x402 client libraries handle the 402-then-retry handshake automatically.

The quote is simple, fixed math: the exact price is the record count times one cent. A 1,000-record file quotes 1,000 × $0.01 = $10.00 USDC; a 250-record file quotes 250 × $0.01 = $2.50 USDC. Because the agent receives this exact amount in the 402 before paying, it can enforce its own spending limit, reject the quote if it exceeds a threshold, and never pay an amount it did not approve.

A note on terminology: this is batch data processing (matching a whole file) paid through x402's standard exact payment scheme. That is different from x402's own batch-settlement mechanism, which bundles many small micropayments together. Here, one paid call processes one file. If you are an agent reading the x402 spec, treat this as a single exact payment, not a batch-settlement flow.

Endpoint and Pricing

Endpointhttps://match.interzoid.com/match
MethodGET with query parameters
Price$0.01 USDC per record (records times one cent)
Maximum10,000 records per call
NetworkBase mainnet (eip155:8453)
AssetUSDC (0x8335...2913)
OutputStreamed CSV or TSV, records grouped by SimKey

Required parameters: connection (public URL of your CSV/TSV file), filetype (csv or tsv), function (the match type, for example company-name-only), and the relevant column index (for example company_column=1). See the API reference for the full parameter list.

Code Examples

Each example funds a wallet from a private key, then lets the x402 client handle the 402, quote, signing, and retry. Set your funded Base wallet key in the environment before running.

// npm install x402-fetch viem
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`);

// Wrap fetch: the 402 quote, signing, and retry happen automatically.
const fetchWithPay = wrapFetchWithPayment(fetch, account);

const params = new URLSearchParams({
  connection: "https://dl.interzoid.com/csv/companies.csv",
  filetype: "csv",
  function: "company-name-only",
  company_column: "1",
  has_header: "true",
});

const res = await fetchWithPay(
  `https://match.interzoid.com/match?${params}`
);
const csv = await res.text(); // matched records, grouped by SimKey
console.log(csv);
// npm install x402-fetch viem dotenv
require("dotenv").config();
const { wrapFetchWithPayment } = require("x402-fetch");
const { privateKeyToAccount } = require("viem/accounts");

async function main() {
  const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);
  const fetchWithPay = wrapFetchWithPayment(fetch, account);

  const params = new URLSearchParams({
    connection: "https://dl.interzoid.com/csv/companies.csv",
    filetype: "csv",
    function: "company-name-only",
    company_column: "1",
    has_header: "true",
  });

  const res = await fetchWithPay(
    `https://match.interzoid.com/match?${params}`
  );
  console.log(await res.text());
}

main().catch(console.error);
# pip install x402 eth-account httpx
import os
from eth_account import Account
from x402.clients.httpx import x402_payment_hooks
import httpx

account = Account.from_key(os.environ["EVM_PRIVATE_KEY"])

params = {
    "connection": "https://dl.interzoid.com/csv/companies.csv",
    "filetype": "csv",
    "function": "company-name-only",
    "company_column": "1",
    "has_header": "true",
}

# The x402 hooks handle the 402 quote, signing, and retry.
with httpx.Client() as client:
    client.event_hooks = x402_payment_hooks(account)
    r = client.get("https://match.interzoid.com/match", params=params)
    print(r.text)  # matched records, grouped by SimKey
// go get github.com/x402-foundation/x402/go github.com/joho/godotenv
package main

import (
    "io"
    "net/http"
    "net/url"
    "os"

    "github.com/joho/godotenv"
    x402 "github.com/x402-foundation/x402/go"
    x402http "github.com/x402-foundation/x402/go/http"
    evm "github.com/x402-foundation/x402/go/mechanisms/evm/exact/client"
    evmsigners "github.com/x402-foundation/x402/go/signers/evm"
)

func main() {
    _ = godotenv.Load()
    signer, _ := evmsigners.NewClientSignerFromPrivateKey(os.Getenv("EVM_PRIVATE_KEY"))
    client := x402.Newx402Client().
        Register("eip155:*", evm.NewExactEvmScheme(signer, nil))
    httpc := x402http.WrapHTTPClientWithPayment(
        &http.Client{}, x402http.Newx402HTTPClient(client))

    q := url.Values{}
    q.Set("connection", "https://dl.interzoid.com/csv/companies.csv")
    q.Set("filetype", "csv")
    q.Set("function", "company-name-only")
    q.Set("company_column", "1")
    q.Set("has_header", "true")

    resp, _ := httpc.Get("https://match.interzoid.com/match?" + q.Encode())
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    os.Stdout.Write(body) // matched records, grouped by SimKey
}
# cURL shows the raw protocol. A bare call returns a 402 with the
# exact quote; paying requires signing a USDC authorization, which is
# why a client library is normally used. To see the quote:

curl -i "https://match.interzoid.com/match?connection=https://dl.interzoid.com/csv/companies.csv&filetype=csv&function=company-name-only&company_column=1&has_header=true"

# Response: HTTP/1.1 402 Payment Required
# The JSON body lists the exact amount, the USDC asset, the Base
# network, and the payTo address. An x402 client signs a payment for
# that amount and retries with a Payment-Signature header.

# Already have an Interzoid API key? Skip x402 entirely:
curl "https://match.interzoid.com/match?apikey=YOUR_KEY&connection=https://dl.interzoid.com/csv/companies.csv&filetype=csv&function=company-name-only&company_column=1&has_header=true" -o matches.csv

Before running: fund the wallet with USDC on Base mainnet (not a testnet). A 100-record file costs $1.00. Start with a small file to keep test runs to a few cents. The exact x402 client package names evolve, so check each SDK's current docs if an import has moved.

Discovery for Agents

An agent does not need this page to find or call the endpoint. It is self-describing through three machine-readable surfaces.

x402 Bazaar

The endpoint is indexed in the Coinbase x402 Bazaar, the discovery catalog agents query to find payable APIs. It surfaces the resource URL, price, input schema, and an output example, so an agent can find and call it with no prior integration.

Well-Known Manifest

A manifest at /.well-known/x402.json describes the endpoint, its parameters, and its per-record pricing, following the x402 discovery convention that crawlers and tooling read.

OpenAPI Spec

A standard OpenAPI 3 document at /openapi.json documents the operation, parameters, the 402 payment flow, and the text output, for agents and tools that prefer OpenAPI.

llms.txt

An llms.txt file gives language-model agents a concise, plain-text summary of the endpoint, its parameters, pricing, and the x402 flow, so a model can understand how to call it without parsing a full spec.

Use It as an MCP Tool

For agents built on the Model Context Protocol (MCP), batch matching can be exposed as a callable tool that pays for itself. The agent calls the tool like any other; the x402 payment happens underneath.

1

Discover via the Bazaar MCP Server

The x402 Bazaar exposes an MCP server with a search tool, so an agent can find this matching endpoint by capability, then call it, without any endpoint-specific setup.

2

Wrap Payment Automatically

An x402 MCP payment wrapper handles the 402 quote, USDC signing, and retry, so the agent never touches wallets or signatures directly. It just calls the tool.

3

Match and Get Results

The tool returns the matched records grouped by SimKey, the same output as a direct call, ready for the agent to act on.

// Define a batch-match tool an MCP agent can call. The x402 payment
// wrapper settles the per-record USDC charge transparently.
import { createPaymentWrapper } from "@x402/mcp";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY);
const pay = createPaymentWrapper({ account });

server.tool(
  "batch_match",
  "Match an entire CSV/TSV file by company, name, or address ($0.01/record)",
  {
    connection: z.string(),       // public URL of the file
    function: z.string(),         // e.g. "company-name-only"
    company_column: z.string(),
  },
  pay(async (args) => {
    const params = new URLSearchParams({ ...args, filetype: "csv", has_header: "true" });
    const res = await fetch(`https://match.interzoid.com/match?${params}`);
    return { content: [{ type: "text", text: await res.text() }] };
  })
);

Why MCP matters here: agents increasingly discover and use tools through MCP rather than hand-coded API calls. Exposing batch matching as an MCP tool, with payment handled by the wrapper, means an agent can clean or deduplicate a dataset as a natural step in a larger task, with no API key and no manual integration. The exact @x402/mcp package shape evolves, so check the current x402 MCP docs when wiring this up.

What You Can Match

The same paid endpoint supports six match functions. Choose one with the function parameter and point it at the matching column or columns.

Company Name

Match records by company or organization name, even with abbreviations, acronyms, and international spellings. Use function=company-name-only.

API Reference

Full Name

Match records by individual or full name, handling nicknames, ordering, and formatting differences. Use function=fullname-only.

API Reference

Street Address

Match records by street address, standardizing formats and abbreviations for reliable location matching. Use function=address-only.

API Reference

Company & Address

Match only when both the company name and the address are similar, for high-precision location deduplication. Use function=company-and-address.

API Reference

Company & Full Name

Match on both company name and full name together, for precise contact and account resolution. Use function=company-and-fullname.

API Reference

Address & Full Name

Match on both address and full name together, for household and individual-at-location resolution. Use function=address-and-fullname.

API Reference

Prefer not to write code? The Match Wizard runs this same matching engine over your files in the browser, with a guided, point-and-click workflow: upload a CSV or TSV, map your columns, and match within or across datasets in seconds, no code and no x402 wallet required. Open the Match Wizard.

Start Matching

Fund a Base wallet with USDC, point the endpoint at a file, and match in a single paid call. No signup required.

Full API Reference Code Examples

Prefer traditional API keys? The same endpoint also accepts an Interzoid API key via the apikey parameter, with standard subscription pricing. Register for a key.

Questions? Contact our team at support@interzoid.com