Lima Automotive Shipping API

Calculate international and domestic car shipping costs

Base URL: https://api.limaautomotive.com

POST /shipping

Calculate shipping costs for a single vehicle.

Request Body

FieldTypeRequiredDescription
originstring | objectYesOrigin address or coordinates (see type below)
destinationstring | objectYesDestination address or coordinates
valuenumberYesVehicle value
typestringNoDefaults to "addressreq" (human-readable addresses geocoded automatically). Set to "pointReq" to pass raw coordinates instead.
currencystringNoOutput currency (default: auto-detected from destination)
inputCurrencystringNoCurrency of the value field (default: auto-detected from origin)
insuredstringNo"no", "basic" (default), or "comprehensive"
insuredPricenumberNoCustom insurance base value. Accepted as-is (no markup applied). If omitted, a default estimate is used.
insuranceCurrencystringNoCurrency of insuredPrice. Defaults to inputCurrency. Use when insurance is quoted in a different currency than the vehicle value.
importTypestringNoImport classification (e.g. "returning")
buyForMebooleanNoWhether to include agency/buy-for-me fee (default: false)
yearnumberNoVehicle year (if one car detail is provided, all three are required)
makestringNoVehicle make
modelstringNoVehicle model

Example Request — Address-based (default)

When type is omitted or set to "addressreq", provide human-readable addresses. The API geocodes them automatically.

{
  "origin": "Los Angeles, CA",
  "destination": "Toronto, Canada",
  "value": 25000,
  "currency": "CAD",
  "inputCurrency": "USD",
  "insured": "basic"
}

Example Request — Coordinate-based (pointReq)

When type is "pointReq", pass origin and destination as {"latitude": ..., "longitude": ...} objects. This skips geocoding and is faster.

{
  "type": "pointReq",
  "origin": {"latitude": 34.0522, "longitude": -118.2437},
  "destination": {"latitude": 43.6532, "longitude": -79.3832},
  "value": 25000,
  "insured": "comprehensive",
  "insuredPrice": 50000,
  "insuranceCurrency": "USD"
}

Response Fields

FieldTypeDescription
IDstringTransaction ID. Use this to import the estimate as a quote via /import.
TotalCostnumberTotal shipping cost in output Currency
FreightnumberTotal freight (pickup + ocean + delivery)
CustomsTotalnumberTotal customs charges
InsurancenumberInsurance cost
CargoValuenumberVehicle value in output currency
CurrencystringOutput currency code
ExchangeRatenumberUSD → output currency rate (1.0 if USD)
isDomesticbooleanWhether the shipment is within the same region (no ocean/customs)

Transport Breakdown

FieldTypeDescription
OceanTransportnumberOcean freight cost (0 for domestic)
LandTransportnumberTotal land transport (pickup + delivery)
LandTransportOriginToPortnumberOrigin to port cost (0 for domestic)
LandTransportPortToDestinationnumberPort to destination cost (0 for domestic)

Customs Breakdown

FieldTypeDescription
BrokeragenumberCustoms brokerage fee
DuesnumberBase customs duty
TariffnumberAdditional tariff (country-pair specific)
BondnumberCustoms bond (USA destinations)
MPFnumberMerchandise Processing Fee (USA only, 0 otherwise)
HMFnumberHarbor Maintenance Fee (USA only, 0 otherwise)
GSTnumberGoods & Services Tax (Canada only, 0 otherwise)
customsBreakdownobjectStructured breakdown: { duty, tariff, gst, mpf, hmf, brokerage, bond, percentageFeesSubtotal, total, note }

Insurance & Service Fields

FieldTypeDescription
InsuranceTypestring"no", "basic", or "comprehensive"
insuranceBaseValuenumberThe base value used for insurance calculation (in output currency)
insuranceCurrencystringCurrency the insurance base value was originally provided in
importManagementnumberImport management fee (0 for domestic)
agencyFeenumberBuy-for-me agency fee (0 unless buyForMe is true)
buyForMebooleanWhether agency fee was applied
buyForMeFeenumberAgency fee rate (e.g. 0.025 = 2.5%)
importTypestring | nullImport classification used
customsModestringCustoms calculation mode applied

Location Objects

FieldTypeDescription
Originobject{ latitude, longitude, location? } — resolved origin coordinates
Destinationobject{ latitude, longitude, location? } — resolved destination coordinates
OriginPortobject | nullNearest origin port (null for domestic)
DestinationPortobject | nullNearest destination port (null for domestic)

