Meridian ERP API v1 · 2026-09-01

REST API reference for the DocuSign, Inc. tenant
2,824AP invoices · 6,517 lines
8,473expense reports · 62,536 lines
83vendors
21locations · 11 legal entities

Overview

The Meridian ERP API gives read-only, programmatic access to the DocuSign, Inc. ERP tenant (docusign-prod). It is a JSON-over-HTTPS REST API: resources have predictable URLs, every request is a GET, and all responses are JSON.

Transactional data is available from 2024-02-01 through 2026-09-30 (DocuSign fiscal years FY2025, FY2026 and FY2027 year to date).

Base URLhttps://meridian-erp.duckdns.org/v1
OpenAPI 3.1 spec/openapi.json · /openapi.yaml
Plain-text docs/docs.md (same content as this page, in Markdown)
Interactive explorer/swagger · /redoc
API version2026-09-01

Quickstart

Every /v1 endpoint except /v1/health requires an API key. Make your first call:

curl https://meridian-erp.duckdns.org/v1/company \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"

Then page through AP invoices for a period:

curl "https://meridian-erp.duckdns.org/v1/invoices?invoice_date_from=2025-02-01&invoice_date_to=2026-01-31&limit=200" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"

Python:

import requests

BASE = "https://meridian-erp.duckdns.org/v1"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}

def list_all(path, **params):
    params.setdefault("limit", 200)
    while True:
        page = requests.get(f"{BASE}{path}", headers=HEADERS, params=params).json()
        yield from page["data"]
        if not page["has_more"]:
            break
        params["cursor"] = page["next_cursor"]

for inv in list_all("/invoices", fiscal_period="FY2026-P01"):
    print(inv["vendor_name"], inv["total_amount"], inv["currency"])

Authentication

Authenticate with the API key issued to your integration. Send it as a bearer token:

Authorization: Bearer <API key>

The X-API-Key: <API key> header is also accepted. Requests without a key return 401 with error.type = "authentication_error". Keys are scoped to a single tenant and grant read-only access.

Pagination

All list endpoints return a list envelope and use cursor pagination:

{
  "object": "list",
  "data": [ ... ],
  "has_more": true,
  "next_cursor": "bzoyMDA=",
  "total_count": 2824
}

Conventions

Where to find data

A map of common reporting needs to the records that hold them.

NeedEndpointHow to filter / read
Spend by vendor, category, GL account/v1/invoices, /v1/vendorsJoin vendor_id → vendor category / naics_code; line gl_account_code
Site electricity, gas, district heat/v1/invoicescommodity_category=electricity|natural_gas|district_heating; line quantity/unit_of_measure, location_id, service_period_*
Data center power/v1/invoicesGL 5120 lines in kWh per colocation site; PUE in custom_fields.reported_pue
Public cloud usage/v1/invoicescommodity_category=cloud_compute_storage; region in custom_fields
Generator fuel, refrigerants/v1/invoicescommodity_category=diesel_fuel (US_gal), refrigerant (lb/kg, refrigerant_type)
Water & waste/v1/invoicescommodity_category=water|wastewater|waste; custom_fields.waste_stream
Freight & shipping/v1/invoicescommodity_category=freight; kg, transport_mode, origin, destination
Capital purchases (IT & network hardware)/v1/purchase-orders, /v1/invoicesGL 1510/1520; commodity_category=it_hardware|network_hardware
Business travel/v1/expense-reportsLine category; flight_segments (IATA + cabin), lodging nights, rail segments, distances
Events & hotel room blocks/v1/invoicesGL 6400; custom_fields.event; room_night quantities
Commuting & remote work/v1/headcount, /v1/invoiceswork_arrangement, avg_office_days_per_week; commuter benefit lines (GL 6700)
Reconciling to the ledger/v1/journal-entriessource_type + source_id link back to invoices / expense reports

Errors

Errors use conventional HTTP status codes and a consistent body:

{"error": {"type": "invalid_request_error", "message": "Input should be less than or equal to 200", "param": "limit"}}
StatustypeMeaning
400invalid_request_errorA parameter is missing, malformed or out of range.
401authentication_errorNo API key, or a malformed Authorization header.
404not_foundThe object does not exist.
429rate_limit_errorToo many requests; retry after X-RateLimit-Reset seconds.

Rate limits

Each key may make 600 requests per minute. Every response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.

Meta

Service health.

Health check

GET/v1/health

Unauthenticated liveness probe.

curl "https://meridian-erp.duckdns.org/v1/health"
Example response
{
  "status": "ok",
  "api_version": "2026-09-01"
}

Organization

Tenant configuration and master data: legal entities, locations, cost centers and the chart of accounts.

Retrieve company

GET/v1/company

Tenant-level settings: legal name, base currency, fiscal calendar and the date range for which transactional data is available.

Returns a Company object.

curl "https://meridian-erp.duckdns.org/v1/company" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "ten_docusign",
  "name": "DocuSign, Inc.",
  "erp_instance": "docusign-prod",
  "base_currency": "USD",
  "fiscal_year_end": "01-31",
  "fiscal_calendar": "Fiscal years run Feb 1 - Jan 31 and are named for the calendar year in which they end (FY2026 = 2025-02-01 to 2026-01-31). Period P01 is February.",
  "data_available_from": "2024-02-01",
  "data_available_to": "2026-09-30",
  "headquarters": {
    "line1": "221 Main Street, Suite 1550",
    "city": "San Francisco",
    "region": "CA",
    "postal_code": "94105",
    "country": "US"
  }
}

