← The evidence ledger
Evidence row 67958
Observed , by baseline/1.
- Kind
- listing
- About
- source_record x402_bazaar:https://api.paidpilot.io/v1/receivables-report
- Recorded
- Previous row
- None: the first of its kind about this subject
- Body SHA-256
- d72ee9252b8c957d5c96e585c9427ea6c02863aec4f7b826dca02e79abdadfd8
- Leaf
- 0xd4b01a63d7f859b2e5995006a2f42375b9f05b674adad341dd28d94e04324c19
What was observed
{
"endpoints": [
[
"x402",
"https://api.paidpilot.io/v1/receivables-report"
]
],
"name": "PaidPilot Invoice API",
"owner_address": "0x2daf658b01e257206375798a15832e9f547d65dd",
"raw": {
"accepts": [
{
"amount": "1000000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 120,
"network": "eip155:8453",
"payTo": "0x2dAF658B01e257206375798a15832E9f547D65dD",
"scheme": "exact"
}
],
"description": "Analyze accounts receivable aging from an invoice CSV or JSON export. $1 USDC on Base per call. Takes up to 1000 open invoices (QuickBooks, Xero, FreshBooks, Wave, Stripe or custom). Returns an A-F health grade, 0-100 score, aging buckets, overdue %, DSO and a collection priority list. Don't use this for a single invoice; use /v1/reminder-draft or /v1/late-fee.",
"extensions": {
"bazaar": {
"info": {
"input": {
"body": {
"as_of": "2026-10-13",
"csv": "Invoice Number,Customer,Invoice Date,Due Date,Total,Amount Paid,Status,Paid Date\nINV-1001,Blue River Bakery,2026-06-02,2026-07-02,2400.00,0,Open,\nINV-1002,Hill & Co Dental,2026-08-05,2026-09-04,1850.00,0,Open,\nINV-1003,Blue River Bakery,2026-08-20,2026-09-19,960.00,400.00,Partial,\nINV-1004,Maple Street Realty,2026-09-15,2026-10-15,3200.00,0,Open,\nINV-1005,Hill & Co Dental,2026-07-01,2026-07-31,1200.00,1200.00,Paid,2026-08-12\nINV-1006,Prairie Auto Repair,2026-09-01,2026-10-01,725.50,0,Open,\nINV-1007,Maple Street Realty,2026-08-01,2026-08-31,3200.00,3200.00,Paid,2026-09-03",
"currency": "USD"
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"aging": {
"1_30": {
"amount": 1285.5,
"count": 2,
"display": "$1,285.50",
"percent": 14.7
},
"31_60": {
"amount": 1850,
"count": 1,
"display": "$1,850.00",
"percent": 21.2
},
"61_90": {
"amount": 0,
"count": 0,
"display": "$0.00",
"percent": 0
},
"current": {
"amount": 3200,
"count": 1,
"display": "$3,200.00",
"percent": 36.6
},
"no_due_date": {
"amount": 0,
"count": 0,
"display": "$0.00",
"percent": 0
},
"over_90": {
"amount": 2400,
"count": 1,
"display": "$2,400.00",
"percent": 27.5
}
},
"as_of": "2026-10-13",
"collection_priority": [
{
"balance": 2400,
"bucket": "over_90",
"customer": "Blue River Bakery",
"days_overdue": 103,
"display": "$2,400.00",
"due_date": "2026-07-02",
"invoice_number": "INV-1001",
"next_action": {
"detail": "Send a final notice with a date, then decide on a payment plan, collections or small-claims court.",
"step": "final_notice",
"tool": "POST /v1/reminder-draft with tone=final"
}
},
{
"balance": 1850,
"bucket": "31_60",
"customer": "Hill & Co Dental",
"days_overdue": 39,
"display": "$1,850.00",
"due_date": "2026-09-04",
"invoice_number": "INV-1002",
"next_action": {
"detail": "Send a firm reminder and add the late fee your terms allow.",
"step": "firm_reminder_and_late_fee",
"tool": "POST /v1/reminder-draft with tone=firm; POST /v1/late-fee"
}
},
{
"balance": 725.5,
"bucket": "1_30",
"customer": "Prairie Auto Repair",
"days_overdue": 12,
"display": "$725.50",
"due_date": "2026-10-01",
"invoice_number": "INV-1006",
"next_action": {
"detail": "Send a friendly reminder with the payment link.",
"step": "friendly_reminder",
"tool": "POST /v1/reminder-draft with tone=friendly"
}
},
{
"balance": 560,
"bucket": "1_30",
"customer": "Blue River Bakery",
"days_overdue": 24,
"display": "$560.00",
"due_date": "2026-09-19",
"invoice_number": "INV-1003",
"next_action": {
"detail": "Send a friendly reminder with the payment link.",
"step": "friendly_reminder",
"tool": "POST /v1/reminder-draft with tone=friendly"
}
}
],
"currency": "USD",
"customers": [
{
"customer": "Maple Street Realty",
"display": "$3,200.00",
"invoices": 1,
"oldest_days_overdue": 0,
"open_balance": 3200,
"overdue_balance": 0,
"share_percent": 36.6
},
{
"customer": "Blue River Bakery",
"display": "$2,960.00",
"invoices": 2,
"oldest_days_overdue": 103,
"open_balance": 2960,
"overdue_balance": 2960,
"share_percent": 33.9
},
{
"customer": "Hill & Co Dental",
"display": "$1,850.00",
"invoices": 1,
"oldest_days_overdue": 39,
"open_balance": 1850,
"overdue_balance": 1850,
"share_percent": 21.2
},
{
"customer": "Prairie Auto Repair",
"display": "$725.50",
"invoices": 1,
"oldest_days_overdue": 12,
"open_balance": 725.5,
"overdue_balance": 725.5,
"share_percent": 8.3
}
],
"input_report": {
"csv_columns_used": {
"amount": "Total",
"amount_paid": "Amount Paid",
"customer": "Customer",
"due_date": "Due Date",
"invoice_number": "Invoice Number",
"issue_date": "Invoice Date",
"paid_date": "Paid Date",
"status": "Status"
},
"default_terms": "Net 30",
"due_dates_assumed_from_terms": 0,
"rows_excluded_void_draft_or_future": 0,
"rows_read": 7,
"rows_skipped": []
},
"notes": [
"Pure calculation on the data you sent: nothing is stored or sent anywhere.",
"Days overdue and buckets use the due date; rows without one use the invoice date plus the row's terms (or default_terms).",
"Not accounting, legal or credit advice."
],
"recommendations": [
"Start with the 1 invoice over 60 days ($2,400.00): the older an invoice gets, the less likely it is to be paid.",
"Send reminders on the 2 invoices 1-30 days late ($1,285.50) this week, before they age.",
"Maple Street Realty is 36.6% of your receivables. Ask for a deposit or shorter terms on new work, and watch this account weekly.",
"Customers take 38 days to pay on average. Offer card/ACH payment links, send invoices the day work is done, and consider 2/10 Net 30 to reward fast payment."
],
"report": "receivables_health",
"summary": {
"average_days_to_pay": 38,
"customers_with_open_balance": 4,
"dso_days": 79,
"dso_note": "Open balance / amount invoiced in the last 90 days x 90. Needs every invoice from that window (paid ones too) in the input to be accurate.",
"grade": "F",
"headline": "$5,535.50 of $8,735.50 owed to you is past due (63.4%), across 4 invoices.",
"open_balance": 8735.5,
"open_display": "$8,735.50",
"open_invoices": 5,
"over_60_percent": 27.5,
"overdue_balance": 5535.5,
"overdue_invoices": 4,
"overdue_percent": 63.4,
"paid_invoices_measured": 2,
"score": 48,
"score_reasons": [
"63.4% of open receivables are past due (-32).",
"27.5% are more than 60 days past due, the part least likely to be collected (-18).",
"Maple Street Realty holds 36.6% of what you are owed (-2)."
],
"top_customer_share_percent": 36.6,
"weighted_days_outstanding": 68
}
},
"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": {
"as_of": {
"description": "Report date, default today (UTC)",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"csv": {
"description": "CSV export (QuickBooks, Xero, FreshBooks, Wave, Stripe or your own). Header row required. Recognized columns: invoice number, customer, amount/total, amount paid, balance/open balance, invoice date, due date, terms, paid date, status.",
"maxLength": 60000,
"type": "string"
},
"currency": {
"default": "USD",
"type": "string"
},
"default_terms": {
"default": "Net 30",
"description": "Used when a row has no due date and no terms",
"maxLength": 40,
"type": "string"
},
"invoices": {
"description": "Or JSON rows instead of CSV",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"maximum": 10000000000,
"minimum": 0,
"type": "number"
},
"amount_paid": {
"maximum": 10000000000,
"minimum": 0,
"type": "number"
},
"balance": {
"maximum": 10000000000,
"type": "number"
},
"customer": {
"maxLength": 120,
"minLength": 1,
"type": "string"
},
"due_date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"invoice_number": {
"maxLength": 60,
"minLength": 1,
"type": "string"
},
"issue_date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"paid_date": {
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
"status": {
"maxLength": 30,
"type": "string"
},
"terms": {
"maxLength": 40,
"type": "string"
}
},
"required": [
"invoice_number",
"customer",
"amount"
],
"type": "object"
},
"maxItems": 1000,
"type": "array"
},
"revenue_window_days": {
"default": 90,
"description": "Window for DSO: invoiced amount in the last N days",
"maximum": 365,
"minimum": 30,
"type": "integer"
}
},
"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:15.613Z",
"quality": {
"l30DaysTotalCalls": 1,
"l30DaysUniquePayers": 1,
"lastCalledAt": "2026-10-24T14:46:15.476Z"
},
"resource": "https://api.paidpilot.io/v1/receivables-report",
"serviceName": "PaidPilot Invoice API",
"tags": [
"accounts-receivable",
"ar-aging",
"dso",
"collections",
"quickbooks"
],
"type": "http",
"x402Version": 2
},
"source": "x402_bazaar",
"summary": "Analyze accounts receivable aging from an invoice CSV or JSON export. $1 USDC on Base per call. Takes up to 1000 open invoices (QuickBooks, Xero, FreshBooks, Wave, Stripe or custom). Returns an A-F health grade, 0-100 score, aging buckets, overdue %, DSO and a collection priority list. Don't use this for a single invoice; use /v1/reminder-draft or /v1/late-fee."
}What the leaf hashes
{"body":"d72ee9252b8c957d5c96e585c9427ea6c02863aec4f7b826dca02e79abdadfd8","id":67958,"kind":"listing","method":"baseline/1","observed_us":1793025465456830,"prev":null,"subject":"x402_bazaar:https://api.paidpilot.io/v1/receivables-report","subject_kind":"source_record"}Proof
Its day has not closed yet. A day closes ten minutes after midnight UTC; the proof appears here then.