Update Dropship Profile
PUT/api/admin/portal/accounts/:customer/dropship-profile
Create or update an account's dropship profile. The first save creates it. Requires the portal.manage permission. Returns the saved profile (same shape as Get Dropship Profile).
This endpoint currently requires session authentication; Personal Access Token scope support is in progress.
Request fields (every key is optional; only keys you send are written — send the whole object or just the keys you are changing):
Program
enabled(boolean): turn the dropship program on or off for this account.intake_channels(array of strings, distinct): routes the retailer may submit dropship orders through —portal,csv,api,edi.
Branding (prints on the blind packing slip)
display_name(string, max 255, nullable): the retailer name on every slip. Required while the program is enabled (checked against the value the profile will have after this request).support_email(email, max 255, nullable),support_phone(string, max 64, nullable).slip_message(string, max 2000, nullable): message printed on the slip.insert_instructions(string, max 2000, nullable): instructions for your packers (e.g. inserts to add); not printed for the end customer.return_address(object, nullable): the return address printed on the slip. When sent,name,address1,cityandcountry_code(2 letters) are required;company,address2,address3,province,province_code(max 16),zip(max 32),country,phone(max 64) andemailare optional. Send null to clear it.packing_slip_template_id(integer, nullable): a PACKING-type PDF template to use for this retailer's slips; null uses the tenant's dropship default.retailer_manages_branding(boolean): when true, the retailer's company admins may edit the branding keys (display_name,support_email,support_phone,slip_message,return_address) themselves from the buyer portal.
Pricing and fees
pricing_tier_id(integer, nullable, must exist): pricing tier for dropship orders; null uses the account's tier. The tier must be in the account's currency (the currency of the account's own pricing tier) — a tier in another currency is refused with a 422 onpricing_tier_id.fee_per_order(number 0–99999),fee_per_unit(number 0–99999): dropship handling fees added to each order.shipping_charge_mode(string):none,flat,rate_tableoractual(label cost plusshipping_markup_percent).actualis only accepted when dropship orders invoiceper_shipmentorconsolidated(the profile'sinvoicing_policy, else the account's), so the invoice is raised after the label exists.shipping_flat_amount(number 0–99999, nullable): required when the mode isflat.shipping_free_over(number 0–9999999, nullable): order subtotal above which shipping is free.shipping_rate_table(object, nullable, max 50 entries): charge per shipping method, keyed by shipping method id ({"5": 8.95}); required when the mode israte_table. Each value 0–99999.shipping_markup_percent(number 0–1000, nullable): markup on the label cost for theactualmode.exempt_minimums(boolean): exempt dropship orders from the account's minimum order value.catalog_id(integer, nullable): restrict dropship orders to one live portal catalog.
Shipping and SLA
default_shipping_method_id(integer, nullable, must exist): service used when the retailer does not pick one. Must be one ofallowed_shipping_method_idswhen that list is set.allowed_shipping_method_ids(array of distinct shipping method ids, max 50, nullable): services the retailer may request; null or empty allows all.third_party_billing(object, nullable): bill labels to the retailer's own carrier account —carrier(upsorfedex),account_number(max 32, letters, digits and dashes),postal_code(max 16),country_code(2 letters). Sent keys merge over the stored value, so omittingaccount_numberkeeps the stored number. Send null to remove.allow_international(boolean): accept dropship orders to non-domestic addresses.sla_business_days(integer 0–30): business days to ship after the cut-off.sla_cutoff_time(stringHH:MMorHH:MM:SS, 24-hour, tenant timezone): daily order cut-off.feed_safety_stock(integer 0–100000): units held back from the retailer's inventory feed per product.
Tracking and notifications
tracking_email(email, max 255, nullable): where shipment tracking is sent.tracking_email_mode(string):per_order,daily_digestoroff.consumer_notifications(string):offorshipped— whether the end customer gets a shipped email.
Billing and returns
invoicing_policy(string, nullable):per_order,per_shipmentorconsolidated; null follows the account's policy.returns_destination(string):merchant_warehouse_retailer_named(returns come to your warehouse in the retailer's name) orretailer(returns go to the retailer).retailer_return_address(object, nullable): the retailer's own return address, same shape and rules asreturn_address. Required whenreturns_destinationisretailer.restocking_fee_percent(number 0–100).
Errors. 422 with the standard validation shape for any rule above, including the cross-field checks (display name while enabled, actual shipping vs. invoicing policy, flat amount for flat, default service within the allowed services, retailer return address for retailer returns). Cross-field checks use the value the profile will have after the request — a key you omit is taken from what is stored.
Request
Responses
- 200
- 401
- 403
- 404
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Not found — no record with the given identifier (or the route does not exist). Verify the ID before retrying.
Unprocessable Content
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.