List locations

GET/v1/locations

Offices, colocation data centers, warehouses and virtual (remote-employee) locations. Location IDs are referenced from document lines and headcount.

ParameterTypeDescription
type queryenum: office, colocation_data_center, warehouse, virtual | nullFilter by location type.
country querystring | nullISO 3166-1 alpha-2 country code.
legal_entity_id querystring | null
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of Location.

curl "https://meridian-erp.duckdns.org/v1/locations?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "loc_sfo_hq",
      "code": "SFO-HQ",
      "name": "San Francisco HQ",
      "type": "office",
      "legal_entity_id": "le_us",
      "address": {
        "line1": "221 Main Street",
        "city": "San Francisco",
        "region": "CA",
        "postal_code": "94105",
        "country": "US"
      },
      "country": "US",
      "latitude": 37.7908,
      "longitude": -122.3925,
      "floor_area": {
        "value": 284000,
        "unit": "sq_ft"
      },
      "tenure": "leased",
      "status": "active",
      "opened_on": "2016-01-01",
      "nearest_airport": "SFO",
      "cost_center_code": "5300"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 21
}

Retrieve a location

GET/v1/locations/{location_id}
ParameterTypeDescription
location_id path, requiredstring

Returns a Location object.

curl "https://meridian-erp.duckdns.org/v1/locations/loc_sfo_hq" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "loc_sfo_hq",
  "code": "SFO-HQ",
  "name": "San Francisco HQ",
  "type": "office",
  "legal_entity_id": "le_us",
  "address": {
    "line1": "221 Main Street",
    "city": "San Francisco",
    "region": "CA",
    "postal_code": "94105",
    "country": "US"
  },
  "country": "US",
  "latitude": 37.7908,
  "longitude": -122.3925,
  "floor_area": {
    "value": 284000,
    "unit": "sq_ft"
  },
  "tenure": "leased",
  "status": "active",
  "opened_on": "2016-01-01",
  "nearest_airport": "SFO",
  "cost_center_code": "5300"
}

List cost centers

GET/v1/cost-centers
ParameterTypeDescription
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of CostCenter.

curl "https://meridian-erp.duckdns.org/v1/cost-centers?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "cc_1000",
      "code": "1000",
      "name": "Executive Office",
      "status": "active",
      "parent_code": null
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 14
}

List GL accounts

GET/v1/gl-accounts

The chart of accounts. Every document line carries a gl_account_code from this list.

ParameterTypeDescription
account_type queryenum: asset, liability, cost_of_revenue, expense | null
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of GLAccount.

curl "https://meridian-erp.duckdns.org/v1/gl-accounts?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "gla_1510",
      "code": "1510",
      "name": "Computer Equipment",
      "account_type": "asset",
      "status": "active"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 37
}

Procurement

Vendors and purchase orders.

List vendors

GET/v1/vendors
ParameterTypeDescription
category querystring | nullFilter by vendor category.
country querystring | null
q querystring | nullCase-insensitive substring match on vendor name.
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of Vendor.

curl "https://meridian-erp.duckdns.org/v1/vendors?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "ven_55357933A7310D2DB90C",
      "vendor_number": "V10000",
      "name": "Amazon Web Services, Inc.",
      "category": "cloud_hosting",
      "country": "US",
      "naics_code": "518210",
      "payment_terms": "NET30",
      "status": "active",
      "default_currency": "USD",
      "created_at": "2019-03-11T17:02:44Z",
      "updated_at": "2025-07-12T09:14:35Z"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 83
}

Retrieve a vendor

GET/v1/vendors/{vendor_id}
ParameterTypeDescription
vendor_id path, requiredstring

Returns a Vendor object.

curl "https://meridian-erp.duckdns.org/v1/vendors/ven_55357933A7310D2DB90C" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "ven_55357933A7310D2DB90C",
  "vendor_number": "V10000",
  "name": "Amazon Web Services, Inc.",
  "category": "cloud_hosting",
  "country": "US",
  "naics_code": "518210",
  "payment_terms": "NET30",
  "status": "active",
  "default_currency": "USD",
  "created_at": "2019-03-11T17:02:44Z",
  "updated_at": "2025-07-12T09:14:35Z"
}

List purchase orders

GET/v1/purchase-orders

Purchase orders, mainly for IT hardware, data center equipment and events. Sorted by order_date ascending.

ParameterTypeDescription
vendor_id querystring | null
legal_entity_id querystring | null
order_date_from querystring (date) | nullInclusive, YYYY-MM-DD.
order_date_to querystring (date) | nullInclusive, YYYY-MM-DD.
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of PurchaseOrder.