Rates & Fees Detail

The response includes two nested objects with rate information:

FieldTypeDescription
Ratesobject{ dutyRate, tariffRate, gstRate, mpfRate, hmfRate, bondRate, bondMin, bondMax, insuranceRate, insuranceMultiplier } — all rates as percentages (e.g. 1.5 = 1.5%)
FeesobjectDetailed breakdown with sub-objects: transport (baseRate, ratePerKm, distance, pickupRate, oceanRate), insurance (basicRate, comprehensiveRate, multiplier, type, baseValue, currency), customs (all duty/tariff info), service (importManagement, buyForMe)
costBreakdownobjectSimplified summary: { pickup, ocean, delivery, freight, customs, insurance, importManagement, agencyFee, total }

Metadata

FieldTypeDescription
inputCurrencystringThe input currency that was used
originalValuenumberThe original vehicle value as submitted
carDetailsobject | undefined{ year, make, model } — present only if car details were provided

Example Response (abbreviated)

{
  "ID": "abc123def456",
  "TotalCost": 7850.00,
  "Freight": 4200.00,
  "CustomsTotal": 1950.00,
  "Insurance": 500.00,
  "CargoValue": 33750.00,
  "Currency": "CAD",
  "ExchangeRate": 1.35,
  "isDomestic": false,
  "OceanTransport": 2100.00,
  "LandTransport": 2100.00,
  "LandTransportOriginToPort": 850.00,
  "LandTransportPortToDestination": 1250.00,
  "Brokerage": 475.00,
  "Dues": 0,
  "Tariff": 0,
  "Bond": 0,
  "MPF": 0,
  "HMF": 0,
  "GST": 1475.00,
  "InsuranceType": "basic",
  "insuranceBaseValue": 30250.00,
  "insuranceCurrency": "USD",
  "importManagement": 1200.00,
  "agencyFee": 0,
  "Origin": {"latitude": 34.0522, "longitude": -118.2437, "location": "Los Angeles, CA"},
  "Destination": {"latitude": 43.6532, "longitude": -79.3832, "location": "Toronto, ON"},
  "OriginPort": {"name": "Los Angeles", "latitude": 33.74, "longitude": -118.27},
  "DestinationPort": {"name": "Toronto", "latitude": 43.63, "longitude": -79.38},
  "Rates": {
    "dutyRate": 0,
    "tariffRate": 0,
    "gstRate": 5.0,
    "insuranceRate": 1.5,
    "insuranceMultiplier": 1.1
  },
  "costBreakdown": {
    "pickup": 850.00,
    "ocean": 2100.00,
    "delivery": 1250.00,
    "freight": 4200.00,
    "customs": 1950.00,
    "insurance": 500.00,
    "importManagement": 1200.00,
    "agencyFee": 0,
    "total": 7850.00
  },
  "customsBreakdown": {
    "duty": 0,
    "tariff": 0,
    "gst": 1475.00,
    "brokerage": 475.00,
    "bond": 0,
    "total": 1950.00
  }
}

POST /shipping/multi

Calculate shipping costs for multiple vehicles in one shipment. Requires 2 or more vehicles. Accepts all the same fields as /shipping plus the fields below.

Additional Request Fields

FieldTypeRequiredDescription
vehiclesarrayNo*Array of vehicle objects (see schema below). Use when shipping different cars.
vehicleCountnumberNo*Total vehicle count (default: 2). Use when all vehicles share the same value.
valuesarray<number>NoPer-vehicle values when using vehicleCount instead of vehicles.
insuredPricenumberNoTotal custom insurance value (split evenly per car). Accepted as-is.
insuranceCurrencystringNoCurrency of insuredPrice. Defaults to inputCurrency.

* Provide either vehicles array or vehicleCount. If vehicles is provided, vehicleCount is ignored.

vehicles Array Schema

Each element in the vehicles array is an object with the following fields:

FieldTypeRequiredDescription
yearnumberNoVehicle year (e.g. 2022)
makestringNoVehicle manufacturer (e.g. "BMW")
modelstringNoVehicle model (e.g. "X5")
valuenumberNoVehicle value in inputCurrency. Falls back to top-level value if omitted.
countnumberNoHow many identical vehicles of this type (default: 1). Since each car has a unique VIN, use this only for grouping identical models in the estimate.

Example Request

