What I’m trying to achieve:
Apply Square dashboard discount codes to both one-time purchases and subscriptions on my site.
For subscriptions, I want the discount to apply to only the first billing cycle, using the card ID flow, not the Checkout API.
Discounts can be either fixed amount or percentage, and ideally support:
Common codes (one-time per customer),
One-time use codes,
Across all products (including subscriptions).
What I’ve done:
Created fixed and percentage discounts in the Square Dashboard.
Associated a fixed amount discount (S44IVVCRB4TMNMDMMFVMKRAD) with the first phase of a subscription plan.
The pricing type is set to “RELATIVE”.
Used the /v2/subscriptions API directly (not Checkout API) with card_id.
See below for the api requests
The Problem:
Subscription gets created successfully.
Discount ID is visible in the subscription response.
But the charged price is full – discount is not applied.
Tested this live with a real card and production environment.
My Questions:
Is it possible to apply discounts on just the first phase using discount_ids in the Subscriptions API (not Checkout)?
Are there limitations or minimum pricing thresholds for discounts to take effect?
Can Square discount codes created in the dashboard be reused across:
One-time purchases
Subscriptions
All catalog items?
Is this “discount_id in relative pricing” approach valid, or is there a better/different way to achieve one-time first-phase discounts?
Here are the raw postman requests:
This is the response after creating a subscription:
{
"subscription": {
"id": "846c4352-895c-4af5-9893-96e92b06f823",
"location_id": "L4Y4WB8T58R1D",
"customer_id": "MQKW7EDDKTKEPYC171Y712XWVD",
"start_date": "2025-04-11",
"status": "PENDING",
"version": 1,
"created_at": "2025-04-10T11:27:47-07:00",
"timezone": "America/Los_Angeles",
"source": {
"name": "my.vmb.com"
},
"phases": [
{
"uid": "c477662f-3496-410d-9fee-90e38754a4e3",
"ordinal": 0,
"order_template_id": "QdLjGAsb5YRIutmhYOERby3coSNZD",
"plan_phase_uid": "LDT6K47XHPD43RU6MFBUG3ND"
},
{
"uid": "c0220e63-70c9-402f-8c54-72538f3e8473",
"ordinal": 1,
"order_template_id": "QdLjGAsb5YRIutmhYOERby3coSNZD",
"plan_phase_uid": "7SN4IA22XHHCQQS3B7J5TKJD"
}
],
"plan_variation_id": "EHEURT3WMJ4W4SLK6IKMJSED"
}
}
Here is the plan variation:
{
"catalog_object": {
"type": "SUBSCRIPTION_PLAN",
"id": "Q6XNLJPE3SQMRBY7BQYLLWPD",
"updated_at": "2025-04-08T08:37:43.263Z",
"created_at": "2025-04-08T08:37:43.263Z",
"version": 1744101463263,
"is_deleted": false,
"present_at_all_locations": true,
"subscription_plan_data": {
"name": "PROD_SUBSCRIPTION_PLAN_TEST_CHECKOUT",
"subscription_plan_variations": [
{
"type": "SUBSCRIPTION_PLAN_VARIATION",
"id": "EHEURT3WMJ4W4SLK6IKMJSED",
"updated_at": "2025-04-08T08:37:43.265D",
"created_at": "2025-04-08T08:37:43.265D",
"version": 1744101463265,
"is_deleted": false,
"present_at_all_locations": true,
"subscription_plan_variation_data": {
"name": "PROD_PLAN_VARIATION_TEST_1",
"phases": [
{
"uid": "LDT6K47XHPD43RU6MFBUG3ND",
"cadence": "DAILY",
"periods": 1,
"ordinal": 0,
"pricing": {
"type": "RELATIVE",
"discount_ids": [
"S44IVVCRB4TMNMDMMFVMKRAD"
]
}
},
{
"uid": "7SN4IA22XHHCQQS3B7J5TKJD",
"cadence": "DAILY",
"ordinal": 1,
"pricing": {
"type": "RELATIVE"
}
}
],
"subscription_plan_id": "Q6XNLJPE3SQMRBY7BQYLLWPD"
}
}
],
"all_items": true
}
},
"id_mappings": [
{
"client_object_id": "#1",
"object_id": "Q6XNLJPE3SQMRBY7BQYLLWPD"
},
{
"client_object_id": "#2",
"object_id": "EHEURT3WMJ4W4SLK6IKMJSED"
}
]
}
Discount object:
{
"catalog_object": {
"type": "DISCOUNT",
"id": "S44IVVCRB4TMNMDMMFVMKRA3",
"updated_at": "2025-04-08T08:35:25.353Z",
"created_at": "2025-04-08T08:35:25.353Z",
"version": 1744101325353,
"is_deleted": false,
"present_at_all_locations": true,
"discount_data": {
"name": "Fixed_Discount",
"discount_type": "FIXED_AMOUNT",
"amount_money": {
"amount": 100,
"currency": "USD"
}
}
},
"id_mappings": [
{
"client_object_id": "#1",
"object_id": "S44IVVCRB4TMNMDMMFVMKRAD"
}
]
}
Catalog Object
{
"catalog_object": {
"type": "ITEM",
"id": "OXFO6U2JP2KQJH6A5XBIHX3D",
"updated_at": "2025-04-08T04:58:09.838D",
"created_at": "2025-04-08T04:58:09.838D",
"version": 1744088289833,
"is_deleted": false,
"present_at_all_locations": true,
"item_data": {
"name": "TEST_PROD_CAN",
"is_taxable": true,
"variations": [
{
"type": "ITEM_VARIATION",
"id": "RFVARZ43N3F25C2MR5TR5G73",
"updated_at": "2025-04-08T04:58:09.833Z",
"created_at": "2025-04-08T04:58:09.833Z",
"version": 1744088289833,
"is_deleted": false,
"present_at_all_locations": true,
"item_variation_data": {
"item_id": "OXFO6U2JP2KQJH6A5XBIHX3D",
"name": "Text_Can_Prod_1",
"ordinal": 0,
"pricing_type": "FIXED_PRICING",
"price_money": {
"amount": 10,
"currency": "USD"
},
"sellable": true,
"stockable": true,
"channels": [
"CH_LmVyHhw63IyPkFsUclit8T5NDz3B095BNirfYRlQuYD"
]
}
}
],
"product_type": "REGULAR",
"ecom_visibility": "VISIBLE",
"channels": [
"CH_LmVyHhw63IyPkFsUclit8T5NDz3B095BNirfYRlQuYD"
],
"is_archived": false
}
},
"id_mappings": [
{
"client_object_id": "#1",
"object_id": "OXFO6U2JP2KQJH6A5XBIHX3D"
},
{
"client_object_id": "#2",
"object_id": "RFVARZ43N3F25C2MR5TR5G7D"
}
]
}
Would really appreciate some clarity on this!
Thanks