Lydira API
TR

Guides

Import entities

What you can push into Lydira, what each type holds, and a body you can post as it stands.

This page is a rendering of GET /api/v1/imports/entities, which is the authoritative version and moves with the product. Read it at runtime rather than hardcoding a field list, and use the /validate twin before the real write.
  • external_id is required on every row. It is your own key in your own system, and it is what makes a retry safe.
  • Dry-run is the same code path. POST …/validate runs it with nothing persisted, so green there means green on the real thing.
  • A bad row fails alone. The rest of the batch still imports, and the failed row comes back with a per-field reason.

Writable

customersCustomers
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/customers/validate
  • importPOST /api/v1/imports/customers
  • feedGET /api/v1/imports/customers/records
  • read_backGET /api/v1/imports/customers/records/{external_id}
Fields(16)
  • external_idstring

    source primary key → ExternalReference

  • namestringrequiredPII
  • customer_typeenum

    individualcorporate

  • emailemailPII
  • phonephonePII
  • legal_namestring
  • tax_numbertax_number
  • tax_officestring
  • address_linestringPII
  • address_districtstringPII
  • address_citystringPII
  • address_statestringPII
  • address_zipstringPII
  • preferred_currencycurrency
  • codestring
  • notesstringPII

    free text; imported as a customer note

Sample body
{
  "rows": [
    {
      "external_id": "CUSTOMER-1001",
      "name": "Ada Lovelace",
      "customer_type": "individual",
      "email": "ada@example.com",
      "phone": "+905551112233",
      "legal_name": "Lovelace Seyahat A.Ş.",
      "tax_office": "Beşiktaş",
      "address_line": "Nispetiye Cad. No:12",
      "address_district": "Beşiktaş",
      "address_city": "İstanbul",
      "address_state": "",
      "address_zip": "34340",
      "preferred_currency": "EUR",
      "code": "AC-1001",
      "notes": "Imported from the source system."
    }
  ]
}
suppliersSuppliers
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/suppliers/validate
  • importPOST /api/v1/imports/suppliers
  • feedGET /api/v1/imports/suppliers/records
  • read_backGET /api/v1/imports/suppliers/records/{external_id}
Fields(16)
  • external_idstring
  • namestringrequired
  • supplier_typeenum

    integer-backed enum — resolved against TravelSupplier.supplier_types

    otherairlinehoteldmccruisetour_operatorinsuranceactivitytransferrailcar_rentalconsolidatorgdsvisacharteragencycateringtechnicalproductiondecorationvenuephoto_videoentertainmentsecuritystaffing

  • codestring
  • iata_codestring
  • emailemail
  • phonephone
  • country_codestring
  • tax_numbertax_number
  • tax_officestring
  • address_linestringPII
  • address_districtstringPII
  • address_citystringPII
  • address_statestringPII
  • address_zipstringPII
  • websitestring
Sample body
{
  "rows": [
    {
      "external_id": "SUPPLIER-1001",
      "name": "Ada Lovelace",
      "supplier_type": "hotel",
      "code": "AC-1001",
      "iata_code": "TK",
      "email": "ada@example.com",
      "phone": "+905551112233",
      "country_code": "TR",
      "tax_office": "Beşiktaş",
      "address_line": "Nispetiye Cad. No:12",
      "address_district": "Beşiktaş",
      "address_city": "İstanbul",
      "address_state": "",
      "address_zip": "34340",
      "website": "https://example.com"
    }
  ]
}
leadsLeads
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/leads/validate
  • importPOST /api/v1/imports/leads
  • feedGET /api/v1/imports/leads/records
  • read_backGET /api/v1/imports/leads/records/{external_id}
