Endpoint
GET https://api.gumroad.com/v2/products
Retrieve all products owned by the authenticated user. Products are returned in descending order by creation date.
Authentication
Requires OAuth scope: view_public or any public scope
Response
Whether the request was successful
Array of product objects
The product’s unique external ID
The product description in HTML format
The custom URL path (if set)
The currency code (e.g., “usd”)
URL to the product thumbnail image
Array of tag names associated with the product
Human-readable formatted price
Whether the product is published and available for purchase
Whether the product has been deleted
Whether the product has a “pay what you want” price
For recurring products: “monthly”, “yearly”, “quarterly”, “biannually”, or “every_two_years”
Whether the product requires shipping information
URL to preview the product
Maximum number of purchases allowed (null if unlimited)
Information about attached files (only if single file)
Custom fields to collect at checkout
Whether this is a tiered membership product
Available billing recurrences for tiered memberships
Product variants with pricing and options
Array of variant options
Price difference in cents from base price
Whether this variant has customizable pricing
Recurrence prices for tiered memberships
Number of successful sales (requires view_sales scope)
Total sales in USD cents (requires view_sales scope)
Example Request
curl -X GET "https://api.gumroad.com/v2/products" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Example Response
{
"success": true,
"products": [
{
"id": "kUxDaJMg5NP9PpHRCNYCrw==",
"name": "My Awesome Product",
"description": "<p>This is an amazing product</p>",
"custom_permalink": "awesome-product",
"price": 2999,
"currency": "usd",
"short_url": "https://example.gumroad.com/l/awesome-product",
"thumbnail_url": "https://public-files.gumroad.com/...",
"tags": ["digital", "course"],
"formatted_price": "$29.99",
"published": true,
"deleted": false,
"customizable_price": false,
"require_shipping": false,
"preview_url": null,
"custom_receipt": null,
"custom_summary": null,
"subscription_duration": null,
"max_purchase_count": null,
"file_info": {},
"custom_fields": [],
"is_tiered_membership": false,
"recurrences": null,
"variants": [],
"sales_count": 42,
"sales_usd_cents": 125958
}
]
}
Error Responses
false when the request fails
Example Error
{
"success": false,
"message": "Unauthorized"
}
The sales_count and sales_usd_cents fields are only included in the response when the access token has the view_sales scope.