JupiterInvoice Invoices API
The Invoices API from JupiterInvoice — 4 operation(s) for invoices.
The Invoices API from JupiterInvoice — 4 operation(s) for invoices.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.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.curl "https://apis.io/api/v1/apis/jupiterinvoice-com:jupiterinvoice-com-invoices-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a 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.
openapi: 3.2.0
info:
contact:
name: Jupiter Invoice support
url: https://jupiterinvoice.com/contact
description: 'Programmatic access to JupiterInvoice. Create and manage invoices and customers from your code, an LLM agent, or an MCP tool.
Money is always integer cents (or the smallest unit of the currency). Quantities are JSON numbers (1.5 = one and a half). Dates are ISO (YYYY-MM-DD). Timestamps are ISO 8601 in UTC.
New here? Start with the quick start: curl examples, invoice numbering and the send limits.'
license:
name: Proprietary
title: JupiterInvoice Invoices API
version: 1.0.0
servers:
- description: Live
url: https://jupiterinvoice.com/api/v1
security:
- BearerAuth: []
tags:
- name: Invoices
paths:
/invoices:
get:
parameters:
- in: query
name: limit
schema:
default: 25
maximum: 100
type: integer
- description: Opaque cursor from previous response
in: query
name: cursor
schema:
type: string
responses:
'200':
content:
application/json:
schema:
properties:
data:
items:
$ref: '#/components/schemas/Invoice'
type: array
next_cursor:
nullable: true
type: string
type: object
description: List of invoices
summary: List invoices
tags:
- Invoices
operationId: getInvoices
x-operation-id-source: derived
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
description: Invoice created
'400':
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
description: Validation error
'401':
description: Missing or invalid API key
'422':
description: Sender profile incomplete
summary: Create an invoice
tags:
- Invoices
operationId: postInvoices
x-operation-id-source: derived
/invoices/anonymous:
post:
description: 'Mirrors the public anonymous /new flow. No API key required. Anti-abuse: per-IP rate limit (5/min, 30/hour, 100/day), honeypot, Cloudflare Turnstile when configured. The response sets a ji_anon_session cookie so a subsequent sign-in claims the invoice.'
requestBody:
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Invoice'
- properties:
cf_turnstile_response:
description: Required when Turnstile is configured server-side
type: string
sender:
properties:
account_name:
type: string
account_number:
type: string
address_line1:
type: string
bank_name:
type: string
city:
type: string
company:
type: string
country:
type: string
email:
format: email
type: string
iban:
type: string
routing_number:
type: string
swift_code:
type: string
tax_id:
type: string
required:
- company
type: object
website:
description: Honeypot. Leave empty.
type: string
type: object
required: true
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
description: Invoice created
'400':
description: Validation error
'401':
description: Turnstile failure
'429':
description: Rate limit exceeded
security: []
summary: Create an invoice without authentication
tags:
- Invoices
operationId: postInvoicesAnonymous
x-operation-id-source: derived
/invoices/{invoice_number}:
parameters:
- in: path
name: invoice_number
required: true
schema:
type: string
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
description: Invoice
'404':
description: Not found
summary: Get an invoice by number
tags:
- Invoices
operationId: getInvoicesByInvoiceNumber
x-operation-id-source: derived
patch:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
required: true
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
description: Updated invoice
'404':
description: Not found
'409':
description: Invoice is locked (paid/cancelled/approved)
summary: Partially update an invoice
tags:
- Invoices
operationId: patchInvoicesByInvoiceNumber
x-operation-id-source: derived
/invoices/{invoice_number}/send:
parameters:
- in: path
name: invoice_number
required: true
schema:
type: string
post:
description: 'Emails the recipient the invoice link by default. Needs a verified account email, a business name on the sender profile, and a recipient email. Email sends are capped per rolling 24 hours by account age: 8 in the first 48 hours, 25 until day 14, then 100. Pass link_only=true to mark the invoice issued without emailing (no cap).'
requestBody:
content:
application/json:
schema:
properties:
link_only:
default: false
description: Mark issued (draft -> sent) without emailing the recipient.
type: boolean
type: object
required: false
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Invoice'
description: Invoice, with a `delivery` block describing the send
'403':
description: Account not verified, sending suspended, or email not allowed in demo mode
'404':
description: Not found
'409':
description: Invoice is paid or cancelled and cannot be sent
'422':
description: Sender profile incomplete or no recipient email
'429':
description: Daily send cap reached
summary: Send or issue an invoice
tags:
- Invoices
operationId: postInvoicesByInvoiceNumberSend
x-operation-id-source: derived
components:
schemas:
LineItem:
properties:
description:
type: string
discount:
oneOf:
- properties:
type:
const: percent
value:
type: number
- properties:
type:
const: flat
value_cents:
type: integer
type: object
line_total_cents:
readOnly: true
type: integer
note:
description: Optional per-line detail shown under the line
type: string
quantity:
default: 1
type: number
unit_price_cents:
description: Cents (or smallest currency unit)
type: integer
required:
- description
- unit_price_cents
type: object
Address:
properties:
city:
type: string
country:
type: string
line1:
type: string
line2:
type: string
line3:
type: string
postal_code:
type: string
state:
type: string
type: object
Invoice:
properties:
created_at:
format: date-time
readOnly: true
type: string
currency:
description: '3-letter code. Left out: the account''s default currency (USD if none is set).'
type: string
customer_id:
nullable: true
type: integer
discount:
oneOf:
- properties:
type:
const: percent
value:
type: number
- properties:
type:
const: flat
value_cents:
type: integer
type: object
due_date:
description: 'Left out: the issue date plus the account''s default payment terms (30 days if none is set).'
format: date
type: string
footer_note:
type: string
id:
description: Invoice number, e.g. ACME-0001
readOnly: true
type: string
invoice_number:
description: Same as id. Use it in /invoices/{invoice_number} URLs.
readOnly: true
type: string
issue_date:
format: date
type: string
line_items:
items:
$ref: '#/components/schemas/LineItem'
type: array
paid_at:
format: date-time
readOnly: true
type: string
po_number:
type: string
recipient:
$ref: '#/components/schemas/Recipient'
scope_details:
description: Long-form scope / statement of work shown to the recipient
type: string
sent_at:
format: date-time
readOnly: true
type: string
share_token:
readOnly: true
type: string
share_url:
readOnly: true
type: string
status:
enum:
- draft
- sent
- viewed
- change_requested
- updated
- approved
- paid
- cancelled
type: string
subscription_context:
type: string
subtotal_cents:
readOnly: true
type: integer
tax:
properties:
amount_cents:
readOnly: true
type: integer
label:
type: string
rate:
description: Percentage, e.g. 20.0 for 20%
type: number
type: object
terms_text:
description: 'Left out: the account''s standard terms text, if it has one.'
type: string
total_cents:
readOnly: true
type: integer
updated_at:
format: date-time
readOnly: true
type: string
required:
- line_items
type: object
Error:
properties:
error:
type: string
field:
nullable: true
type: string
type: object
Recipient:
properties:
address:
$ref: '#/components/schemas/Address'
ap:
properties:
email:
format: email
type: string
name:
type: string
type: object
cc_emails:
items:
format: email
type: string
type: array
company:
type: string
email:
format: email
type: string
name:
type: string
tax_id:
type: string
type: object
securitySchemes:
BearerAuth:
bearerFormat: API key (jk_live_*)
description: Mint a key on the Integrations page (https://jupiterinvoice.com/integrations#api-keys). Shown once.
scheme: bearer
type: http