JSON Schema
{
"$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.
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.