Invoice Fly icon

Invoice Fly data API: bills, estimates, clients

Labhouse Mobile · Business 4.7 ★

Invoice Fly (Play title Invoice Maker - Invoice Fly) is Labhouse Mobile SL's invoicing app for freelancers, trades and small studios that need to bill from a phone. After email or Google sign-in, the home tabs cover invoices and estimates with templates, line-item tax and discounts, a client list pulled from contacts, a jobs week view, expense capture, reports, and Pay with Stripe or PayPal plus optional tips. Recurring series cover retainers, an AI estimate builder turns a job description into line items, multi-user invites share a business, and the same account syncs across devices and the web client. Labhouse is a Barcelona company (Carrer de Pomaret); the Android listing is rated 4.7 from about 135,000 reviews with 1 million-plus downloads and sits in Play's top-grossing business chart. It competes with Invoice Simple, FreshBooks, Zoho Invoice and Wave as a mobile-first bill-and-estimate tool rather than a full desktop ledger.

Each sent bill carries invoiceNumber, dueDate, balanceDue, billType and billStatus, with line items as quantity, price, taxRate and taxAmount. Clients key on clientId, clientName, customerEmail and phoneNumber; the shop profile is businessId, businessName, logoUrl and canReceivePayments. The session is an idToken with uid / userId after email or Google sign-in.

Jobs schedule under jobName, scheduledDateTime and jobSiteAddress and attach to a bill as linkedJobId. Scanned spend returns expenseId, merchant, totalAmount and duplicatedExpense. Card and PayPal captures append paymentRecords with paidDate, tipAmount and alreadyPaidUrl; retainers pause as recurringInvoiceId / recurringType.

Finance ops chase unpaid EUR rows before the due date, payment desks match Stripe and PayPal captures, bookkeepers drop receipt OCR next to billed AR, and field teams turn a scheduled job into an invoice — and openData Studio turns that ledger into callable open data.

Screenshots

  • Invoice Fly screenshot 1
  • Invoice Fly screenshot 2
  • Invoice Fly screenshot 3
  • Invoice Fly screenshot 4
  • Invoice Fly screenshot 5
  • Invoice Fly screenshot 6
  • Invoice Fly screenshot 7

API surface

