JupiterInvoice Invoices API

The Invoices API from JupiterInvoice — 4 operation(s) for invoices.

GitHub OpenAPI

Operations 6

GET /invoices List invoices #
POST /invoices Create an invoice #
POST /invoices/anonymous Create an invoice without authentication #
GET /invoices/{invoice_number} Get an invoice by number #
PATCH /invoices/{invoice_number} Partially update an invoice #
POST /invoices/{invoice_number}/send Send or issue an invoice #

Work with this as data

Every API 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 apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/jupiterinvoice-com:jupiterinvoice-com-invoices-api"
All apis
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.

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.

OpenAPI Specification

jupiterinvoice-com-invoices-api-openapi.yml Raw ↑
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