Galaxy Unit Invoices API

The Invoices API from Galaxy Unit — 2 operation(s) for invoices.

GitHub OpenAPI

Operations 3

GET /api/v1/invoices List invoices (newest updated first, cursor pages) #
POST /api/v1/invoices Create a invoice (write scope). #
GET /api/v1/invoices/{id} One invoice by id, with line items #

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/galaxyunit-app:galaxyunit-app-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

galaxyunit-app-invoices-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Galaxy Unit Invoices API
  version: 1.0.0
  description: 'REST for AI agents and scripts. A key acts as the member who made it (never above admin) under row-level security. Money is a decimal string. Dates are YYYY-MM-DD in the business time zone (see /me). Errors carry code, field and a hint the agent can act on. Read /for-agents first: https://galaxyunit.app/for-agents'
  contact:
    url: https://galaxyunit.app/contact
  termsOfService: https://galaxyunit.app/terms
servers:
- url: https://app.galaxyunit.app
security:
- apiKey: []
tags:
- name: Invoices
paths:
  /api/v1/invoices:
    get:
      operationId: invoicesList
      summary: List invoices (newest updated first, cursor pages)
      parameters:
      - name: q
        in: query
        description: ILIKE on number
        schema:
          type: string
          maxLength: 100
      - name: updated_since
        in: query
        schema:
          type: string
          format: date-time
      - name: limit
        in: query
        schema:
          type: integer
          maximum: 200
          default: 50
      - name: cursor
        in: query
        description: next_cursor from the previous page
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        id: {}
                        contact_id: {}
                        job_id: {}
                        quote_id: {}
                        number: {}
                        status: {}
                        issue_date: {}
                        due_date: {}
                        subtotal:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        tax_rate: {}
                        tax_label: {}
                        tax_enabled: {}
                        tax_inclusive: {}
                        tax_amount:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        discount_amount:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        total:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        amount_paid:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        deposit_pct: {}
                        deposit_amount:
                          type:
                          - string
                          - 'null'
                          description: Decimal string, e.g. "1234.56"
                        notes: {}
                        sent_at: {}
                        paid_at: {}
                        version: {}
                        created_at: {}
                        updated_at: {}
                  next_cursor:
                    type:
                    - string
                    - 'null'
        '401':
          description: Missing or invalid key
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '402':
          description: Plan required
          content:
            application/json:
              schema:
                type: object
                description: Answered with HTTP 402 when a plan is required. Relay message_for_owner and approve_url to the human, then retry the same call.
                properties:
                  code:
                    const: PLAN_REQUIRED
                  needed:
                    type: string
                  for:
                    type: string
                  what_you_get:
                    type: array
                    items:
                      type: string
                  price:
                    type:
                    - object
                    - 'null'
                  approve_url:
                    type: string
                  trial_url:
                    type:
                    - string
                    - 'null'
                  message_for_owner:
                    type: string
                  retryable:
                    const: true
        '403':
          description: Key lacks scope or member lacks role
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '422':
          description: Validation error (see field, hint)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '429':
          description: Rate limited (Retry-After)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
      tags:
      - Invoices
    post:
      operationId: invoicesCreate
      summary: Create a invoice (write scope).
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          minLength: 8
          maxLength: 128
      - name: dry_run
        in: query
        schema:
          type: string
          enum:
          - '1'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                client_name:
                  type: string
                  description: Client name (match from data). Required unless job is given
                job:
                  type: string
                  description: An existing job to invoice — its title or its client name; the job's service lines are copied
                items:
                  type: array
                  items:
                    type: object
                    properties:
                      description:
                        type: string
                      qty:
                        type: number
                        exclusiveMinimum: 0
                        description: default 1; for per-foot / per-sq-ft lines the size
                      unit:
                        type: string
                        description: ft, sq ft, hr, visit… or empty
                      unit_price:
                        type: number
                        minimum: 0
                        description: Price per unit in the business currency
                    required:
                    - description
                    - unit_price
                    additionalProperties: false
                  description: Line items when not copied from a job
                due_days:
                  type: integer
                  exclusiveMinimum: 0
                  maximum: 9007199254740991
                  description: Days until due; omit = business payment terms
                notes:
                  type: string
                  description: Note visible to the client
              additionalProperties: false
              description: Create an INVOICE as a draft document. Use for "invoice X", "bill Nuno for yesterday's job", "выставь счёт". Either name the JOB (its service lines are copied) or give the client and the line items with prices. Never invent a price — ask. Tax comes from the business settings and the due date from its payment terms; the card shows lines, tax and total before anything is created. To record money already received use add_payment, not this. REST callers may pass contact_id (uuid) instead of client_name.
      responses:
        '202':
          description: 'Waiting for the owner: nothing written yet. The owner got an email to approve; poll GET /api/v1/actions/{action_id}.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PendingAction'
        '401':
          description: Missing or invalid key
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '402':
          description: Plan required
          content:
            application/json:
              schema:
                type: object
                description: Answered with HTTP 402 when a plan is required. Relay message_for_owner and approve_url to the human, then retry the same call.
                properties:
                  code:
                    const: PLAN_REQUIRED
                  needed:
                    type: string
                  for:
                    type: string
                  what_you_get:
                    type: array
                    items:
                      type: string
                  price:
                    type:
                    - object
                    - 'null'
                  approve_url:
                    type: string
                  trial_url:
                    type:
                    - string
                    - 'null'
                  message_for_owner:
                    type: string
                  retryable:
                    const: true
        '403':
          description: Key lacks scope or member lacks role
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '404':
          description: Named client/job not found in this business
        '422':
          description: Validation error (see field, hint)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '429':
          description: Rate limited (Retry-After)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
      tags:
      - Invoices
  /api/v1/invoices/{id}:
    get:
      operationId: invoicesGet
      summary: One invoice by id, with line items
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      id: {}
                      contact_id: {}
                      job_id: {}
                      quote_id: {}
                      number: {}
                      status: {}
                      issue_date: {}
                      due_date: {}
                      subtotal:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      tax_rate: {}
                      tax_label: {}
                      tax_enabled: {}
                      tax_inclusive: {}
                      tax_amount:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      discount_amount:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      total:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      amount_paid:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      deposit_pct: {}
                      deposit_amount:
                        type:
                        - string
                        - 'null'
                        description: Decimal string, e.g. "1234.56"
                      notes: {}
                      sent_at: {}
                      paid_at: {}
                      version: {}
                      created_at: {}
                      updated_at: {}
        '401':
          description: Missing or invalid key
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '402':
          description: Plan required
          content:
            application/json:
              schema:
                type: object
                description: Answered with HTTP 402 when a plan is required. Relay message_for_owner and approve_url to the human, then retry the same call.
                properties:
                  code:
                    const: PLAN_REQUIRED
                  needed:
                    type: string
                  for:
                    type: string
                  what_you_get:
                    type: array
                    items:
                      type: string
                  price:
                    type:
                    - object
                    - 'null'
                  approve_url:
                    type: string
                  trial_url:
                    type:
                    - string
                    - 'null'
                  message_for_owner:
                    type: string
                  retryable:
                    const: true
        '403':
          description: Key lacks scope or member lacks role
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '404':
          description: Not found in this business
        '422':
          description: Validation error (see field, hint)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
        '429':
          description: Rate limited (Retry-After)
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                      field:
                        type: string
                      hint:
                        type: string
                      retryable:
                        type: boolean
                    required:
                    - code
                    - message
                    - retryable
      tags:
      - Invoices
components:
  schemas:
    PendingAction:
      type: object
      required:
      - status
      - action_id
      properties:
        status:
          type: string
          const: pending_confirmation
        action_id:
          type: string
          format: uuid
        expires_at:
          type: string
          format: date-time
        message_for_owner:
          type: string
        hint:
          type: string
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: 'Authorization: Bearer gu_live_… — issued in Settings → Integrations by an owner or admin.'