API Endpoints
Conventions
- Base path:
/api/201308. - List endpoints using paging accept
startAtandlimit.limitdefaults to30and cannot exceed100unless the controller passes a lower maximum. - Request bodies for create/update endpoints are deserialized by the matching API service into the matching API object unless noted otherwise.
- JSON examples below are representative. Runtime-generated values such as encoded IDs, URLs, registration codes, localized text, and omitted/null fields depend on the database, serializer configuration, authenticated retailer, and 201308 API.
Endpoint Summary
Categories
GET /api/201308/categories
Returns all active categories.
Query parameters:
| Name | Required | Description |
|---|---|---|
tree | No | If truthy, asks for tree format instead of flat format. |
Response: ApiCategory[].
Flat list response:
[
{
"id": "100",
"name": "Electronics",
"subCategoryIds": ["101", "102"],
"parentCategoryId": null
}
]
Tree response when tree=1:
[
{
"id": "100",
"name": "Electronics",
"subCategoryIds": ["101"],
"subCategories": [
{
"id": "101",
"name": "Mobile Phones",
"subCategoryIds": [],
"parentCategoryId": "100"
}
],
"parentCategoryId": null
}
]
GET /api/201308/categories/{categoryId}
Returns one category by numeric category ID.
Response: ApiCategory.
Single category response:
{
"id": "101",
"name": "Mobile Phones",
"subCategoryIds": [],
"parentCategoryId": "100"
}
Customers
POST /api/201308/customers
Creates a customer from an ApiCustomer request body.
Body: serialized ApiCustomer. Fields used by the service include customer identity, email, address, refId, and orderRefId.
Create/update request:
{
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
Response:
| Status | Description |
|---|---|
201 Created | Customer created. Includes Location header. |
| redirect | Duplicate customer data can redirect to the customer lookup route using emailAddress. |
Create/update/get response:
{
"id": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"customerUrl": "https://www.warrantylife.com/api/201308/customers/8f3a2c.json",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
PUT /api/201308/customers/{encodedCustomerId}
Updates a customer from an ApiCustomer request body.
Response: 201 Created with updated ApiCustomer and Location header.
Create/update request:
{
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
Create/update/get response:
{
"id": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"customerUrl": "https://www.warrantylife.com/api/201308/customers/8f3a2c.json",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
GET /api/201308/customers/{encodedCustomerId}
Returns a customer by encoded customer ID.
Response: ApiCustomer.
Create/update/get response:
{
"id": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"customerUrl": "https://www.warrantylife.com/api/201308/customers/8f3a2c.json",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
GET /api/201308/customers
Looks up a customer by email or partner reference.
Query parameters:
| Name | Required | Description |
|---|---|---|
email | No | If present, lookup uses customer email. |
refId | No | Partner customer reference. Used when email is absent. |
orderRefId | No | Partner order reference. Used when email is absent. |
Response: ApiCustomer.
Create/update/get response:
{
"id": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"firstName": "Jane",
"lastName": "Customer",
"refId": "CUST-10001",
"orderRefId": "ORDER-90001",
"customerUrl": "https://www.warrantylife.com/api/201308/customers/8f3a2c.json",
"emailAddress": "jane.customer@example.com",
"companyName": "Example Co",
"streetAddress": "123 Main St",
"city": "Vancouver",
"state": "BC",
"postalCode": "V6B 1A1",
"phone": "6045550100",
"country": "CA",
"isWalkIn": false,
"optIn": true
}
Developer
GET /api/201308/whoami
Returns identity information for the authenticated API caller.
Response: WhoamiResult.
Response:
{
"retailerId": "42",
"name": "Example Retailer"
}
Items
POST /api/201308/items
Creates an item from an ApiItem request body.
Body fields used by the service include customerId, productId or productSku, categoryId, refId, orderRefId, pricing, serial number, damage/repair flags, purchase date, and optional sales rep data.
Create request:
{
"refId": "ITEM-10001",
"orderRefId": "ORDER-90001",
"customerId": "8f3a2c",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"productId": "12345",
"productSku": "RET-SKU-12345",
"purchasedCondition": "NEW",
"categoryId": "101",
"pricePaid": 599.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 72.0,
"shippingPaid": 0.0,
"serialNumber": "SN123456789",
"serialNumberType": "serial",
"salesRepEmail": "sales@example-retailer.com",
"isRepaired": false,
"hasDamage": false,
"contractYears": "2",
"certifiedDate": null
}
Response: 201 Created with ApiItem and Location header.
Response:
{
"id": "a91bc0",
"refId": "ITEM-10001",
"orderRefId": "ORDER-90001",
"customerId": "8f3a2c",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"productId": "12345",
"productSku": "RET-SKU-12345",
"model": "Phone Model X",
"manufacturer": "Example Manufacturer",
"purchasedCondition": "NEW",
"categoryId": "101",
"pricePaid": 599.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 72.0,
"shippingPaid": 0.0,
"serialNumber": "SN123456789",
"serialNumberType": "serial",
"salesRepEmail": "sales@example-retailer.com",
"isRepaired": false,
"hasDamage": false,
"contractYears": "2",
"certifiedDate": null
}
GET /api/201308/items/{encodedItemId}
Returns an item by encoded item ID.
Response: ApiItem.
Response:
{
"id": "a91bc0",
"refId": "ITEM-10001",
"orderRefId": "ORDER-90001",
"customerId": "8f3a2c",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"productId": "12345",
"productSku": "RET-SKU-12345",
"model": "Phone Model X",
"manufacturer": "Example Manufacturer",
"purchasedCondition": "NEW",
"categoryId": "101",
"pricePaid": 599.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 72.0,
"shippingPaid": 0.0,
"serialNumber": "SN123456789",
"serialNumberType": "serial",
"salesRepEmail": "sales@example-retailer.com",
"isRepaired": false,
"hasDamage": false,
"contractYears": "2",
"certifiedDate": null
}
GET /api/201308/items
Looks up an item by partner reference.
Query parameters:
| Name | Required | Description |
|---|---|---|
refId | No | Partner item reference. |
orderRefId | No | Partner order reference. |
Response: ApiItem.
Response:
{
"id": "a91bc0",
"refId": "ITEM-10001",
"orderRefId": "ORDER-90001",
"customerId": "8f3a2c",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"productId": "12345",
"productSku": "RET-SKU-12345",
"model": "Phone Model X",
"manufacturer": "Example Manufacturer",
"purchasedCondition": "NEW",
"categoryId": "101",
"pricePaid": 599.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 72.0,
"shippingPaid": 0.0,
"serialNumber": "SN123456789",
"serialNumberType": "serial",
"salesRepEmail": "sales@example-retailer.com",
"isRepaired": false,
"hasDamage": false,
"contractYears": "2",
"certifiedDate": null
}
Manufacturers
POST /api/201308/manufacturers
Creates a manufacturer from an ApiManufacturer request body.
Body fields: name.
Create request:
{
"name": "Example Manufacturer"
}
Response: 201 Created with ApiManufacturer and Location header.
Response:
{
"id": "501",
"name": "Example Manufacturer"
}
GET /api/201308/manufacturers
Lists active manufacturers or searches by name.
Query parameters:
| Name | Required | Description |
|---|---|---|
name | No | If present, searches manufacturer names. If absent, lists manufacturers. |
startAt | No | Paging start index. Defaults to 0. |
limit | No | Page size. Defaults to 30, max 100. |
Response: ApiManufacturer[].
List response:
[
{
"id": "501",
"name": "Example Manufacturer"
}
]
GET /api/201308/manufacturers/{manufacturerId}
Returns one manufacturer.
Response: ApiManufacturer.
Response:
{
"id": "501",
"name": "Example Manufacturer"
}
Offers
GET /api/201308/products/{productId}/offers
Returns warranty-plan offers for a product.
Query parameters:
| Name | Required | Description |
|---|---|---|
price | Yes | Product/item price or value. Service rejects missing, non-numeric, or negative values. |
condition | No | Item condition. Must be one of the item purchase conditions, documented in-controller as NEW, USED, REFURBISHED, or CERTIFIED. |
categoryId | No | Category ID to use for offer selection. Must be a positive integer and existing category. |
strategy | No | Partner-selected offer strategy. |
Response: ApiOffer.
Response:
{
"status": "OK",
"warrantyPlans": [
{
"id": "7001",
"applicableCategoryIds": ["101"],
"name": "2 Year Protection Plan",
"description": "Coverage for eligible products.",
"deductible": "0.00",
"productMinPrice": 500.0,
"productMaxPrice": 999.99,
"maxItems": 1,
"duration": 2,
"durationUnit": "Years",
"isDurationFixed": true,
"partsDuration": 2,
"partsDurationUnit": "Years",
"labourDuration": 2,
"labourDurationUnit": "Years",
"rmaShippingCoverage": "NONE",
"serviceLocation": "Depot",
"claimPhone": "18005550100",
"planAvailableFrom": null,
"planAvailableTo": null,
"sellableDuration": 30,
"sellableDurationUnit": "Days",
"srp": 99.99,
"wholesaleCost": 65.0,
"retailerCost": 70.0,
"retailPrice": 99.99,
"currencyCode": "CAD",
"countryCode": "CA",
"termsUrl": "https://www.warrantylife.com/terms/7001",
"updatedAt": "2026-06-09T12:00:00-07:00",
"wlSku": "WL-PLAN-2YR",
"retailerSku": "RET-PLAN-2YR"
}
],
"scenarios": {
"recommended": {
"name": "Recommended Plans",
"description": "Recommended plans for this product.",
"type": "standard",
"warrantyPlanIds": [7001]
},
"longest": null,
"premium": null,
"affordable": null,
"espBundle": null,
"espBundleUpgrade": null,
"adhBundle": null,
"lojack": null,
"glass": null,
"trio18basic": null,
"trio18major": null,
"trio18ultimate": null
}
}
Products
POST /api/201308/products
Creates a product from an ApiProduct request body.
Body fields used by the service include manufacturerId, model, mpn, msrp, msrpCurrency, categoryId, upc, ean, sku, categoryRefId, and categoryRefName.
Create request:
{
"sku": "RET-SKU-12345",
"categoryId": "101",
"categoryRefId": "partner-category-phones",
"categoryRefName": "Phones",
"manufacturerId": "501",
"mpn": "MPN-12345",
"model": "Phone Model X",
"msrp": 699.99,
"msrpCurrency": "CAD",
"upc": "123456789012",
"ean": "0123456789012"
}
Response: 201 Created with ApiProduct and Location header.
Response:
{
"id": "12345",
"sku": "RET-SKU-12345",
"categoryId": "101",
"isCategoryKnown": true,
"manufacturerId": "501",
"manufacturer": {
"id": "501",
"name": "Example Manufacturer"
},
"mpn": "MPN-12345",
"model": "Phone Model X",
"msrp": 699.99,
"msrpCurrency": "CAD",
"upc": "123456789012",
"ean": "0123456789012",
"warrantyPlans": [],
"estimatedValue": 699.99
}
GET /api/201308/products
Searches products. At least one non-paging search parameter must be supplied; full product listing is explicitly blocked.
Accepted parameters from ProductService::getSearchParameters():
| Name | Description |
|---|---|
q | General search query. |
id | Product ID. |
upc | UPC. |
mpn | Manufacturer part number. |
model | Product model. |
categoryId | Category ID. |
sku | Partner/retailer SKU. |
manufacturerId | Manufacturer ID. |
manufacturerName | Manufacturer name. |
includePlans | Include warranty plans in product response. |
includePlansAtPrice | Include plans applicable at a given price. |
startAt | Paging start index. |
limit | Page size, default 30, max 100. |
Response: ApiProduct[].
Search response:
[
{
"id": "12345",
"sku": "RET-SKU-12345",
"categoryId": "101",
"isCategoryKnown": true,
"manufacturerId": "501",
"manufacturer": {
"id": "501",
"name": "Example Manufacturer"
},
"mpn": "MPN-12345",
"model": "Phone Model X",
"msrp": 699.99,
"msrpCurrency": "CAD",
"upc": "123456789012",
"ean": "0123456789012",
"warrantyPlans": [],
"estimatedValue": 699.99
}
]
GET /api/201308/products/{productId}
Returns one product by numeric product ID.
Response: ApiProduct.
Response:
{
"id": "12345",
"sku": "RET-SKU-12345",
"categoryId": "101",
"isCategoryKnown": true,
"manufacturerId": "501",
"manufacturer": {
"id": "501",
"name": "Example Manufacturer"
},
"mpn": "MPN-12345",
"model": "Phone Model X",
"msrp": 699.99,
"msrpCurrency": "CAD",
"upc": "123456789012",
"ean": "0123456789012",
"warrantyPlans": [],
"estimatedValue": 699.99
}
Vouchers
POST /api/201308/voucher-batch
Generates a voucher batch for the authenticated retailer/user.
Request parameters:
| Name | Required | Description |
|---|---|---|
qty | Yes | Quantity to generate. Must be numeric and no more than 1000. |
warrantyPlanId | Yes | Warranty plan ID for vouchers. |
note | No | Note stored with batch. |
Voucher batch request:
{
"qty": 2,
"warrantyPlanId": "7001",
"note": "June promo batch"
}
Response: ApiVoucherBatch. Some internal fields are intentionally nulled before serialization: retailer ID, user ID, requested quantity, prefix, and creation time.
Voucher batch response:
{
"id": "batch-100",
"voucherCodes": ["ABC123", "DEF456"],
"warrantyPlanId": "7001",
"tag": null,
"note": "June promo batch"
}
PUT /api/201308/voucher/{voucherCode}
Marks a voucher as sold and associates sale/item metadata.
Request parameters:
| Name | Required | Description |
|---|---|---|
orderRefId | No | Partner order reference. Max 255 characters. |
refId | No | Partner reference. Max 255 characters. |
dateOfPurchase | Yes | Parsed by PHP DateTime; invalid formats return 400. |
model | No | Truncated to 150 characters. |
mpn | No | Truncated to 70 characters. |
make | No | Truncated to 100 characters. |
deviceValue | No | Must be numeric if provided. |
Voucher sold request:
{
"orderRefId": "ORDER-90001",
"refId": "ITEM-10001",
"dateOfPurchase": "2026-06-09",
"model": "Phone Model X",
"mpn": "MPN-12345",
"make": "Example Manufacturer",
"deviceValue": 599.99
}
Response: 204 No Content.
Voucher sold response: 204 No Content with an empty body.
Warranties
POST /api/201308/warranties
Creates a warranty from an ApiWarranty request body.
Body fields used by the service include warranty plan ID, customer, item IDs/details, item purchase data, refId, orderRefId, and optional registration code.
Create request using existing customer and item IDs:
{
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0
}
Response: 202 Accepted with ApiWarranty.
Response:
{
"id": "warranty-encoded-id",
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"warrantyUrl": "https://www.warrantylife.com/api/201308/warranties/warranty-encoded-id.json",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0,
"registrationDate": "2026-06-09T12:00:00-07:00",
"isTerminated": false
}
POST /api/201308/items/{encodedItemId}/warranties
Creates a warranty for a specific item. If the body also supplies item IDs, the URL item ID must match one of them.
Response: 202 Accepted with ApiWarranty.
Response:
{
"id": "warranty-encoded-id",
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"warrantyUrl": "https://www.warrantylife.com/api/201308/warranties/warranty-encoded-id.json",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0,
"registrationDate": "2026-06-09T12:00:00-07:00",
"isTerminated": false
}
GET /api/201308/warranties
Lists or searches warranties.
Query parameters:
| Name | Required | Description |
|---|---|---|
refId | No | Partner warranty reference. |
orderRefId | No | Partner order reference. |
code | No | Warranty registration code or voucher code. |
Response: ApiWarranty[] or ApiWarranty, depending on service match.
List response:
[
{
"id": "warranty-encoded-id",
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"warrantyUrl": "https://www.warrantylife.com/api/201308/warranties/warranty-encoded-id.json",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0,
"registrationDate": "2026-06-09T12:00:00-07:00",
"isTerminated": false
}
]
GET /api/201308/warranties/{encodedWarrantyId}
Returns one warranty by encoded warranty ID.
Response: ApiWarranty.
Response:
{
"id": "warranty-encoded-id",
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"warrantyUrl": "https://www.warrantylife.com/api/201308/warranties/warranty-encoded-id.json",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0,
"registrationDate": "2026-06-09T12:00:00-07:00",
"isTerminated": false
}
GET /api/201308/items/{encodedItemId}/warranties
Returns warranties for an item.
Response: ApiWarranty[].
List response:
[
{
"id": "warranty-encoded-id",
"registrationCode": "ABC123",
"refId": "WARRANTY-10001",
"orderRefId": "ORDER-90001",
"warrantyUrl": "https://www.warrantylife.com/api/201308/warranties/warranty-encoded-id.json",
"dateOfPurchase": "2026-06-09T00:00:00-07:00",
"warrantyPlanId": "7001",
"itemId": "a91bc0",
"itemIds": ["a91bc0"],
"customerId": "8f3a2c",
"salesRepEmail": "sales@example-retailer.com",
"pricePaid": 99.99,
"pricePaidCurrencyCode": "CAD",
"taxPaid": 12.0,
"registrationDate": "2026-06-09T12:00:00-07:00",
"isTerminated": false
}
]
DELETE /api/201308/warranties/{encodedWarrantyId}
Refunds/invalidates a warranty by encoded warranty ID.
Response: 204 No Content.
DELETE /api/201308/warranties
Refunds/invalidates a warranty by registration code.
Query parameters:
| Name | Required | Description |
|---|---|---|
code | Yes | Registration code used when no encoded warranty ID is in the URL. |
Response: 204 No Content.
Warranty Plans
GET /api/201308/warranty-plans
Lists warranty plans.
Query parameters:
| Name | Required | Description |
|---|---|---|
categoryId | No | Filter by category ID. |
wlSku | No | Filter by WarrantyLife SKU. |
retailerSku | No | Filter by retailer SKU. |
Response: ApiWarrantyPlan[].
List response:
[
{
"id": "7001",
"applicableCategoryIds": ["101"],
"name": "2 Year Protection Plan",
"description": "Coverage for eligible products.",
"deductible": "0.00",
"productMinPrice": 500.0,
"productMaxPrice": 999.99,
"maxItems": 1,
"duration": 2,
"durationUnit": "Years",
"isDurationFixed": true,
"partsDuration": 2,
"partsDurationUnit": "Years",
"labourDuration": 2,
"labourDurationUnit": "Years",
"rmaShippingCoverage": "NONE",
"serviceLocation": "Depot",
"claimPhone": "18005550100",
"planAvailableFrom": null,
"planAvailableTo": null,
"sellableDuration": 30,
"sellableDurationUnit": "Days",
"srp": 99.99,
"wholesaleCost": 65.0,
"retailerCost": 70.0,
"retailPrice": 99.99,
"currencyCode": "CAD",
"countryCode": "CA",
"termsUrl": "https://www.warrantylife.com/terms/7001",
"updatedAt": "2026-06-09T12:00:00-07:00",
"wlSku": "WL-PLAN-2YR",
"retailerSku": "RET-PLAN-2YR"
}
]
GET /api/201308/warranty-plans/{planId}
Returns one warranty plan.
Response: ApiWarrantyPlan.
Single response:
{
"id": "7001",
"applicableCategoryIds": ["101"],
"name": "2 Year Protection Plan",
"description": "Coverage for eligible products.",
"deductible": "0.00",
"productMinPrice": 500.0,
"productMaxPrice": 999.99,
"maxItems": 1,
"duration": 2,
"durationUnit": "Years",
"isDurationFixed": true,
"partsDuration": 2,
"partsDurationUnit": "Years",
"labourDuration": 2,
"labourDurationUnit": "Years",
"rmaShippingCoverage": "NONE",
"serviceLocation": "Depot",
"claimPhone": "18005550100",
"planAvailableFrom": null,
"planAvailableTo": null,
"sellableDuration": 30,
"sellableDurationUnit": "Days",
"srp": 99.99,
"wholesaleCost": 65.0,
"retailerCost": 70.0,
"retailPrice": 99.99,
"currencyCode": "CAD",
"countryCode": "CA",
"termsUrl": "https://www.warrantylife.com/terms/7001",
"updatedAt": "2026-06-09T12:00:00-07:00",
"wlSku": "WL-PLAN-2YR",
"retailerSku": "RET-PLAN-2YR"
}