The endpoints and request/response examples below are reconstructed from the app's interface — illustrative, not a live capture.

  • Exchange sign-in token

    POST /v1/invoicefly/login osint

    Exchanges the Firebase idToken from email or Google sign-in for the session idToken, uid and userId that gate later bill, client and business calls.

    Auth: Unauthenticated bootstrap. Body is the Firebase idToken from email or Google sign-in plus the user email. The returned idToken is sent as Authorization: Bearer on later calls.

    • email
    • idToken
    • uid
    • userId
    • token
    POST /v1/invoicefly/login HTTP/1.1
    Content-Type: application/json
    
    {
      "email": "[email protected]",
      "idToken": "eyJhbGciOi...",
      "uid": "usr_8f21a4c2"
    }
    {
      "idToken": "eyJhbGciOi...",
      "uid": "usr_8f21a4c2",
      "userId": "usr_8f21a4c2",
      "email": "[email protected]",
      "token": "st-9c11ab"
    }
  • List invoices and estimates

    GET /v1/invoicefly/invoices openfinance

    Pages the signed-in business's bills — invoiceNumber, dueDate, balanceDue, billType and billStatus — that fill the Invoices and Estimates tabs.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Query billType filters invoice versus estimate.

    • billId
    • billName
    • invoiceNumber
    • billType
    • billStatus
    • clientId
    • clientName
    • dueDate
    • balanceDue
    • totalDue
    • totalPaid
    • taxAmount
    • taxRate
    • currency
    • overdue
    • paidDate
    • invoiceLink
    • billLink
    • poNumber
    • linkedJobId
    • createdAt
    • updatedAt
    GET /v1/invoicefly/invoices?billType=invoice&limit=50 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Accept: application/json
    {
      "bills": [
        {
          "billId": "bill_7c11ab",
          "billName": "INV-1042",
          "invoiceNumber": "INV-1042",
          "billType": "invoice",
          "billStatus": "unpaid",
          "clientId": "cli_9aa01",
          "clientName": "Harbor Studio LLC",
          "dueDate": "2026-10-15",
          "balanceDue": 2613.0,
          "totalDue": 2613.0,
          "totalPaid": 0,
          "taxAmount": 213.0,
          "taxRate": 8.875,
          "currency": "EUR",
          "overdue": false,
          "paidDate": null,
          "invoiceLink": "https://files.example.com/i/bill_7c11ab",
          "billLink": "https://files.example.com/i/bill_7c11ab",
          "poNumber": "PO-88",
          "linkedJobId": "job_22",
          "createdAt": "2026-09-15T16:02:11.000Z",
          "updatedAt": "2026-09-15T16:04:02.000Z"
        }
      ]
    }
  • Create an invoice

    POST /v1/invoicefly/invoices openfinance

    Creates a bill of billType invoice (or estimate) with line-item quantity, price, taxRate and discount, returning billId, invoiceNumber and balanceDue.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • billType
    • clientId
    • clientName
    • dueDate
    • currency
    • poNumber
    • linkedJobId
    • items
    • quantity
    • price
    • taxable
    • discount
    • taxRate
    • paymentInstructions
    • billId
    • billName
    • invoiceNumber
    • billStatus
    • balanceDue
    • totalDue
    • taxAmount
    • createdAt
    POST /v1/invoicefly/invoices HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "billType": "invoice",
      "clientId": "cli_9aa01",
      "clientName": "Harbor Studio LLC",
      "dueDate": "2026-10-15",
      "currency": "EUR",
      "poNumber": "PO-88",
      "linkedJobId": "job_22",
      "items": [
        {
          "quantity": 1,
          "price": 2400.0,
          "taxable": true,
          "discount": 0,
          "taxRate": 8.875
        }
      ],
      "paymentInstructions": "SEPA or card"
    }
    {
      "billId": "bill_7c11ab",
      "billName": "INV-1042",
      "invoiceNumber": "INV-1042",
      "billType": "invoice",
      "billStatus": "unpaid",
      "balanceDue": 2613.0,
      "totalDue": 2613.0,
      "taxAmount": 213.0,
      "createdAt": "2026-09-15T16:02:11.000Z"
    }
  • Email an invoice

    POST /v1/invoicefly/invoices/send opendata

    Sends the bill PDF to toEmail (with optional ccEmail and bccEmail) and returns invoiceLink / billLink for the client-facing copy.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Body identifies the bill and the recipient addresses.

    • billId
    • toEmail
    • ccEmail
    • bccEmail
    • customerEmail
    • billStatus
    • invoiceLink
    • billLink
    • status
    POST /v1/invoicefly/invoices/send HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "billId": "bill_7c11ab",
      "toEmail": "[email protected]",
      "ccEmail": "[email protected]",
      "bccEmail": "[email protected]",
      "customerEmail": "[email protected]"
    }
    {
      "billId": "bill_7c11ab",
      "billStatus": "unpaid",
      "toEmail": "[email protected]",
      "invoiceLink": "https://files.example.com/i/bill_7c11ab",
      "billLink": "https://files.example.com/i/bill_7c11ab",
      "status": "sent"
    }
  • Allocate next invoice number

    GET /v1/invoicefly/invoice-number opendata

    Returns the next invoiceNumber / billName for the signed-in business so New Invoice can stamp a unique number before save.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Query billType selects invoice versus estimate numbering.

    • billType
    • invoiceNumber
    • billName
    GET /v1/invoicefly/invoice-number?billType=invoice HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "billType": "invoice",
      "invoiceNumber": "INV-1043",
      "billName": "INV-1043"
    }
  • List clients

    GET /v1/invoicefly/clients osint

    Returns the client directory used on New Invoice and the Clients tab — clientName, customerEmail, phoneNumber and address keyed by clientId.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • clientId
    • clientName
    • customerEmail
    • phoneNumber
    • address
    • createdAt
    • updatedAt
    GET /v1/invoicefly/clients?limit=50 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "clients": [
        {
          "clientId": "cli_9aa01",
          "clientName": "Harbor Studio LLC",
          "customerEmail": "[email protected]",
          "phoneNumber": "+34-93-555-0142",
          "address": "Carrer de Mallorca 12, Barcelona",
          "createdAt": "2024-01-09T12:00:00.000Z",
          "updatedAt": "2026-09-01T09:14:22.000Z"
        }
      ]
    }
  • List estimates

    GET /v1/invoicefly/estimates opendata

    Lists estimate bills (billType estimate, totals, accepted/declined status) shown on the Estimates tab before convert-to-invoice.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • billId
    • billName
    • billType
    • billStatus
    • clientName
    • balanceDue
    • taxAmount
    • currency
    • createdAt
    • totalEstimates
    GET /v1/invoicefly/estimates?limit=50 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "estimates": [
        {
          "billId": "est_22b",
          "billName": "EST-210",
          "billType": "estimate",
          "billStatus": "accepted",
          "clientName": "Harbor Studio LLC",
          "balanceDue": 1959.75,
          "taxAmount": 159.75,
          "currency": "EUR",
          "createdAt": "2026-09-02T10:00:00.000Z"
        }
      ],
      "totalEstimates": 1
    }
  • Draft an estimate with AI

    POST /v1/invoicefly/estimates/ai opendata

    Builds an estimate from a jobDescription and estimateBullets, returning drafted line items with quantity, price and taxAmount.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • clientId
    • jobDescription
    • estimateBullets
    • billId
    • billType
    • items
    • quantity
    • price
    • taxable
    • balanceDue
    • taxAmount
    POST /v1/invoicefly/estimates/ai HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "clientId": "cli_9aa01",
      "jobDescription": "Kitchen remodel, 12 m2",
      "estimateBullets": ["Demolition", "Tile", "Plumbing"]
    }
    {
      "billId": "est_22c",
      "billType": "estimate",
      "estimateBullets": ["Demolition", "Tile", "Plumbing"],
      "items": [
        {"quantity": 1, "price": 1800.0, "taxable": true}
      ],
      "balanceDue": 1959.75,
      "taxAmount": 159.75
    }
  • Load signed-in business

    GET /v1/invoicefly/business opendata

    Returns the signed-in business profile used on Settings — businessName, logoUrl, currency, address and whether canReceivePayments is on.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • businessId
    • businessName
    • businessEmail
    • businessPhone
    • businessAddress
    • businessWebsite
    • businessCountryCode
    • logoUrl
    • currency
    • canReceivePayments
    GET /v1/invoicefly/business HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "businessId": "biz_k2mL",
      "businessName": "Alex Design Co",
      "businessEmail": "[email protected]",
      "businessPhone": "+34-93-555-0100",
      "businessAddress": "Carrer de Pomaret 56, Barcelona",
      "businessWebsite": "https://studio.example",
      "businessCountryCode": "ES",
      "logoUrl": "https://files.example.com/biz_k2mL/logo.png",
      "currency": "EUR",
      "canReceivePayments": true
    }
  • Scan an expense receipt

    POST /v1/invoicefly/expenses/scan opendata

    Runs receipt OCR and returns an Expense with merchant, category, totalAmount and taxAmount, flagging duplicatedExpense when the same ticket was already saved.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Body is the receipt image for OCR.

    • photoUrl
    • businessId
    • expenseId
    • merchant
    • category
    • totalAmount
    • taxAmount
    • currency
    • duplicatedExpense
    POST /v1/invoicefly/expenses/scan HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "photoUrl": "<receipt-image>",
      "businessId": "biz_k2mL"
    }
    {
      "expenseId": "exp_44",
      "merchant": "Ferreteria Central",
      "category": "materials",
      "totalAmount": 186.4,
      "taxAmount": 15.2,
      "currency": "EUR",
      "duplicatedExpense": false
    }
  • List jobs

    GET /v1/invoicefly/jobs opendata

    Lists scheduled jobs (jobName, jobSiteAddress, scheduledDateTime) that the Jobs week view shows and that New Invoice can attach via linkedJobId.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • jobId
    • jobName
    • jobTitle
    • jobDescription
    • jobSite
    • jobSiteAddress
    • scheduledDate
    • scheduledDateTime
    • clientId
    • linkedJobId
    • hasActiveJobs
    GET /v1/invoicefly/jobs?from=2026-09-01&to=2026-10-01 HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    {
      "jobs": [
        {
          "jobId": "job_22",
          "jobName": "Harbor kitchen",
          "jobTitle": "Kitchen remodel",
          "jobDescription": "12 m2 tile and plumbing",
          "jobSite": "Carrer de Mallorca 12",
          "jobSiteAddress": "Carrer de Mallorca 12, Barcelona",
          "scheduledDate": "2026-09-18",
          "scheduledDateTime": "2026-09-18T09:00:00.000Z",
          "clientId": "cli_9aa01",
          "linkedJobId": "job_22",
          "hasActiveJobs": true
        }
      ]
    }
  • Collect Stripe payment on a bill

    POST /v1/invoicefly/payments/stripe openbanking

    Charges a connected Stripe account against a bill and appends a paymentRecords row (amount, paidDate) so balanceDue and totalPaid update.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Used after the business connected a Stripe account.

    • billId
    • totalDue
    • currency
    • tipAmount
    • billStatus
    • paymentRecords
    • amount
    • paidDate
    • status
    • totalPaid
    • balanceDue
    POST /v1/invoicefly/payments/stripe HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "billId": "bill_7c11ab",
      "totalDue": 2613.0,
      "currency": "EUR",
      "tipAmount": 0
    }
    {
      "billId": "bill_7c11ab",
      "billStatus": "unpaid",
      "paymentRecords": [
        {
          "amount": 2613.0,
          "currency": "EUR",
          "paidDate": "2026-09-20T18:11:00.000Z",
          "status": "succeeded"
        }
      ],
      "totalPaid": 2613.0,
      "balanceDue": 0,
      "tipAmount": 0
    }
  • Pause all active recurring invoices

    POST /v1/invoicefly/recurring/pause openfinance

    Pauses every active recurring series for the business so retainers stop minting invoices until resumed.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login.

    • businessId
    • recurringInvoices
    • recurringInvoiceId
    • billName
    • isRecurring
    • recurringType
    • recurringDurationUnit
    • recurringDurationValue
    • status
    POST /v1/invoicefly/recurring/pause HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "businessId": "biz_k2mL"
    }
    {
      "businessId": "biz_k2mL",
      "recurringInvoices": [
        {
          "recurringInvoiceId": "rec_44",
          "billName": "INV-R-12",
          "isRecurring": true,
          "recurringType": "monthly",
          "recurringDurationUnit": "month",
          "recurringDurationValue": 1,
          "status": "paused"
        }
      ]
    }
  • Collect PayPal payment on a bill

    POST /v1/invoicefly/payments/paypal openbanking

    Starts PayPal checkout for a bill (optional tipAmount) and records the capture on paymentRecords with alreadyPaidUrl for the paid stamp.

    Auth: Authorization: Bearer idToken from POST /v1/invoicefly/login. Used when PayPal is enabled on the business.

    • billId
    • totalDue
    • currency
    • tipAmount
    • alreadyPaidUrl
    • paymentRecords
    • amount
    • paidDate
    • status
    • totalPaid
    • balanceDue
    POST /v1/invoicefly/payments/paypal HTTP/1.1
    Authorization: Bearer eyJhbGciOi...
    Content-Type: application/json
    
    {
      "billId": "bill_7c11ab",
      "totalDue": 2613.0,
      "currency": "EUR",
      "tipAmount": 50.0
    }
    {
      "billId": "bill_7c11ab",
      "alreadyPaidUrl": "https://files.example.com/paid/bill_7c11ab",
      "paymentRecords": [
        {
          "amount": 2663.0,
          "currency": "EUR",
          "paidDate": "2026-09-21T11:02:00.000Z",
          "status": "succeeded"
        }
      ],
      "totalPaid": 2663.0,
      "balanceDue": 0,
      "tipAmount": 50.0
    }

