Skip to main content

Get Product Variant

Retrieve a specific product variant from your store.

Request

GET /product-variants/{id}

Path Parameters

ParameterTypeRequiredDescription
idstringYesProduct variant UUID

Example Request

curl -X GET "https://cart.easy.tools/api/v1/product-variants/d91c65aa-b221-4aa4-b626-cf0d8a198749" \
-H "Authorization: Bearer YOUR_API_TOKEN"

Response

Success Response (200)

Returns a single product variant.

{
"id": "d91c65aa-b221-4aa4-b626-cf0d8a198749",
"type": "one_time",
"recurring_options": null,
"name": "250g Package",
"amount": 1999,
"currency": "usd",
"checkout_url": "https://cart.easy.tools/checkout/premium-coffee?plan=price_123",
"custom_id": "SKU-250G",
"is_hidden": false,
"trial_period_days": null,
"active_cycles": null,
"cancel_early": false,
"keep_access_after_expiring": false,
"allow_multiple_subscriptions": false,
"active_days": 365,
"quantity": 100,
"has_quantity": true,
"old_price": 29,
"active_from": "2026-01-01T00:00:00+00:00",
"active_until": "2026-12-31T23:59:59+00:00",
"access_until": null,
"show_active_until_counter": true,
"tax_behavior": "exclusive",
"refund_days": 14,
"redirect_url": "https://mysite.com/thank-you",
"redirect_time": 5,
"file": {
"name": "Product Guide.pdf",
"url": "https://mysite.com/files/guide.pdf",
"download_url": "https://cart.easy.tools/api/v1/product-files/b8d4e6a2-51c7-4f39-9e0b-3a7c2d18f5e6/download?expires=1749384000&signature=abc123"
},
"files": [
{
"name": "Product Guide.pdf",
"url": "https://mysite.com/files/guide.pdf",
"download_url": "https://cart.easy.tools/api/v1/product-files/b8d4e6a2-51c7-4f39-9e0b-3a7c2d18f5e6/download?expires=1749384000&signature=abc123"
},
{
"name": "Quick Start.pdf",
"url": "https://mysite.com/files/quick-start.pdf",
"download_url": "https://cart.easy.tools/api/v1/product-files/2e9b5c71-8d40-4a6f-b312-7f5a9c04d8e3/download?expires=1749384000&signature=abc123"
}
],
"invoice_remarks": "Thank you for your purchase!"
}
{
"id": "e903c6d6-163e-4080-a99a-4ee5a1e4f17a",
"type": "recurring",
"recurring_options": {
"interval": "month",
"interval_count": 1
},
"name": "Monthly Subscription - 250g",
"amount": 1799,
"currency": "usd",
"checkout_url": null,
"custom_id": null,
"is_hidden": false,
"trial_period_days": 14,
"active_cycles": 12,
"cancel_early": true,
"keep_access_after_expiring": false,
"allow_multiple_subscriptions": false,
"active_days": null,
"quantity": null,
"has_quantity": false,
"old_price": null,
"active_from": null,
"active_until": null,
"access_until": null,
"show_active_until_counter": null,
"tax_behavior": "exclusive",
"refund_days": null,
"redirect_url": null,
"redirect_time": null,
"file": null,
"files": [],
"invoice_remarks": null
}

Response Fields

FieldTypeNullableDescription
idstringNoUnique identifier for the product variant (UUID)
typestringNoVariant type ("one_time" or "recurring")
recurring_optionsobjectYesRecurring options (null for one-time variants)
recurring_options.intervalstringNoRecurring interval ("day", "week", "month", "year")
recurring_options.interval_countintegerNoNumber of intervals between charges
namestringYesVariant display name
amountintegerNoPrice in minor units
currencystringNoLowercase ISO currency code (e.g. "usd"). A variant inherits its product's currency and it is immutable after creation.
checkout_urlstringYesDirect checkout URL for this variant (the product checkout URL with the variant preselected). Null until the variant is synced to Stripe.
custom_idstringYesExternal identifier for integration with other systems
is_hiddenbooleanNoWhether variant is hidden from checkout page
trial_period_daysintegerYesTrial period in days before first charge (recurring only)
active_cyclesintegerYesNumber of billing cycles for payment plans (null = unlimited)
cancel_earlybooleanNoWhether customers can cancel before active_cycles complete
keep_access_after_expiringbooleanNoWhether access is kept after subscription ends
allow_multiple_subscriptionsbooleanNoWhether customers can have multiple concurrent subscriptions
active_daysintegerYesAccess duration in days (null = unlimited)
quantityintegerYesAvailable inventory limit (null = unlimited)
has_quantitybooleanNoWhether quantity selector is enabled on checkout
old_priceintegerYesStruck-through compare-at price in major currency units (79 = 79.00 PLN). Unlike amount, which is in minor units (e.g. cents). See Price units.
active_fromstringYesStart selling date (ISO 8601 format)
active_untilstringYesStop selling date (ISO 8601 format)
access_untilstringYesFixed access-expiry date (ISO 8601 format). When set, the variant also stops selling on this date (active_until matches)
show_active_until_counterbooleanYesWhether countdown timer is shown on checkout
tax_behaviorstringYesTax behavior ("inclusive" or "exclusive")
refund_daysintegerYesRefund period in days (null = use product default)
redirect_urlstringYesPost-purchase redirect URL (null = use product default)
redirect_timeintegerYesRedirect delay in seconds (null = use product default)
fileobjectYesFirst variant-specific downloadable file (null if none). Mirrors the first entry of files.
file.namestringNoDisplay name shown in customer portal
file.urlstringNoThe file's stored location, and the value to send back when writing files. A file uploaded to your store is not publicly readable at this URL — follow download_url for the contents. A file attached by link carries that URL exactly as it was provided.
file.download_urlstringNoA temporary signed link to download the file. It needs no Authorization header and expires about an hour after the read.
filesarrayNoAll variant-specific downloadable files (up to 5, empty if none). Each entry has name, url, and download_url.
invoice_remarksstringYesAdditional notes included on invoices

Read download_url — not url — to fetch a file's contents, and request the variant again for a fresh link rather than storing it. See Downloadable files.

note

The singular file field is kept for backward compatibility and always mirrors the first entry of files. For variants with multiple downloadable files, read files to get the complete list.

Error Responses

Bad Request (400)

{
"message": "Invalid product variant ID"
}

Product Variant Not Found (404)

{
"message": "Product variant with ID d4e7a2c9-1b8f-4a3d-8c6e-7f2b9d5a1e63 not found"
}