curl "https://meridian-erp.duckdns.org/v1/purchase-orders?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "po_8F948A282EF94AD13180",
      "po_number": "PO-2024-40059",
      "vendor_id": "ven_DA4645F8EC567FDD49F6",
      "vendor_name": "Moscone Center (ASM Global)",
      "legal_entity_id": "le_us",
      "order_date": "2023-11-04",
      "currency": "USD",
      "total_amount": 1594000,
      "status": "closed",
      "requesting_cost_center_code": "4100",
      "memo": "Momentum 2024 venue",
      "lines": [
        {
          "description": "Momentum 2024 - venue rental, Moscone West",
          "gl_account_code": "6400",
          "cost_center_code": "4100",
          "location_id": null,
          "quantity": 4,
          "unit_of_measure": "day",
          "unit_price": 345000.0,
          "amount": 1380000,
          "service_period_start": "2024-05-13",
          "service_period_end": "2024-05-16",
          "commodity_category": "event_venue",
          "custom_fields": {
            "event": "Momentum 2024",
            "event_city": "San Francisco"
          },
          "line_number": 1,
          "id": "pol_8DE96E01EA6151513676"
        },
        {
          "description": "Momentum 2024 - electrical service & rigging",
          "gl_account_code": "6400",
          "cost_center_code": "4100",
          "location_id": null,
          "quantity": null,
          "unit_of_measure": null,
          "unit_price": null,
          "amount": 214000,
          "service_period_start": "2024-05-13",
          "service_period_end": "2024-05-16",
          "commodity_category": "event_venue",
          "custom_fields": {
            "event": "Momentum 2024",
            "event_city": "San Francisco",
            "venue_metered_kwh": "58460"
          },
          "line_number": 2,
          "id": "pol_D3CCEC6761BB7235C1A6"
        }
      ],
      "created_at": "2023-11-04T16:13:16Z",
      "updated_at": "2023-12-14T12:27:28Z"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 61
}

Retrieve a purchase order

GET/v1/purchase-orders/{purchase_order_id}
ParameterTypeDescription
purchase_order_id path, requiredstring

Returns a PurchaseOrder object.

curl "https://meridian-erp.duckdns.org/v1/purchase-orders/po_8F948A282EF94AD13180" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "po_8F948A282EF94AD13180",
  "po_number": "PO-2024-40059",
  "vendor_id": "ven_DA4645F8EC567FDD49F6",
  "vendor_name": "Moscone Center (ASM Global)",
  "legal_entity_id": "le_us",
  "order_date": "2023-11-04",
  "currency": "USD",
  "total_amount": 1594000,
  "status": "closed",
  "requesting_cost_center_code": "4100",
  "memo": "Momentum 2024 venue",
  "lines": [
    {
      "description": "Momentum 2024 - venue rental, Moscone West",
      "gl_account_code": "6400",
      "cost_center_code": "4100",
      "location_id": null,
      "quantity": 4,
      "unit_of_measure": "day",
      "unit_price": 345000.0,
      "amount": 1380000,
      "service_period_start": "2024-05-13",
      "service_period_end": "2024-05-16",
      "commodity_category": "event_venue",
      "custom_fields": {
        "event": "Momentum 2024",
        "event_city": "San Francisco"
      },
      "line_number": 1,
      "id": "pol_8DE96E01EA6151513676"
    },
    {
      "description": "Momentum 2024 - electrical service & rigging",
      "gl_account_code": "6400",
      "cost_center_code": "4100",
      "location_id": null,
      "quantity": null,
      "unit_of_measure": null,
      "unit_price": null,
      "amount": 214000,
      "service_period_start": "2024-05-13",
      "service_period_end": "2024-05-16",
      "commodity_category": "event_venue",
      "custom_fields": {
        "event": "Momentum 2024",
        "event_city": "San Francisco",
        "venue_metered_kwh": "58460"
      },
      "line_number": 2,
      "id": "pol_D3CCEC6761BB7235C1A6"
    }
  ],
  "created_at": "2023-11-04T16:13:16Z",
  "updated_at": "2023-12-14T12:27:28Z"
}

Payables

Accounts-payable invoices with line-level GL coding, quantities and units of measure.

List AP invoices

GET/v1/invoices

Accounts-payable (vendor) invoices with their line items, sorted by invoice_date ascending. Lines carry GL account, cost center, location, quantity and unit of measure (for example kWh on utility bills, kg on freight invoices, room nights on hotel invoices).

ParameterTypeDescription
vendor_id querystring | null
legal_entity_id querystring | null
location_id querystring | nullOnly invoices with at least one line for this location.
gl_account_code querystring | nullOnly invoices with at least one line on this GL account.
commodity_category querystring | nullOnly invoices with at least one line in this commodity category.
status queryenum: pending_approval, approved, paid | null
invoice_date_from querystring (date) | nullInclusive, YYYY-MM-DD.
invoice_date_to querystring (date) | nullInclusive, YYYY-MM-DD.
fiscal_period querystring | nulle.g. FY2026-P03.
updated_since querystring | nullISO-8601 timestamp; only objects updated at or after this time (for incremental sync).
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of Invoice.

