← The evidence ledger
Evidence row 67952
Observed , by baseline/1.
- Kind
- listing
- About
- source_record x402_bazaar:https://api.paidpilot.io/v1/invoice-from-timesheet
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- a50bfabd6c49a5169ddb75da05186a53650b28ef210a88db47b806c2c3e76dcc
- Leaf
- 0x89d5a9d12ae782906de96a3c1f235f127e1d467ea059b6a8cce1c04812598b63
What was observed
{
"endpoints": [
[
"x402",
"https://api.paidpilot.io/v1/invoice-from-timesheet"
]
],
"name": "PaidPilot Invoice API",
"owner_address": "0x2daf658b01e257206375798a15832e9f547d65dd",
"raw": {
"accepts": [
{
"amount": "20000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 120,
"network": "eip155:8453",
"payTo": "0x2dAF658B01e257206375798a15832E9f547D65dD",
"scheme": "exact"
}
],
"description": "Turn timesheet entries into invoice JSON. $0.02 USDC on Base per call. Hours x rate, optional rounding, grouping, expenses, tax and terms become a validated invoice JSON with totals, ready for /v1/invoice.pdf. Don't use this for the PDF itself; send the result to /v1/invoice.pdf.",
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"buyer": {
"name": "Blue River Bakery"
},
"currency": "USD",
"default_rate": 85,
"entries": [
{
"date": "2026-10-05",
"description": "Website fixes",
"hours": 1.6
},
{
"date": "2026-10-06",
"description": "Website fixes",
"hours": 2.25
},
{
"date": "2026-10-08",
"description": "Menu photo shoot",
"hours": 3,
"rate": 95
}
],
"expenses": [
{
"amount": 29,
"description": "Stock photo license"
}
],
"group_by": "description",
"invoice_number": "INV-1002",
"issue_date": "2026-10-11",
"rounding": {
"increment_minutes": 15,
"mode": "up"
},
"seller": {
"email": "billing@acme.example",
"name": "Acme Web Studio LLC"
},
"tax_rate": 7,
"terms": "Net 15"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"hours": {
"billed": 7,
"entered": 6.85,
"entries": 3,
"entries_rounded_to_zero": 0
},
"invoice": {
"buyer": {
"name": "Blue River Bakery"
},
"currency": "USD",
"due_date": "2026-10-26",
"invoice_number": "INV-1002",
"issue_date": "2026-10-11",
"line_items": [
{
"description": "Website fixes (2026-10-05 to 2026-10-06)",
"quantity": 4,
"unit_price": 85
},
{
"description": "Menu photo shoot (2026-10-08)",
"quantity": 3,
"unit_price": 95
},
{
"description": "Expense: Stock photo license",
"quantity": 1,
"unit_price": 29
}
],
"payment_instructions": "Terms: Net 15, due 2026-10-26.",
"seller": {
"email": "billing@acme.example",
"name": "Acme Web Studio LLC"
},
"tax_rate": 7
},
"line_count": 3,
"next": {
"pdf": "POST https://api.paidpilot.io/v1/invoice.pdf with the \"invoice\" object as the JSON body ($0.02 in USDC via x402) to get the PDF.",
"validate_free": "POST https://api.paidpilot.io/v1/invoice/validate"
},
"rounding": "up 15 min per entry",
"totals": {
"currency": "USD",
"discount": "0.00 USD",
"subtotal": "654.00 USD",
"tax": "45.78 USD",
"total": "699.78 USD"
}
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"properties": {
"buyer": {
"properties": {
"address": {
"maxLength": 400,
"type": "string"
},
"email": {
"format": "email",
"maxLength": 254,
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"name": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 40,
"type": "string"
},
"tax_id": {
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"currency": {
"default": "USD",
"type": "string"
},
"default_rate": {
"description": "Hourly rate for entries without their own rate",
"maximum": 1000000,
"minimum": 0,
"type": "number"
},
"discount": {
"maximum": 1000000000,
"minimum": 0,
"type": "number"
},
"due_date": {
"description": "YYYY-MM-DD; or give terms instead",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"entries": {
"items": {
"additionalProperties": false,
"properties": {
"date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"description": {
"maxLength": 250,
"minLength": 1,
"type": "string"
},
"hours": {
"exclusiveMinimum": 0,
"maximum": 1000,
"type": "number"
},
"rate": {
"maximum": 1000000,
"minimum": 0,
"type": "number"
}
},
"required": [
"description",
"hours"
],
"type": "object"
},
"maxItems": 500,
"minItems": 1,
"type": "array"
},
"expenses": {
"description": "Reimbursable expenses, one line each",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"maximum": 1000000000,
"minimum": 0,
"type": "number"
},
"description": {
"maxLength": 250,
"minLength": 1,
"type": "string"
}
},
"required": [
"description",
"amount"
],
"type": "object"
},
"maxItems": 100,
"type": "array"
},
"group_by": {
"default": "entry",
"description": "entry = one line per entry; description = merge entries with the same description and rate",
"enum": [
"entry",
"description"
],
"type": "string"
},
"invoice_number": {
"maxLength": 64,
"minLength": 1,
"type": "string"
},
"issue_date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"notes": {
"maxLength": 2000,
"type": "string"
},
"payment_instructions": {
"maxLength": 1000,
"type": "string"
},
"rounding": {
"additionalProperties": false,
"properties": {
"increment_minutes": {
"anyOf": [
{
"const": 1,
"type": "number"
},
{
"const": 5,
"type": "number"
},
{
"const": 6,
"type": "number"
},
{
"const": 10,
"type": "number"
},
{
"const": 15,
"type": "number"
},
{
"const": 30,
"type": "number"
},
{
"const": 60,
"type": "number"
}
],
"description": "Round each entry to this many minutes"
},
"mode": {
"default": "up",
"enum": [
"up",
"nearest"
],
"type": "string"
}
},
"required": [
"increment_minutes"
],
"type": "object"
},
"seller": {
"properties": {
"address": {
"maxLength": 400,
"type": "string"
},
"email": {
"format": "email",
"maxLength": 254,
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"type": "string"
},
"name": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"phone": {
"maxLength": 40,
"type": "string"
},
"tax_id": {
"maxLength": 60,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"tax_rate": {
"maximum": 100,
"minimum": 0,
"type": "number"
},
"terms": {
"description": "e.g. \"Net 15\"; sets due_date from issue_date (early-pay discounts are not applied to the invoice)",
"maxLength": 40,
"minLength": 1,
"type": "string"
}
},
"required": [
"seller",
"buyer",
"invoice_number",
"issue_date",
"entries"
],
"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": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
},
"lastUpdated": "2026-10-24T14:46:14.039Z",
"quality": {
"l30DaysTotalCalls": 4,
"l30DaysUniquePayers": 2,
"lastCalledAt": "2026-10-24T14:46:13.919Z"
},
"resource": "https://api.paidpilot.io/v1/invoice-from-timesheet",
"serviceName": "PaidPilot Invoice API",
"tags": [
"timesheet",
"invoice",
"billable-hours",
"time-tracking"
],
"type": "http",
"x402Version": 2
},
"source": "x402_bazaar",
"summary": "Turn timesheet entries into invoice JSON. $0.02 USDC on Base per call. Hours x rate, optional rounding, grouping, expenses, tax and terms become a validated invoice JSON with totals, ready for /v1/invoice.pdf. Don't use this for the PDF itself; send the result to /v1/invoice.pdf."
}What the leaf hashes
{"body":"a50bfabd6c49a5169ddb75da05186a53650b28ef210a88db47b806c2c3e76dcc","id":67952,"kind":"listing","method":"baseline/1","observed_us":1793025465447215,"prev":null,"subject":"x402_bazaar:https://api.paidpilot.io/v1/invoice-from-timesheet","subject_kind":"source_record"}Proof
Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.