Developers

The payed.me API

Everything you can do to a document or a record in the portal, your own software can do over HTTP. Create invoices from your own system, keep a client list in step with your CRM, push tracked hours in at the end of the week.

Base URL

https://api.payed.me/api

Availability

API tokens are included from the Professional plan. Every endpoint also stays behind whatever plan already gated it in the portal — a token never reaches further than your own account does.

Getting started

Authenticating

Create a token in the portal underSettings → API tokens. It is shown once, at the moment you create it, and never again — we store only a hash of it, so nobody can recover it for you afterwards. Keep it where you keep your other secrets, and if you lose it, revoke it and create another.

Send it on every request as a bearer token:

curl https://api.payed.me/api/invoices \
  -H "Authorization: Bearer pm_live_your_token_here"

A token is accepted in that header and nowhere else — not in a cookie, not in a query string. It identifies your account, so requests made with it see exactly the invoices, clients and records you see when you sign in.

Boundaries

What a token cannot do

A token reaches documents and records. It does not reach anything that would let it entrench itself or change what your account is:

  • It cannot create another token, or revoke one. If a token leaks, revoking it in the portal ends it — there is no way for the holder to mint a replacement.
  • It cannot sign in, change your password, or touch your personal details.
  • It cannot invite or remove colleagues. Team management is a portal action.
  • It cannot change your subscription, start a checkout or cancel a plan.
  • It cannot edit your settings or your invoice templates.

Anything not listed on this page answers 403. That is the default, not an exception: an endpoint has to be published deliberately before a token can reach it.

Reference

Endpoints

Invoices

ON EVERY PLAN

Create, send and track invoices, including credit notes — a credit note is an invoice with a negative total and is served by these same endpoints.

  • GET/invoicesList invoices
  • POST/invoicesCreate an invoice
  • GET/invoices/{id}Fetch one invoice
  • PUT/invoices/{id}Update an invoice
  • DELETE/invoices/{id}Delete an invoice
  • GET/invoices/{id}/printDownload the PDF
  • POST/invoices/{id}/sendEmail it to the client
  • POST/invoices/draft-from-sourcesDraft an invoice from tracked work, expenses or mileage
  • GET/invoices/dashboard/statsTotals by status
  • GET/invoices/dashboard/revenueRevenue over time
  • GET/invoices/dashboard/unbilledWork not yet invoiced
  • GET/invoices/dashboard/customer-revenueRevenue by client

Quotes

ON EVERY PLAN

Quotes from draft to accepted, rejected or expired.

  • GET/quotesList quotes
  • POST/quotesCreate a quote
  • GET/quotes/{id}Fetch one quote
  • PUT/quotes/{id}Update a quote
  • DELETE/quotes/{id}Delete a quote
  • GET/quotes/{id}/printDownload the PDF
  • POST/quotes/{id}/sendEmail it to the client
  • GET/quotes/dashboard/statsTotals by status

Clients

ON EVERY PLAN

The people and companies you bill. Your plan caps how many you can save — the API answers HTTP 402 when you reach it, exactly as the portal does.

  • GET/customersList clients
  • POST/customersCreate a client
  • GET/customers/{id}Fetch one client
  • PUT/customers/{id}Update a client
  • DELETE/customers/{id}Delete a client

Receipts

FROM BASIC

Receipts you issue against payments received.

  • GET/receiptsList receipts
  • POST/receiptsCreate a receipt
  • GET/receipts/{id}Fetch one receipt
  • PUT/receipts/{id}Update a receipt
  • DELETE/receipts/{id}Delete a receipt
  • GET/receipts/{id}/printDownload the PDF
  • POST/receipts/{id}/sendEmail it
  • GET/receipts/dashboard/statsTotals by period

Expenses

FROM BASIC

What you spend, with an optional attachment on each record.

  • GET/expensesList expenses
  • POST/expensesCreate an expense
  • GET/expenses/{id}Fetch one expense
  • PUT/expenses/{id}Update an expense
  • DELETE/expenses/{id}Delete an expense
  • POST/expenses/{id}/attachmentUpload a receipt image or PDF
  • GET/expenses/{id}/attachmentDownload the attachment
  • DELETE/expenses/{id}/attachmentRemove the attachment
  • GET/expenses/dashboard/statsTotals by period
  • GET/expenses/dashboard/spendingSpending by category

Inventory

FROM PROFESSIONAL

Stock items, movements and counts.

  • GET/inventoryList items
  • POST/inventoryCreate an item
  • GET/inventory/{id}Fetch one item
  • PUT/inventory/{id}Update an item
  • DELETE/inventory/{id}Delete an item
  • GET/inventory/{id}/movementsMovement history
  • POST/inventory/{id}/movementsRecord a movement
  • POST/inventory/{id}/countRecord a stock count
  • GET/inventory/dashboard/statsStock value and low stock

Purchase requests

FROM PROFESSIONAL

What you intend to buy, with lines and a printable document.

  • GET/purchase-requestsList requests
  • POST/purchase-requestsCreate a request
  • GET/purchase-requests/{id}Fetch one request
  • PUT/purchase-requests/{id}Update a request
  • DELETE/purchase-requests/{id}Delete a request
  • GET/purchase-requests/{id}/printDownload the PDF

Tasks and time

FROM PROFESSIONAL

Tasks and the hours logged against them. Both sit behind the one time-tracking flag, together with mileage below.

  • GET/tasksList tasks
  • POST/tasksCreate a task
  • GET/tasks/{id}Fetch one task
  • PUT/tasks/{id}Update a task
  • DELETE/tasks/{id}Delete a task
  • POST/tasks/{id}/time-logsLog time against a task
  • PUT/tasks/{id}/time-logs/{logId}Update a time log
  • DELETE/tasks/{id}/time-logs/{logId}Delete a time log

Mileage

FROM PROFESSIONAL

Trips, with an optional attachment on each record.

  • GET/mileageList trips
  • POST/mileageRecord a trip
  • GET/mileage/{id}Fetch one trip
  • PUT/mileage/{id}Update a trip
  • DELETE/mileage/{id}Delete a trip
  • POST/mileage/{id}/attachmentUpload an attachment
  • GET/mileage/{id}/attachmentDownload the attachment
  • DELETE/mileage/{id}/attachmentRemove the attachment

Payment links

ON EVERY PLAN

Mint the public checkout link for one of your invoices, so your own software can send it wherever it likes.

  • POST/invoices/{id}/payment-linkCreate or fetch the payment link
Errors

When a request is refused

StatusWhat happenedWhat to do
401The token is missing, unknown, revoked or expired.Check the Authorization header. The API deliberately does not say which of the four it was — mint a new token if you are unsure.
402Your plan does not include the API, or does not include the resource you asked for.The body names the capability and the plan that includes it.
403The endpoint exists but is not part of the API.Settings, team, billing and token management are portal-only. Only the endpoints on this page accept a token.
404No such record, or it belongs to another account.These two answer identically on purpose, so ids cannot be probed.
400The body failed validation.The response lists the fields that were rejected.

Errors come back as JSON with a readable message. Plan refusals also carry a code and the plan that includes the capability, so your software can tell "upgrade needed" apart from "you sent something wrong".

Get started

Get started with payed.me today

Join payed.me today to streamline your invoicing process and achieve greater efficiency in your business.