I use the correct versioning, yes.
I removed the productId property when sending mode: CUSTOM but no tax rate group is applied.
Both the payment link response and the individual line items are missing the tax rate group id.
I’ve checked that its the correct ID for the tax group as well, and fetched it from the API.
New POST request
"method":"POST",
"url":"``https://api.hubapi.com/commerce/payment-links/2026-09/payment-links",
"body":{"paymentLinkName":"Scenario`` payment link 2026-10-04T07:03:20.109Z","currencyCode":"SEK","isOneTimeUseEnabled":true,"automatedSalesTaxEnabled":false,"discountCodeEnabled":false,"storePaymentMethodAtCheckout":true,"lineItems":[{"mode":"FROM_PRODUCT","quantity":1,"productId":"433630653633","taxRateGroupId":"118095891"},{"mode":"FROM_PRODUCT","quantity":1,"productId":"433476487354","taxRateGroupId":"118095891"}]}}
This will return the following payment link response
{
"paymentLinkName": "Scenario payment link 2026-10-04T07:03:20.109Z",
"currencyCode": "SEK",
"acceptedPaymentMethods": [
"CREDIT_OR_DEBIT_CARD"
],
"state": "ON",
"isOneTimeUseEnabled": true,
"includeEmailInSuccessRedirect": false,
"descriptionHtml": "",
"dealConfigurations": {
"createNewDealOnPurchase": false,
"pipelineStageId": null
},
"businessUnitId": "0",
"additionalFormFields": ,
"discountCodeEnabled": false,
"storePaymentMethodAtCheckout": true,
"collectShippingAddress": false,
"collectFullBillingAddress": false,
"automatedSalesTaxEnabled": false,
"createContractOnPurchase": false,
"id": "1389506878679",
"lineItems": [
{
"id": "490321632497",
"pricing": {
"pricingModel": "FLAT",
"prices": [
{
"currencyCode": "SEK",
"price": "2796.0"
}
]
},
"name": "Effira OPTi",
"quantity": 1,
"lineItemCurrencyCode": "SEK",
"productId": "433630653633"
},
{
"id": "490321632498",
"pricing": {
"pricingModel": "FLAT",
"prices": [
{
"currencyCode": "SEK",
"price": "55.2"
}
]
},
"name": "Bas månadsabonnemang",
"quantity": 1,
"description": "Endast ett abonnemang kan väljas och vara aktivt åt gången",
"richTextDescription": "Endast ett abonnemang kan väljas och vara aktivt åt gången",
"lineItemCurrencyCode": "SEK",
"productId": "433476487354",
"recurringBillingFrequency": "MONTHLY"
}
],
"formGuid": "daa9a3ad-ec99-469c-82c2-8d45e2a9ef5e",
"checkoutFeeIds": ,
"taxes": ,
"fees": ,
"discounts": ,
"paymentLinkUrl": " Checkout ",
"createdAt": "2026-10-04T07:03:20.660Z",
"updatedAt": "2026-10-04T07:03:20.660Z",
"completedPurchaseCount": 0,
"archived": false
}
Its missing information about taxes/VAT.
The line items created looks like this
[
{
"id": "490321632497",
"properties": {
"amount": "2796.00",
"createdate": "2026-10-04T07:03:20.863Z",
"hs_lastmodifieddate": "2026-10-04T07:03:20.863Z",
"hs_object_id": "490321632497",
"hs_product_id": "433630653633",
"hs_sku": "OPTI-HW",
"name": "Effira OPTi",
"price": "2796.0",
"quantity": "1",
"recurringbillingfrequency": null
},
"createdAt": "2026-10-04T07:03:20.863Z",
"updatedAt": "2026-10-04T07:03:20.863Z",
"archived": false,
"url": ""
},
{
"id": "490321632498",
"properties": {
"amount": "55.20",
"createdate": "2026-10-04T07:03:20.863Z",
"hs_lastmodifieddate": "2026-10-04T07:03:20.863Z",
"hs_object_id": "490321632498",
"hs_product_id": "433476487354",
"hs_sku": "OPTI-SUB-BAS-MONTHLY",
"name": "Bas månadsabonnemang",
"price": "55.2",
"quantity": "1",
"recurringbillingfrequency": "monthly"
},
"createdAt": "2026-10-04T07:03:20.863Z",
"updatedAt": "2026-10-04T07:03:20.863Z",
"archived": false,
"url": ""
}
]
Also missing VAT/Tax properties.
I then try and update the underlying line item with the following payload, line-item id from another payment link Ive created.
“method”:“PATCH”,
“url”:“https://api.hubapi.com/crm/objects/2026-09/line_items/490322424048",“body”:{“properties”:{“hs_tax_rate_group_id”:"118095891”}},
That doesnt work either.
You’re mentioning setting the tax directly on the product, how do I manage that?
My hunch is that something is not setup correctly on the account and Hubspot instead of letting me know what it is, is swallowing the validation error.