curl "https://meridian-erp.duckdns.org/v1/invoices?commodity_category=electricity&invoice_date_from=2026-01-01&limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "inv_FD16CD0635790B0E4AB7",
      "document_number": "AP-102687",
      "vendor_invoice_number": "PAC-8487262",
      "vendor_id": "ven_DBF662A314870538BF3E",
      "vendor_name": "Pacific Gas and Electric Company",
      "legal_entity_id": "le_us",
      "invoice_date": "2026-10-02",
      "posting_date": "2026-10-03",
      "due_date": "2026-10-23",
      "fiscal_year": "FY2027",
      "fiscal_period": "FY2027-P09",
      "currency": "USD",
      "subtotal": 124136.49,
      "tax_amount": 0.0,
      "total_amount": 124136.49,
      "exchange_rate_to_usd": 1.0,
      "total_amount_usd": 124136.49,
      "status": "paid",
      "paid_on": "2026-10-20",
      "purchase_order_id": null,
      "memo": null,
      "lines": [
        {
          "description": "Electric service - B-19 Medium General Demand TOU",
          "gl_account_code": "6110",
          "cost_center_code": "5300",
          "location_id": "loc_sfo_hq",
          "quantity": 328286.531,
          "unit_of_measure": "kWh",
          "unit_price": 0.318,
          "amount": 104395.12,
          "service_period_start": "2026-09-01",
          "service_period_end": "2026-09-30",
          "commodity_category": "electricity",
          "custom_fields": {
            "service_agreement_id": "6912087341",
            "meter_number": "1009873245",
            "rate_schedule": "B19",
            "peak_demand_kw": "995"
          },
          "line_number": 1,
          "id": "invl_A051C98B3BDA1DE5BF1D"
        },
        {
          "description": "Gas service - G-NR2 Large Commercial",
          "gl_account_code": "6111",
          "cost_center_code": "5300",
          "location_id": "loc_sfo_hq",
          "quantity": 5467.069,
          "unit_of_measure": "therm",
          "unit_price": 2.41,
          "amount": 13175.64,
          "service_period_start": "2026-09-01",
          "service_period_end": "2026-09-30",
          "commodity_category": "natural_gas",
          "custom_fields": {
            "service_agreement_id": "6912087358",
            "meter_number": "G-04417781",
            "rate_schedule": "G-NR2"
          },
          "line_number": 2,
          "id": "invl_F6499E139E4A09380086"
        },
        {
          "description": "Clean Power SF - SuperGreen (100% renewable) premium",
          "gl_account_code": "6110",
          "cost_center_code": "5300",
          "location_id": "loc_sfo_hq",
          "quantity": 328286.531,
          "unit_of_measure": "kWh",
          "unit_price": 0.02,
          "amount": 6565.73,
          "service_period_start": "2026-09-01",
          "service_period_end": "2026-09-30",
          "commodity_category": "electricity",
          "custom_fields": {
            "program": "CleanPowerSF SuperGreen"
          },
          "line_number": 3,
          "id": "invl_EBDD187B0709179BD98E"
        }
      ],
      "created_at": "2026-10-03T15:07:01Z",
      "updated_at": "2026-10-24T18:40:23Z"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 2824
}

Retrieve an AP invoice

GET/v1/invoices/{invoice_id}
ParameterTypeDescription
invoice_id path, requiredstring

Returns a Invoice object.

curl "https://meridian-erp.duckdns.org/v1/invoices/inv_FD16CD0635790B0E4AB7" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "inv_FD16CD0635790B0E4AB7",
  "document_number": "AP-102687",
  "vendor_invoice_number": "PAC-8487262",
  "vendor_id": "ven_DBF662A314870538BF3E",
  "vendor_name": "Pacific Gas and Electric Company",
  "legal_entity_id": "le_us",
  "invoice_date": "2026-10-02",
  "posting_date": "2026-10-03",
  "due_date": "2026-10-23",
  "fiscal_year": "FY2027",
  "fiscal_period": "FY2027-P09",
  "currency": "USD",
  "subtotal": 124136.49,
  "tax_amount": 0.0,
  "total_amount": 124136.49,
  "exchange_rate_to_usd": 1.0,
  "total_amount_usd": 124136.49,
  "status": "paid",
  "paid_on": "2026-10-20",
  "purchase_order_id": null,
  "memo": null,
  "lines": [
    {
      "description": "Electric service - B-19 Medium General Demand TOU",
      "gl_account_code": "6110",
      "cost_center_code": "5300",
      "location_id": "loc_sfo_hq",
      "quantity": 328286.531,
      "unit_of_measure": "kWh",
      "unit_price": 0.318,
      "amount": 104395.12,
      "service_period_start": "2026-09-01",
      "service_period_end": "2026-09-30",
      "commodity_category": "electricity",
      "custom_fields": {
        "service_agreement_id": "6912087341",
        "meter_number": "1009873245",
        "rate_schedule": "B19",
        "peak_demand_kw": "995"
      },
      "line_number": 1,
      "id": "invl_A051C98B3BDA1DE5BF1D"
    },
    {
      "description": "Gas service - G-NR2 Large Commercial",
      "gl_account_code": "6111",
      "cost_center_code": "5300",
      "location_id": "loc_sfo_hq",
      "quantity": 5467.069,
      "unit_of_measure": "therm",
      "unit_price": 2.41,
      "amount": 13175.64,
      "service_period_start": "2026-09-01",
      "service_period_end": "2026-09-30",
      "commodity_category": "natural_gas",
      "custom_fields": {
        "service_agreement_id": "6912087358",
        "meter_number": "G-04417781",
        "rate_schedule": "G-NR2"
      },
      "line_number": 2,
      "id": "invl_F6499E139E4A09380086"
    },
    {
      "description": "Clean Power SF - SuperGreen (100% renewable) premium",
      "gl_account_code": "6110",
      "cost_center_code": "5300",
      "location_id": "loc_sfo_hq",
      "quantity": 328286.531,
      "unit_of_measure": "kWh",
      "unit_price": 0.02,
      "amount": 6565.73,
      "service_period_start": "2026-09-01",
      "service_period_end": "2026-09-30",
      "commodity_category": "electricity",
      "custom_fields": {
        "program": "CleanPowerSF SuperGreen"
      },
      "line_number": 3,
      "id": "invl_EBDD187B0709179BD98E"
    }
  ],
  "created_at": "2026-10-03T15:07:01Z",
  "updated_at": "2026-10-24T18:40:23Z"
}

