← The evidence ledger
Evidence row 124884
Observed , by baseline/1.
- Kind
- listing
- About
- source_record x402_bazaar:https://x402-agent-tools.nerolabs.workers.dev/data/join
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- 0b6ba1c5849d74cf5b7d83bec9ce6aa42e352d35f88d6fa441153efed6f3d665
- Leaf
- 0x5be8a6e68b19af6bfcfd714bbbd21a08216cb816dd5b042f60bd6e163a82ca91
What was observed
{
"endpoints": [
[
"x402",
"https://x402-agent-tools.nerolabs.workers.dev/data/join"
]
],
"name": "Nero Labs Agent Tools",
"owner_address": "0xa969a3127dcc74b2989a4b4e45ae61b81093164a",
"raw": {
"accepts": [
{
"amount": "4000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 120,
"network": "eip155:8453",
"payTo": "0xA969a3127DcC74B2989a4b4e45Ae61B81093164A",
"scheme": "exact"
}
],
"description": "Joins two lists of JSON rows on one or more key fields, like a VLOOKUP or SQL join: inner, left, right, full or anti. Keys match exactly, or normalized (case, spacing and number-as-text differences ignored). Returns joined rows plus match counts and unmatched rows. Up to 500 rows a side. $0.002 per left row sent (right rows free), $0.002 minimum. Same engine as nerolabs/dataset-join-merge.",
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"joinType": "left",
"keyMatching": "normalized",
"leftKeyFields": [
"domain"
],
"leftRows": [
{
"company": "Acme Ltd",
"domain": "acme.com"
},
{
"company": "Bolt Co",
"domain": "bolt.io"
}
],
"rightKeyFields": [
"website"
],
"rightRows": [
{
"employees": 40,
"website": " ACME.com"
}
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"_example_note": "Real output, trimmed: long lists cut to their first items and long text shortened.",
"rows": [
{
"_joinStatus": "matched",
"_matchCount": 1,
"company": "Acme Ltd",
"domain": "acme.com",
"employees": 40
},
{
"_joinStatus": "left_only",
"_matchCount": 0,
"company": "Bolt Co",
"domain": "bolt.io"
}
],
"summary": {
"counts": {
"leftRowsMatched": 1,
"leftRowsUnmatched": 1,
"matchedRows": 1,
"passthroughRows": 1,
"rightRowsMatched": 1,
"rightRowsUnmatched": 0
},
"joinType": "left",
"keyMatching": "normalized",
"leftKeyFields": [
"domain"
],
"leftMatchRate": 0.5,
"leftRecordCount": 2,
"multipleMatches": "all",
"outputRowCount": 2,
"rightKeyFields": [
"website"
],
"rightMatchRate": 1,
"rightRecordCount": 1,
"warnings": []
}
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"includeJoinInfo": {
"description": "On by default: every row gets _joinStatus (\"matched\", \"left_only\", \"right_only\") and _matchCount. Set false for rows with only your own fields.",
"type": "boolean"
},
"joinType": {
"description": "Which rows to keep. left (default): every left row, enriched where a match exists. inner: matched rows only. right: every right row. full: everything from both sides. leftAnti: left rows with no match on the right. rightAnti: right rows with no match on the left. union: stack both lists, no key needed.",
"enum": [
"left",
"inner",
"right",
"full",
"leftAnti",
"rightAnti",
"union"
],
"type": "string"
},
"keyMatching": {
"description": "normalized (default): case-insensitive, trimmed, repeated spaces collapsed, 123 matches \"123\". exact: values must be identical.",
"enum": [
"normalized",
"exact"
],
"type": "string"
},
"leftKeyFields": {
"description": "The field name(s) on the left rows to match on, for example [\"email\"], or [\"firstName\",\"lastName\"] for a composite key. Required for every joinType except union.",
"items": {
"type": "string"
},
"type": "array"
},
"leftRows": {
"description": "The LEFT table: the main rows you want to keep or enrich. Each row is a JSON object; keys may differ between rows.",
"items": {
"type": "object"
},
"type": "array"
},
"multipleMatches": {
"description": "When one key matches several right rows. all (default): one output row per matching pair, like SQL. first: only the first matching right row, like VLOOKUP, so each left row appears once.",
"enum": [
"all",
"first"
],
"type": "string"
},
"onFieldConflict": {
"description": "When a right field has the same name as a left field. prefixRight (default): keep both, the right one renamed with rightFieldPrefix. keepLeft: ignore the right value. keepRight: overwrite the left value.",
"enum": [
"prefixRight",
"keepLeft",
"keepRight"
],
"type": "string"
},
"rightFieldPrefix": {
"description": "Prefix for conflicting right fields when onFieldConflict is prefixRight. Default \"right_\", so price becomes right_price.",
"type": "string"
},
"rightFields": {
"description": "Only copy these fields from the matching right row, like choosing VLOOKUP return columns. Leave out to copy every right field.",
"items": {
"type": "string"
},
"type": "array"
},
"rightKeyFields": {
"description": "The matching field name(s) on the right rows, in the same order as leftKeyFields, for example [\"contact_email\"]. Leave out when the right rows use the same names as the left.",
"items": {
"type": "string"
},
"type": "array"
},
"rightRows": {
"description": "The RIGHT table: the lookup rows to pull matching fields from. Each row is a JSON object.",
"items": {
"type": "object"
},
"type": "array"
}
},
"required": [
"leftRows",
"rightRows"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"_example_note": {
"type": "string"
},
"rows": {
"items": {
"properties": {
"_joinStatus": {
"type": "string"
},
"_matchCount": {
"type": "number"
},
"company": {
"type": "string"
},
"domain": {
"type": "string"
},
"employees": {
"type": "number"
}
},
"type": "object"
},
"type": "array"
},
"summary": {
"properties": {
"counts": {
"properties": {
"leftRowsMatched": {
"type": "number"
},
"leftRowsUnmatched": {
"type": "number"
},
"matchedRows": {
"type": "number"
},
"passthroughRows": {
"type": "number"
},
"rightRowsMatched": {
"type": "number"
},
"rightRowsUnmatched": {
"type": "number"
}
},
"type": "object"
},
"joinType": {
"type": "string"
},
"keyMatching": {
"type": "string"
},
"leftKeyFields": {
"items": {
"type": "string"
},
"type": "array"
},
"leftMatchRate": {
"type": "number"
},
"leftRecordCount": {
"type": "number"
},
"multipleMatches": {
"type": "string"
},
"outputRowCount": {
"type": "number"
},
"rightKeyFields": {
"items": {
"type": "string"
},
"type": "array"
},
"rightMatchRate": {
"type": "number"
},
"rightRecordCount": {
"type": "number"
},
"warnings": {
"type": "array"
}
},
"type": "object"
}
},
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"iconUrl": "https://res.cloudinary.com/bdb-prod/image/upload/c_fill,ar_1:1,w_256,h_256,f_auto,q_auto/v1792616069/bazaar-icons/0a5b056fde952fc0.png",
"lastUpdated": "2026-10-21T21:20:09.555Z",
"quality": {
"l30DaysTotalCalls": 3,
"l30DaysUniquePayers": 2,
"lastCalledAt": "2026-10-21T21:20:08.903Z"
},
"resource": "https://x402-agent-tools.nerolabs.workers.dev/data/join",
"serviceName": "Nero Labs Agent Tools",
"tags": [
"data",
"join",
"merge",
"vlookup",
"json"
],
"type": "http",
"x402Version": 2
},
"source": "x402_bazaar",
"summary": "Joins two lists of JSON rows on one or more key fields, like a VLOOKUP or SQL join: inner, left, right, full or anti. Keys match exactly, or normalized (case, spacing and number-as-text differences ignored). Returns joined rows plus match counts and unmatched rows. Up to 500 rows a side. $0.002 per left row sent (right rows free), $0.002 minimum. Same engine as nerolabs/dataset-join-merge."
}What the leaf hashes
{"body":"0b6ba1c5849d74cf5b7d83bec9ce6aa42e352d35f88d6fa441153efed6f3d665","id":124884,"kind":"listing","method":"baseline/1","observed_us":1793025625395786,"prev":null,"subject":"x402_bazaar:https://x402-agent-tools.nerolabs.workers.dev/data/join","subject_kind":"source_record"}Proof
Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.