SMC API v1.0
SMC API v1.0 is a server-to-server quote API for international car dealers, listing sites, marketplaces, and relocation companies. It returns transport quotes for UK, EU, and selected international vehicle movements, with optional destination import-tax and registration estimates for UK and EU arrivals. View the API brochure.
UK road transport
Instant UK collection and delivery estimates for dealer stock, private sales and relocations.
UK and EU movements
Quote UK-to-EU and EU-to-UK vehicle transport with destination tax and registration context.
International sea freight
Support overseas enquiry flows with international shipping, customs and arrival-cost estimates.
Taxes and registration
Return display-ready estimates for customs taxes, testing and registration into the UK and all EU countries.
Endpoint
POST /api/v1/quotesAuthentication
x-api-keyFormat
application/json01
Overview
The API is intended for trusted server-to-server integrations. Do not place API keys in browser JavaScript, mobile apps, or public repositories.
Responses separate payable ShipMyCar transport charges from destination-cost estimates, so partners can show freight totals and arrival-cost guidance without mixing currencies or estimate types.
Supported route types
02
Authentication
Send the API key in the x-api-key request header. SMC API v1.0 only accepts active, non-expired API keys from the API users database.
unauthorized to avoid leaking account state.03
Request Body
Submit nested JSON. Vehicle details may be provided manually, or supplied through one of the configured demo VINs.
| Field | Type | Required | Description |
|---|---|---|---|
partnerReference | string | No | Your own quote or listing reference. Returned unchanged in the response. |
collection.country | string | Yes | Collection country name or 2-letter country code. |
collection.address | string | Yes | Collection address or city. It must be specific enough to geocode. |
delivery.country | string | Yes | Delivery country name or 2-letter country code. |
delivery.address | string | Yes | Delivery address or city. It must be specific enough to geocode. |
vehicle.vin | string | No | Optional demo VIN. In the current rollout, only configured demo VINs are decoded locally. |
vehicle.year | number | If no VIN | Vehicle year. Required when not supplied by a valid demo VIN. |
vehicle.make | string | If no VIN | Vehicle make. Required when not supplied by a valid demo VIN. |
vehicle.model | string | If no VIN | Vehicle model. Required when not supplied by a valid demo VIN. |
vehicle.value | number | Yes | Vehicle value used for freight, import tax, and destination-cost estimates. |
vehicle.currency | GBP | EUR | USD | JPY | CAD | AUD | CHF | ZAR | NZD | No | Currency for vehicle.value. Defaults to GBP when omitted. |
vehicle.type | string | No | Optional vehicle category. vehicleType is also accepted. Defaults to car. |
vehicle.fuelType | string | No | Optional fuel type used by some destination registration calculations. |
transport.shippingMethod | open | enclosed | No | Preferred transport method. Defaults to open. transport.method is accepted as a backwards-compatible alias. |
transport.nonRunner | boolean | No | Set true when the vehicle cannot be driven. Defaults to false. |
transport.skipUKTransport | boolean | No | Set true to omit the UK inland transport leg where supported. |
options.targetCurrency | currency code | No | Display currency for transport quote totals. Defaults to GBP. |
options.includeDestinationImportTaxes | boolean | No | Set true to estimate destination import duty/VAT where available. |
options.includeDestinationRegistrationEstimate | boolean | No | Set true to estimate destination registration or arrival costs where available. |
destinationCostDetails | object | No | Optional country-specific details for import and registration estimates. |
Demo VINs
| VIN | Description |
|---|---|
SMCDEMVW2020GLF1X | 2020 Volkswagen Golf demo profile |
SMCDEMBMW2023M4XX | 2023 BMW M4 Competition demo profile |
Demo VIN request
Classic Car Request
Destination cost detail inputs
These fields are optional and only needed when requesting destination import-tax or registration estimates. The API accepts the nested object names below; aliases are shown where supported.
| Field | Type | Description |
|---|---|---|
destinationCostDetails.registrationCountry | string | Current registration or origin country. Defaults to the collection country when omitted. |
destinationCostDetails.vehicleDetails | object | Optional country-specific vehicle facts for EU registration estimates, such as CO2, weight, first registration date, power, seats, or department code. euVehicleDetails is accepted as an alias. |
destinationCostDetails.exportDetails | object | Optional EU import/export facts such as import date, origin country, free-circulation status, or exchange-rate inputs. euExportDetails is accepted as an alias. |
destinationCostDetails.hmrcDetails | object | Optional UK import-tax details. ukImportDetails is accepted as an alias. |
destinationCostDetails.dvlaDetails | object | Optional UK registration details. ukRegistrationDetails is accepted as an alias. |
destinationCostDetails.arrivalDate | ISO date | Optional arrival/import date for EU destination-cost calculations. importDate and expectedArrivalDate are also accepted. |
destinationCostDetails.vehicleExchangeRate | number | Optional exchange rate used when EU destination-cost inputs require conversion from the vehicle currency. |
destinationCostDetails.vehicleDetails
EU destination registration calculators use these vehicle facts when they are not already known from a demo VIN. Send only the values that apply to the destination country and vehicle.
| Field | Type | Description |
|---|---|---|
fuelType | petrol | diesel | hybrid | electric | ... | Fuel type. Usually supplied by the demo VIN, but may be supplied manually. |
engineSize | number | Engine capacity in cc. |
firstRegistrationDate | YYYY-MM-DD | First registration date. Used for vehicle age, classic, and registration-tax rules. |
co2Emissions | number | CO2 emissions in g/km. Not normally required for 30+ year classics. |
co2Standard | wltp | nedc | CO2 measurement standard when CO2 is supplied. |
euroStandard | string | Emissions standard, for example euro6d or euro0. |
powerKw / netPowerKw | number | Power in kW. Some destination registration formulas use one or both values. |
vehicleWeightKg / maximumAuthorizedMassKg | number | Weight values used by some EU registration formulas. |
localMarketValue | number | Estimated local market value where a destination tax calculation requires it. |
departmentCode | string | French department code, for example 75. |
belgiumRegion | flanders | wallonia | brussels | Belgian registration region when Belgium is the destination. |
vehicleTypeApproval | eu | national_or_isolated | French type-approval status where relevant. |
destinationCostDetails.exportDetails
| Field | Type | Description |
|---|---|---|
originCountry | country code | Origin/current registration country, for example GB, US, DE. |
importDate | YYYY-MM-DD | Expected EU import/arrival date. arrivalDate is also accepted at destinationCostDetails level. |
vehicleCurrency | currency code | Currency used for the vehicle value when different from the main vehicle currency. |
vehicleExchangeRate | number | Exchange rate for EU tax conversion when the vehicle value is not in EUR. |
inFreeCirculation | boolean | For EU-origin arrivals, whether the vehicle is already in EU free circulation. |
exportPurpose | permanent | temporary | Import/export purpose where the destination calculator needs it. |
transferOfResidence | boolean | Set true where transfer-of-residence relief may apply. |
destinationCostDetails.ukImportDetails
Used for UK arrivals when options.includeDestinationImportTaxes is true. hmrcDetails is accepted as an alias.
| Field | Type | Description |
|---|---|---|
importDuration | permanent | temporary | Whether the UK import is permanent or temporary. |
vehicleExchangeRate | number | Exchange rate to GBP when vehicle.currency is not GBP. |
isCommercialImport | boolean | Set true for commercial imports. |
importReason | string | Optional reason such as returning, gift, inheritance, or moving. |
transferOfResidence | boolean | Set true if transfer-of-residence relief may apply. |
ownershipDuration | string | Ownership duration for relief checks, where relevant. |
previouslyRegisteredInUk | boolean | Set true for returning UK vehicles. |
hasEuStatementOnOrigin / hasEuExporterNumber | boolean | Optional EU origin-proof flags for preferential-duty checks. |
hasJapanStatementOnOrigin / hasJapanCorporateNumber | boolean | Optional Japan origin-proof flags for preferential-duty checks. |
destinationCostDetails.ukRegistrationDetails
Used for UK arrivals when options.includeDestinationRegistrationEstimate is true. dvlaDetails is accepted as an alias.
| Field | Type | Description |
|---|---|---|
registrationCountry | string | Country where the vehicle is currently registered. |
hasRearFog | yes | no | unsure | Whether the vehicle already has a compliant rear fog light. |
fogLightPosition | left | right | centre | Fog-light position when hasRearFog is yes. |
hasMph | yes | no | unsure | Whether the speedometer displays mph. |
dashboardType | analogue | digital | Used when mph conversion may be required. |
hasCoC | yes | no | unsure | Certificate of Conformity status for relevant EU vehicles. |
isHalogen | yes | no | unsure | Used for some headlight-conversion estimates. |
Nested object shape
04
Success Response
A successful request returns HTTP 200 with success: true. A quote is usable when quotable is also true.
| Field | Type | Description |
|---|---|---|
success | boolean | True when the API request was processed successfully. |
quotable | boolean | True when a transport quote could be calculated. |
partnerReference | string | null | The partner reference supplied in the request. |
route | object | Route type, support flag, and collection/delivery regions. |
vehicle | object | Normalized vehicle year, make, model, value, and currency used for the quote. |
vin | object | Safe VIN status only: supplied, decoded, demo, and partial flags. |
transport | object | Transport line items and subtotal in the response currency. |
destinationCosts | object | Optional import tax and destination registration estimates. Deep calculation traces are intentionally not returned. |
totals | object | Transport total, destination estimate total, currencies, and combined total when currencies match. |
currency | string | Currency for transport amounts. |
metadata | object | Public metadata only: source, item count, destination-cost status, and canContinue when available. |
apiLogId | uuid | Returned for quotable responses when the continue quote link is available. |
expiresAt | ISO date | Expiration for the continue quote link. Links currently expire after 30 days. |
continueQuoteUrl | string | A URL that lets the customer continue the quote on ShipMyCar with the quote data pre-filled. |
Example response
05
Line Items
Transport and destination costs use different row contracts. Transport rows are quote charges payable to ShipMyCar. Destination rows are estimates for import tax, registration, or environmental charges in the arrival country.
Destination rows do not include summary rows such as total payable. Use section subtotals and destinationCosts.total for totals.
transport.items[]
| Field | Type | Description |
|---|---|---|
description | string | Plain-text transport or service description. HTML is stripped from the public response. |
amount | number | Line item amount excluding VAT. |
vat | number | VAT amount for the item. |
optional | boolean | Whether the item is optional. |
destinationCosts.*.items[]
| Field | Type | Description |
|---|---|---|
key | string | Stable display key for the row, such as import-vat or fr-y3. |
type | import_tax | registration | environmental | Destination-cost section this row belongs to. |
label | string | Display label for the cost row. |
amount | number | Numeric amount. Discounts are negative values. |
formattedValue | string | Human-readable value, formatted by the API for display. |
unavailable | boolean | True when a row is shown but not calculable. |
06
Destination Costs
Destination costs are optional. Set options.includeDestinationImportTaxes and/or options.includeDestinationRegistrationEstimate to request them. If a section cannot be calculated, the response returns status and messages explaining what is missing.
Import taxes
Returned under destinationCosts.importTaxes. Includes duty, VAT, subtotal, and display rows.
Registration estimate
Returned under destinationCosts.registration. Includes subtotal, tax name, optional notice, and display rows.
Messages
User-facing destination-cost messages are grouped by purpose:
07
Continue Quote URL
Quotable responses include a continueQuoteUrl. Send the customer to this URL to load the vehicle, route, transport, and cost data into the ShipMyCar quote flow.
Continue links currently expire after 30 days. Treat the URL as a bearer token: anyone with the URL can open the saved quote data until it expires.
08
Error Responses
Error responses are sanitised. Known validation errors include field-level details; internal calculation and infrastructure failures do not expose raw exception data.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_json | Request body was not valid JSON. |
| 400 | invalid_request | Request JSON was valid, but failed schema validation. |
| 400 | missing_vehicle_data | Vehicle year, make, model, value, or currency was missing. |
| 401 | missing_api_key | The x-api-key header was not supplied. |
| 401 | unauthorized | The API key is invalid, inactive, or expired. |
| 403 | demo_vin_required | A VIN was supplied that is not enabled for this API environment. |
| 422 | unsupported_route | The route is unknown or not supported by SMC API v1.0. |
| 422 | quote_not_calculable | The route was supported, but a quote could not be calculated from the supplied data. |
| 400 | partner_quote_error | Known quote calculation failure that does not expose internal details. |
| 500 | partner_quote_failed | Unexpected server-side failure. The response is sanitised. |
Validation error example
09
Migration Notes
The old public documentation described /api/getallcosts. SMC API v1.0 uses /api/v1/quotes and a nested request model.
The response intentionally omits internal fields that were present in older responses, including quoteCostId, route database IDs, calculation traces, selected haulier IDs, legacy metadata, and raw decoded VIN data.
For display, use transport.items, destinationCosts.importTaxes.items,destinationCosts.registration.items, section subtotals, and destinationCosts.total.