Fields(12)
  • external_idstring
  • namestringrequiredPII
  • emailemailPII
  • phonephonePII
  • stageenum

    inboxqualifiednurturingproposalwonlost

  • sourcetaxonomy

    taxonomy: lead_source

  • estimated_valuemoney
  • currencycurrency
  • party_sizeinteger
  • destinationsstring
  • customer_external_idreference

    links to an imported customer

  • notesstringPII

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "LEAD-1001",
      "name": "Ada Lovelace",
      "email": "ada@example.com",
      "phone": "+905551112233",
      "stage": "inbox",
      "source": "website_form",
      "estimated_value": "1250.00",
      "currency": "EUR",
      "party_size": 2,
      "destinations": "Roma, Floransa",
      "customer_external_id": "CUSTOMER-1001",
      "notes": "Imported from the source system."
    }
  ]
}
tour_departuresTour departures
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/tour_departures/validate
  • importPOST /api/v1/imports/tour_departures
  • feedGET /api/v1/imports/tour_departures/records
  • read_backGET /api/v1/imports/tour_departures/records/{external_id}
Fields(9)
  • external_idstring

    source primary key → ExternalReference

  • titlestringrequired
  • starts_ondate
  • ends_ondate
  • currencycurrency
  • max_capacityinteger
  • inventory_stateenum

    openclosed_directon_requestmin_not_metsold_outcancelleddepartedcompleted

  • notesstring
  • supplier_external_idreference

    the operator we bought the seat from

References

  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "TOUR-DEPARTURE-1001",
      "title": "Title",
      "starts_on": "2026-03-14",
      "ends_on": "2026-03-18",
      "currency": "EUR",
      "max_capacity": 2,
      "inventory_state": "open",
      "notes": "Imported from the source system.",
      "supplier_external_id": "SUPPLIER-1001"
    }
  ]
}
car_rentalsCar rentals
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/car_rentals/validate
  • importPOST /api/v1/imports/car_rentals
  • feedGET /api/v1/imports/car_rentals/records
  • read_backGET /api/v1/imports/car_rentals/records/{external_id}
Fields(20)
  • external_idstring
  • vehicle_classstring
  • pickup_locationstring
  • dropoff_locationstring
  • pickup_atdatetime
  • return_atdatetime
  • pax_countinteger
  • currencycurrency
  • customer_external_idreference
  • supplier_external_idreference
  • statusenum

    draftoptionconfirmedoutreturnedcancelledno_show

  • notesstring
  • rate_basisenum

    net ⇒ cost typed / sell derived; commissionable ⇒ the reverse

    netcommissionable

  • margin_modeenum

    percent ⇒ the margin was typed as a %; amount ⇒ as a flat figure

    percentamount

  • option_datedate
  • transaction_datedate

    işlem tarihi — the FX anchor for every cost line

  • invoice_datedate
  • cost_lineslist

    cost-side pricing lines for the "car_rental" pricing context

  • sell_lineslist

    sell-side pricing lines for the "car_rental" pricing context

  • travelerslistPII

    guests; auto-saved to the customer's traveller directory

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "CAR-RENTAL-1001",
      "vehicle_class": "compact",
      "pickup_location": "IST Airport",
      "dropoff_location": "Beyoğlu, İstanbul",
      "pickup_at": "2026-03-14T09:30:00+03:00",
      "return_at": "2026-03-14T12:45:00+03:00",
      "pax_count": 2,
      "currency": "EUR",
      "customer_external_id": "CUSTOMER-1001",
      "supplier_external_id": "SUPPLIER-1001",
      "status": "draft",
      "notes": "Imported from the source system.",
      "rate_basis": "net",
      "margin_mode": "percent",
      "option_date": "2026-03-14",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "cost_lines": [
        {
          "kind": "daily_rate",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "sell_lines": [
        {
          "kind": "package_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "travelers": [
        {
          "first_name": "Ada",
          "last_name": "Lovelace",
          "nationality": "TR",
          "national_id": "10000000146",
          "passport_number": "U01234567",
          "passport_country": "TR",
          "passport_expiry": "2031-06-30",
          "date_of_birth": "1988-04-21",
          "gender": "female",
          "frequent_flyer_number": "TK123456789"
        }
      ]
    }
  ]
}
cruisesCruise bookings
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/cruises/validate
  • importPOST /api/v1/imports/cruises
  • feedGET /api/v1/imports/cruises/records
  • read_backGET /api/v1/imports/cruises/records/{external_id}
