# Remove one-time product from subscription order Removes a previously added one-time product from a specific subscription order. This permanently deletes the one-time product from the specified billing attempt. The operation is idempotent - attempting to delete a non-existent product will succeed without error. Important Notes: - Only removes the product from the specified billing attempt - Cannot remove products from billing attempts that are already processed - Activity logs are created for audit trails - Returns the updated list of all one-time products for the contract Use Cases: - Allow customers to remove unwanted add-ons before order processing - Clean up cart-like functionality in customer portals - Programmatically manage one-time product selections - Implement "undo" functionality for product additions Business Rules: - Contract must belong to the authenticated shop - The specific combination of contractId + billingAttemptId + variantId identifies the product to remove - No error is thrown if the product doesn't exist (idempotent operation) Authentication: Requires valid X-API-Key header that identifies the shop Endpoint: DELETE /api/external/v2/subscription-contract-one-offs-by-contractId-and-billing-attempt-id Version: 0.0.1 ## Header parameters: - `X-API-Key` (string, required) API Key for authentication. This key identifies your shop and must be included in the X-API-Key header. Example: "sk_live_1234567890abcdef" ## Query parameters: - `contractId` (integer, required) The unique identifier of the subscription contract Example: 98765 - `billingAttemptId` (integer, required) The billing attempt ID that contains the product to remove Example: 54321 - `variantId` (integer, required) The Shopify product variant ID to remove from the one-time purchases Example: 42549172011164 - `api_key` (string) API Key (Deprecated - Use X-API-Key header instead) Example: "sk_live_1234567890abcdef" ## Response 200 fields (application/json): - `id` (integer) Unique identifier of the one-time product record Example: 12345 - `shop` (string, required) The Shopify store domain that owns this subscription Example: "example-store.myshopify.com" - `billingAttemptId` (integer) The billing attempt ID this one-time product is associated with. This determines which upcoming order will include this product. Example: 54321 - `subscriptionContractId` (integer) The subscription contract ID this one-time product belongs to Example: 98765 - `variantId` (integer) The Shopify product variant ID for this one-time product Example: 42549172011164 - `variantHandle` (string) The handle/slug of the product variant for URL-friendly identification Example: "premium-coffee-blend-500g" - `quantity` (integer) The quantity of this product to include in the order Example: 2 - `price` (number) The price per unit of this product in the shop's base currency. This may include any applicable discounts. Example: 19.99 ## Response 400 fields (application/json): - `instance` (string) - `type` (string) - `parameters` (object) - `status` (object) - `status.statusCode` (integer) - `status.reasonPhrase` (string) - `detail` (string) - `title` (string) ## Response 401 fields (application/json): - `instance` (string) - `type` (string) - `parameters` (object) - `status` (object) - `status.statusCode` (integer) - `status.reasonPhrase` (string) - `detail` (string) - `title` (string) ## Response 403 fields (application/json): - `instance` (string) - `type` (string) - `parameters` (object) - `status` (object) - `status.statusCode` (integer) - `status.reasonPhrase` (string) - `detail` (string) - `title` (string)