SureDone API v3 (v3.0.0)
This guide provides list of REST API and sample code in several languages.
Base URL: https://api.suredone.com
Authentication: Paired X-Auth-User + X-Auth-Token headers. Token is at app.suredone.com/settings/organization/security.
Endpoints (64 operations)
Account
DELETE /v3/account — Delete Account
Schedules the authenticated account for permanent deletion. The account is deactivated immediately and all data will be permanently deleted within 30 days. Only the account owner can request account deletion.
Auth: apiUserToken + apiAuthToken
DELETE /v3/account/users/{uaid} — Delete Sub-User
Permanently deletes a sub-user from the account. Removes the user and cleans up all cached auth tokens and sessions.
Parameters: uaid (path), X-Auth-Account (header), X-Auth-Jwt (header)
Auth: apiUserToken + apiAuthToken
Automation Requests
GET /v3/automations/custom — List Custom Automations
Returns a paginated list of custom automations for the authenticated user.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/automations/custom — Create Custom Automation
Create a new custom automation. Requires a full automation configuration including connection and file_configs.
Parameters: X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
DELETE /v3/automations/custom/{id} — Delete Custom Automation
Delete a custom automation.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/automations/custom/{id} — Get Custom Automation
Returns a single custom automation by ID, including its current run status.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
PATCH /v3/automations/custom/{id} — Update Custom Automation
Update an existing custom automation. Only the fields provided in the request body will be updated.
Parameters: id (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
PUT /v3/automations/custom/{id}/parameters/{name} — Update Custom Automation Parameter
Update a single parameter on a custom automation. The parameter name is specified in the URL path, and the request body contains the parameter properties to update.
Parameters: id (path), name (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
GET /v3/automations/custom/{id}/run — Run Custom Automation
Queue a custom automation for execution. Submit `debug=true` for a test run. For live runs omit the `debug` argument or set it to `false`. Use the `diff` argument to control full or diff execution mode. Submit `notify=true` and `email` with a valid email address to receive notification when the run completes.
Parameters: id (path), debug (query), diff (query), notify (query), email (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
DELETE /v3/automations/custom/{id}/status — Reset Custom Automation Status
Reset the run status for a custom automation. The `type` query parameter is required and must be either `debug` or `prod`.
Parameters: id (path), type (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/automations/installed — List Installed Automations
Returns a paginated list of installed (shared) automations for the authenticated user.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/automations/installed — Install Shared Automation
Install a shared automation from the published marketplace. Requires the `shared_id` of the published automation.
Parameters: X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
DELETE /v3/automations/installed/{id} — Delete Installed Automation
Delete an installed automation.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/automations/installed/{id} — Get Installed Automation
Returns a single installed automation by ID, including its current run status.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
PATCH /v3/automations/installed/{id} — Update Installed Automation
Update an installed automation. Typically used to change the `active` state or update `parameters`.
Parameters: id (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
PUT /v3/automations/installed/{id}/parameters/{name} — Update Installed Automation Parameter
Update a single parameter on an installed automation. The parameter name is specified in the URL path, and the request body contains the parameter properties to update.
Parameters: id (path), name (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
GET /v3/automations/installed/{id}/run — Run Installed Automation
Queue an installed automation for execution. Submit `debug=true` for a test run. For live runs omit the `debug` argument or set it to `false`. Use the `diff` argument to control full or diff execution mode.
Parameters: id (path), debug (query), diff (query), notify (query), email (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
DELETE /v3/automations/installed/{id}/status — Reset Installed Automation Status
Reset the run status for an installed automation. The `type` query parameter is required and must be either `debug` or `prod`.
Parameters: id (path), type (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/automations/published — List Published Automations
Returns a list of all published (shared) automations available for installation from the SureDone marketplace.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
Logging Requests
POST /v3/logs — Logging API Request
Search the SureDone application log index. Filters include severity, request id, user id, and time range; results are paginated.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
Orders Requests
POST /v3/orders — Create order (single or bulk)
Creates one or more orders.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/orders — Get orders
+ Description: Use the orders endpoint without the `oid` to return a list of orders. Note: by default the API will return all orders, including `archived` ones. When SureDone imports multi item eBay orders, the system currently imports the line item as a separate order and then uses internal mechanisms combine in a single order. To accommodate this, you may filter archived orders out using the search: `archived:=0`
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/orders/combine — Combine orders
|Field|Description|Required| |:--------------|----------|--------| |oid|database ID, integer Must be supplied as identifier if “order” is not supplied as the identifier.|Yes for combine and split orders| |order|concatenation of “channel” and “ordernumber” which may be used as an identifier.|| |ordernumber|order number, 100 character limit|Yes for create order| |channel|channel where the order was originated, 50 character limit|| |instance|for orders imported via SureDone, the integration instance of the channel|| |details|channel specific order details encoded as JSON such as item fees and delivery estimates|| |date|date of order, converted to timezone configured in user’s SureDone settings|| |dateutc|date or order in UTC|| |dateupdated|last modified date of order, converted to timezone configured in SureDone account|| |oidconsolidate|oid of archived or parent order in split and combined orders respectively|| |gift|whether order was marked as a gift, boolean|| |comments|order comments|| |internalnotes|array of internal notes indexed by date of each note and encoded as JSON, sending in “internalnotesoverwrite” with a non-false value will overwrite all contents of this field|| |status|order status with value one of “INCOMPLETE”, “READY”, “PENDING”, “ORDERED”, “DROPSHIPPED”, “COMPLETE” or “ARCHIVED”|| |transactionid|transaction ID of the order, may correlate to a system identifier required by the channel for fulfilling the order|| |correlationid|correlation ID for the payment of the order|| |payment|payment method of the order|| |paymentdate|date of payment to mark paymentstatus as COMPLETE|| |paymentstatus|payment status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”|| |shippingcarrier|buyer requested shipping carrier|| |shippingservice|buyer requested shipping service|| |shippingstatus|shipping status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”, sending “COMPLETE” will mark order as “shipped” on external channels|| |total|order total including all taxes, shipping, handling and discounts|Yes for create order| |itemtotal|total of all order items|| |shippingtotal|total of all shipping costs charged|| |handlingtotal|total of all handling charged|| |taxtotal|total of all taxes charged|| |discounttotal|total of all discounts applied to order|| |discountcode|code used to generate discount, 50 character limit|| |currency|currency code of the order, 10 character limit|| |account|account id of suredone storefront user|| |archived|whether order has been “deleted”, boolean|| |meta|miscellaneous order data JSON encoded including but not limited to raw payloads from channel imports and raw validated addresses|| |email|email of customer|| |billing|address data object for billing contact|| |billing > country|country of billing contact|| |billing > firstname|first name of billing contact|| |billing > middlename|middle name of billing contact|| |billing > lastname|last name of billing contact|| |billing > company|company of billing contact|| |billing > streetl|address street of billing contact|| |billing > street2|address street 2 of billing contact|| |billing > street3|address street 3 of billing contact|| |billing > city|city of billing contact|| |billing > stateprovince|state or province of billing contact|| |billing > postalcode|postal code of billing contact|| |billing > phone|phone number of billing contact|| |billing > phone2|second phone number of billing contact|| |shipping|address data object for shipping contact|| |shipping > country|country of shipping contact|| |shipping > firstname|first name of shipping contact|| |shipping > middlename|middle name of shipping contact|| |shipping > lastname|last name of shipping contact|| |shipping > company|company of shipping contact|| |shipping > streetl|address street of shipping contact|| |shipping > street2|address street 2 of shipping contact|| |shipping > street3|address street 3 of shipping contact|| |shipping > city|city of shipping contact|| |shipping > stateprovince|state or province of shipping contact|| |shipping > postalcode|postal code of shipping contact|| |shipping > phone|phone number of shipping contact|| |shipping > phone2|second phone number of shipping contact|| |items|order items object with one or more items, for products that exist in SureDone the following fields may be populated if they are missing during order creation|Yes for create order| |items > itemid|order item id, required for updating order item data|| |items > sku|order item SKU, for products matching in SureDone this will be the “guid”, 100 character limit|| |items > title|order item title, 500 character limit|| |items > price|order item price|| |items > quantity|order item quantity purchased|| |items > media|order item image URL|| |items > weight|order item weight|| |items > dimweight|order item dim weight|| |items > boxlength|order item box length|| |items > boxwidth|order item box width|| |items > boxheight|order item box height|| |items > source|order item stock (warehouse) source as determined by product stock levels for products that exist in SureDone|| |items > itemdetails|order item details JSON encoded including but not limited to full product payload for products existing in SureDone at the time of order creation|| |items > itemstatus|order item status|| |items > vendor|order item vendor|| |items > purchaseorderid|order item purchase order for vendors and/or erp|| |items > “customfields”|order item custom fields created|| |shipments|order shipments object with one or more shipments|| |shipments > shipid|order shipment id, required when updating an existing shipment post creation|| |shipments > shipcarrier|order shipment carrier|| |shipments > shipservice|order shipment service|| |shipments > shiptracking|order shipment tracking number|| |shipments > shipdate|date of order shipment|| |shipments > shipcost|cost of order shipment|| |shipments > shipuser|user who generated order shipment|| |shipments > shipdetails|order shipment details JSON encoded including but not limited to fulfillment order item data in the case of short shipping|| |shipments > shipdetails > items|order shipment package line item sku and quantity details, supported via API parameters `shipitems` or `shipsku` with `shipquantity`. Example `{"shipments":[{"shiptracking":"123123123123","shipdate":"NOW","shipitems":[{"sku":"U8800ZZZ","quantity":1,"fulfilled":null}]}]}`. Optionally, you may use `shipskufield` and `shipskuvalue` to internally map `shipsku` to an `order.item.sku` via matching where `order.item.itemdetails.product.{shipskufield} = shipskuvalue`.|| |refunds|order refunds object with one or more refunds|| |refunds > refundid|order refund id, required for updating an order refund|| |refunds > refunddate|date of order refund|| |refunds > refunddetails|order refund details JSON encoded|| |refunds > refunddetails > items|order refund line item sku and quantity details, supported via API parameters `refunditems` or `refundsku` with `refundquantity`.||
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/orders/split — Split order
|Field|Description|Required| |:--------------|----------|--------| |oid|database ID, integer Must be supplied as identifier if “order” is not supplied as the identifier.|Yes for combine and split orders| |order|concatenation of “channel” and “ordernumber” which may be used as an identifier.|| |ordernumber|order number, 100 character limit|Yes for create order| |channel|channel where the order was originated, 50 character limit|| |instance|for orders imported via SureDone, the integration instance of the channel|| |details|channel specific order details encoded as JSON such as item fees and delivery estimates|| |date|date of order, converted to timezone configured in user’s SureDone settings|| |dateutc|date or order in UTC|| |dateupdated|last modified date of order, converted to timezone configured in SureDone account|| |oidconsolidate|oid of archived or parent order in split and combined orders respectively|| |gift|whether order was marked as a gift, boolean|| |comments|order comments|| |internalnotes|array of internal notes indexed by date of each note and encoded as JSON, sending in “internalnotesoverwrite” with a non-false value will overwrite all contents of this field|| |status|order status with value one of “INCOMPLETE”, “READY”, “PENDING”, “ORDERED”, “DROPSHIPPED”, “COMPLETE” or “ARCHIVED”|| |transactionid|transaction ID of the order, may correlate to a system identifier required by the channel for fulfilling the order|| |correlationid|correlation ID for the payment of the order|| |payment|payment method of the order|| |paymentdate|date of payment to mark paymentstatus as COMPLETE|| |paymentstatus|payment status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”|| |shippingcarrier|buyer requested shipping carrier|| |shippingservice|buyer requested shipping service|| |shippingstatus|shipping status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”, sending “COMPLETE” will mark order as “shipped” on external channels|| |total|order total including all taxes, shipping, handling and discounts|Yes for create order| |itemtotal|total of all order items|| |shippingtotal|total of all shipping costs charged|| |handlingtotal|total of all handling charged|| |taxtotal|total of all taxes charged|| |discounttotal|total of all discounts applied to order|| |discountcode|code used to generate discount, 50 character limit|| |currency|currency code of the order, 10 character limit|| |account|account id of suredone storefront user|| |archived|whether order has been “deleted”, boolean|| |meta|miscellaneous order data JSON encoded including but not limited to raw payloads from channel imports and raw validated addresses|| |email|email of customer|| |billing|address data object for billing contact|| |billing > country|country of billing contact|| |billing > firstname|first name of billing contact|| |billing > middlename|middle name of billing contact|| |billing > lastname|last name of billing contact|| |billing > company|company of billing contact|| |billing > streetl|address street of billing contact|| |billing > street2|address street 2 of billing contact|| |billing > street3|address street 3 of billing contact|| |billing > city|city of billing contact|| |billing > stateprovince|state or province of billing contact|| |billing > postalcode|postal code of billing contact|| |billing > phone|phone number of billing contact|| |billing > phone2|second phone number of billing contact|| |shipping|address data object for shipping contact|| |shipping > country|country of shipping contact|| |shipping > firstname|first name of shipping contact|| |shipping > middlename|middle name of shipping contact|| |shipping > lastname|last name of shipping contact|| |shipping > company|company of shipping contact|| |shipping > streetl|address street of shipping contact|| |shipping > street2|address street 2 of shipping contact|| |shipping > street3|address street 3 of shipping contact|| |shipping > city|city of shipping contact|| |shipping > stateprovince|state or province of shipping contact|| |shipping > postalcode|postal code of shipping contact|| |shipping > phone|phone number of shipping contact|| |shipping > phone2|second phone number of shipping contact|| |items|order items object with one or more items, for products that exist in SureDone the following fields may be populated if they are missing during order creation|Yes for create order| |items > itemid|order item id, required for updating order item data|| |items > sku|order item SKU, for products matching in SureDone this will be the “guid”, 100 character limit|| |items > title|order item title, 500 character limit|| |items > price|order item price|| |items > quantity|order item quantity purchased|| |items > media|order item image URL|| |items > weight|order item weight|| |items > dimweight|order item dim weight|| |items > boxlength|order item box length|| |items > boxwidth|order item box width|| |items > boxheight|order item box height|| |items > source|order item stock (warehouse) source as determined by product stock levels for products that exist in SureDone|| |items > itemdetails|order item details JSON encoded including but not limited to full product payload for products existing in SureDone at the time of order creation|| |items > itemstatus|order item status|| |items > vendor|order item vendor|| |items > purchaseorderid|order item purchase order for vendors and/or erp|| |items > “customfields”|order item custom fields created|| |shipments|order shipments object with one or more shipments|| |shipments > shipid|order shipment id, required when updating an existing shipment post creation|| |shipments > shipcarrier|order shipment carrier|| |shipments > shipservice|order shipment service|| |shipments > shiptracking|order shipment tracking number|| |shipments > shipdate|date of order shipment|| |shipments > shipcost|cost of order shipment|| |shipments > shipuser|user who generated order shipment|| |shipments > shipdetails|order shipment details JSON encoded including but not limited to fulfillment order item data in the case of short shipping|| |shipments > shipdetails > items|order shipment package line item sku and quantity details, supported via API parameters `shipitems` or `shipsku` with `shipquantity`. Example `{"shipments":[{"shiptracking":"123123123123","shipdate":"NOW","shipitems":[{"sku":"U8800ZZZ","quantity":1,"fulfilled":null}]}]}`. Optionally, you may use `shipskufield` and `shipskuvalue` to internally map `shipsku` to an `order.item.sku` via matching where `order.item.itemdetails.product.{shipskufield} = shipskuvalue`.|| |refunds|order refunds object with one or more refunds|| |refunds > refundid|order refund id, required for updating an order refund|| |refunds > refunddate|date of order refund|| |refunds > refunddetails|order refund details JSON encoded|| |refunds > refunddetails > items|order refund line item sku and quantity details, supported via API parameters `refunditems` or `refundsku` with `refundquantity`.||
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
PATCH /v3/orders/{oid} — Update order by oid
Update an existing order by identifier. The `{oid}` path segment accepts either the numeric database OID or the `order` string (channel + channel ordernumber). The same field schema applies for both identifier forms.
Parameters: oid (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
DELETE /v3/orders/{oid} — Delete orders
|Field|Description|Required| |:--------------|----------|--------| |oid|database ID, integer Must be supplied as identifier if “order” is not supplied as the identifier.|Yes for combine and split orders| |order|concatenation of “channel” and “ordernumber” which may be used as an identifier.|| |ordernumber|order number, 100 character limit|Yes for create order| |channel|channel where the order was originated, 50 character limit|| |instance|for orders imported via SureDone, the integration instance of the channel|| |details|channel specific order details encoded as JSON such as item fees and delivery estimates|| |date|date of order, converted to timezone configured in user’s SureDone settings|| |dateutc|date or order in UTC|| |dateupdated|last modified date of order, converted to timezone configured in SureDone account|| |oidconsolidate|oid of archived or parent order in split and combined orders respectively|| |gift|whether order was marked as a gift, boolean|| |comments|order comments|| |internalnotes|array of internal notes indexed by date of each note and encoded as JSON, sending in “internalnotesoverwrite” with a non-false value will overwrite all contents of this field|| |status|order status with value one of “INCOMPLETE”, “READY”, “PENDING”, “ORDERED”, “DROPSHIPPED”, “COMPLETE” or “ARCHIVED”|| |transactionid|transaction ID of the order, may correlate to a system identifier required by the channel for fulfilling the order|| |correlationid|correlation ID for the payment of the order|| |payment|payment method of the order|| |paymentdate|date of payment to mark paymentstatus as COMPLETE|| |paymentstatus|payment status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”|| |shippingcarrier|buyer requested shipping carrier|| |shippingservice|buyer requested shipping service|| |shippingstatus|shipping status with value one of “INCOMPLETE”, “PENDING” or “COMPLETE”, sending “COMPLETE” will mark order as “shipped” on external channels|| |total|order total including all taxes, shipping, handling and discounts|Yes for create order| |itemtotal|total of all order items|| |shippingtotal|total of all shipping costs charged|| |handlingtotal|total of all handling charged|| |taxtotal|total of all taxes charged|| |discounttotal|total of all discounts applied to order|| |discountcode|code used to generate discount, 50 character limit|| |currency|currency code of the order, 10 character limit|| |account|account id of suredone storefront user|| |archived|whether order has been “deleted”, boolean|| |meta|miscellaneous order data JSON encoded including but not limited to raw payloads from channel imports and raw validated addresses|| |email|email of customer|| |billing|address data object for billing contact|| |billing > country|country of billing contact|| |billing > firstname|first name of billing contact|| |billing > middlename|middle name of billing contact|| |billing > lastname|last name of billing contact|| |billing > company|company of billing contact|| |billing > streetl|address street of billing contact|| |billing > street2|address street 2 of billing contact|| |billing > street3|address street 3 of billing contact|| |billing > city|city of billing contact|| |billing > stateprovince|state or province of billing contact|| |billing > postalcode|postal code of billing contact|| |billing > phone|phone number of billing contact|| |billing > phone2|second phone number of billing contact|| |shipping|address data object for shipping contact|| |shipping > country|country of shipping contact|| |shipping > firstname|first name of shipping contact|| |shipping > middlename|middle name of shipping contact|| |shipping > lastname|last name of shipping contact|| |shipping > company|company of shipping contact|| |shipping > streetl|address street of shipping contact|| |shipping > street2|address street 2 of shipping contact|| |shipping > street3|address street 3 of shipping contact|| |shipping > city|city of shipping contact|| |shipping > stateprovince|state or province of shipping contact|| |shipping > postalcode|postal code of shipping contact|| |shipping > phone|phone number of shipping contact|| |shipping > phone2|second phone number of shipping contact|| |items|order items object with one or more items, for products that exist in SureDone the following fields may be populated if they are missing during order creation|Yes for create order| |items > itemid|order item id, required for updating order item data|| |items > sku|order item SKU, for products matching in SureDone this will be the “guid”, 100 character limit|| |items > title|order item title, 500 character limit|| |items > price|order item price|| |items > quantity|order item quantity purchased|| |items > media|order item image URL|| |items > weight|order item weight|| |items > dimweight|order item dim weight|| |items > boxlength|order item box length|| |items > boxwidth|order item box width|| |items > boxheight|order item box height|| |items > source|order item stock (warehouse) source as determined by product stock levels for products that exist in SureDone|| |items > itemdetails|order item details JSON encoded including but not limited to full product payload for products existing in SureDone at the time of order creation|| |items > itemstatus|order item status|| |items > vendor|order item vendor|| |items > purchaseorderid|order item purchase order for vendors and/or erp|| |items > “customfields”|order item custom fields created|| |shipments|order shipments object with one or more shipments|| |shipments > shipid|order shipment id, required when updating an existing shipment post creation|| |shipments > shipcarrier|order shipment carrier|| |shipments > shipservice|order shipment service|| |shipments > shiptracking|order shipment tracking number|| |shipments > shipdate|date of order shipment|| |shipments > shipcost|cost of order shipment|| |shipments > shipuser|user who generated order shipment|| |shipments > shipdetails|order shipment details JSON encoded including but not limited to fulfillment order item data in the case of short shipping|| |shipments > shipdetails > items|order shipment package line item sku and quantity details, supported via API parameters `shipitems` or `shipsku` with `shipquantity`. Example `{"shipments":[{"shiptracking":"123123123123","shipdate":"NOW","shipitems":[{"sku":"U8800ZZZ","quantity":1,"fulfilled":null}]}]}`. Optionally, you may use `shipskufield` and `shipskuvalue` to internally map `shipsku` to an `order.item.sku` via matching where `order.item.itemdetails.product.{shipskufield} = shipskuvalue`.|| |refunds|order refunds object with one or more refunds|| |refunds > refundid|order refund id, required for updating an order refund|| |refunds > refunddate|date of order refund|| |refunds > refunddetails|order refund details JSON encoded|| |refunds > refunddetails > items|order refund line item sku and quantity details, supported via API parameters `refunditems` or `refundsku` with `refundquantity`.||
Parameters: oid (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/orders/{oid} — Get order by oid
Retrieve a single order by its numeric database OID or by the customer-facing order string (channel + ordernumber). The handler chooses between the two by `is_numeric()`.
Parameters: oid (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
Webhooks
POST /v3/webhooks/deliveries/{id}/retry — Retry Failed Delivery
Retry a failed webhook delivery. The delivery ID is in the format `{msgId}_{endpointId}` as returned in delivery logs.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/webhooks/endpoints — List Webhook Endpoints
Returns all webhook endpoints configured for the authenticated user, including health metrics.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/webhooks/endpoints — Create Webhook Endpoint
Create a new webhook endpoint. The response includes the signing secret which is used to verify webhook signatures. Store this secret securely — it is only returned on creation.
Parameters: X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
DELETE /v3/webhooks/endpoints/{id} — Delete Webhook Endpoint
Permanently delete a webhook endpoint. This action cannot be undone.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/webhooks/endpoints/{id} — Get Webhook Endpoint
Returns details for a single webhook endpoint, including health metrics.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
PATCH /v3/webhooks/endpoints/{id} — Update Webhook Endpoint
Update an existing webhook endpoint. Accepts partial updates — only include the fields you want to change.
Parameters: id (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
GET /v3/webhooks/endpoints/{id}/logs — Get Delivery Logs
Retrieve delivery logs for a webhook endpoint. Logs are grouped by logical delivery (retries are consolidated under a single delivery entry). Each delivery includes an array of individual attempts with status, response time, and timestamp.
Parameters: id (path), limit (query), offset (query), status (query), event_type (query), before (query), after (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/webhooks/endpoints/{id}/rotate-secret — Rotate Signing Secret
Rotate the signing secret for a webhook endpoint. The previous secret is immediately invalidated and a new secret is returned. Update your verification logic with the new secret before processing further deliveries.
Parameters: id (path), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/webhooks/endpoints/{id}/test — Test Webhook Endpoint
Send a test event to a webhook endpoint. The test is synchronous — the response includes the delivery result (HTTP status code, response time, and response body from your endpoint). If delivery takes longer than 5 seconds, the response indicates the event was queued and you can check the delivery logs for results.
Parameters: id (path), X-Auth-Integration (header)
Request body: application/json
Auth: apiUserToken + apiAuthToken
GET /v3/webhooks/event-types — List Event Types
Returns all available webhook event types, grouped by category. Event types marked as `enabled: false` are planned for future release and cannot be subscribed to yet.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
GET /v3/webhooks/statistics — Get Webhook Statistics
Retrieve aggregate delivery statistics for all webhook endpoints. Statistics include total deliveries, success/failure counts, success rate, and a breakdown by event type.
Parameters: period (query), X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
Registration
POST /v3/register — Create a new SureDone account
Creates a new SureDone account from an email, password, and basic contact details. On success, returns sign-in credentials so the caller can transition the user into the app immediately.
Request body (required): application/json
POST /v3/register/verify — Verify a new account's email address
Marks the email address associated with a newly registered account as verified, using the 6-digit code sent during registration.
Request body (required): application/json
Shipping
GET /v3/shipping/services — List Shipping Services
Returns the catalog of shipping carriers, services, and predefined packages the authenticated account has connected to SureDone.
Parameters: X-Auth-Integration (header)
Auth: apiUserToken + apiAuthToken
POST /v3/shipping/rates — Get Shipping Rates
Returns rate quotes from the appropriate shipping provider for a single shipment.
Request body (required): application/json
Auth: apiUserToken + apiAuthToken
POST /v3/shipping/label — Create Shipping Label
Purchases a shipping label for a single shipment, uploads the rendered PDF to SureDone's private S3 bucket, and (if `oid` is supplied) attaches the shipment to the matching SureDone order.
Request body (required): application/json
Auth: apiUserToken + apiAuthToken
POST /v3/shipping/validate — Validate Shipping Address
Validates a postal address via ShipEngine and returns the validation status plus a normalized "matched" address when verification succeeds. Useful as a pre-flight check before generating a label so callers can confirm the destination is deliverable and capture USPS/carrier-canonical formatting (e.g. ZIP+4, standardized state and street abbreviations).
Request body (required): application/json
Auth: apiUserToken + apiAuthToken
GET /v3/shipping/{tracking} — Get Shipment Label URL by Tracking Number
Returns a short-lived (30 minute) presigned S3 URL where the PDF shipping label for the supplied tracking number can be downloaded. Labels are stored per-user under `<uid>/system/labels/<tracking>.pdf` when first generated via `POST /v3/shipping/label`; this endpoint re-fetches that same artifact.
Parameters: tracking (path)
Auth: apiUserToken + apiAuthToken
Channel
GET /v3/channel/statuses — List active channel plugin instances
Returns every channel plugin integration on the account along with its instance number and active/inactive status.
Auth: apiUserToken + apiAuthToken
GET /v3/channel/{channel}/{aspect}/{function} — Channel operation (GET)
Generic GET dispatcher for channel-scoped operations. The exact contract depends on `channel`/`aspect`/`function`.
Auth: apiUserToken + apiAuthToken
POST /v3/channel/{channel}/{aspect}/{function} — Channel operation (POST)
Generic POST dispatcher for channel-scoped operations.
Request body: application/json
Auth: apiUserToken + apiAuthToken
PUT /v3/channel/{channel}/{aspect}/{function} — Channel operation (PUT)
PUT dispatcher. Currently used for eBay marketing keyword updates and negative-keyword updates.
Request body (required): application/json
Auth: apiUserToken + apiAuthToken
DELETE /v3/channel/{channel}/{aspect}/{function} — Channel operation (DELETE)
DELETE dispatcher. Currently used for eBay marketing ad removal. Behaviour differs based on the campaign's `fundingStrategy.fundingModel`.
Auth: apiUserToken + apiAuthToken
Categories
GET /v3/categories/{channel} — Search a channel's category taxonomy
Searches the channel's category taxonomy and returns up to 20 matches via a MongoDB Atlas Search `$search` aggregate pipeline keyed on the channel's taxonomy collection.
Parameters: channel (path), search (query)
Auth: apiUserToken + apiAuthToken
Fitment
POST /v3/fitment/load — Trigger fitment data load for the authenticated user
Enqueues a `system_load_fitment` qdone job that runs `jobs/fitment-user-data-loader.php <userId>` to backfill / refresh fitment data for the account. The body may include an `instance` property — accepted by the API but currently NOT forwarded to the loader job (`loadFitmentForUser` builds the command without it). It is reserved for future use.
Request body: application/json
Auth: apiUserToken + apiAuthToken
Authorize
GET /v3/authorize/{plugin} — Get plugin authorization URL
Returns the OAuth or onboarding URL for the named plugin/channel. Equivalent to calling `/v3/authorize/{plugin}/url`. The response always wraps results in `results.successful`; the URL is delivered as `auth_url` (or `onboard_url` if the plugin returns an onboarding session instead of an authorization session).
Parameters: instance (query)
Auth: apiUserToken + apiAuthToken
GET /v3/authorize/{plugin}/url — Get plugin authorization URL (explicit action)
Identical to `GET /v3/authorize/{plugin}`. Returns the OAuth/onboarding URL.
Parameters: instance (query)
Auth: apiUserToken + apiAuthToken
GET /v3/authorize/{plugin}/sync — Trigger plugin sync
Invokes the plugin's `syncPlugin` method (channel-specific). May return partial success/failure objects when the underlying connector raises a 4xx `ConnectorException`.
Parameters: instance (query)
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/create — Create plugin instance
Creates a new plugin instance row for the authenticated user. For eBay, delegates to `Ebay::createPlugin()`; for all other plugins, delegates to `PluginUtilities::createPlugin()`.
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/delete — Delete plugin instance
Deletes the plugin instance. For Amazon (`amzn`), also clears the merchant/marketplace global cache and enqueues an Amazon notification cleanup job. For eBay, delegates to `Ebay::deletePlugin()`.
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/revoke — Revoke plugin authorization
Calls the plugin auth class's `revoke` method and clears stored credentials (except for plugins listed in `Plugin::NON_PLUGINS`, currently only `ebay`).
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/complete — Complete plugin authorization (save access token)
Finalizes an OAuth handshake by persisting the returned access token. For the `automation` plugin, requires `automation_id`, `code`, and `custom` (boolean) — installs the token against the shared automation. For all other plugins, delegates to the plugin's `saveAccessToken` method with the supplied OAuth callback parameters.
Request body (required): application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/onboard — Onboard plugin user
Calls the plugin auth class's `onboard` method with the supplied parameters. Used by channels that have a multi-step onboarding flow following initial authorization (semantics are channel-specific).
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/load — Load plugin configuration (BigCommerce installer)
Currently only used by BigCommerce. Calls the plugin's `handleLoadCall` method with `instance=0` and returns the result merged into a standard success envelope (`code: RESOURCE_RECEIVED`).
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/legacy — Legacy plugin authorization
Calls the plugin auth class's `legacyAuth` method. Used by channels that still authenticate via username/password rather than OAuth.
Request body: application/json
Auth: apiUserToken + apiAuthToken
POST /v3/authorize/{plugin}/oauth — Multi-step OAuth handler
Dispatches to the plugin auth class's `handleOAuth` method, which implements a multi-step state machine determined by which parameters are present in the payload. Currently only Shopify implements this endpoint — its three steps are:
Request body: application/json
Auth: apiUserToken + apiAuthToken
Search
GET /v3/search/{type}/{query} — Search items, orders, pages, categories, or tags
Returns a typed list of matching records using SureDone's field-scoped search syntax. The path is parsed as `/v3/search/{type}/{query}`; the dispatcher validates `type` against the allow-list `[items, pages, categories, tags, orders]`. Note: the legacy URL template lists this as `/v3/search/{channel}`, but the value is an entity *type*, not a marketplace channel.
Parameters: type (path), query (path), page (query), sort (query), limit (query)
Auth: apiUserToken + apiAuthToken