Fields(20)
  • external_idstring
  • ship_namestring
  • embark_ondate
  • disembark_ondate
  • cabin_countinteger
  • guest_countinteger
  • currencycurrency
  • customer_external_idreference
  • supplier_external_idreference
  • statusenum

    draftoptionconfirmedsailingcompletedcancelled

  • notesstring
  • rate_basisenum

    net ⇒ cost typed / sell derived; commissionable ⇒ the reverse

    netcommissionable

  • margin_modeenum

    percent ⇒ the margin was typed as a %; amount ⇒ as a flat figure

    percentamount

  • option_datedate
  • transaction_datedate

    işlem tarihi — the FX anchor for every cost line

  • invoice_datedate
  • cost_lineslist

    cost-side pricing lines for the "cruise" pricing context

  • sell_lineslist

    sell-side pricing lines for the "cruise" pricing context

  • travelerslistPII

    guests; auto-saved to the customer's traveller directory

  • cabin_categorystring

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "CRUISE-1001",
      "ship_name": "MSC Fantasia",
      "embark_on": "2026-03-14",
      "disembark_on": "2026-03-18",
      "cabin_count": 2,
      "guest_count": 2,
      "currency": "EUR",
      "customer_external_id": "CUSTOMER-1001",
      "supplier_external_id": "SUPPLIER-1001",
      "status": "draft",
      "notes": "Imported from the source system.",
      "rate_basis": "net",
      "margin_mode": "percent",
      "option_date": "2026-03-14",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "cost_lines": [
        {
          "kind": "cabin_fare",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "sell_lines": [
        {
          "kind": "package_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "travelers": [
        {
          "first_name": "Ada",
          "last_name": "Lovelace",
          "nationality": "TR",
          "national_id": "10000000146",
          "passport_number": "U01234567",
          "passport_country": "TR",
          "passport_expiry": "2031-06-30",
          "date_of_birth": "1988-04-21",
          "gender": "female",
          "frequent_flyer_number": "TK123456789"
        }
      ],
      "cabin_category": "balcony"
    }
  ]
}
hotel_staysHotel stays
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/hotel_stays/validate
  • importPOST /api/v1/imports/hotel_stays
  • feedGET /api/v1/imports/hotel_stays/records
  • read_backGET /api/v1/imports/hotel_stays/records/{external_id}