Travel & Expense

Employee expense reports with itemized travel details.

List expense reports

GET/v1/expense-reports

Employee travel & expense reports with itemized lines, sorted by submitted_date ascending. Airfare lines include flight segments (IATA origin/destination, cabin class); lodging lines include nights and city; mileage, rideshare and car-rental lines include distances.

ParameterTypeDescription
employee_id querystring | null
legal_entity_id querystring | null
cost_center_code querystring | null
category querystring | nullOnly reports with at least one line in this category (e.g. airfare).
status queryenum: submitted, approved, reimbursed | null
submitted_date_from querystring (date) | null
submitted_date_to querystring (date) | null
fiscal_period querystring | null
updated_since querystring | null
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of ExpenseReport.

curl "https://meridian-erp.duckdns.org/v1/expense-reports?category=airfare&limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "exp_B177B86DE5AD937E5C62",
      "report_number": "ER-508449",
      "title": "Washington trip - Sep 2026",
      "employee": {
        "id": "emp_4DE62D12209F2C3B18BC",
        "employee_number": "E22394",
        "name": "Daniel Nguyen",
        "cost_center_code": "5200",
        "home_location_id": "loc_syd_01"
      },
      "legal_entity_id": "le_au",
      "trip_start_date": "2026-09-24",
      "trip_end_date": "2026-09-26",
      "submitted_date": "2026-10-08",
      "approved_date": "2026-10-13",
      "fiscal_year": "FY2027",
      "fiscal_period": "FY2027-P09",
      "currency": "AUD",
      "total_amount": 6753.18,
      "exchange_rate_to_usd": 0.6717,
      "total_amount_usd": 4536.11,
      "status": "reimbursed",
      "lines": [
        {
          "expense_date": "2026-09-11",
          "category": "airfare",
          "gl_account_code": "6300",
          "merchant": "Qantas",
          "amount": 5048.29,
          "currency": "AUD",
          "transaction_amount": 3390.94,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "ticket_number": "5843757990917",
          "trip_type": "round_trip",
          "flight_segments": [
            {
              "origin": "SYD",
              "destination": "IAD",
              "departure_date": "2026-09-24",
              "carrier": "Qantas",
              "flight_number": "QA743",
              "cabin_class": "economy",
              "fare_class": "H"
            },
            {
              "origin": "IAD",
              "destination": "SYD",
              "departure_date": "2026-09-26",
              "carrier": "Qantas",
              "flight_number": "QA632",
              "cabin_class": "economy",
              "fare_class": "Y"
            }
          ],
          "booking_channel": "Navan",
          "line_number": 1,
          "id": "expl_7BA19B14266058FAE9FA",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-26",
          "category": "lodging",
          "gl_account_code": "6310",
          "merchant": "Courtyard by Marriott Washington",
          "amount": 1273.0,
          "currency": "AUD",
          "transaction_amount": 855.08,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "nights": 2,
          "check_in_date": "2026-09-24",
          "check_out_date": "2026-09-26",
          "city": "Washington",
          "country": "US",
          "line_number": 2,
          "id": "expl_B0AD38CDADA68FA05B38",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-24",
          "category": "rideshare",
          "gl_account_code": "6320",
          "merchant": "Lyft",
          "amount": 88.27,
          "currency": "AUD",
          "transaction_amount": 59.29,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "city": "Washington",
          "distance": 21.5,
          "distance_unit": "mi",
          "line_number": 3,
          "id": "expl_A953D1140E705F92FDFB",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-25",
          "category": "rideshare",
          "gl_account_code": "6320",
          "merchant": "Lyft",
          "amount": 104.49,
          "currency": "AUD",
          "transaction_amount": 70.18,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "city": "Washington",
          "distance": 18.2,
          "distance_unit": "mi",
          "line_number": 4,
          "id": "expl_61842D348F0E51D1F588",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-26",
          "category": "rideshare",
          "gl_account_code": "6320",
          "merchant": "Uber",
          "amount": 61.07,
          "currency": "AUD",
          "transaction_amount": 41.02,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "city": "Washington",
          "distance": 4.5,
          "distance_unit": "mi",
          "line_number": 5,
          "id": "expl_C6E67667406F0ACDB0B2",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-24",
          "category": "rideshare",
          "gl_account_code": "6320",
          "merchant": "Uber",
          "amount": 99.96,
          "currency": "AUD",
          "transaction_amount": 67.14,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "corporate_card",
          "city": "Washington",
          "distance": 13.6,
          "distance_unit": "mi",
          "line_number": 6,
          "id": "expl_8703707AD0B8FA18A51B",
          "cost_center_code": "5200"
        },
        {
          "expense_date": "2026-09-25",
          "category": "rideshare",
          "gl_account_code": "6320",
          "merchant": "Lyft",
          "amount": 78.1,
          "currency": "AUD",
          "transaction_amount": 52.46,
          "transaction_currency": "USD",
          "business_purpose": "Customer meetings",
          "payment_method": "personal_card",
          "city": "Washington",
          "distance": 11.7,
          "distance_unit": "mi",
          "line_number": 7,
          "id": "expl_71B53236280E0BDD1D0E",
          "cost_center_code": "5200"
        }
      ],
      "created_at": "2026-10-08T20:02:25Z",
      "updated_at": "2026-10-18T10:40:59Z"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 8473
}

Retrieve an expense report

