> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lastaccountingcompany.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Retry sending an invoice

> Retries delivery of an invoice whose previous send attempt failed. Requires a write-scoped key.



## OpenAPI

````yaml /openapi.yaml post /invoices/{invoice_id}/retry-send
openapi: 3.1.0
info:
  title: LAC Customer API
  version: '2026-07-02'
  description: >
    The Last Accounting Company (LAC) is an AI-native accounting firm for
    Finnish SMBs:

    continuous reconciliation, daily close, real-time dashboards, and full Vero
    reporting.

    This API is the same surface the LAC customer portal UI uses. It gives you
    programmatic

    access to your books (read-only general-ledger views), financial statements,
    documents,

    invoicing, payroll, source-system connections, and the message channel to
    Björn, the

    accounting agent.


    ## Authentication


    Every request carries `Authorization: Bearer <token>`. Two token kinds are
    accepted:


    - **Portal API key** (`lac_sk_...`) — minted in portal Settings → API
    access. Keys have a
      scope of `read` or `write`. Read-scoped keys are refused on all mutating methods
      (POST/PATCH/DELETE). Write-scoped keys act as the `operator` role: they can never
      use payroll endpoints (reads included), change company settings, grant access, or
      manage API keys — those operations require an interactive admin/approver session.
    - **Firebase ID token** — the interactive session token used by the portal
    UI itself.


    API keys are pinned to a single company, so the `customer_id` parameter
    (query string on

    GETs, body field on writes) can always be omitted when authenticating with
    an API key.

    Interactive tokens with access to multiple companies use `customer_id` to
    select one.


    ## Conventions


    - All field names are `snake_case` on the wire.

    - Monetary amounts are **integer cents** (fields suffixed `_cents`).

    - Rates and percentages are **basis points** (fields suffixed
    `_basis_points`;
      10000 = 100%, e.g. Finnish standard VAT 25.5% = 2550).
    - Quantities on invoice lines are decimal strings (e.g. `"1"`, `"2.5"`).

    - Dates are `YYYY-MM-DD`; periods are `YYYY-MM`; ranges accept `YYYY-MM`,
    `YYYY-Qn`,
      `YYYY`, `all`, `this_month`, or `last_6_months`.

    ## Limits


    - Document uploads: at most 20 files and 25 MB per request.

    - Sheet pagination: `limit` is capped at 200 rows per page (0 =
    unpaginated).


    ## Errors


    Errors return a JSON envelope `{"error": "...", "detail": "..."}` with a
    conventional

    HTTP status code (401 missing/invalid token, 403 insufficient scope or role,
    404 not

    found, 422 validation failure).


    More at
    [docs.lastaccountingcompany.com](https://docs.lastaccountingcompany.com).
  contact:
    name: The Last Accounting Company
    url: https://docs.lastaccountingcompany.com
servers:
  - url: https://api.app.lastaccountingcompany.com/portal
    description: Production (note the /portal base path).
security:
  - apiKey: []
tags:
  - name: Company
    description: Company profile, identity, overview, and agent status.
  - name: Books
    description: >-
      Read-only windows into the canonical general ledger: the spreadsheet-style
      Books/VAT sheet, financial statements, and analytics. There is no
      cell-edit or batch-edit API — the books are maintained by LAC.
  - name: Documents
    description: Receipt/invoice/contract uploads and per-file ingest metadata.
  - name: Messages
    description: The chat channel to Björn, the accounting agent.
  - name: Filings
    description: Filing authorization, review requests, and produced output packages.
  - name: Invoicing
    description: >-
      Sales invoicing — drafts, sending (Maventa e-invoice / email PDF / PDF
      download), credit notes, reminders, recurring templates, and the
      invoice-customer register.
  - name: Payroll
    description: >-
      Payroll workspace — employees, tax cards, employer settings, draft runs,
      and payslips. Every payroll operation (reads included) requires an
      interactive admin/approver session and is NOT available to API keys.
  - name: Connections
    description: >-
      Source-system connections (bank, Stripe, Procountor, Fennoa, inbox/Gmail,
      Google Sheets) and service-connection requests/confirmations. Note: the
      browser-interactive OAuth start/complete flows (Yapily bank consent,
      Google OAuth) are portal-only and intentionally not part of this API — use
      the portal UI to establish a connection, then read and sync it here.
  - name: Imports
    description: Historical import runs (e.g. migrated books) and their artifacts.
  - name: API keys
    description: >-
      Manage portal API keys. These endpoints require an interactive admin
      session (Firebase token) and are NOT available to API-key bearers, which
      receive 403.
paths:
  /invoices/{invoice_id}/retry-send:
    post:
      tags:
        - Invoicing
      summary: Retry sending an invoice
      description: >-
        Retries delivery of an invoice whose previous send attempt failed.
        Requires a write-scoped key.
      operationId: retrySendInvoice
      parameters:
        - $ref: '#/components/parameters/InvoiceIdPath'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomerIdBody'
      responses:
        '200':
          description: Updated invoice.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortalInvoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
components:
  parameters:
    InvoiceIdPath:
      name: invoice_id
      in: path
      required: true
      schema:
        type: string
  schemas:
    CustomerIdBody:
      type: object
      description: Optional company selector for write requests.
      properties:
        customer_id:
          type: string
          description: Target company. Optional for API keys.
    PortalInvoice:
      type: object
      description: >-
        One sales invoice or draft. Amounts are integer cents; interior fields
        beyond the stable ones vary by status.
      properties:
        id:
          type: string
        status:
          type: string
        delivery_channel:
          type: string
        customer:
          $ref: '#/components/schemas/Party'
        lines:
          type: array
          items:
            $ref: '#/components/schemas/InvoiceLine'
      additionalProperties: true
    Party:
      type: object
      description: >-
        An invoicing counterparty (the customer you invoice), with e-invoice
        routing and per-party defaults. Rates in basis points (25.5% = 2550).
      required:
        - name
      properties:
        id:
          type: string
          description: Party id. Include on upsert to update an existing party.
        name:
          type: string
        business_id:
          type: string
          description: Finnish business ID (Y-tunnus), e.g. `1234567-8`.
        vat_number:
          type: string
          description: EU VAT number, e.g. `FI12345678`.
        address_line1:
          type: string
        postal_code:
          type: string
        city:
          type: string
        country_code:
          type: string
          description: ISO 3166-1 alpha-2, e.g. `FI`.
        email:
          type: string
        einvoice_address:
          type: string
          description: E-invoice (verkkolasku) address, e.g. an OVT identifier.
        einvoice_operator:
          type: string
          description: E-invoice operator/intermediator code.
        default_payment_terms_days:
          type: integer
        default_vat_code:
          type: string
        default_vat_rate_basis_points:
          type: integer
          description: Default VAT rate in basis points (25.5% = 2550).
        default_invoice_language:
          type: string
    InvoiceLine:
      type: object
      description: >-
        One invoice line. Money in integer cents; VAT rate in basis points;
        quantity is a decimal string.
      required:
        - description
        - quantity
        - unit_price_cents
        - net_cents
        - vat_cents
        - gross_cents
      properties:
        description:
          type: string
        quantity:
          type: string
          description: Decimal quantity as a string, e.g. `"2.5"`.
        unit_price_cents:
          type: integer
          description: Unit price in integer cents.
        vat_rate_basis_points:
          type:
            - integer
            - 'null'
          description: VAT rate in basis points (25.5% = 2550); null when not applicable.
        vat_code:
          type: string
          description: VAT treatment code.
        net_cents:
          type: integer
          description: Line net amount in integer cents.
        vat_cents:
          type: integer
          description: Line VAT amount in integer cents.
        gross_cents:
          type: integer
          description: Line gross amount in integer cents.
    Error:
      type: object
      description: Standard error envelope.
      properties:
        error:
          type: string
          description: Machine-readable error message.
        detail:
          type: string
          description: Human-readable detail.
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Forbidden:
      description: >-
        Insufficient scope or role — e.g. a read-scoped key on a mutating
        method, or an API key on an admin/approver-only endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: lac_sk_...
      description: >-
        Portal API key minted in portal Settings → API access. Scope `read` or
        `write`; pinned to one company. Send as `Authorization: Bearer
        lac_sk_...`.

````