invoice-ninja
Manage Invoice Ninja clients, invoices, quotes, expenses, tasks and projects.
¿Debería usar esto?
Calidad y seguridad
Hallazgos (2)
- LOWen invoiceninja_list_recurring_invoices
- LOWen invoiceninja_convert_quote_to_invoice
Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.
Costo de contexto
Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.
Instalar
Instalación con un clic
Agrega esto a tu archivo `claude_desktop_config.json`:
{
"mcpServers": {
"invoice-ninja": {
"url": "https://invoice-ninja.usefulapi.io/mcp"
}
}
}Puntos de conexión remotos
https://invoice-ninja.usefulapi.io/mcpstreamable-httpQué puede hacer
Inventario de herramientas
Herramientas (24)
🟢invoiceninja_list_clients(filter, name, email, number, balance, ...)
List clients with balances and contacts, optionally searched by name, email or number. Invoice Ninja: GET /api/v1/clients.
Esquema de entrada
{
"type": "object",
"properties": {
"filter": {
"description": "Free-text search across name, id number, contact names/emails/phones and custom fields.",
"type": "string"
},
"name": {
"description": "Only clients whose name matches.",
"type": "string"
},
"email": {
"description": "Only the client with a contact at this email.",
"type": "string"
},
"number": {
"description": "Only the client with this client number.",
"type": "string"
},
"balance": {
"description": "Balance comparison \"op:value\", op one of lt, lte, gt, gte, eq, e.g. \"gt:0\".",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_get_client(client_id)
Fetch one client by id, with contacts, address, balance and paid-to-date. Invoice Ninja: GET /api/v1/clients/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"minLength": 1,
"description": "The client's hashed id, e.g. \"Wpmbk5ezJn\"."
}
},
"required": [
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_invoices(client_id, client_status, number, filter, date_range, ...)
List invoices, filterable by client and payment status (paid / unpaid / overdue). status_id on each invoice: 1 draft, 2 sent, 3 partial, 4 paid, 5 cancelled, 6 reversed. Invoice Ninja: GET /api/v1/invoices.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"client_status": {
"description": "Comma-separated payment status: all, paid, unpaid, overdue.",
"type": "string"
},
"number": {
"description": "Only the invoice with this number.",
"type": "string"
},
"filter": {
"description": "Free-text search across number, PO number, date, amount, balance, client name/contacts and line items.",
"type": "string"
},
"date_range": {
"description": "Invoice-date range \"YYYY-MM-DD,YYYY-MM-DD\".",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_get_invoice(invoice_id)
Fetch one invoice by id — line items, totals, balance, dates, status and invitations. Invoice Ninja: GET /api/v1/invoices/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"minLength": 1,
"description": "The invoice's hashed id, e.g. \"Wpmbk5ezJn\"."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_quotes(client_id, client_status, number, filter, per_page, ...)
List quotes (estimates), filterable by client and quote status. Invoice Ninja: GET /api/v1/quotes.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"client_status": {
"description": "Comma-separated quote status: all, draft, sent, approved, expired, upcoming.",
"type": "string"
},
"number": {
"description": "Only the quote with this number.",
"type": "string"
},
"filter": {
"description": "Free-text search across number and custom fields.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_get_quote(quote_id)
Fetch one quote by id — line items, totals, status and the invoice it was converted to (invoice_id), if any. Invoice Ninja: GET /api/v1/quotes/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"minLength": 1,
"description": "The quote's hashed id, e.g. \"Wpmbk5ezJn\"."
}
},
"required": [
"quote_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_products(filter, product_key, per_page, page, sort, ...)
List products / services in the catalog with price, cost and default taxes. Invoice Ninja: GET /api/v1/products.
Esquema de entrada
{
"type": "object",
"properties": {
"filter": {
"description": "Free-text search across product name.",
"type": "string"
},
"product_key": {
"description": "Only the product with this product key.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_payments(client_id, number, filter, per_page, page, ...)
List payments received, with amount, date, refunded/applied totals and the invoices each was applied to (paymentables). Read-only: this server never records or refunds payments. Invoice Ninja: GET /api/v1/payments.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"number": {
"description": "Only the payment with this number.",
"type": "string"
},
"filter": {
"description": "Free-text search across amount, date and custom fields.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_expenses(client_id, client_status, number, filter, per_page, ...)
List expenses, filterable by client and invoicing/payment state. Invoice Ninja: GET /api/v1/expenses.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"client_status": {
"description": "Comma-separated: all, logged, pending, invoiced, uninvoiced, paid, unpaid.",
"type": "string"
},
"number": {
"description": "Only the expense with this number.",
"type": "string"
},
"filter": {
"description": "Free-text search across expense fields.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_vendors(filter, number, per_page, page, sort, ...)
List vendors (suppliers) with contacts and address. Invoice Ninja: GET /api/v1/vendors.
Esquema de entrada
{
"type": "object",
"properties": {
"filter": {
"description": "Free-text search across vendor name and contacts.",
"type": "string"
},
"number": {
"description": "Only the vendor with this number.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_tasks(client_id, client_status, number, filter, per_page, ...)
List tasks / time entries with their time_log, duration, rate and linked client, project and invoice. Invoice Ninja: GET /api/v1/tasks.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"client_status": {
"description": "Comma-separated: all, invoiced, uninvoiced, is_running, overdue.",
"type": "string"
},
"number": {
"description": "Only the task with this number.",
"type": "string"
},
"filter": {
"description": "Free-text search across task description and custom fields.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_projects(client_id, filter, number, per_page, page, ...)
List projects with client, budgeted hours, task rate, current hours and due date. Invoice Ninja: GET /api/v1/projects.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"filter": {
"description": "Free-text search across project name and notes.",
"type": "string"
},
"number": {
"description": "Only the project with this number.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢invoiceninja_list_recurring_invoices(client_id, client_status, number, per_page, page, ...)
List recurring invoice schedules with frequency, next send date and remaining cycles. Read-only. Invoice Ninja: GET /api/v1/recurring_invoices.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"description": "Only records for this client (hashed id).",
"type": "string"
},
"client_status": {
"description": "Comma-separated: all, active, paused, completed.",
"type": "string"
},
"number": {
"description": "Only the recurring invoice with this number.",
"type": "string"
},
"per_page": {
"description": "Records per page, 1-100 (API default 20).",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"page": {
"description": "Page number, starting at 1.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"sort": {
"description": "Sort as \"column|asc\" or \"column|desc\", e.g. \"number|desc\" or \"balance|desc\".",
"type": "string"
},
"status": {
"description": "Comma-separated record state: active, archived, deleted (e.g. \"active\"). Omit for all.",
"type": "string"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_client(name, website, phone, address1, address2, ...)
Create a client, optionally with contacts. Give at least a name or one contact. Invoice Ninja: POST /api/v1/clients.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"description": "Client company / display name.",
"type": "string"
},
"website": {
"type": "string"
},
"phone": {
"type": "string"
},
"address1": {
"type": "string"
},
"address2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country_id": {
"description": "Country as its ISO 3166-1 NUMERIC code, as a string, e.g. \"840\" (US), \"826\" (UK), \"276\" (DE).",
"type": "string"
},
"vat_number": {
"type": "string"
},
"id_number": {
"description": "Your own id / registration number for this client.",
"type": "string"
},
"public_notes": {
"type": "string"
},
"private_notes": {
"type": "string"
},
"contacts": {
"description": "People at the client; the first is the primary contact.",
"type": "array",
"items": {
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"email": {
"description": "Contact email (unique per client).",
"type": "string"
},
"phone": {
"type": "string"
},
"send_email": {
"description": "Whether this contact receives invoice emails.",
"type": "boolean"
}
}
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_update_client(client_id, name, website, phone, address1, ...)
Update a client's details; only the fields you pass change. Passing contacts replaces the contact list. Invoice Ninja: PUT /api/v1/clients/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"minLength": 1,
"description": "The client's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"name": {
"description": "Client company / display name.",
"type": "string"
},
"website": {
"type": "string"
},
"phone": {
"type": "string"
},
"address1": {
"type": "string"
},
"address2": {
"type": "string"
},
"city": {
"type": "string"
},
"state": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"country_id": {
"description": "Country as its ISO 3166-1 NUMERIC code, as a string, e.g. \"840\" (US), \"826\" (UK), \"276\" (DE).",
"type": "string"
},
"vat_number": {
"type": "string"
},
"id_number": {
"description": "Your own id / registration number for this client.",
"type": "string"
},
"public_notes": {
"type": "string"
},
"private_notes": {
"type": "string"
},
"contacts": {
"description": "Full replacement contact list.",
"type": "array",
"items": {
"type": "object",
"properties": {
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"email": {
"description": "Contact email (unique per client).",
"type": "string"
},
"phone": {
"type": "string"
},
"send_email": {
"description": "Whether this contact receives invoice emails.",
"type": "boolean"
}
}
}
}
},
"required": [
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_invoice(client_id, date, due_date, number, po_number, ...)
Create a DRAFT invoice for a client. It is not sent or emailed — use invoiceninja_mark_invoice_sent or invoiceninja_email_invoice afterwards. Invoice Ninja: POST /api/v1/invoices.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"minLength": 1,
"description": "The client's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"date": {
"description": "Document date, YYYY-MM-DD.",
"type": "string"
},
"due_date": {
"description": "Due date (valid-until for quotes), YYYY-MM-DD.",
"type": "string"
},
"number": {
"description": "Document number. Omit to let Invoice Ninja assign the next one.",
"type": "string"
},
"po_number": {
"description": "Purchase order number.",
"type": "string"
},
"line_items": {
"description": "Line items. On update this REPLACES all existing lines.",
"type": "array",
"items": {
"type": "object",
"properties": {
"product_key": {
"description": "Product / item name (the product key).",
"type": "string"
},
"notes": {
"description": "Line description.",
"type": "string"
},
"cost": {
"description": "Unit price.",
"type": "number"
},
"quantity": {
"description": "Quantity.",
"type": "number"
},
"discount": {
"description": "Line discount (amount or percent, see is_amount_discount).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"tax_name1": {
"description": "First tax name, e.g. VAT.",
"type": "string"
},
"tax_rate1": {
"description": "First tax rate in percent.",
"type": "number"
},
"tax_name2": {
"description": "Second tax name.",
"type": "string"
},
"tax_rate2": {
"description": "Second tax rate in percent.",
"type": "number"
}
}
}
},
"public_notes": {
"description": "Notes shown to the client.",
"type": "string"
},
"private_notes": {
"description": "Internal notes, not shown to the client.",
"type": "string"
},
"terms": {
"description": "Terms text.",
"type": "string"
},
"footer": {
"description": "Footer text.",
"type": "string"
},
"discount": {
"description": "Document-level discount (amount or percent).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"partial": {
"description": "Deposit / partial amount due first.",
"type": "number"
},
"partial_due_date": {
"description": "Due date of the partial amount, YYYY-MM-DD.",
"type": "string"
},
"project_id": {
"description": "Link to a project (hashed id).",
"type": "string"
},
"tax_name1": {
"description": "Document-level tax name.",
"type": "string"
},
"tax_rate1": {
"description": "Document-level tax rate in percent.",
"type": "number"
}
},
"required": [
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_update_invoice(invoice_id, date, due_date, number, po_number, ...)
Edit an invoice; only the fields you pass change, but line_items (if passed) replace every existing line. Does not send anything. Invoice Ninja: PUT /api/v1/invoices/{id}.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"minLength": 1,
"description": "The invoice's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"date": {
"description": "Document date, YYYY-MM-DD.",
"type": "string"
},
"due_date": {
"description": "Due date (valid-until for quotes), YYYY-MM-DD.",
"type": "string"
},
"number": {
"description": "Document number. Omit to let Invoice Ninja assign the next one.",
"type": "string"
},
"po_number": {
"description": "Purchase order number.",
"type": "string"
},
"line_items": {
"description": "Line items. On update this REPLACES all existing lines.",
"type": "array",
"items": {
"type": "object",
"properties": {
"product_key": {
"description": "Product / item name (the product key).",
"type": "string"
},
"notes": {
"description": "Line description.",
"type": "string"
},
"cost": {
"description": "Unit price.",
"type": "number"
},
"quantity": {
"description": "Quantity.",
"type": "number"
},
"discount": {
"description": "Line discount (amount or percent, see is_amount_discount).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"tax_name1": {
"description": "First tax name, e.g. VAT.",
"type": "string"
},
"tax_rate1": {
"description": "First tax rate in percent.",
"type": "number"
},
"tax_name2": {
"description": "Second tax name.",
"type": "string"
},
"tax_rate2": {
"description": "Second tax rate in percent.",
"type": "number"
}
}
}
},
"public_notes": {
"description": "Notes shown to the client.",
"type": "string"
},
"private_notes": {
"description": "Internal notes, not shown to the client.",
"type": "string"
},
"terms": {
"description": "Terms text.",
"type": "string"
},
"footer": {
"description": "Footer text.",
"type": "string"
},
"discount": {
"description": "Document-level discount (amount or percent).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"partial": {
"description": "Deposit / partial amount due first.",
"type": "number"
},
"partial_due_date": {
"description": "Due date of the partial amount, YYYY-MM-DD.",
"type": "string"
},
"project_id": {
"description": "Link to a project (hashed id).",
"type": "string"
},
"tax_name1": {
"description": "Document-level tax name.",
"type": "string"
},
"tax_rate1": {
"description": "Document-level tax rate in percent.",
"type": "number"
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_mark_invoice_sent(invoice_id)
Mark a draft invoice as sent WITHOUT emailing it. This moves it out of draft and adds its amount to the client's balance. Invoice Ninja: GET /api/v1/invoices/{id}/mark_sent.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"minLength": 1,
"description": "The invoice's hashed id, e.g. \"Wpmbk5ezJn\"."
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_email_invoice(invoice_id, email_type)
OUTWARD-FACING: sends a real email with the invoice to the client's invited contacts, and marks the invoice sent. Cannot be unsent — confirm with the user first. Invoice Ninja: POST /api/v1/invoices/bulk with action=email.
Esquema de entrada
{
"type": "object",
"properties": {
"invoice_id": {
"type": "string",
"minLength": 1,
"description": "The invoice's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"email_type": {
"description": "Which email template to send (default: the invoice template).",
"type": "string",
"enum": [
"invoice",
"reminder1",
"reminder2",
"reminder3",
"reminder_endless",
"custom1",
"custom2",
"custom3"
]
}
},
"required": [
"invoice_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_quote(client_id, date, due_date, number, po_number, ...)
Create a DRAFT quote (estimate) for a client. Nothing is emailed. Invoice Ninja: POST /api/v1/quotes.
Esquema de entrada
{
"type": "object",
"properties": {
"client_id": {
"type": "string",
"minLength": 1,
"description": "The client's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"date": {
"description": "Document date, YYYY-MM-DD.",
"type": "string"
},
"due_date": {
"description": "Due date (valid-until for quotes), YYYY-MM-DD.",
"type": "string"
},
"number": {
"description": "Document number. Omit to let Invoice Ninja assign the next one.",
"type": "string"
},
"po_number": {
"description": "Purchase order number.",
"type": "string"
},
"line_items": {
"description": "Line items. On update this REPLACES all existing lines.",
"type": "array",
"items": {
"type": "object",
"properties": {
"product_key": {
"description": "Product / item name (the product key).",
"type": "string"
},
"notes": {
"description": "Line description.",
"type": "string"
},
"cost": {
"description": "Unit price.",
"type": "number"
},
"quantity": {
"description": "Quantity.",
"type": "number"
},
"discount": {
"description": "Line discount (amount or percent, see is_amount_discount).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"tax_name1": {
"description": "First tax name, e.g. VAT.",
"type": "string"
},
"tax_rate1": {
"description": "First tax rate in percent.",
"type": "number"
},
"tax_name2": {
"description": "Second tax name.",
"type": "string"
},
"tax_rate2": {
"description": "Second tax rate in percent.",
"type": "number"
}
}
}
},
"public_notes": {
"description": "Notes shown to the client.",
"type": "string"
},
"private_notes": {
"description": "Internal notes, not shown to the client.",
"type": "string"
},
"terms": {
"description": "Terms text.",
"type": "string"
},
"footer": {
"description": "Footer text.",
"type": "string"
},
"discount": {
"description": "Document-level discount (amount or percent).",
"type": "number"
},
"is_amount_discount": {
"description": "true = discount is an amount; false = a percentage.",
"type": "boolean"
},
"partial": {
"description": "Deposit / partial amount due first.",
"type": "number"
},
"partial_due_date": {
"description": "Due date of the partial amount, YYYY-MM-DD.",
"type": "string"
},
"project_id": {
"description": "Link to a project (hashed id).",
"type": "string"
},
"tax_name1": {
"description": "Document-level tax name.",
"type": "string"
},
"tax_rate1": {
"description": "Document-level tax rate in percent.",
"type": "number"
}
},
"required": [
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_convert_quote_to_invoice(quote_id)
Convert a quote into a new invoice (the quote is marked converted and links to it). Returns the new invoice. Invoice Ninja: GET /api/v1/quotes/{id}/convert_to_invoice.
Esquema de entrada
{
"type": "object",
"properties": {
"quote_id": {
"type": "string",
"minLength": 1,
"description": "The quote's hashed id, e.g. \"Wpmbk5ezJn\"."
}
},
"required": [
"quote_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_expense(amount, date, vendor_id, client_id, project_id, ...)
Log an expense, optionally tied to a vendor, client or project and flagged to be re-invoiced. Invoice Ninja: POST /api/v1/expenses.
Esquema de entrada
{
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "Expense amount."
},
"date": {
"description": "Expense date, YYYY-MM-DD.",
"type": "string"
},
"vendor_id": {
"description": "Vendor (hashed id).",
"type": "string"
},
"client_id": {
"description": "Client to re-bill (hashed id).",
"type": "string"
},
"project_id": {
"description": "Project (hashed id).",
"type": "string"
},
"category_id": {
"description": "Expense category (hashed id).",
"type": "string"
},
"currency_id": {
"description": "Currency id as a string, e.g. \"1\" (USD). Omit for the company default.",
"type": "string"
},
"public_notes": {
"description": "Description.",
"type": "string"
},
"private_notes": {
"type": "string"
},
"transaction_reference": {
"description": "Receipt / transaction reference.",
"type": "string"
},
"payment_date": {
"description": "Date it was paid, YYYY-MM-DD.",
"type": "string"
},
"should_be_invoiced": {
"description": "Flag the expense to be billed to the client.",
"type": "boolean"
},
"tax_name1": {
"type": "string"
},
"tax_rate1": {
"type": "number"
}
},
"required": [
"amount"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_task(description, client_id, project_id, rate, due_date, ...)
Create a task, optionally with logged time entries, for a client or project. Invoice Ninja: POST /api/v1/tasks.
Esquema de entrada
{
"type": "object",
"properties": {
"description": {
"type": "string",
"minLength": 1,
"description": "What the work was."
},
"client_id": {
"description": "Client (hashed id).",
"type": "string"
},
"project_id": {
"description": "Project (hashed id).",
"type": "string"
},
"rate": {
"description": "Hourly rate; omit to use the project/client default.",
"type": "number"
},
"due_date": {
"description": "Due date, YYYY-MM-DD.",
"type": "string"
},
"time_log": {
"description": "Time entries. Entries must not overlap.",
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Start, Unix timestamp in seconds."
},
"end": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "End, Unix timestamp in seconds (0 = still running)."
},
"description": {
"description": "Note for this time entry.",
"type": "string"
},
"billable": {
"description": "Whether this entry is billable.",
"type": "boolean"
}
},
"required": [
"start",
"end"
]
}
}
},
"required": [
"description"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴invoiceninja_create_project(name, client_id, task_rate, budgeted_hours, due_date, ...)
Create a project for a client, with an optional hourly task rate, budget and due date. Invoice Ninja: POST /api/v1/projects.
Esquema de entrada
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Project name."
},
"client_id": {
"type": "string",
"minLength": 1,
"description": "The client's hashed id, e.g. \"Wpmbk5ezJn\"."
},
"task_rate": {
"description": "Hourly rate for tasks in this project (default 0 = inherit).",
"type": "number"
},
"budgeted_hours": {
"type": "number"
},
"due_date": {
"description": "Due date, YYYY-MM-DD.",
"type": "string"
},
"public_notes": {
"type": "string"
},
"private_notes": {
"type": "string"
},
"color": {
"description": "Hex color, e.g. \"#1f77b4\".",
"type": "string"
}
},
"required": [
"name",
"client_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Comunidad
Evidencia