Data

ERP documents

Quotes, orders, invoices and credit notes synced from your ERP, shop, files or the API — search them, read their lines, find what is past due.

Documents are written by their source (a connector, a file import or POST /sync/ingest) and read here. Each one belongs to a customer company (matched by its ERP code, domain or name), a salesperson and a source. total is incl. tax, net_total excl. tax; paid / unpaid come from the ERP when it records payments. To create or change documents, send them through Data sources.

In a chat
Copy a ready promptPaste it in any AI: it reads the docs and follows the rules of the API.
Open in Claude or ChatGPTA new conversation with the prompt already written.
This page as MarkdownFor an AI that cannot open links: paste the text itself.
In your editor
Claude Code or CodexAdd this line to CLAUDE.md or AGENTS.md.Meetzy API reference (read before calling the API): https://www.meetzy.ai/llms-full.txt
CursorSettings › Indexing & Docs › Add Doc, then type @Meetzy in the chat.https://www.meetzy.ai/llms-full.txt
Connect Meetzy as tools (MCP)The AI can then read and change your CRM itself — Claude Code:claude mcp add --transport http meetzy https://meetzy.me/api/mcp/mcp
Same for Codexcodex mcp add meetzy --url https://meetzy.me/api/mcp/mcp
GET/documents

Search documents

Newest first, paginated. Each document comes with its customer, paid, unpaid and is_past_due.

Scope: read

Query parameters

typestring
quote, order, invoice, credit_note, delivery, purchase_order, purchase_invoice — one, or several separated by commas.
statusstring
open, paid, closed, cancelled…
company_iduuid
Documents of one customer.
contact_iduuid
Documents linked to one contact.
ownerstring
Salesperson email, or me.
sourcestring
Source (sap_b1, odoo, shopify, custom:sage-100, import…).
fromdate
Document date on or after (YYYY-MM-DD).
todate
Document date on or before.
numberstring
Exact document number.
past_dueboolean
true: open invoices past their due date.
updated_sincedatetime
Only documents synced since — for incremental exports.
orderstring
desc (default) or asc by document date.
limitinteger
Page size, 1–500. Default 50.
offsetinteger
Rows to skip.
Request
curl "https://meetzy.me/api/v1/documents?type=invoice&past_due=true&limit=100" \
  -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/documents?type=invoice&past_due=true&limit=100", {
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://meetzy.me/api/v1/documents?type=invoice&past_due=true&limit=100",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json()
Response200
{
  "documents": [
    {
      "id": "83d62171-1cc8-466a-ad9c-f9fbce63d4bf",
      "source": "custom:sage-100",
      "doc_type": "invoice",
      "external_id": "F-1",
      "number": "F-1",
      "doc_date": "2026-10-07",
      "due_date": null,
      "status": "open",
      "currency": null,
      "total": 1200,
      "net_total": 1200,
      "tax_total": 0,
      "company_id": "05762c5d-3e1e-4fcf-adfa-f989a30f8462",
      "lead_id": null,
      "owner_email": "olivia@acme.com",
      "owner_code": null,
      "synced_at": "2026-10-07T13:21:04.195+00:00",
      "created_at": "2026-10-07T13:09:56.54743+00:00",
      "customer": {
        "id": null,
        "name": "Payfit",
        "code": "C1"
      },
      "paid": null,
      "unpaid": null,
      "is_past_due": false,
      "extra": {
        "company_code": "C1",
        "company_name": "Payfit"
      }
    }
  ],
  "total": 1,
  "limit": 5,
  "offset": 0
}
GET/documents/{id}

Get a document with its lines

The document, its customer and its lines (each: sku, name, quantity, unit_price, discount_pct, total, and brand / category when the source sends them).

Scope: read

Path parameters

idstringrequired
Id of the record (UUID).
Request
curl "https://meetzy.me/api/v1/documents/e43414d6-f56f-42be-a64c-a836d6015efc" \
  -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/documents/e43414d6-f56f-42be-a64c-a836d6015efc", {
  headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();
import os, requests

res = requests.get(
    "https://meetzy.me/api/v1/documents/e43414d6-f56f-42be-a64c-a836d6015efc",
    headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json()
Response200
{
  "document": {
    "id": "83d62171-1cc8-466a-ad9c-f9fbce63d4bf",
    "source": "custom:sage-100",
    "doc_type": "invoice",
    "external_id": "INV-2026-0412",
    "number": "F2026-0412",
    "doc_date": "2026-09-30",
    "due_date": "2026-11-29",
    "status": "open",
    "currency": "EUR",
    "total": 1500,
    "net_total": 1250,
    "tax_total": 250,
    "company_id": "3cdc3e21-931a-4e8b-a189-3cab5dfbd636",
    "lead_id": null,
    "owner_email": "olivia@acme.com",
    "owner_code": "12",
    "synced_at": "2026-10-07T13:16:14.599Z",
    "created_at": "2026-10-07T13:09:56.547Z",
    "customer": {
      "id": "3cdc3e21-931a-4e8b-a189-3cab5dfbd636",
      "name": "Payfit",
      "domain": "payfit.com"
    },
    "paid": 500,
    "unpaid": 1000,
    "is_past_due": false,
    "extra": {
      "company_code": "C-1001",
      "company_name": "Payfit",
      "paid": 500,
      "unpaid": 1000,
      "customer_ref": "PO-889"
    },
    "lines": [
      {
        "sku": "SKU-100",
        "name": "Eau de parfum 50 ml",
        "quantity": 24,
        "unit_price": 42,
        "discount_pct": 0,
        "total": 1008,
        "brand": "Maison X",
        "category": "Fragrances"
      }
    ]
  }
}