# Remove one-time product from upcoming order Removes a previously added one-time product (one-off) from a specific upcoming billing attempt. This allows customers or merchants to cancel add-on items before the order is processed. Key Features: - Flexible Cancellation: Remove add-ons before order processes - Targeted Removal: Remove specific variant from specific order - No Subscription Impact: Doesn't affect recurring items - Customer Control: Let members manage their add-ons - Activity Logging: Tracks removal for audit trail Required Parameters: - Contract ID: Target subscription contract - Billing Attempt ID: Order to remove item from - Variant ID: Product variant to remove How It Works: 1. Validates contract exists and belongs to shop 2. Finds one-off matching contract, billing attempt, and variant 3. Deletes the one-off record 4. Returns updated list of remaining one-offs 5. Logs removal activity for audit trail Use Cases: - Customer changes mind about add-on product - Remove out-of-stock items from upcoming orders - Cancel promotional items no longer available - Customer wants to reduce order total - Merchant corrects mistakenly added items - Manage add-ons in customer portal Business Rules: - Can only remove from upcoming (unprocessed) orders - Must match exact contract, billing attempt, and variant - Returns remaining one-offs after deletion - Cannot remove from past/completed orders Authentication: Requires API key authentication via X-API-Key header or api_key parameter Endpoint: DELETE /api/external/v2/subscription-contract-one-offs-by-contractId-and-billing-attempt-id Version: 0.0.1 ## Query parameters: - `api_key` (string) API Key (Deprecated - Use Header X-API-Key instead) - `contractId` (integer, required) Subscription contract ID Example: 123456 - `billingAttemptId` (integer, required) Billing attempt ID to remove the item from Example: 789012 - `variantId` (integer, required) Product variant ID to remove Example: 456789 ## Header parameters: - `X-API-Key` (string) ## Response 200 fields (application/json): - `id` (integer) - `shop` (string, required) - `billingAttemptId` (integer) - `subscriptionContractId` (integer) - `variantId` (integer) - `variantHandle` (string) ## Response 401 fields (*/*): - `id` (integer) - `shop` (string, required) - `billingAttemptId` (integer) - `subscriptionContractId` (integer) - `variantId` (integer) - `variantHandle` (string) ## Response 403 fields (*/*): - `id` (integer) - `shop` (string, required) - `billingAttemptId` (integer) - `subscriptionContractId` (integer) - `variantId` (integer) - `variantHandle` (string) ## Response 404 fields (*/*): - `id` (integer) - `shop` (string, required) - `billingAttemptId` (integer) - `subscriptionContractId` (integer) - `variantId` (integer) - `variantHandle` (string) ## Response 400 fields