GET/v1/expense-reports/{expense_report_id}
ParameterTypeDescription
expense_report_id path, requiredstring

Returns a ExpenseReport object.

curl "https://meridian-erp.duckdns.org/v1/expense-reports/exp_B177B86DE5AD937E5C62" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "id": "exp_B177B86DE5AD937E5C62",
  "report_number": "ER-508449",
  "title": "Washington trip - Sep 2026",
  "employee": {
    "id": "emp_4DE62D12209F2C3B18BC",
    "employee_number": "E22394",
    "name": "Daniel Nguyen",
    "cost_center_code": "5200",
    "home_location_id": "loc_syd_01"
  },
  "legal_entity_id": "le_au",
  "trip_start_date": "2026-09-24",
  "trip_end_date": "2026-09-26",
  "submitted_date": "2026-10-08",
  "approved_date": "2026-10-13",
  "fiscal_year": "FY2027",
  "fiscal_period": "FY2027-P09",
  "currency": "AUD",
  "total_amount": 6753.18,
  "exchange_rate_to_usd": 0.6717,
  "total_amount_usd": 4536.11,
  "status": "reimbursed",
  "lines": [
    {
      "expense_date": "2026-09-11",
      "category": "airfare",
      "gl_account_code": "6300",
      "merchant": "Qantas",
      "amount": 5048.29,
      "currency": "AUD",
      "transaction_amount": 3390.94,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "ticket_number": "5843757990917",
      "trip_type": "round_trip",
      "flight_segments": [
        {
          "origin": "SYD",
          "destination": "IAD",
          "departure_date": "2026-09-24",
          "carrier": "Qantas",
          "flight_number": "QA743",
          "cabin_class": "economy",
          "fare_class": "H"
        },
        {
          "origin": "IAD",
          "destination": "SYD",
          "departure_date": "2026-09-26",
          "carrier": "Qantas",
          "flight_number": "QA632",
          "cabin_class": "economy",
          "fare_class": "Y"
        }
      ],
      "booking_channel": "Navan",
      "line_number": 1,
      "id": "expl_7BA19B14266058FAE9FA",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-26",
      "category": "lodging",
      "gl_account_code": "6310",
      "merchant": "Courtyard by Marriott Washington",
      "amount": 1273.0,
      "currency": "AUD",
      "transaction_amount": 855.08,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "nights": 2,
      "check_in_date": "2026-09-24",
      "check_out_date": "2026-09-26",
      "city": "Washington",
      "country": "US",
      "line_number": 2,
      "id": "expl_B0AD38CDADA68FA05B38",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-24",
      "category": "rideshare",
      "gl_account_code": "6320",
      "merchant": "Lyft",
      "amount": 88.27,
      "currency": "AUD",
      "transaction_amount": 59.29,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "city": "Washington",
      "distance": 21.5,
      "distance_unit": "mi",
      "line_number": 3,
      "id": "expl_A953D1140E705F92FDFB",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-25",
      "category": "rideshare",
      "gl_account_code": "6320",
      "merchant": "Lyft",
      "amount": 104.49,
      "currency": "AUD",
      "transaction_amount": 70.18,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "city": "Washington",
      "distance": 18.2,
      "distance_unit": "mi",
      "line_number": 4,
      "id": "expl_61842D348F0E51D1F588",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-26",
      "category": "rideshare",
      "gl_account_code": "6320",
      "merchant": "Uber",
      "amount": 61.07,
      "currency": "AUD",
      "transaction_amount": 41.02,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "city": "Washington",
      "distance": 4.5,
      "distance_unit": "mi",
      "line_number": 5,
      "id": "expl_C6E67667406F0ACDB0B2",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-24",
      "category": "rideshare",
      "gl_account_code": "6320",
      "merchant": "Uber",
      "amount": 99.96,
      "currency": "AUD",
      "transaction_amount": 67.14,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "corporate_card",
      "city": "Washington",
      "distance": 13.6,
      "distance_unit": "mi",
      "line_number": 6,
      "id": "expl_8703707AD0B8FA18A51B",
      "cost_center_code": "5200"
    },
    {
      "expense_date": "2026-09-25",
      "category": "rideshare",
      "gl_account_code": "6320",
      "merchant": "Lyft",
      "amount": 78.1,
      "currency": "AUD",
      "transaction_amount": 52.46,
      "transaction_currency": "USD",
      "business_purpose": "Customer meetings",
      "payment_method": "personal_card",
      "city": "Washington",
      "distance": 11.7,
      "distance_unit": "mi",
      "line_number": 7,
      "id": "expl_71B53236280E0BDD1D0E",
      "cost_center_code": "5200"
    }
  ],
  "created_at": "2026-10-08T20:02:25Z",
  "updated_at": "2026-10-18T10:40:59Z"
}

General Ledger

Posted journal entries.

List journal entries

GET/v1/journal-entries

Posted general-ledger journal entries generated from AP invoices and approved expense reports, sorted by posting_date ascending.

ParameterTypeDescription
legal_entity_id querystring | null
source_type queryenum: ap_invoice, expense_report | null
gl_account_code querystring | nullOnly entries touching this account.
posting_date_from querystring (date) | null
posting_date_to querystring (date) | null
fiscal_period querystring | null
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of JournalEntry.