Fields(18)
  • external_idstring
  • check_in_ondaterequired
  • check_out_ondaterequired
  • currencycurrency
  • guest_countinteger
  • customer_external_idreference
  • supplier_external_idreference
  • statusenum

    draftoptionconfirmedin_housechecked_outcancelledno_show

  • notesstring
  • rate_basisenum

    net ⇒ cost typed / sell derived; commissionable ⇒ the reverse

    netcommissionable

  • margin_modeenum

    percent ⇒ the margin was typed as a %; amount ⇒ as a flat figure

    percentamount

  • option_datedate
  • transaction_datedate

    işlem tarihi — the FX anchor for every cost line

  • invoice_datedate
  • cost_lineslist

    cost-side pricing lines for the "hotel" pricing context

  • sell_lineslist

    sell-side pricing lines for the "hotel" pricing context

  • travelerslistPII

    guests; auto-saved to the customer's traveller directory

  • roomslist

    a room with a `nightly_rate` contributes a room_rate SELL line × nights

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "HOTEL-STAY-1001",
      "check_in_on": "2026-03-14",
      "check_out_on": "2026-03-18",
      "currency": "EUR",
      "guest_count": 2,
      "customer_external_id": "CUSTOMER-1001",
      "supplier_external_id": "SUPPLIER-1001",
      "status": "draft",
      "notes": "Imported from the source system.",
      "rate_basis": "net",
      "margin_mode": "percent",
      "option_date": "2026-03-14",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "cost_lines": [
        {
          "kind": "room_rate",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "sell_lines": [
        {
          "kind": "package_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "travelers": [
        {
          "first_name": "Ada",
          "last_name": "Lovelace",
          "nationality": "TR",
          "national_id": "10000000146",
          "passport_number": "U01234567",
          "passport_country": "TR",
          "passport_expiry": "2031-06-30",
          "date_of_birth": "1988-04-21",
          "gender": "female",
          "frequent_flyer_number": "TK123456789"
        }
      ],
      "rooms": [
        {
          "name": "Deluxe Sea View",
          "room_type": "double",
          "capacity": 2,
          "occupancy": 2,
          "nightly_rate": "180.00",
          "single_supplement_amount": "60.00",
          "single_supplement_currency": "EUR"
        }
      ]
    }
  ]
}
ticketsTickets
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/tickets/validate
  • importPOST /api/v1/imports/tickets
  • feedGET /api/v1/imports/tickets/records
  • read_backGET /api/v1/imports/tickets/records/{external_id}
Fields(17)
  • external_idstring

    source primary key → ExternalReference

  • pnrstring
  • gds_pnrstring
  • currencycurrency
  • settlement_channelenum

    who we pay — drives the airline payable + BSP recon

    bspdirectwebcardconsolidatorprepaid

  • fare_typestring

    taxonomy `fare_type` (normal, award, …)

  • miles_usedinteger
  • reservation_giver_namestring
  • issuing_systemstring
  • option_datedate

    ticketing deadline; set ⇒ the sale opens as `option` rather than `draft`

  • transaction_datedate

    işlem tarihi — the FX anchor for every cost line

  • invoice_datedate
  • notesstring
  • legslist

    shared itinerary; int/dom + one-way/round-trip are derived from the airports

  • passengerslistrequiredPII

    one Ticket each; identities are auto-saved to the customer's traveller directory

  • customer_external_idreference
  • supplier_external_idreference

    the settlement supplier (airline / consolidator) we pay

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "TICKET-1001",
      "pnr": "ABC123",
      "gds_pnr": "ABC123",
      "currency": "EUR",
      "settlement_channel": "bsp",
      "fare_type": "normal",
      "miles_used": 2,
      "reservation_giver_name": "Ada Lovelace",
      "issuing_system": "amadeus",
      "option_date": "2026-03-14",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "notes": "Imported from the source system.",
      "legs": [
        {
          "airline_code": "TK",
          "flight_number": "1985",
          "departure_airport": "IST",
          "arrival_airport": "FCO",
          "departure_at": "2026-03-14T09:30:00+03:00",
          "arrival_at": "2026-03-14T12:45:00+03:00",
          "cabin_class": "economy",
          "booking_class": "L",
          "fare_basis": "LLXOW",
          "baggage_allowance": "1PC",
          "status": "confirmed"
        }
      ],
      "passengers": [
        {
          "first_name": "Ada",
          "last_name": "Lovelace",
          "nationality": "TR",
          "national_id": "10000000146",
          "passport_number": "U01234567",
          "passport_country": "TR",
          "passport_expiry": "2031-06-30",
          "date_of_birth": "1988-04-21",
          "gender": "female",
          "frequent_flyer_number": "TK123456789",
          "name": "Ada Lovelace",
          "type": "adult",
          "ticket_number": "235-1234567890",
          "cost_lines": [
            {
              "kind": "base_fare",
              "amount": "1250.00",
              "label": "Imported line",
              "currency": "EUR",
              "vat_rate": "20",
              "tax_inclusive": true,
              "quantity": 1
            }
          ],
          "sell_lines": [
            {
              "kind": "package_price",
              "amount": "1250.00",
              "label": "Imported line",
              "currency": "EUR",
              "vat_rate": "20",
              "tax_inclusive": true,
              "quantity": 1
            }
          ]
        }
      ],
      "customer_external_id": "CUSTOMER-1001",
      "supplier_external_id": "SUPPLIER-1001"
    }
  ]
}
tour_bookingsTour bookings
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/tour_bookings/validate
  • importPOST /api/v1/imports/tour_bookings
  • feedGET /api/v1/imports/tour_bookings/records
  • read_backGET /api/v1/imports/tour_bookings/records/{external_id}
