Courier company · Settings
E-commerce integration (WooCommerce, Shopify, ikas, Ticimax, Trendyol, Hepsiburada, n11, Çiçeksepeti, Sentos, Entegra, IdeaSoft)
Connecting a customer's WooCommerce, Shopify, ikas or Ticimax store, Trendyol, Hepsiburada, n11, Çiçeksepeti seller account Sentos, Entegra integrator account or IdeaSoft store, getting the keys, mapping settings, cash on delivery and orders waiting for a match.
Orders placed in your customer's online store automatically become courier orders on behalf of that customer. Neither you nor your customer types them in. When the courier picks up and delivers the order, this is written back to the store too.
Supported stores: WooCommerce (WordPress), Shopify, ikas (see ikas), Ticimax (see Ticimax), IdeaSoft (see IdeaSoft), the marketplaces Trendyol, Hepsiburada, n11 and Çiçeksepeti (see Trendyol, Hepsiburada, n11 and Çiçeksepeti) and the multi-channel integrators Sentos (see Sentos) and Entegra (see Entegra).
The settings are on the Settings › E-commerce tab. Staff with the owner or manager role see this tab. A manager who sees only some branches (branch manager) sees and manages only their own branch's connections (see the branch section below). Your customer can also connect their own store from the customer portal (My online store page); those connections appear in this list as well.
How it works
- When a new order is placed, the store notifies us immediately (webhook). Even if a notification is missed, the system checks the store every 10 minutes, so no order is lost.
- Even if the same store order arrives twice, only one courier order is opened.
- The order is priced with the sending customer's price list, exactly like an order opened in the panel.
- If the delivery address does not match one of your districts, no order is opened; it goes to the Waiting for a match list (see below).
- On the first connection, orders from the last 24 hours in the store are taken; older ones are not.
Connecting a store (step by step)
- Open the Settings › E-commerce tab.
- Press Connect store.
- Choose the store type: WooCommerce, Shopify, ikas, Ticimax, Trendyol, Hepsiburada, n11, Çiçeksepeti, Sentos, Entegra or IdeaSoft. Press Next.
- Get the keys from the store following the on-screen instructions (the sections below explain every step).
- In Sending customer, choose on whose behalf the orders will be opened (you can search by customer name).
- Paste the Store address and the keys (Trendyol, Hepsiburada, n11, Çiçeksepeti and Entegra do not ask for a store address).
- Press Test connection. When you see the green "Connection successful" message, press Next. (IdeaSoft has no such button; store authorization is given after saving, see IdeaSoft.)
- Check the mapping settings (at least Delivery type must be selected) and press Connect and save.
- The webhook address (and for WooCommerce also the signing secret) is shown once. Usually you do not need to do anything: the webhook is created in the store automatically. If you see a yellow warning, the webhook could not be created; orders still arrive by polling.
Getting a WooCommerce key
- Sign in to your WordPress admin panel.
- Open WooCommerce › Settings › Advanced › REST API.
- Press Add key.
- Enter "Courier" as the Description.
- Choose an administrator account as the User.
- Choose Read/Write under Permissions (with read-only, delivery information cannot be written to the store).
- Press Generate API key.
- A Consumer key (starts with
ck_…) and a Consumer secret (starts withcs_…) appear. The secret is shown only on this screen; copy both and paste them into the wizard. - Enter your website address as the store address (e.g.
https://www.yourstore.com). The address must be https.
Getting a Shopify key
- In the Shopify admin, open Settings › Apps and sales channels.
- Press Develop apps. If this is the first time, choose Allow custom app development.
- Create a new app with Create an app; name it "Courier".
- Under Configure Admin API scopes, tick:
read_orders,write_merchant_managed_fulfillment_orders,write_assigned_fulfillment_orders. Save. - Press Install app.
- The Admin API access token (
shpat_…) is shown only once; copy it. - Also copy the API secret key on the same page. It is needed to verify that notifications really come from your store.
- Enter
store-name.myshopify.comas the store address (not your own domain).
Getting an ikas key
- In the ikas admin panel open Settings › Apps › Private Apps.
- Choose Create private app and name it "Courier".
- Under permissions select read and write for orders (with read only, delivery status cannot be written back to ikas). Save.
- Copy the Client ID and Client Secret into the wizard. The Client Secret also verifies the signature of notifications coming from ikas.
- Enter
store-name.myikas.comas the store address (not your own domain). - New orders arrive from ikas instantly (the webhook is created automatically); the store is also polled every 10 minutes.
- By default orders in
UNFULFILLED(to prepare) andREADY_FOR_SHIPMENTare taken. In-store pickup orders do not become courier orders; addCLICK_AND_COLLECTto the statuses if you want them. Orders awaiting payment (e.g. bank transfer) are not taken until paid. For cash or card on delivery orders the amount is written on the courier order. - When the courier picks up the parcel, the ikas order becomes shipped (tracking number = courier order number, tracking link added); on delivery the package is marked delivered. The courier order reference looks like
IKAS-order no.
Getting a Ticimax key
- In the Ticimax admin panel open Settings › WS Authorization Code Management (WS Yetki Kodu Yönetimi).
- Create a new authorization code. On the order service enable at least
SelectSiparis(read orders) andSetSiparisDurum(write status). - Copy the authorization code into the wizard.
- Enter your store's domain as the store address (e.g.
https://www.yourstore.com). - Ticimax has no instant notifications: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch immediately.
- By default orders in
Onaylandi(approved) andPaketleniyor(packing) status are taken. For cash on delivery (KapidaOdemeNakit) and card on delivery (KapidaOdemeKrediKarti) orders the amount is written on the courier order. - Carrier filter: If some Ticimax orders ship with a cargo company, enter the name of the cargo company defined for your courier (e.g.
Kurye) in Only packages assigned to this carrier in the mapping settings. If left empty, all orders are taken. - When the courier picks up the parcel, the Ticimax order becomes KargoyaVerildi (shipped; tracking number = courier order number, tracking link added); on delivery TeslimEdildi (delivered) is written. The courier order reference looks like
TCX-order no.
Trendyol, Hepsiburada, n11 and Çiçeksepeti (marketplaces)
No store address is entered for a marketplace; you connect with the seller account's keys. Each package becomes a separate courier order (if an order is split into several packages, each one is separate). The courier order reference looks like TY-order no/package no or HB-order no/package no. On Çiçeksepeti the main order (with all its sub-orders) becomes one courier order; its reference looks like CS-order no.
Who does what?
- Your couriers do not need to sign up with Trendyol, Hepsiburada, n11 or Çiçeksepeti. A marketplace package lands in the courier app like any order created in the panel; the courier picks it up and delivers it as usual.
- The store (your customer selling on the marketplace) already has a seller account. The store asks the marketplace for permission to ship with its own courier and gets the API keys (step by step below).
- The store can enter the keys itself on the My online store page of the customer portal, or you can enter them here on the store's behalf. To see that page in the portal, the customer's account needs the integration permission.
- The fee and the courier's earnings are calculated the same way as for an order created in the panel.
- Programs such as Trendyol Go and HepsiJET, where couriers work directly for the marketplace, are separate systems and unrelated to this integration.
First get permission from the marketplace: Shipping packages with your own courier requires the marketplace's permission.
- Trendyol: ask seller support for Alternative Delivery (shipping with your own courier) permission.
- Hepsiburada: ask for shipping with your own carrier permission.
- n11: the order only needs to be seller-shipped; no separate permission is required.
- Çiçeksepeti: writing statuses may require the seller's own-vehicle shipping permission.
- Without it orders still arrive and courier orders are created; only the picked-up/delivered status cannot be written to the marketplace (you will see an error in the Log).
Getting a Trendyol key
- In the Trendyol seller panel open Account Information › Integration Information.
- Copy the Seller ID, API Key and API Secret values.
- Choose Trendyol in the wizard and paste these three values.
- New packages arrive from Trendyol instantly (the webhook is created automatically); they are also polled every 10 minutes.
- When the courier picks up the package it becomes shipped on Trendyol with a tracking link; on delivery delivered is written. The company tracking page must be enabled for the tracking link.
Getting a Hepsiburada key
- In the Hepsiburada seller panel open My Information › Integration › Integrator Information.
- Copy the Merchant ID (long code with dashes) and the service key.
- Choose Hepsiburada in the wizard and paste both values. If Hepsiburada gave you an integrator name, enter it too; otherwise leave it empty.
- Hepsiburada has no instant notification: packages you pack are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch them immediately.
- When the courier picks up the package it becomes in transit on Hepsiburada, and delivered on delivery.
Getting an n11 key
- In the n11 seller panel open My Account › API Accounts.
- Copy the API key (appKey) and API secret (appSecret).
- Choose n11 in the wizard; in Store name enter the name in your n11 store link (e.g.
deneme-magazaforn11.com/magaza/deneme-magaza), then paste both keys. - n11 has no instant notification: orders are polled every 10 minutes (the "polling only" badge is normal). Only seller-shipped packages are imported. Press Sync now to fetch them immediately.
- When the courier picks up the package the order is approved on n11 (
Picking). The n11 API does not allow shipped and delivered to be written from outside: you update these steps in the n11 store panel. The Log shows an info line reminding you of this; it is not an error.
Getting a Çiçeksepeti key
- In the Çiçeksepeti seller panel open Account Management › My Integration Details (Hesap Yönetimi › Entegrasyon Bilgilerim).
- Copy the Seller ID and the API key. Test and live keys are different: use the live key.
- Choose Çiçeksepeti in the wizard and paste them into Seller ID and API key. Integrator name is optional; leave it empty unless Çiçeksepeti gave you a name (recommended). The Seller ID cannot be changed after saving; if you entered it wrong, delete the connection and set it up again.
- Çiçeksepeti has no instant notification: orders are polled about every 10 minutes (the "polling only" badge is normal). Because Çiçeksepeti's rate limit is strict, orders may appear a few minutes late. Press Sync now to fetch them immediately.
- All sub-orders of a Çiçeksepeti order become one courier order.
- When the courier picks up the package the sub-orders become Loaded on vehicle (Araca yüklendi; first Preparing if needed) on Çiçeksepeti; on delivery Delivered and the recipient's name are written.
- Writing these statuses may require the seller's own-vehicle shipping permission on Çiçeksepeti. Without it orders still arrive; only the status cannot be written and the error appears in the Log. If you see such an error, ask Çiçeksepeti seller support for this permission.
Carrier filter: The marketplace ships some packages with its own carrier. To avoid courier orders for those, enter the carrier name assigned to you on the marketplace in Only packages assigned to these carriers in the mapping settings (e.g. Kurye, Sendeo; case-insensitive, part of the name is enough). If empty, all packages are imported.
Statuses: By default Trendyol packages in Created (new), Picking (being prepared) and Invoiced are imported; on Hepsiburada Packaged; on n11 Created (new) and Picking (approved); on Çiçeksepeti New and Preparing. Other Çiçeksepeti statuses: ReadyForCargo (ready for cargo), InVehicle (loaded on vehicle), Shipped, Delivered, Returned; an order cancelled on Çiçeksepeti counts as cancelled. On Trendyol the amount of cash-on-delivery packages is written to the order; on Hepsiburada, n11 and Çiçeksepeti payment is taken by the marketplace, so cash on delivery is off.
Getting a Sentos key
Sentos is an integrator that collects the store's orders from all sales channels (marketplaces, website, etc.) in one panel. The courier order's reference has the form SNT-order no.
- In the Sentos panel open My Account › API details (Hesabım › API bilgileri).
- Copy the API Key and API Secret.
- Choose Sentos in the wizard. In Store address enter the Sentos panel address (e.g.
https://firma-adi.sentos.com.tr; onlysentos.com.traddresses are accepted), then paste both keys. - Be sure to fill in the carrier filter. Sentos brings orders from every channel. In the mapping settings, enter the carrier name defined for the courier in Sentos in Only packages assigned to these carriers (e.g.
Kurye). If you leave it empty, every order from every channel becomes a courier order. - Sentos has no instant notification: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch them immediately.
- By default
ApprovedandPreparingorders are imported. Other statuses:AwaitingApproval,Supplying,Shipped,Delivered,Cancelled. For orders paid "Kapıda Ödeme", "Kapıda Nakit" or "Kapıda Kredi Kartı" (cash/card on delivery) the amount is written on the courier order. - When the courier picks up the package, the carrier, tracking number (= courier order number) and tracking link are written to Sentos. This only works for orders whose source is Amazon, WooCommerce, OpenCart, ikas, Shopify or Farmazon. For orders from other channels and on delivery, the stage cannot be written through the Sentos API; you will see an info line in the Log saying so. This is not an error. Update the status in the Sentos panel if needed.
Getting an Entegra key
Entegra is also an integrator that collects orders from all sales channels. No store address is asked; you connect with an API user. The courier order's reference has the form ENT-order no.
- Ask Entegra support to create an API user for your account.
- Note the API user (e-mail) and API password you are given.
- Choose Entegra in the wizard and enter both. The API user cannot be changed after saving; if you entered it wrong, delete the connection and set it up again.
- Fill in the carrier filter (recommended). So that no courier order is created for orders shipped with another carrier, enter the carrier name defined for the courier in Entegra in Only packages assigned to these carriers. If you leave it empty, all orders are imported.
- Entegra has no instant notification: orders are polled every few minutes, and each round scans the last 3 days of orders. Press Sync now to fetch them immediately.
- By default
New,PreparingandReadyToShip(to be shipped) orders are imported. Other statuses:Shipped,Delivered,Invoiced,OnHold,AwaitingApproval. For cash on delivery (kapida_nakit) and card on delivery (kapida_kredi_karti) orders the amount is written on the courier order. - When the courier picks up the package the order becomes Shipped in Entegra, and the carrier, tracking number (= courier order number) and tracking link are written. On delivery it becomes Delivered.
Connecting IdeaSoft
For IdeaSoft, copying keys is not enough: first an API client is created, then the store administrator grants authorization in IdeaSoft (a consent screen). The courier order reference is IDS-order number.
- Log in to the customer's IdeaSoft admin panel as an administrator (together with your customer if needed).
- Open Integrations › API and create a new API client (name it e.g.
Courier). - Choose IdeaSoft in the wizard and press Next. You will see a Redirect address; press Copy.
- Paste this address into the Redirect URI field of the API client in IdeaSoft and save.
- Paste the Client ID and Client Secret IdeaSoft gives you into the wizard. Enter the store's domain in Store address (e.g.
store-name.myideasoft.comor your own domain). - Press Next, choose a Delivery type and press Save and authorize in store.
- IdeaSoft's consent page opens. Log in with the store administrator account and allow access. Afterwards you are brought back to the Settings › E-commerce page automatically and see the green "Store authorization received" message.
- IdeaSoft has no instant notification: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch them immediately.
- By default
approvedandbeing_preparedorders are imported. Other statuses:waiting_for_approval,waiting_for_payment,fulfilled(shipped),delivered,cancelled. For orders paid with Kapıda Ödeme Nakit (cash on delivery) and Kapıda Ödeme Kredi Kartı (card on delivery) the amount is written to the courier order. - When the courier picks up the package the order becomes Shipped in IdeaSoft and the tracking code (= courier order number) is written; on delivery it becomes Delivered.
"Store authorization required" badge: If authorization was left unfinished, was refused, or IdeaSoft's permission lapsed because the connection was not used for a long time (about 2 months), the connection shows a red Store authorization required badge and no orders arrive. Press Authorize in store on the row and repeat step 7. Messages you may see on return from the consent page:
- Authorization was not granted: access was refused on the consent screen; try again.
- The authorization link has expired: the consent page was open for more than 15 minutes; start again with Authorize in store.
- Authorization could not be completed: IdeaSoft granted access but the key could not be obtained. Check the line in the Log; usually the Client Secret is wrong or the redirect address was entered differently in IdeaSoft.
Mapping settings
- Store statuses to import: orders in which statuses become courier orders. In WooCommerce usually
processing. In Shopify the payment status:paid,pending(awaiting payment, e.g. cash on delivery),authorized. - Delivery type: the delivery type of the opened orders (the price is calculated from it).
- Pickup district / Pickup address: if left empty, the customer's saved district and address are used.
- Parcel count: 1 parcel per order, one parcel per item, or a fixed number.
- Open eligible orders automatically: if turned off, every order waits for your approval under Waiting for a match.
- Recipient pays the courier fee: the fee of the opened orders is collected from the recipient.
- Write picked up / delivered back to the store: in WooCommerce a note is added to the order and on delivery the status is set to the value in Store order status on delivery (default
completed). In Shopify the order is marked as fulfilled with a tracking link, and a "delivered" event is added on delivery.
Cash on delivery
If the store order's payment method is in the Cash on delivery methods list (WooCommerce cod; Shopify "Cash on Delivery (COD)" or "Kapıda Ödeme"), the order total is written into the courier order's note as "KAPIDA ÖDEME: amount" (cash on delivery) and shown with a badge in the list. The courier collects the amount from the recipient. If your store uses a different name for the payment method, add that name to the list.
Waiting for a match
The Waiting for a match tab of the Store orders card shows the orders for which no courier order could be opened. Common reasons: the district in the store address did not match your districts, there is no price for that zone in the price list, recipient details are missing.
- Read the red explanation on the row.
- Press Fix.
- Choose the Delivery district; correct the recipient name, phone and address if needed.
- Keep Remember this province/district spelling on if the same spelling should match automatically next time.
- Press Save and open order. The courier order is opened and its number appears on the row.
Other buttons: Retry (e.g. after fixing the price list), Skip (no courier order is opened for this store order). Orders cancelled in the store are skipped automatically; for orders cancelled after the courier order was opened see "Orders cancelled in the store" below.
Orders cancelled in the store
If an order is cancelled in the store (or marketplace) after a courier order has already been opened for it, KOS notices this automatically. What happens depends on where the parcel is:
- The courier has not picked it up yet (awaiting approval, in the pool or assigned): the courier order is cancelled automatically. The reason is written as "Cancelled in the store (store #no)"; a wallet payment is refunded and the job leaves the courier's list.
- The courier has picked it up (on the way, at a hub, being returned): the courier order is not changed. A red "cancelled in store · courier had picked up, decide" badge appears on the row.
- It was already delivered: nothing changes (the store refund came after delivery); an information badge appears on the row.
To find the orders awaiting a decision:
- Open the Cancellation decision needed tab of the Store orders card. The connection list also shows a "n cancellation decisions pending" badge.
- Click the courier order number on the row.
- Talk to the store and the courier and decide: have the parcel returned to the sender (delivery failed › return), or continue the delivery if the recipient still wants it; cancel the order if needed.
If you do not want this, turn off Cancel the courier order too when the order is cancelled in the store in the connection's Edit window. While it is off, cancellations are only written to the log and the row ("sync off"); the courier order is not touched.
Recipients outside your service area
A store sells all over Türkiye, but you only deliver in the provinces where your branches are. Example: the store sold on Trendyol, the recipient is in Ankara, and your only branch is in İstanbul. That order cannot be given to a courier.
KOS handles this automatically:
- It checks whether the recipient's province is one of the provinces you deliver in.
- If not, no courier order is created. The order never reaches the pool, nobody can assign it to a courier, and auto-dispatch skips it.
- The row shows a red "Outside the service area · cannot be given to a courier" badge. The explanation names the recipient's province and the provinces you deliver in.
- The store (your customer) sees the same badge in their portal and knows to ship it by cargo.
Where do your provinces come from?
- The province of each branch (Settings › Branches).
- The provinces of your districts that are linked to an official district.
- If the store connection is tied to a branch, only that branch's provinces count. For a company-wide connection, the provinces of all active branches count.
- The "Recipient provinces a courier can serve: …" line above the Store orders card shows this list.
- If one of your branches has no province information at all, the list shows "unknown" and the province check is not done. Pick a province for every branch to turn the check on.
To see and close out-of-area orders:
- On the Store orders card, open the Outside the service area tab.
- Read the explanation on the row: the recipient's province and the provinces you deliver in.
- Press Skip to close the order. The store should ship it with its own cargo.
- If you have since opened a branch or district in that province, press Retry; the order is imported now.
Note: these rows have no Fix button. Picking a district in another province by hand is blocked as well.
Choosing a branch
If your company has more than one branch, each store connection has a branch. The branch decides which branch the orders open in and which districts they are matched against.
- In the last step of the Connect store wizard (Mapping settings) you will see the Branch field at the top. The Edit window of an existing connection has the same field.
- If you choose Company-wide (all branches), each store order goes to the branch of its delivery district. The pickup district can be any of your districts.
- If you choose a branch, the Pickup district list shows only that branch's districts. You cannot pick another branch's district (saving gives an error). The delivery address is also matched only against that branch's districts; the Delivery district list in the Fix window is limited to that branch.
- To change the branch later, choose another branch in Edit. Choosing Company-wide opens the connection to all branches. When the branch changes, a pickup district from the old branch is cleared; choose a new one.
- In the connection list each connection shows its branch name or a Company-wide badge.
- In the Store orders card you can use the Branch filter to see only one branch's records; each row shows the order's branch.
For a manager who sees only some branches (branch manager):
- The connection list shows only your own branch's connections; company-wide connections and other branches' connections are not listed.
- You can connect, edit, test, sync now and delete your own branch's connections.
- Only the branches you are allowed to see are listed; there is no Company-wide option. A new connection is always tied to a branch.
- You cannot change company-wide connections or connections of branches you are not allowed to see ("not authorised" warning). Ask the company owner or a user who sees all branches.
Stores connected from the customer portal do not choose a branch; you can assign one here with Edit if needed.
Keeping personal data
An order coming from a store contains personal data such as the recipient's name, phone and address. To avoid keeping personal data longer than needed (KVKK / data protection law):
- The raw store-order data is purged automatically after 90 days.
- Once purged, the row shows the "Personal data retention period ended, purged" label; store details such as recipient name, address and total are empty.
- The courier order is not deleted. The courier order, its delivery details and invoice stay as they are; press the courier order number on the row to open it.
- On a purged record the Fix and Retry buttons are hidden (there is no data left to open an order). You can remove it from the list with Skip if you like.
- Check the Waiting for a match tab regularly so that an unmatched order is not missed within the 90 days.
Connection list
Each connection shows its status (active, paused, error count), last sync time and order counts.
- Sync now: checks the store immediately.
- Test: checks that the keys still work.
- Edit: name, branch, keys and mapping settings. If you leave the key fields empty, the saved keys are kept.
- Log: recent events (notifications received, polls, errors).
- Pause / Resume: no orders are taken from a paused connection.
- Delete: removes the connection and the webhooks in the store. Courier orders already opened are not deleted.
- Authorize in store (IdeaSoft only): obtains store authorization again; use it when the "Store authorization required" badge appears (see IdeaSoft).
The "polling only" badge means the webhook could not be created in the store; orders arrive within 10 minutes at the latest.
Having trouble?
- "Test connection" fails: Check that the store address starts with https and that the keys are pasted completely. In WooCommerce the key permission must be Read/Write; in Shopify the address must be
store-name.myshopify.com, in ikasstore-name.myikas.com. In Ticimax the authorization code needs theSelectSiparispermission. - No orders arrive: The connection may be paused (press Resume). Check that the store status is in Store statuses to import. Press Sync now to check immediately.
- IdeaSoft orders do not arrive / "Store authorization required": Store authorization was never given or has lapsed (because it was not used for a long time). Press Authorize in store on the row and allow access in IdeaSoft (see IdeaSoft).
- Orders always go to Waiting for a match: The district spelling in the store address does not match your districts; press Fix once, choose the district and keep Remember this province/district spelling on. If you see a price error, add that zone to the customer's price list, then press Retry.
- Delivery updates do not appear in the store: Write picked up / delivered back to the store must be on, and the WooCommerce key must have Read/Write permission. Check the "Could not write to the store" explanation on the row.
Security
Keys are stored encrypted and never shown again. The store address can only be https; local network addresses are not accepted. Every notification from the store is verified by its signature.