curl "https://meridian-erp.duckdns.org/v1/journal-entries?limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "je_802DA07D21F1C3EEDCD2",
      "entry_number": "JE-508301",
      "posting_date": "2026-10-13",
      "fiscal_year": "FY2027",
      "fiscal_period": "FY2027-P09",
      "legal_entity_id": "le_uk",
      "currency": "GBP",
      "source_type": "expense_report",
      "source_id": "exp_4370C46B229C95854C3B",
      "description": "Munich trip - Sep 2026",
      "lines": [
        {
          "line_number": 1,
          "gl_account_code": "6300",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 383.7,
          "credit": 0.0,
          "description": "airfare - British Airways"
        },
        {
          "line_number": 2,
          "gl_account_code": "6310",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 366.73,
          "credit": 0.0,
          "description": "lodging - Hilton Munich"
        },
        {
          "line_number": 3,
          "gl_account_code": "6320",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 39.15,
          "credit": 0.0,
          "description": "rideshare - Uber"
        },
        {
          "line_number": 4,
          "gl_account_code": "6320",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 19.78,
          "credit": 0.0,
          "description": "rideshare - FREE NOW"
        },
        {
          "line_number": 5,
          "gl_account_code": "6320",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 30.81,
          "credit": 0.0,
          "description": "rideshare - Bolt"
        },
        {
          "line_number": 6,
          "gl_account_code": "6340",
          "cost_center_code": "3200",
          "location_id": null,
          "debit": 75.71,
          "credit": 0.0,
          "description": "meals - Sweetgreen"
        },
        {
          "line_number": 7,
          "gl_account_code": "2100",
          "cost_center_code": null,
          "location_id": null,
          "debit": 0.0,
          "credit": 915.88,
          "description": "Reimbursable - Sakura Chen"
        }
      ],
      "created_at": "2026-10-08T20:26:25Z"
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 11297
}

People

Month-end headcount by location.

List headcount snapshots

GET/v1/headcount

Month-end headcount by location, including work-arrangement split (onsite / hybrid / remote) and average office attendance.

ParameterTypeDescription
location_id querystring | null
period_from querystring | nullYYYY-MM, inclusive.
period_to querystring | nullYYYY-MM, inclusive.
limit queryinteger · default 50Page size (1-200).
cursor querystring | nullOpaque pagination cursor from a previous response's next_cursor.

Returns a list envelope whose data is an array of HeadcountSnapshot.

curl "https://meridian-erp.duckdns.org/v1/headcount?period_from=2026-09&limit=1" \
  -H "Authorization: Bearer $MERIDIAN_API_KEY"
Example response
{
  "object": "list",
  "data": [
    {
      "id": "hc_7B9C6C19B804B0CED47D",
      "period": "2026-09",
      "as_of_date": "2026-09-30",
      "fiscal_period": "FY2027-P08",
      "location_id": "loc_remote_eu",
      "legal_entity_id": "le_ie",
      "headcount": 172,
      "fte": 169.4,
      "contractors": 12,
      "work_arrangement": {
        "onsite": 0,
        "hybrid": 0,
        "remote": 172
      },
      "avg_office_days_per_week": null
    }
  ],
  "has_more": true,
  "next_cursor": "bzox",
  "total_count": 512
}

Objects

Address

FieldTypeDescription
line1string
citystring
region optionalstring | null
postal_code optionalstring | null
countrystringISO 3166-1 alpha-2 country code.

Company

FieldTypeDescription
idstring
namestring
erp_instancestring
base_currencystringReporting currency for consolidated (*_usd) amounts.
fiscal_year_endstringMM-DD of fiscal year end.
fiscal_calendarstring
data_available_fromstring (date)
data_available_tostring (date)
headquartersAddress

CostCenter

FieldTypeDescription
idstring
codestring
namestring
parent_code optionalstring | null
statusstring

DocumentLine

FieldTypeDescription
idstring
line_numberinteger
descriptionstring
gl_account_codestring
cost_center_codestring
location_id optionalstring | nullSite the cost relates to, when applicable.
quantity optionalnumber | nullBilled quantity in unit_of_measure (e.g. kWh, therm, kg, room_night, unit).
unit_of_measure optionalstring | nulle.g. kWh, therm, m3, US_gal, kg, lb, metric_ton, CCF, room_night, unit, seat, GB-Mo.
unit_price optionalnumber | null
amountnumberLine amount in the document currency, excluding tax. Credits are negative.
service_period_start optionalstring (date) | null
service_period_end optionalstring (date) | null
commodity_category optionalstring | nullNormalized commodity, e.g. electricity, natural_gas, district_heating, diesel_fuel, refrigerant, water, waste, freight, cloud_compute_storage, it_hardware, hotel_accommodation.
custom_fields optionalobject (map)Vendor/commodity specific fields such as meter_number, rate_schedule, aws_region, refrigerant_type, waste_stream, transport_mode, origin, destination.

EmployeeRef

FieldTypeDescription
idstring
employee_numberstring
namestring
cost_center_codestring
home_location_idstring

Error

FieldTypeDescription
errorErrorBody

ErrorBody

FieldTypeDescription
typestringMachine-readable error type, e.g. authentication_error, invalid_request_error, not_found.
messagestringHuman-readable description of the error.
param optionalstring | nullThe request parameter the error relates to, if any.

ExpenseLine

