LuckPanda · Schema

CreateInvoiceRequest

CompanyBusiness ManagementCRMAccountingInventory
View JSON Schema on GitHub

JSON Schema

luckpanda-app-create-invoice-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/luckpanda-app/json-schema/luckpanda-app-create-invoice-request-schema.json",
  "title": "CreateInvoiceRequest",
  "x-generated": "2026-10-28",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/luckpanda-app-openapi.yaml#/components/schemas/CreateInvoiceRequest",
  "allOf": [
    {
      "$ref": "#/$defs/DraftFields"
    },
    {
      "type": "object",
      "required": [
        "currency",
        "lines"
      ],
      "properties": {
        "kind": {
          "type": "string",
          "enum": [
            "invoice",
            "credit_note",
            "debit_note",
            "receipt",
            "proforma",
            "quote",
            "sales_order",
            "delivery"
          ],
          "default": "invoice"
        },
        "idempotency_key": {
          "$ref": "#/$defs/IdempotencyKey",
          "description": "Optional when external_ref is given (or send the Idempotency-Key header)."
        },
        "correlation_id": {
          "$ref": "#/$defs/Uuid"
        },
        "issue": {
          "type": "boolean",
          "default": true
        },
        "send": {
          "default": false,
          "oneOf": [
            {
              "type": "boolean",
              "description": "true = email the buyer's address on the document"
            },
            {
              "type": "object",
              "properties": {
                "to": {
                  "type": "string",
                  "maxLength": 320,
                  "description": "Default: the buyer's email"
                },
                "cc": {
                  "type": "array",
                  "maxItems": 5,
                  "items": {
                    "type": "string",
                    "maxLength": 320
                  },
                  "description": "Each copy is its own delivery."
                },
                "subject": {
                  "type": "string",
                  "maxLength": 300
                },
                "message": {
                  "type": "string",
                  "maxLength": 4000
                }
              },
              "additionalProperties": false
            }
          ]
        },
        "payment": {
          "type": "object",
          "description": "A payment the buyer already made (invoices only, needs issue). Allocated up to what is due; more than due becomes the client's credit.",
          "required": [
            "amount_minor"
          ],
          "properties": {
            "amount_minor": {
              "type": "integer",
              "minimum": 1
            },
            "method": {
              "type": "string",
              "enum": [
                "bank_transfer",
                "upi",
                "cash",
                "cheque",
                "demand_draft",
                "card",
                "wallet",
                "gateway",
                "other"
              ]
            },
            "reference": {
              "type": "string",
              "maxLength": 200,
              "description": "Your charge or transaction id. A payment with the same reference already on the invoice is not recorded twice."
            },
            "paid_at": {
              "type": "string",
              "description": "YYYY-MM-DD or ISO date-time. Default: today."
            }
          },
          "additionalProperties": false
        }
      },
      "anyOf": [
        {
          "required": [
            "external_ref"
          ]
        },
        {
          "required": [
            "idempotency_key"
          ]
        }
      ]
    }
  ],
  "$defs": {
    "Currency": {
      "type": "string",
      "pattern": "^[A-Z]{3}$"
    },
    "Date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "DocDiscount": {
      "description": "D92 document discount before tax, shared across lines in proportion to their value. null removes it.",
      "type": [
        "object",
        "null"
      ],
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "enum": [
            "percent",
            "amount"
          ]
        },
        "value_bp": {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000
        },
        "value_minor": {
          "type": "integer",
          "minimum": 0
        }
      },
      "additionalProperties": false
    },
    "DraftFields": {
      "type": "object",
      "description": "The document fields of `document_draft_create` (abridged; the tool schema also has India GST, export and display fields).",
      "properties": {
        "legal_entity_id": {
          "$ref": "#/$defs/Uuid",
          "description": "Default: the business's first legal entity."
        },
        "party_id": {
          "$ref": "#/$defs/Uuid"
        },
        "currency": {
          "$ref": "#/$defs/Currency"
        },
        "lines": {
          "type": "array",
          "minItems": 1,
          "maxItems": 500,
          "items": {
            "$ref": "#/$defs/LineInput"
          }
        },
        "buyer": {
          "$ref": "#/$defs/PartyBlock"
        },
        "seller": {
          "$ref": "#/$defs/PartyBlock"
        },
        "issue_date": {
          "$ref": "#/$defs/Date"
        },
        "due_date": {
          "oneOf": [
            {
              "$ref": "#/$defs/Date"
            },
            {
              "type": "null"
            }
          ]
        },
        "notes": {
          "type": "string",
          "maxLength": 4000
        },
        "terms": {
          "type": "string",
          "maxLength": 4000
        },
        "fx_rate_to_base": {
          "type": "string",
          "pattern": "^[0-9]+(\\.[0-9]{1,8})?$",
          "description": "Needed when the currency differs from the business's base currency."
        },
        "country_code": {
          "type": "string",
          "pattern": "^[A-Z]{2}$"
        },
        "locale": {
          "type": "string",
          "maxLength": 35
        },
        "external_ref": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200,
          "description": "Your id for this document; unique per business and kind (DUPLICATE_EXTERNAL_REF on POST /documents)."
        },
        "prices_include_tax": {
          "type": "boolean",
          "description": "D92: line prices include tax."
        },
        "discount": {
          "$ref": "#/$defs/DocDiscount"
        },
        "round_off": {
          "type": "boolean",
          "description": "D92: round the total to a whole currency unit (a Round off line)."
        },
        "reverse_charge": {
          "type": "boolean",
          "description": "D92: India domestic B2B; tax shown, payable by the recipient, not added to the total."
        },
        "payment_terms": {
          "type": [
            "string",
            "null"
          ],
          "enum": [
            "due_on_receipt",
            "net_7",
            "net_15",
            "net_30",
            "net_45",
            "net_60",
            "custom",
            null
          ],
          "description": "D92: a named term sets due_date."
        },
        "custom_fields": {
          "type": "array",
          "maxItems": 8,
          "items": {
            "type": "object",
            "required": [
              "label"
            ],
            "properties": {
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "value": {
                "type": "string",
                "maxLength": 200
              }
            },
            "additionalProperties": false
          }
        },
        "show_bank_details": {
          "type": "boolean",
          "description": "D92: print the business bank details (and the UPI QR on Indian INR documents)."
        },
        "show_signature": {
          "type": "boolean"
        }
      }
    },
    "IdempotencyKey": {
      "type": "string",
      "minLength": 16,
      "maxLength": 128,
      "pattern": "^[A-Za-z0-9._:-]+$"
    },
    "LineInput": {
      "type": "object",
      "required": [
        "description",
        "quantity",
        "unit_code",
        "unit_price_minor"
      ],
      "properties": {
        "description": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4000
        },
        "item_id": {
          "$ref": "#/$defs/Uuid"
        },
        "quantity": {
          "$ref": "#/$defs/Quantity"
        },
        "unit_code": {
          "type": "string",
          "maxLength": 32
        },
        "unit_price_minor": {
          "type": "integer",
          "minimum": 0
        },
        "tax_rate_bp": {
          "type": "integer",
          "minimum": 0,
          "maximum": 100000,
          "description": "Tax rate in basis points (1800 = 18%)."
        },
        "discount_minor": {
          "type": "integer",
          "minimum": 0
        },
        "hsn_sac": {
          "type": "string",
          "pattern": "^([0-9]{4}|[0-9]{6}|[0-9]{8})$"
        },
        "cess_rate_bp": {
          "type": "integer",
          "minimum": 0,
          "maximum": 50000,
          "description": "India only (D92): GST cess rate on the line."
        }
      },
      "additionalProperties": false
    },
    "PartyBlock": {
      "type": "object",
      "description": "A buyer or seller as written on the document. The buyer is matched to an existing client by external_ref, then tax id, then email, then name; otherwise a new client is created.",
      "required": [
        "name"
      ],
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 300
        },
        "email": {
          "type": "string",
          "maxLength": 320
        },
        "address": {
          "type": "string",
          "maxLength": 1000
        },
        "country_code": {
          "type": "string",
          "pattern": "^[A-Z]{2}$"
        },
        "tax_id": {
          "type": "string",
          "maxLength": 100,
          "description": "For an Indian party this is the GSTIN."
        },
        "state_code": {
          "type": "string",
          "pattern": "^[0-9]{2}$"
        },
        "external_ref": {
          "type": "string",
          "maxLength": 200,
          "description": "Buyer only: your id for this customer."
        },
        "phone": {
          "type": "string",
          "maxLength": 40
        },
        "shipping_address": {
          "type": "string",
          "maxLength": 1000
        }
      },
      "additionalProperties": false
    },
    "Quantity": {
      "type": "string",
      "pattern": "^[0-9]+(\\.[0-9]{1,6})?$"
    },
    "Uuid": {
      "type": "string",
      "format": "uuid"
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/luckpanda-app-create-invoice-request"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.