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

Connecting a store (step by step)

  1. Open the Settings › E-commerce tab.
  2. Press Connect store.
  3. Choose the store type: WooCommerce, Shopify, ikas, Ticimax, Trendyol, Hepsiburada, n11, Çiçeksepeti, Sentos, Entegra or IdeaSoft. Press Next.
  4. Get the keys from the store following the on-screen instructions (the sections below explain every step).
  5. In Sending customer, choose on whose behalf the orders will be opened (you can search by customer name).
  6. Paste the Store address and the keys (Trendyol, Hepsiburada, n11, Çiçeksepeti and Entegra do not ask for a store address).
  7. 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.)
  8. Check the mapping settings (at least Delivery type must be selected) and press Connect and save.
  9. 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

  1. Sign in to your WordPress admin panel.
  2. Open WooCommerce › Settings › Advanced › REST API.
  3. Press Add key.
  4. Enter "Courier" as the Description.
  5. Choose an administrator account as the User.
  6. Choose Read/Write under Permissions (with read-only, delivery information cannot be written to the store).
  7. Press Generate API key.
  8. A Consumer key (starts with ck_…) and a Consumer secret (starts with cs_…) appear. The secret is shown only on this screen; copy both and paste them into the wizard.
  9. Enter your website address as the store address (e.g. https://www.yourstore.com). The address must be https.

Getting a Shopify key

  1. In the Shopify admin, open Settings › Apps and sales channels.
  2. Press Develop apps. If this is the first time, choose Allow custom app development.
  3. Create a new app with Create an app; name it "Courier".
  4. Under Configure Admin API scopes, tick: read_orders, write_merchant_managed_fulfillment_orders, write_assigned_fulfillment_orders. Save.
  5. Press Install app.
  6. The Admin API access token (shpat_…) is shown only once; copy it.
  7. Also copy the API secret key on the same page. It is needed to verify that notifications really come from your store.
  8. Enter store-name.myshopify.com as the store address (not your own domain).

Getting an ikas key

  1. In the ikas admin panel open Settings › Apps › Private Apps.
  2. Choose Create private app and name it "Courier".
  3. Under permissions select read and write for orders (with read only, delivery status cannot be written back to ikas). Save.
  4. Copy the Client ID and Client Secret into the wizard. The Client Secret also verifies the signature of notifications coming from ikas.
  5. Enter store-name.myikas.com as the store address (not your own domain).
  6. New orders arrive from ikas instantly (the webhook is created automatically); the store is also polled every 10 minutes.
  7. By default orders in UNFULFILLED (to prepare) and READY_FOR_SHIPMENT are taken. In-store pickup orders do not become courier orders; add CLICK_AND_COLLECT to 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.
  8. 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

  1. In the Ticimax admin panel open Settings › WS Authorization Code Management (WS Yetki Kodu Yönetimi).
  2. Create a new authorization code. On the order service enable at least SelectSiparis (read orders) and SetSiparisDurum (write status).
  3. Copy the authorization code into the wizard.
  4. Enter your store's domain as the store address (e.g. https://www.yourstore.com).
  5. Ticimax has no instant notifications: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch immediately.
  6. By default orders in Onaylandi (approved) and Paketleniyor (packing) status are taken. For cash on delivery (KapidaOdemeNakit) and card on delivery (KapidaOdemeKrediKarti) orders the amount is written on the courier order.
  7. 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.
  8. 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?

First get permission from the marketplace: Shipping packages with your own courier requires the marketplace's permission.

Getting a Trendyol key

  1. In the Trendyol seller panel open Account Information › Integration Information.
  2. Copy the Seller ID, API Key and API Secret values.
  3. Choose Trendyol in the wizard and paste these three values.
  4. New packages arrive from Trendyol instantly (the webhook is created automatically); they are also polled every 10 minutes.
  5. 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

  1. In the Hepsiburada seller panel open My Information › Integration › Integrator Information.
  2. Copy the Merchant ID (long code with dashes) and the service key.
  3. Choose Hepsiburada in the wizard and paste both values. If Hepsiburada gave you an integrator name, enter it too; otherwise leave it empty.
  4. 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.
  5. When the courier picks up the package it becomes in transit on Hepsiburada, and delivered on delivery.

Getting an n11 key

  1. In the n11 seller panel open My Account › API Accounts.
  2. Copy the API key (appKey) and API secret (appSecret).
  3. Choose n11 in the wizard; in Store name enter the name in your n11 store link (e.g. deneme-magaza for n11.com/magaza/deneme-magaza), then paste both keys.
  4. 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.
  5. 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

  1. In the Çiçeksepeti seller panel open Account Management › My Integration Details (Hesap Yönetimi › Entegrasyon Bilgilerim).
  2. Copy the Seller ID and the API key. Test and live keys are different: use the live key.
  3. 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.
  4. Ç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.
  5. All sub-orders of a Çiçeksepeti order become one courier order.
  6. 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.
  7. 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.

  1. In the Sentos panel open My Account › API details (Hesabım › API bilgileri).
  2. Copy the API Key and API Secret.
  3. Choose Sentos in the wizard. In Store address enter the Sentos panel address (e.g. https://firma-adi.sentos.com.tr; only sentos.com.tr addresses are accepted), then paste both keys.
  4. 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.
  5. Sentos has no instant notification: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch them immediately.
  6. By default Approved and Preparing orders 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.
  7. 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.

  1. Ask Entegra support to create an API user for your account.
  2. Note the API user (e-mail) and API password you are given.
  3. 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.
  4. 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.
  5. 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.
  6. By default New, Preparing and ReadyToShip (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.
  7. 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.

  1. Log in to the customer's IdeaSoft admin panel as an administrator (together with your customer if needed).
  2. Open Integrations › API and create a new API client (name it e.g. Courier).
  3. Choose IdeaSoft in the wizard and press Next. You will see a Redirect address; press Copy.
  4. Paste this address into the Redirect URI field of the API client in IdeaSoft and save.
  5. 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.com or your own domain).
  6. Press Next, choose a Delivery type and press Save and authorize in store.
  7. 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.
  8. IdeaSoft has no instant notification: orders are polled every 10 minutes (the "polling only" badge is normal). Press Sync now to fetch them immediately.
  9. By default approved and being_prepared orders 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.
  10. 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:

Mapping settings

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.

  1. Read the red explanation on the row.
  2. Press Fix.
  3. Choose the Delivery district; correct the recipient name, phone and address if needed.
  4. Keep Remember this province/district spelling on if the same spelling should match automatically next time.
  5. 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:

To find the orders awaiting a decision:

  1. Open the Cancellation decision needed tab of the Store orders card. The connection list also shows a "n cancellation decisions pending" badge.
  2. Click the courier order number on the row.
  3. 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:

Where do your provinces come from?

To see and close out-of-area orders:

  1. On the Store orders card, open the Outside the service area tab.
  2. Read the explanation on the row: the recipient's province and the provinces you deliver in.
  3. Press Skip to close the order. The store should ship it with its own cargo.
  4. 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. In the connection list each connection shows its branch name or a Company-wide badge.
  6. 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):

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):

  1. The raw store-order data is purged automatically after 90 days.
  2. Once purged, the row shows the "Personal data retention period ended, purged" label; store details such as recipient name, address and total are empty.
  3. 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.
  4. 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.
  5. 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.

The "polling only" badge means the webhook could not be created in the store; orders arrive within 10 minutes at the latest.

Having trouble?

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.