Fields(13)
  • external_idstring

    source primary key → ExternalReference

  • namestringrequiredPII

    lead passenger / party name

  • party_sizeintegerrequired
  • currencycurrency
  • phonephonePII
  • statusenum

    pendingconfirmedcancelled

  • notesstring
  • transaction_datedate

    işlem tarihi — the FX anchor for every line

  • invoice_datedate
  • cost_lineslist

    cost-side pricing lines for the "tour" pricing context

  • sell_lineslist

    sell-side pricing lines for the "tour" pricing context

  • customer_external_idreference
  • departure_external_idreferencerequired

    the departure this seat is on — import it first

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • departure_external_idtour_departures · matched by external_id · when missing error
Sample body
{
  "rows": [
    {
      "external_id": "TOUR-BOOKING-1001",
      "name": "Ada Lovelace",
      "party_size": 2,
      "currency": "EUR",
      "phone": "+905551112233",
      "status": "pending",
      "notes": "Imported from the source system.",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "cost_lines": [
        {
          "kind": "ticket_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "sell_lines": [
        {
          "kind": "package_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "customer_external_id": "CUSTOMER-1001",
      "departure_external_id": "TOUR-DEPARTURE-1001"
    }
  ]
}
transfersTransfers
Idempotency: create-once: re-sending skips rather than duplicating

Endpoints

  • validatePOST /api/v1/imports/transfers/validate
  • importPOST /api/v1/imports/transfers
  • feedGET /api/v1/imports/transfers/records
  • read_backGET /api/v1/imports/transfers/records/{external_id}
Fields(21)
  • external_idstring
  • pickup_atdatetimerequired
  • pickup_locationstringrequired
  • dropoff_locationstringrequired
  • currencycurrency
  • pax_countinteger
  • customer_external_idreference
  • supplier_external_idreference
  • statusenum

    bookedassigneden_routecompletedcancelledno_show

  • notesstring
  • rate_basisenum

    net ⇒ cost typed / sell derived; commissionable ⇒ the reverse

    netcommissionable

  • margin_modeenum

    percent ⇒ the margin was typed as a %; amount ⇒ as a flat figure

    percentamount

  • transaction_datedate

    işlem tarihi — the FX anchor for every cost line

  • invoice_datedate
  • cost_lineslist

    cost-side pricing lines for the "transfer" pricing context

  • sell_lineslist

    sell-side pricing lines for the "transfer" pricing context

  • travelerslistPII

    guests; auto-saved to the customer's traveller directory

  • duration_minutesinteger
  • airline_codestring

    inbound/outbound flight the transfer meets

  • flight_numberstring
  • flight_datedate

References

  • customer_external_idcustomers · matched by external_id, email · when missing skip
  • supplier_external_idsuppliers · matched by external_id, code · when missing skip
Sample body
{
  "rows": [
    {
      "external_id": "TRANSFER-1001",
      "pickup_at": "2026-03-14T09:30:00+03:00",
      "pickup_location": "IST Airport",
      "dropoff_location": "Beyoğlu, İstanbul",
      "currency": "EUR",
      "pax_count": 2,
      "customer_external_id": "CUSTOMER-1001",
      "supplier_external_id": "SUPPLIER-1001",
      "status": "booked",
      "notes": "Imported from the source system.",
      "rate_basis": "net",
      "margin_mode": "percent",
      "transaction_date": "2026-03-14",
      "invoice_date": "2026-03-18",
      "cost_lines": [
        {
          "kind": "vehicle_fare",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "sell_lines": [
        {
          "kind": "package_price",
          "amount": "1250.00",
          "label": "Imported line",
          "currency": "EUR",
          "vat_rate": "20",
          "tax_inclusive": true,
          "quantity": 1
        }
      ],
      "travelers": [
        {
          "first_name": "Ada",
          "last_name": "Lovelace",
          "nationality": "TR",
          "national_id": "10000000146",
          "passport_number": "U01234567",
          "passport_country": "TR",
          "passport_expiry": "2031-06-30",
          "date_of_birth": "1988-04-21",
          "gender": "female",
          "frequent_flyer_number": "TK123456789"
        }
      ],
      "duration_minutes": 2,
      "airline_code": "TK",
      "flight_number": "1985",
      "flight_date": "2026-03-14"
    }
  ]
}
operator_invoicesInvoices (receivables)
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/operator_invoices/validate
  • importPOST /api/v1/imports/operator_invoices
  • feedGET /api/v1/imports/operator_invoices/records
  • read_backGET /api/v1/imports/operator_invoices/records/{external_id}
Fields(11)
  • external_idstring
  • legacy_numberstringrequired
  • issued_ondaterequired
  • due_ondate
  • total_amountmoneyrequired
  • amount_paidmoney

    already collected before cutover; imported as a brought-forward receipt

  • paid_ondate

    when `amount_paid` was collected; defaults to the invoice date

  • currencycurrency
  • bill_to_namestring
  • customer_external_idreference
  • notesstring

References

  • customer_external_idcustomers · matched by external_id, email · when missing error
Sample body
{
  "rows": [
    {
      "external_id": "OPERATOR-INVOICE-1001",
      "legacy_number": "2025-000431",
      "issued_on": "2026-03-14",
      "due_on": "2026-03-18",
      "total_amount": "1250.00",
      "amount_paid": "1250.00",
      "paid_on": "2026-03-14",
      "currency": "EUR",
      "bill_to_name": "Lovelace Seyahat A.Ş.",
      "customer_external_id": "CUSTOMER-1001",
      "notes": "Imported from the source system."
    }
  ]
}
supplier_billsSupplier bills (payables)
Idempotency: upsert: re-sending updates the existing row

Endpoints

  • validatePOST /api/v1/imports/supplier_bills/validate
  • importPOST /api/v1/imports/supplier_bills
  • feedGET /api/v1/imports/supplier_bills/records
  • read_backGET /api/v1/imports/supplier_bills/records/{external_id}
Fields(10)
  • external_idstring
  • numberstringrequired
  • received_atdaterequired
  • due_ondate
  • total_amountmoneyrequired
  • amount_paidmoney

    already paid before cutover; imported as a brought-forward payment

  • paid_ondate

    when `amount_paid` was paid; defaults to the bill date

  • currencycurrency
  • supplier_external_idreference
  • notesstring

References

  • supplier_external_idsuppliers · matched by external_id, code · when missing error
Sample body
{
  "rows": [
    {
      "external_id": "SUPPLIER-BILL-1001",
      "number": "TR-2025-000431",
      "received_at": "2026-03-14",
      "due_on": "2026-03-18",
      "total_amount": "1250.00",
      "amount_paid": "1250.00",
      "paid_on": "2026-03-14",
      "currency": "EUR",
      "supplier_external_id": "SUPPLIER-1001",
      "notes": "Imported from the source system."
    }
  ]
}

Read and broadcast only

These page through the change feed and fire webhooks, but a POST to one answers 422 entity_not_writable.
  • chartersCharters
  • eventsEvents
  • visa_casesVisa cases