FieldTypeDescription
idstring
line_numberinteger
expense_datestring (date)
categoryenum: airfare, lodging, car_rental, fuel, rideshare, rail, mileage, parking, meals, conference_fees, other
gl_account_codestring
cost_center_codestring
merchantstring
amountnumberAmount in the report currency.
currencystring
transaction_amountnumberAmount in the currency the card was charged in.
transaction_currencystring
business_purposestring
payment_methodenum: corporate_card, personal_card
flight_segments optionalarray of FlightSegment | nullPresent on airfare lines.
ticket_number optionalstring | null
trip_type optionalstring | null
booking_channel optionalstring | null
rail_segments optionalarray of RailSegment | nullPresent on rail lines.
nights optionalinteger | nullPresent on lodging lines.
check_in_date optionalstring (date) | null
check_out_date optionalstring (date) | null
city optionalstring | null
country optionalstring | null
rental_days optionalinteger | null
vehicle_class optionalstring | nullPresent on car_rental lines, e.g. compact, standard_suv, hybrid, electric.
distance optionalnumber | nullPresent on mileage and rideshare lines.
distance_driven optionalnumber | nullPresent on car_rental lines.
distance_unit optionalenum: mi, km | null
vehicle_type optionalstring | null
fuel_quantity optionalnumber | null
fuel_unit optionalstring | null
fuel_type optionalstring | null
attendees optionalinteger | null

ExpenseReport

FieldTypeDescription
idstring
report_numberstring
titlestring
employeeEmployeeRef
legal_entity_idstring
trip_start_datestring (date)
trip_end_datestring (date)
submitted_datestring (date)
approved_date optionalstring (date) | null
fiscal_yearstring
fiscal_periodstring
currencystring
total_amountnumber
exchange_rate_to_usdnumber
total_amount_usdnumber
statusenum: submitted, approved, reimbursed
linesarray of ExpenseLine
created_atstring
updated_atstring

FlightSegment

FieldTypeDescription
originstringIATA airport code.
destinationstringIATA airport code.
departure_datestring (date)
carrierstring
flight_numberstring
cabin_classenum: economy, premium_economy, business, first
fare_classstring

GLAccount

FieldTypeDescription
idstring
codestring
namestring
account_typeenum: asset, liability, cost_of_revenue, expense
statusstring

HeadcountSnapshot

FieldTypeDescription
idstring
periodstringCalendar month, YYYY-MM.
as_of_datestring (date)
fiscal_periodstring
location_idstring
legal_entity_idstring
headcountintegerActive employees assigned to the location at month end.
ftenumber
contractorsinteger
work_arrangementWorkArrangement
avg_office_days_per_week optionalnumber | nullBadge-derived average in-office days per week for assigned employees.

Invoice

FieldTypeDescription
idstring
document_numberstringInternal AP document number.
vendor_invoice_numberstring
vendor_idstring
vendor_namestring
legal_entity_idstring
invoice_datestring (date)
posting_datestring (date)
due_datestring (date)
fiscal_yearstring
fiscal_periodstring
currencystring
subtotalnumber
tax_amountnumber
total_amountnumber
exchange_rate_to_usdnumber
total_amount_usdnumber
statusenum: pending_approval, approved, paid
paid_on optionalstring (date) | null
purchase_order_id optionalstring | null
memo optionalstring | null
linesarray of DocumentLine
created_atstring
updated_atstring

JournalEntry

FieldTypeDescription
idstring
entry_numberstring
posting_datestring (date)
fiscal_yearstring
fiscal_periodstring
legal_entity_idstring
currencystring
source_typeenum: ap_invoice, expense_report
source_idstringID of the originating invoice or expense report.
descriptionstring
linesarray of JournalLine
created_atstring

JournalLine

FieldTypeDescription
line_numberinteger
gl_account_codestring
cost_center_code optionalstring | null
location_id optionalstring | null
debitnumber
creditnumber
descriptionstring

LegalEntity

FieldTypeDescription
idstring
codestring
namestring
countrystring
functional_currencystringISO 4217 currency in which this entity books documents.
tax_idstring
parent_id optionalstring | null

Location

FieldTypeDescription
idstring
codestring
namestring
typeenum: office, colocation_data_center, warehouse, virtualvirtual locations hold remote employees and have no premises.
legal_entity_idstring
address optionalAddress | null
countrystring
latitude optionalnumber | null
longitude optionalnumber | null
floor_area optionalQuantity | nullRentable floor area. Null for data centers and virtual locations.
tenureenum: leased, owned, colocation_contract, none
statusenum: active, closed
opened_onstring (date)
nearest_airport optionalstring | nullIATA code.
cost_center_code optionalstring | nullDefault cost center for site costs.

PurchaseOrder

FieldTypeDescription
idstring
po_numberstring
vendor_idstring
vendor_namestring
legal_entity_idstring
order_datestring (date)
currencystring
total_amountnumber
statusenum: open, received, closed
requesting_cost_center_codestring
memo optionalstring | null
linesarray of DocumentLine
created_atstring
updated_atstring

Quantity

FieldTypeDescription
valuenumber
unitstring

RailSegment

FieldTypeDescription
origin_stationstring
destination_stationstring
operatorstring
travel_classenum: standard, first
trip_typeenum: one_way, round_trip

Vendor

FieldTypeDescription
idstring
vendor_numberstring
namestring
categorystringProcurement category, e.g. cloud_hosting, utility_electricity, real_estate_lease, freight_parcel.
countrystring
naics_codestring2022 NAICS code of the vendor's primary activity.
payment_termsstring
default_currencystring
statusstring
created_atstring
updated_atstring

WorkArrangement

FieldTypeDescription
onsiteinteger
hybridinteger
remoteinteger