Data categories

  • invoices
  • estimates
  • clients
  • expenses
  • jobs
  • payments
  • businesses
  • auth-sessions

Where teams use this data

  • AR and due-date reconciliation

    Nightly jobs pull GET /v1/invoicefly/invoices for invoiceNumber, dueDate, balanceDue, billStatus and overdue, then match GET /v1/invoicefly/clients (clientName, customerEmail) so finance can chase unpaid EUR bills before the due date.

  • Stripe and PayPal capture matching

    Payment ops POST /v1/invoicefly/payments/stripe or POST /v1/invoicefly/payments/paypal and read paymentRecords, paidDate, tipAmount, totalPaid and alreadyPaidUrl against the bill's balanceDue.

  • Receipt OCR into the books

    Bookkeepers POST /v1/invoicefly/expenses/scan to land merchant, category, totalAmount, taxAmount and duplicatedExpense next to GET /v1/invoicefly/business currency so spend sits beside billed AR.

  • Job schedule to invoice

    Field desks read GET /v1/invoicefly/jobs (jobName, scheduledDateTime, jobSiteAddress) and POST /v1/invoicefly/invoices with linkedJobId, or POST /v1/invoicefly/estimates/ai from a jobDescription when the quote is still a sketch.

Frequently asked questions

How does Invoice Fly authenticate API calls?