{
  "origin": "Miami, FL",
  "destination": "Vancouver, Canada",
  "vehicles": [
    {"year": 2022, "make": "BMW", "model": "X5", "value": 45000, "count": 1},
    {"year": 2021, "make": "Mercedes", "model": "GLE", "value": 52000, "count": 1},
    {"year": 2023, "make": "Toyota", "model": "Camry", "value": 28000, "count": 2}
  ],
  "inputCurrency": "USD",
  "currency": "CAD",
  "insured": "basic"
}

Additional Response Fields

The response includes all the same fields as /shipping (totals are summed across all vehicles), plus:

FieldTypeDescription
vehicleCountnumberTotal number of vehicles
multiCarFactornumberDiscount factor applied per car (e.g. 0.9 = 10% transport discount)
singleCarEquivalentnumberWhat one car would cost at full price (for comparison)
totalMultipliernumberCombined transport multiplier (factor × vehicleCount)
vehicleGroupsarrayGrouped vehicles: [{ year, make, model, count }]
carsarrayPer-car breakdown (see schema below)

cars Array Schema (per-car breakdown)

FieldTypeDescription
carIndexnumber1-based index of this car
yearnumber | nullVehicle year
makestring | nullVehicle make
modelstring | nullVehicle model
valuenumberVehicle value in output currency
transportnumberTransport cost for this car
customsobject{ brokerage, dues, tariff, bond, mpf, hmf, gst, total }
insurancenumberInsurance cost for this car
importManagementnumberImport management fee for this car
totalnumberTotal cost for this car

POST /quote

Calculate shipping and create a formal estimate quote in the Lima Automotive CRM. Requires client contact information. Supports single and multi-car quotes.

Request Body

FieldTypeRequiredDescription
clientNamestringYesClient full name
emailstringYesClient email address
phonestringNoClient phone number
originstringYesOrigin address
destinationstringYesDestination address
valuenumberYesVehicle value
sourcestringNoReferral source / business partner name (default: "API")
vehiclesarrayNoFor multi-car quotes — same schema as /shipping/multi
insuranceCurrencystringNoCurrency of insuredPrice if different from inputCurrency

All /shipping parameters (insured, insuredPrice, currency, inputCurrency, importType, buyForMe, etc.) are also accepted.

Response Fields

FieldTypeDescription
successbooleantrue if the quote was created
tidstringQuote transaction ID in the CRM
quoteUrlstringDirect URL to the quote in the CRM
shippingResultobjectFull shipping calculation result (same structure as /shipping response)

Example Response

{
  "success": true,
  "tid": "1234567890",
  "quoteUrl": "https://quote.limaautomotive.com/invoice?ref=1234567890",
  "shippingResult": {
    "TotalCost": 7850.00,
    "Freight": 4200.00,
    "CustomsTotal": 1950.00,
    "Insurance": 500.00,
    "Currency": "CAD",
    ...
  }
}

POST /import

Convert a previously calculated shipping estimate into a formal quote. Use the transaction ID returned from a prior /shipping or /shipping/multi call.

Request Body

FieldTypeRequiredDescription
transactionIdstringYesThe ID from a prior /shipping response (also accepts tid or id)
clientNamestringYesClient full name
emailstringYesClient email address
phonestringNoClient phone number
countrystringNoClient country
sourcestringNoYour business/referral name (default: "API Import")

Example Request

{
  "transactionId": "a1b2c3d4e5",
  "clientName": "John Doe",
  "email": "john@example.com",
  "phone": "+1 555-123-4567",
  "source": "DealershipXYZ"
}

Response Fields

FieldTypeDescription
successbooleantrue if the quote was created
tidstringNew quote transaction ID in the CRM
quoteUrlstringDirect URL to the quote in the CRM
importedFromstringThe original transaction ID that was imported

Example Response

{
  "success": true,
  "tid": "1234567890",
  "quoteUrl": "https://quote.limaautomotive.com/invoice?ref=1234567890",
  "importedFrom": "a1b2c3d4e5"
}

Returns HTTP 409 if the transaction was already imported.

GET /customs

Get current customs rates, insurance rates, and fee configuration. No parameters required.

Response Fields

Returns the full customs configuration object including all regional rates, insurance rates, brokerage fees, bond limits, and import management fees.

Error Responses

All endpoints return errors in a consistent format:

{
  "error": "Description of what went wrong"
}
HTTP StatusMeaning
400Bad request — missing required fields, invalid coordinates, or geocoding failure
409Conflict — transaction already imported (/import only)
500Server error

Support

For API access, integration support, or questions:

Email: info@limaautomotive.com

Phone: +1 877 298-0911

Website: limaautomotive.com