Connect CJ Dropshipping to Fondoo

local_shippingLive4 min readUpdated

CJ Dropshipping is a supplier that stocks products and ships them to your customers. This connection lets your AI agent search CJ's catalog and check stock and shipping costs. It can add CJ products to your Shopify or WooCommerce store as drafts and, with your approval, place orders with CJ for customers who bought from you. You only need one CJ API key.

What Fondoo can do with it

Actions, used through connector_action:

  • Read: products.search (by English product name), products.get, variants.list, inventory.get (stock for a variant), shipping.rates (CJ freight calculation), orders.get and tracking.get (order details, including tracking).
  • Money (owner approval for agents): orders.create (CJ order creation).

Fondoo's commerce tools use the connection too:

  • import_supplier_product: create a draft product in your store from a CJ variant. Fondoo gets the cheapest CJ shipping quote (default from China CN to the US). It then sets the price as (cost + shipping + fixed cost) ÷ (1 − margin − fees). Defaults: 40% margin and 3% fees. Tax, returns, ads and currency conversion are not included. Prices must be in USD.
  • sync_inventory: copy CJ stock for an imported variant to your store.
  • route_order_to_supplier: read a real store order, match each line to an imported CJ variant and create the CJ order with the customer's shipping address. This always needs the owner's approval, and it never sends the same store order twice.
  • get_order_tracking: refresh tracking from CJ, and give the customer a public tracking link.

About payment: Fondoo does not pay CJ for you. CJ's order API has a payType setting (shopping API). Unless you pass payType in supplierData, CJ uses its default, and you pay the order in your CJ account. payType: 2 pays from your CJ balance automatically. Only use it on purpose.

Before you start

  • A CJ Dropshipping account at cjdropshipping.com. The API is free to use.
  • A connected store in Fondoo (Shopify or WooCommerce) if you want to import products or route orders.
  • CJ's limits depend on your CJ account level. Free accounts (level 0 to 1) get 1 request per second (limits). CJ also uses a daily points quota: 50,000 points per day plus more for higher order volume. Each shipping quote costs 10 points (points).

Step by step: get your credentials

From CJ's authentication guide (authentication):

  1. Sign in to your CJ account.
  2. Install the API app: go to Apps → Install App, open the App Store, choose Others, then API.
  3. In your CJ personal center, open the API tab and click Add API.
  4. Enter an API Key Name such as Fondoo, set Type to API Key, and click Confirm.
  5. Copy the key from the API Key & MCP Token column.

There are no permission settings on CJ keys. Fondoo exchanges the key for an access token and reuses it until the expiry date CJ returns. CJ's docs say tokens last 180 days.

What goes where:

Fondoo fieldWhat to paste
apiKeythe CJ API key

Connect it in Fondoo

In the dashboard

  1. Open Connections.
  2. Under Available, find CJ Dropshipping (in the Suppliers group) and click Use a key.
  3. Click Open secure key entry (single use, expires after 15 minutes). Paste the key and save.
  4. Click Check connection on the new card.

By asking your agent

Example prompt:

Connect my CJ Dropshipping account. Send me a secure link for the API key, then find phone stands with shipping to the US.

The agent calls:

add_connection_key({ provider: "cj", siteId: "<site id>" })     // secure paste link
test_connection({ connectionId: "<id>" })
connector_action({ connectionId: "<id>", action: "products.search", input: { query: "phone stand" } })

To import a product into your store:

import_supplier_product({ siteId, supplierConnectionId: "<cj id>", storeConnectionId: "<store id>",
  productId: "<CJ pid>", variantId: "<CJ vid>", destination: "US", origin: "CN" })

For a help link only: connect_service({provider:"cj", siteId}) (signed, valid 15 minutes).

Over REST: POST https://api.getfondoo.com/v1/ops/<operation> with Authorization: Bearer <your Fondoo API key> and the same JSON, for example POST /v1/ops/add_connection_key with {"provider":"cj","siteId":"<site id>"}.

Test that it works

  1. Run test_connection (or Check connection). Fondoo gets a CJ token and reads the category list. A pass confirms the key works for product search.
  2. Search for a product (products.search) and list its variants (variants.list).
  3. Get a shipping quote: shipping.rates with { data: { startCountryCode: "CN", endCountryCode: "US", products: [{ vid: "<vid>", quantity: 1 }] } }.
  4. Import one product as a draft and check it in your store before publishing.

Troubleshooting

  • "CJ token exchange failed". The API key is wrong or was deleted in CJ. Create a new key and run rotate_connection_key.
  • "CJ rejected the request". CJ returned an error code. Common causes: a product or variant ID that doesn't exist, a country CJ can't ship to, or a missing logistics service. Check the IDs with products.get and variants.list.
  • "No shipping quote for this destination". CJ has no shipping option from that origin to that country for this variant. Try another origin warehouse or variant.
  • "Import v0 requires USD supplier pricing" or "requires a USD store". Imports only work in US dollars right now.
  • "Every order line must have a supplier import mapping". Each product in the store order must have been imported from this CJ connection first.
  • Rate-limit or quota errors. You hit CJ's per-second limit or the daily points quota. Wait and retry, or spread out shipping quotes. Fondoo keeps to 60 actions per minute.

Limits, data and security

  • What Fondoo stores: the API key and the CJ access token, both encrypted and never shown again. It also keeps a mapping of imported products (CJ product and variant to store product, with the price breakdown), routed orders (store order to CJ order ID) and the latest tracking status.
  • Rotate: create a new key in CJ's API tab, run rotate_connection_key({connectionId}) and paste it. Fondoo drops the old token. Then delete the old key in CJ.
  • Disconnect: delete_connection({connectionId}) removes the stored key and token (owner approval for agents). Then delete the key in CJ.