POST /v1/invoicefly/login exchanges the Firebase idToken from email or Google sign-in (plus email and uid) for the session idToken, uid and userId. Later calls send Authorization: Bearer with that idToken.

Which endpoints expose invoices, estimates and clients?

GET /v1/invoicefly/invoices returns billId, invoiceNumber, dueDate, balanceDue, billType and billStatus. GET /v1/invoicefly/invoice-number allocates the next invoiceNumber. POST /v1/invoicefly/invoices creates a bill; POST /v1/invoicefly/invoices/send emails it to toEmail. GET /v1/invoicefly/estimates lists quotes; POST /v1/invoicefly/estimates/ai drafts one from estimateBullets. GET /v1/invoicefly/clients returns clientId, clientName, customerEmail and phoneNumber.

How are Stripe and PayPal captures recorded?

POST /v1/invoicefly/payments/stripe charges a connected Stripe account against a billId and appends paymentRecords (amount, paidDate, tipAmount) so totalPaid and balanceDue update. POST /v1/invoicefly/payments/paypal does the same via PayPal and returns alreadyPaidUrl for the paid stamp.

Can the API see jobs, expenses and the business profile?

Yes. GET /v1/invoicefly/jobs returns jobName, scheduledDateTime, jobSiteAddress and linkedJobId. POST /v1/invoicefly/expenses/scan OCRs a receipt into expenseId, merchant, totalAmount and duplicatedExpense. GET /v1/invoicefly/business returns businessName, logoUrl, currency and canReceivePayments. POST /v1/invoicefly/recurring/pause stops active series by recurringInvoiceId.

