How to buy dynamic residential traffic before you extract a proxy

Follow the official dynamic order docs to buy traffic-priced residential bandwidth in GB. Console and API share the same pricing and provisioning path; send 0 for compatible price fields so the server calculates the charge. Extract credentials only after the purchase succeeds. Not for mainland China.

To use a dynamic residential exit, buy traffic-priced quota first, then extract the host, port, and credentials. Extracting credentials assumes the traffic is already purchased. This page covers only how to complete the purchase from the official Dynamic orders docs. Those docs say a dynamic order buys traffic-priced dynamic proxy resources and uses the same processing path as a console purchase.

Check account balance before you buy. For the pricing model, see GB vs IP. After a successful purchase, Dynamic Resource 2 should use the accountId from the purchase response for account-level extract calls. Do not substitute an order number. Authorized targets only. Not supported in mainland China.

What to prepare

ItemWhere it comes from
Enough wallet balanceConsole or the balance API; top up first if needed, see USDT
The dynamic product numberConfirm it in a product query or the console; the public Dynamic Resource 2 product number is dynamic_2, but still verify before ordering
The traffic amounttrafficAmount is in GB and must be greater than 0
An API token, if you use the APISee login and token

If you purchase for yourself in the console, complete the on-screen flow. Do not read the API userId field as “every buyer must also send an external membership id.” If you use the official create API, the docs mark userId as required, and it is the target user's id in the ZTProxy system, not a member id from your own system.

Documented order fields

The create endpoint is POST /open/app/order/create/v2. The base URL is https://backend.ztproxy.net/api.

FieldRequiredMeaning
orderTypeYesUse dynamic_proxy for dynamic proxy
poolIdYesDynamic product number
trafficAmountYesTraffic to buy, in GB, and must be greater than 0
userIdRequired on the APITarget user id in the ZTProxy system; a self-serve console purchase does not use an external member id
unitPrice, totalAmountYes, as compatibility fieldsSend 0; the server calculates the real unit price from the user, proxy tier, and traffic ladder. The client amount is not the charge basis
remarkNoOptional note

The docs say the API first resolves price and pre-checks user and reseller balances on the server, then provisions the resource. After success, user, reseller (if any), and platform cost records share the same order number. If any required step fails, the order is not submitted in a partial-charge state. Official samples may include other compatibility fields; this page only explains fields from the documented table and does not invent meanings for undocumented ones.

Example: create a dynamic order

export ZTPROXY_BASE="https://backend.ztproxy.net/api"
export ZTPROXY_TOKEN="TOKEN_EXAMPLE_NOT_REAL"
# Official userId is an integer ZTProxy user id, not an external member id.
# 1001 appears in official docs as a sample only; it is not a live account.
USER_ID=1001

curl -X POST "$ZTPROXY_BASE/open/app/order/create/v2" \
  -H "Authorization: Bearer $ZTPROXY_TOKEN" \
  -H "Content-Type: application/json" \
  -d "{
    \"orderType\": \"dynamic_proxy\",
    \"poolId\": \"dynamic_2\",
    \"trafficAmount\": 3,
    \"unitPrice\": 0,
    \"totalAmount\": 0,
    \"remark\": \"API dynamic order example\",
    \"userId\": ${USER_ID}
  }"

The 3 in trafficAmount means 3 GB in the sample. It is not a plan name and not a quoted price. The amount you actually pay follows server-side pricing and the console. After success, save the order number and the accountId from the purchase response, then extract. You can look up the order with the documented list or detail endpoints; this page does not add a second query sample.

After a successful purchase, and common pitfalls

SituationWhat to do
The purchase succeeded and you need an exitUse accountId and extract credentials. Do not assemble the username yourself
The response says the balance is insufficientTop up or lower trafficAmount; do not retry the same request unchanged
You want a country or city on extractLook up the catalog when you extract; see target a location. Do not invent city syntax for this purchase call
You want remaining traffic laterSee remaining traffic. Wallet balance is not traffic quota
The request timed out before you saw a responseQuery the order list by time, target, and product first, then decide whether to retry, so you do not place a duplicate order

The account-level traffic query is not the same path as the purchase API. The full extract, location, and usage flow for Dynamic Resource 2 is in the Dynamic Resource 2 guide.

Compliance and scope

Use this only on authorized targets. Do not treat this page as a bypass tutorial. Prices follow the console and Pricing (dynamic about $0.40/GB, about $0.20/GB for the 100 TB package; static shared about $1.50 and exclusive about $5 per IP per month). USDT/USDC are available; Visa/Mastercard are still being applied for. Not supported in mainland China.

FAQ

Can I extract without buying traffic first?

Extract depends on a dynamic account that was already purchased. This page finishes the purchase; the companion guide covers extract. Do not collapse the two jobs into one.

Why do unit price and total amount have to be 0?

The docs define them as compatibility fields and tell you to send 0 so the server can price the order. The client-supplied amount is not the charge basis. Do not replace them with your own estimate.

Are console and API prices different?

The docs say they share the same processing path, including price resolution, balance pre-checks, provisioning, and bookkeeping. The amount due still follows the server and the console.

Is userId my own membership number?

No. On the create API it must be the user id in the ZTProxy system. If you only have your own member id, map it first; do not copy it across. If the field is missing, the related create APIs may fail before provisioning or charging begins.

If the purchase fails, is part of the money still taken?

The docs say the order is not submitted in a partial-charge state when a required step fails. Still reconcile with billing records and the wallet balance.

Is the Dynamic Resource 2 product number always dynamic_2?

Existing official material uses dynamic_2 as the public product number for Dynamic Resource 2. Still confirm the live product number in a product query or the console before you order.

How is this different from a static residential IP?

Dynamic traffic is bought in GB, then extracted. A static IP is ordered by address and duration; see buy a static IP. A sticky session also does not replace a static IP; see sticky sessions.

Where do prices come from?

Follow the console and Pricing. The sample 3 GB and the 0 compatibility fields are not a live quote.

Next steps

  1. Confirm the balance and product number, then create the dynamic order.
  2. Save accountId and the order number.
  3. Go to extract credentials, and use location targeting when you need a specific market.