{
  "x402Version": 2,
  "id": 35481,
  "slug": "35481",
  "resource": "https://api.paidpilot.io/v1/invoice-from-timesheet",
  "description": "PaidPilot Invoice API: Timesheet to invoice JSON. Time entries (hours x rate, optional per-entry rounding, grouping by description, expenses, tax, terms) become a validated invoice JSON with totals, ready to POST to /v1/invoice.pdf for the PDF.",
  "type": "http",
  "serviceName": "PaidPilot Invoice API",
  "resourceType": "Payments",
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "payTo": "0x2dAF658B01e257206375798a15832E9f547D65dD",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "20000",
      "amountUsd": 0.02,
      "maxTimeoutSeconds": 120
    }
  ],
  "outputSchema": {
    "properties": {
      "example": {
        "type": "object"
      },
      "type": {
        "type": "string"
      }
    },
    "required": [
      "type"
    ],
    "type": "object"
  },
  "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"
      }
    }
  },
  "tags": [
    "invoice",
    "pdf",
    "billing",
    "document-generation",
    "payment-reminder",
    "bazaar"
  ],
  "sourceHost": "api.paidpilot.io",
  "lastUpdated": "2026-10-11T21:00:03.556Z",
  "quality": {
    "calls30d": 1,
    "uniquePayers30d": 1,
    "lastCalledAt": "2026-10-11T21:00:02.986Z"
  },
  "metadata": {
    "serviceName": "PaidPilot Invoice API",
    "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"
        }
      }
    }
  },
  "liveness": {
    "reliability": null
  },
  "verified": false,
  "featured": false,
  "provider": {
    "host": "api.paidpilot.io",
    "manifest_name": "api.paidpilot.io",
    "source": "cdp-mirror",
    "source_manifest_url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources",
    "submitted_at": "2026-10-14T01:15:01.050Z"
  },
  "exampleResponse": {
    "example": {},
    "type": "string"
  }
}