Apps similar to Invoice Fly

  • Invoice Simple: Invoice Maker — Invoice Simple is a mobile invoicing app for freelancers and trades: invoices, estimates, clients, Stripe/PayPal collection and receipt OCR.
  • Vyapar Invoice GST Billing App — Vyapar is an Indian GST/VAT billing and inventory app used by SMEs to raise tax invoices and track stock.
  • FreshBooks — FreshBooks is a cloud accounting product for small businesses: invoices, expenses, time tracking and client retainers.
  • Zoho Invoice — Zoho Invoice is Zoho's standalone invoicing app for estimates, recurring bills and online payment collection.
  • Wave Invoicing — Wave is a free invoicing and accounting suite for solopreneurs, with invoices, estimates and payment links.
  • QuickBooks — QuickBooks is Intuit's small-business accounting suite, with invoicing, expenses and bank feeds beyond a phone-first bill maker.
  • HoneyBook — HoneyBook is a client-flow tool for creatives: proposals, invoices, contracts and payments in one pipeline.

Topics

  • invoice fly api
  • invoice fly data api
  • invoiceNumber dueDate balanceDue
  • labhouse invoice api
  • invoice fly stripe paypal
  • invoice fly estimates jobs
  • barcelona invoicing api
  • invoice fly clients expenses

Need this app's data API integrated?

We deliver scoped integrations for any named app — from USD 500 with source-code handoff, or hosted access billed per call. Tell us the data you need.

  • NDA + SOW on every engagement
  • Delivery in 3–7 days
  • Payment only after acceptance
  • Work scoped to authorized use

Get a quote