Get Product Variant
Retrieve a specific product variant from your easycart store.
Request
GET /product-variants/{id}
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Product variant UUID |
Example Request
curl -X GET "https://cart.easy.tools/api/v1/product-variants/550e8400-e29b-41d4-a716-446655440002" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Response
Success Response (200)
Returns a single product variant.
{
"id": "550e8400-e29b-41d4-a716-446655440002",
"type": "one_time",
"recurring_options": null,
"name": "250g Package",
"amount": 1999,
"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": 2499,
"active_from": "2026-01-01T00:00:00+00:00",
"active_until": "2026-12-31T23:59:59+00:00",
"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"
},
"files": [
{
"name": "Product Guide.pdf",
"url": "https://mysite.com/files/guide.pdf"
},
{
"name": "Quick Start.pdf",
"url": "https://mysite.com/files/quick-start.pdf"
}
],
"invoice_remarks": "Thank you for your purchase!"
}
{
"id": "550e8400-e29b-41d4-a716-446655440003",
"type": "recurring",
"recurring_options": {
"interval": "month",
"interval_count": 1
},
"name": "Monthly Subscription - 250g",
"amount": 1799,
"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,
"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
| Field | Type | Nullable | Description |
|---|---|---|---|
id | string | No | Unique identifier for the product variant (UUID) |
type | string | No | Variant type ("one_time" or "recurring") |
recurring_options | object | Yes | Recurring options (null for one-time variants) |
recurring_options.interval | string | No | Recurring interval ("day", "week", "month", "year") |
recurring_options.interval_count | integer | No | Number of intervals between charges |
name | string | Yes | Variant display name |
amount | integer | No | Price in cents |
custom_id | string | Yes | External identifier for integration with other systems |
is_hidden | boolean | No | Whether variant is hidden from checkout page |
trial_period_days | integer | Yes | Trial period in days before first charge (recurring only) |
active_cycles | integer | Yes | Number of billing cycles for payment plans (null = unlimited) |
cancel_early | boolean | No | Whether customers can cancel before active_cycles complete |
keep_access_after_expiring | boolean | No | Whether access is kept after subscription ends |
allow_multiple_subscriptions | boolean | No | Whether customers can have multiple concurrent subscriptions |
active_days | integer | Yes | Access duration in days (null = unlimited) |
quantity | integer | Yes | Available inventory limit (null = unlimited) |
has_quantity | boolean | No | Whether quantity selector is enabled on checkout |
old_price | integer | Yes | Strike-through price in cents to show original price |
active_from | string | Yes | Start selling date (ISO 8601 format) |
active_until | string | Yes | Stop selling date (ISO 8601 format) |
show_active_until_counter | boolean | Yes | Whether countdown timer is shown on checkout |
tax_behavior | string | Yes | Tax behavior ("inclusive" or "exclusive") |
refund_days | integer | Yes | Refund period in days (null = use product default) |
redirect_url | string | Yes | Post-purchase redirect URL (null = use product default) |
redirect_time | integer | Yes | Redirect delay in seconds (null = use product default) |
file | object | Yes | First variant-specific downloadable file (null if none). Mirrors the first entry of files. |
file.name | string | No | Display name shown in customer portal |
file.url | string | No | External URL to download the file |
files | array | No | All variant-specific downloadable files (up to 5, empty if none). Each entry has name and url. |
invoice_remarks | string | Yes | Additional notes included on invoices |
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 <UUID> not found"
}