Skip to main content
In addition to automatic bill collection via connections, you can upload documents directly through the API. This is useful for historical bills, one-off documents, or bills from utilities that don’t have online portals.

How document upload works

  1. You submit one or more file URLs to the bulk upload endpoint.
  2. Nectar queues each file for processing.
  3. A job ID is returned that you can poll for status, or you can subscribe to job.completed.v2.
  4. When processing completes, created documents appear in the API like any other bill. Jobs that produce no new documents (duplicates, non-utility files, password-protected files, or processing errors) still complete — they just leave parsedDocumentIds empty.

Upload documents

Use the bulk upload endpoint to submit files for a company. Provide a documents array of publicly accessible HTTPS URLs. Optionally pin every document in the batch to a site and/or utility account, and pass free-text notes as background context for processing. Limits: each document is at most 25MB; PDF page limit is 800. Use v2.2 for new integrations (v2.1 remains available).

Request fields

Upload a single file

You can also upload a single file directly as a form submission. The same 25MB / 800-page limits apply. Optional siteId, accountId, and notes work the same as bulk upload.

Check job status

After uploading, poll the job detail endpoint to check processing status. You can also subscribe to the job.completed.v2 webhook instead of polling.

Job status values

When a job completes, the response includes additional fields:
COMPLETED means Nectar finished processing the upload, not that a new document was created. A batch of duplicates or non-utility files still returns COMPLETED with the corresponding ID lists populated and parsedDocumentIds empty. document.created.v2 fires only when a document is created; job.completed.v2 fires for every finished job.

Supported file formats

Tips

  • All URLs in the documents array must start with https://. If your files are in a private S3 bucket, generate a pre-signed URL.
  • Include siteId and/or accountId when you need bills allocated to a known site or account — recommended for compliance-sensitive uploads.
  • Use notes for background context (billing period, source, special instructions).
  • Processing typically completes within a few minutes per document.
  • Created documents appear in the standard /document/ endpoints and trigger document.created.v2 webhooks. Subscribe to job.completed.v2 to learn when the upload job itself finishes, including when no document is created.

Next steps

Webhooks

Get notified when upload jobs finish and when documents are created

Pagination

Iterate through document lists

Data model

Understand how documents relate to usage data