Access the Gumroad API with managed OAuth authentication. Manage products, view sales, verify licenses, and set up webhooks for your digital storefront.
Reference
Get Current User
GET /gumroad/v2/userResponse:
{
"success": true,
"user": {
"name": "Chris",
"currency_type": "usd",
"bio": null,
"twitter_handle": null,
"id": "1690942847664",
"user_id": "QmTtTnViFSoocHAexgLuJw==",
"url": "https://chriswave1246.gumroad.com",
"profile_url": "https://public-files.gumroad.com/...",
"email": "chris@example.com",
"display_name": "Chris"
}
}List Products
GET /gumroad/v2/productsResponse:
{
"success": true,
"products": [
{
"id": "ABC123",
"name": "My Product",
"price": 500,
"currency": "usd",
"short_url": "https://gumroad.com/l/abc",
"sales_count": 10,
"sales_usd_cents": 5000
}
]
}Get Product
GET /gumroad/v2/products/{product_id}Update Product
PUT /gumroad/v2/products/{product_id}
Content-Type: application/x-www-form-urlencoded
name=Updated%20Name&price=1000Enable/Disable Product
PUT /gumroad/v2/products/{product_id}/disable
Content-Type: application/x-www-form-urlencoded
disabled=trueDelete Product
DELETE /gumroad/v2/products/{product_id}Note: Creating new products via API is not supported. Products must be created through the Gumroad website.
List Offer Codes
GET /gumroad/v2/products/{product_id}/offer_codesGet Offer Code
GET /gumroad/v2/products/{product_id}/offer_codes/{offer_code_id}Create Offer Code
POST /gumroad/v2/products/{product_id}/offer_codes
Content-Type: application/x-www-form-urlencoded
name=SUMMER20&amount_off=20Parameters:
name- The code customers enter (required)amount_off- Cents or percentage off (required)offer_type- "cents" or "percent" (default: "cents")max_purchase_count- Maximum uses (optional)
Update Offer Code
PUT /gumroad/v2/products/{product_id}/offer_codes/{offer_code_id}
Content-Type: application/x-www-form-urlencoded
max_purchase_count=100Delete Offer Code
DELETE /gumroad/v2/products/{product_id}/offer_codes/{offer_code_id}List Sales
GET /gumroad/v2/salesQuery parameters:
after- Only sales after this date (YYYY-MM-DD)before- Only sales before this date (YYYY-MM-DD)page- Page number for pagination
Example with filters:
GET /gumroad/v2/sales?after=2026-01-01&before=2026-12-31Response:
{
"success": true,
"sales": [
{
"id": "sale_abc123",
"email": "customer@example.com",
"seller_id": "seller123",
"product_id": "prod123",
"product_name": "My Product",
"price": 500,
"currency_symbol": "$",
"created_at": "2026-01-15T10:30:00Z"
}
]
}Get Sale
GET /gumroad/v2/sales/{sale_id}List Subscribers
GET /gumroad/v2/products/{product_id}/subscribersGet Subscriber
GET /gumroad/v2/subscribers/{subscriber_id}Response:
{
"success": true,
"subscriber": {
"id": "sub123",
"product_id": "prod123",
"product_name": "Monthly Subscription",
"user_id": "user123",
"user_email": "subscriber@example.com",
"status": "alive",
"created_at": "2026-01-01T00:00:00Z"
}
}Verify License
POST /gumroad/v2/licenses/verify
Content-Type: application/x-www-form-urlencoded
product_id={product_id}&license_key={license_key}Parameters:
product_id- The product ID (required)license_key- The license key to verify (required)increment_uses_count- Increment the use count (default: true)
Response (success):
{
"success": true,
"uses": 1,
"purchase": {
"seller_id": "seller123",
"product_id": "prod123",
"product_name": "My Product",
"permalink": "abc",
"email": "customer@example.com",
"license_key": "ABC-123-DEF",
"quantity": 1,
"created_at": "2026-01-15T00:00:00Z"
}
}Response (failure):
{
"success": false,
"message": "That license does not exist for the provided product."
}Enable License
PUT /gumroad/v2/licenses/enable
Content-Type: application/x-www-form-urlencoded
product_id={product_id}&license_key={license_key}Disable License
PUT /gumroad/v2/licenses/disable
Content-Type: application/x-www-form-urlencoded
product_id={product_id}&license_key={license_key}Decrement License Uses
PUT /gumroad/v2/licenses/decrement_uses_count
Content-Type: application/x-www-form-urlencoded
product_id={product_id}&license_key={license_key}List Resource Subscriptions
GET /gumroad/v2/resource_subscriptions?resource_name=saleParameters:
resource_name- Required. One of:sale,refund,dispute,dispute_won,cancellation,subscription_updated,subscription_ended,subscription_restarted
Response:
{
"success": true,
"resource_subscriptions": [
{
"id": "wX43hzi-s7W4JfYFkxyeiQ==",
"resource_name": "sale",
"post_url": "https://example.com/webhook"
}
]
}Delete Resource Subscription
DELETE /gumroad/v2/resource_subscriptions/{resource_subscription_id}Response:
{
"success": true,
"message": "The resource_subscription was deleted successfully."
}List Variant Categories
GET /gumroad/v2/products/{product_id}/variant_categoriesGet Variant Category
GET /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}Create Variant Category
POST /gumroad/v2/products/{product_id}/variant_categories
Content-Type: application/x-www-form-urlencoded
title=SizeDelete Variant Category
DELETE /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}List Variants
GET /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variantsCreate Variant
POST /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants
Content-Type: application/x-www-form-urlencoded
name=Large&price_difference=200Update Variant
PUT /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants/{variant_id}
Content-Type: application/x-www-form-urlencoded
name=Extra%20LargeDelete Variant
DELETE /gumroad/v2/products/{product_id}/variant_categories/{variant_category_id}/variants/{variant_id}List Custom Fields
GET /gumroad/v2/products/{product_id}/custom_fieldsCreate Custom Field
POST /gumroad/v2/products/{product_id}/custom_fields
Content-Type: application/x-www-form-urlencoded
name=Company%20Name&required=trueUpdate Custom Field
PUT /gumroad/v2/products/{product_id}/custom_fields/{name}
Content-Type: application/x-www-form-urlencoded
required=falseDelete Custom Field
DELETE /gumroad/v2/products/{product_id}/custom_fields/{name}