---
title: "Create a bill by uploading an invoice"
method: POST
path: "/v1/web/bill/invoice"
tags: ["Bill"]
---

# Create a bill by uploading an invoice

`POST /v1/web/bill/invoice`

An empty draft bill is created.
To upload the invoice, submit a `multipart/form-data` `POST` to `invoiceUpload.url`: add each key/value from `invoiceUpload.fields` as a form field, then append the file last.
Subsequently, the invoice will be parsed and the bill is prefilled with suggestions based on the invoice.
The status of parsing can be monitored by either listening for `bill.documentUpdated` events or polling `GET /v1/web/bill/{billId}/document/{id}`.

## Request body

- object
  - `fileName` string, required

## Response `202`

Default Response

- object
  - `id` string, required
  - `externalId` string
  - `status` union, required
    - 'draft'
    - 'submitted'
    - 'returned'
    - 'paymentPending'
    - 'paymentInProgress'
    - 'paid'
    - 'paymentFailed'
    - 'manuallyCompleted'
    - 'deleted'
  - `creatorUserId` string, required
  - `vendorId` string
  - `invoiceId` string
  - `currencyCode` string
  - `invoiceDate` string, date — ISO date string, YYYY-MM-DD
  - `paymentDueDate` string, date — The date that the invoice says the payment is due, in ISO date string, YYYY-MM-DD
  - `totalAmount` string — number string
  - `description` string
  - `lineItems` object[], required
    - `id` string, required
    - `description` string
    - `amount` string, required — Number string
    - `spendCategoryId` string
  - `documents` object[], required
    - `id` string, required
    - `fileName` string, required
    - `type` union, required
      - 'invoice'
      - 'supporting'
    - `status` union, required
      - 'uploading'
      - 'uploaded'
      - 'parsed'
    - `parsedData` object
      - `invoiceId` string, nullable
      - `vendorName` string, nullable
      - `currencyCode` string, nullable
      - `invoiceDate` string, nullable — ISO date string, YYYY-MM-DD
      - `dueDate` string, nullable — ISO date string, YYYY-MM-DD
      - `totalAmount` string, nullable — Decimal string
      - `description` string, nullable
      - `achAccountName` string, nullable
      - `achRoutingNumber` string, nullable
      - `achAccountNumber` string, nullable
      - `lineItems` object[]
        - `description` string, nullable
        - `amount` string, nullable — Decimal string
    - `createdAt` string, date-time, required
    - `accountingIntegration` object
      - `rutterId` string
      - `platformId` string
      - `latestSync` object, required
        - `status` union, required
          - 'inProgress'
          - 'successful'
          - 'failed'
        - `createdAt` string, date-time, required
        - `completedAt` string, date-time
        - `error` object
          - `type` string
          - `code` string
          - `message` string
          - `source` string
          - `platformMessage` string
  - `paymentScheduledDate` string, date — When the payment will be triggered, in ISO date string, YYYY-MM-DD. It should be far enough in advance so when the payment reaches the vendor, it is still before or on the paymentDueDate. Date is based on the payment processor's timezone, i.e. EST.
  - `paymentRoute` union
    - union[] — Flat ordered array of hops the funds will travel through
      - union
        - object
          - `type` 'fundingAccount', required
          - `accountId` string, required
          - `id` string, required
        - object
          - `type` 'fundingSource', required
          - `accountId` string, required
          - `id` string, required
          - `speed` union, required
            - 'sameDay'
            - 'standard'
        - object
          - `type` 'singleUseCard', required
          - `accountId` string, required
          - `cardHolderId` string, required
          - `name` string, required
          - `cardProfileStrategy` union
            - 'advertising_least_used'
            - 'vertical_optimized'
            - 'shipping_optimized'
            - 'plastiq'
            - 'tokenizable'
        - object
          - `type` 'cashAdvance', required
          - `accountId` string, required
          - `repaymentSchedule` union, required
            - 'today'
            - 'net-1'
            - 'net-3'
            - 'net-7'
            - 'net-15'
            - 'net-20'
            - 'net-30'
            - 'net-45'
            - 'net-60'
            - 'net-90'
        - object
          - `type` 'fundingAccount', required
          - `accountId` string, required
          - `id` string, required
        - object
          - `type` 'achPaymentMethod', required
          - `id` string, required
          - `speed` union, required
            - 'sameDay'
            - 'standard'
          - `memo` string, required
        - object
          - `type` 'email', required
          - `sharedByName` string, required
          - `email` string, required
    - unknown[]
      - unknown
  - `remittanceNotification` object — Notifications when a bill is paid
    - `recipients` object[], required
      - `name` string, required
      - `email` string, required
  - `payment` object
    - `id` string, required — Reference ID for this payment
    - `accountingIntegration` object
      - `rutterId` string
      - `platformId` string
      - `latestSync` object, required
        - `status` union, required
          - 'inProgress'
          - 'successful'
          - 'failed'
        - `createdAt` string, date-time, required
        - `completedAt` string, date-time
        - `error` object
          - `type` string
          - `code` string
          - `message` string
          - `source` string
          - `platformMessage` string
  - `manualCompletion` object — Set when the bill was manually completed
    - `status` union, required
      - 'paid'
      - 'notPaid'
    - `reason` string
  - `purchaseOrder` union
    - object
      - `type` 'manual', required
      - `id` string, required
    - object
      - `type` 'rutter', required
      - `rutterId` string, required
      - `platformId` string, required
  - `accountingIntegration` object
    - `rutterId` string
    - `platformId` string
    - `latestSync` object, required
      - `status` union, required
        - 'inProgress'
        - 'successful'
        - 'failed'
      - `createdAt` string, date-time, required
      - `completedAt` string, date-time
      - `error` object
        - `type` string
        - `code` string
        - `message` string
        - `source` string
        - `platformMessage` string
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `submittedAt` string, date-time
  - `completedAt` string, date-time
  - `invoiceUploadUrl` string, required — Deprecated. Use `invoiceUpload` instead.
  - `invoiceUpload` object, required — Presigned S3 POST: append each `fields` entry as a form field, then the file last.
    - `url` string, required
    - `fields` object, required

## Other responses

- `400` — Default Response
- `401` — The access to this resource has been denied
- `403` — The access to this resource is forbidden
- `default` — Catch-all error response for any unexpected internal errors

---

[API](https://skmtc.net/funneldash/apis/surface-web-api.md) · [All operations](https://skmtc.net/funneldash/apis/surface-web-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/funneldash/surface-web-api/versions/ac700d65f443/schema)
