Shopify Sürat Kargo Integration
Shopify's own shipping runs in eight countries and Turkey is not on that list: you cannot buy labels from the admin, you cannot show the carrier's live rate at checkout, and you cannot create a return label. That is why shipping integration in Turkey is not a comfort add-on; it replaces a missing piece. Sürat also has one concrete difference from the other firms: you do not wait for integration passwords from a branch, you produce them yourself from your customer panel. But those passwords come in two, and not knowing which one goes where is the most common reason setup is left half done.
growing on Shopify with Nodus Works
Shopify Sürat Kargo integration what is it?
The Shopify Sürat Kargo integration is the connection that declares store orders as shipments to the carrier, prints the label, writes the tracking number on the order and reads delivery status back. Sürat does not publish its own Shopify app; an integration tool builds the bridge using your corporate account credentials.
Setup starts with an agreement, not with writing code. At Sürat the application runs through a branch visit or the sales email; after the contract is signed and your customer code is defined, you produce your integration passwords yourself from your customer panel. If you will use cash on delivery, that side means a separate contract and a separate account. To combine scenarios that need an extra contract, such as cash on delivery, in a single setup, you can take support from Nodus Works' Shopify integration and custom app development service.
Once the connection is live, daily work runs from one screen: the order is declared, the label is printed, the customer notification goes out from Shopify's own email when the tracking number is written on the order, and the order closes on its own when delivery status is read back. Because courier-call hours are written on the firm's official page, you plan your end of day around them.
What a shipping integration actually does
Once the connection is live, shipment declaration, label, tracking, delivery status, collection and returns become parts of the same flow. The six headings below cover the questions asked most often about the Shopify Sürat Kargo integration.
Creating and declaring a shipment
The order address is declared with the data on the order instead of being typed into the carrier by hand. Because city and district are separate and required fields on the Sürat side, this step is also the exam your address data has to pass; if the district is not recognized, the shipment is not created.
Printing the label and barcode
The label is printed from the order screen, so you do not need to open a second panel. The store gives its own reference number and Sürat produces its own barcode number; these are separate fields, and the number on the label is the one the firm produced.
Writing the tracking number on the order
When the tracking number is written on the order, the customer notification goes out from Shopify's own email. This is the one step that cuts where-is-my-package questions; if the number is not written, the customer sees nothing.
Reading delivery status back
When the carrier status is written on the order, the order closes on its own. At Sürat this side depends on the query password; when that password is not defined the shipment is created, but tracking data never arrives.
Reconciling cash-on-delivery shipments
On a cash-on-delivery order the amount to collect is read from the order total and written on the shipment, and the order is marked paid when the money reaches the account. At Sürat these shipments are created with a separate account.
Cancellation and return flow
A cancellation reason has to be chosen when the declaration is withdrawn, so cancelling the order does not turn into cancelling the shipment on its own. On the return side the firm has three official paths: coming to the branch in person, a partner shop, and a buyer-paid return from the address.
How far does Shopify's own shipping go in Turkey?
The whole need for a shipping integration starts here. Shopify's shipping side was built for specific countries and Turkey is not on that list.
You cannot buy a label from the admin
Shopify's own shipping is tied to shipping origins in eight countries and Turkey is not on that list. The buy-a-label flow never appears on the order screen; the label is printed from the carrier panel or from an integration.
Checkout cannot show a live carrier rate
Pulling a live rate from the carrier's own account is available only on higher plans, and the supported carrier list has no Turkish shipping firm. So the shipping charge at checkout in a Turkish store is a fixed or conditional rate you set by hand.
A return label does not come out of Shopify
Creating a return label through Shopify requires both the shipping origin and the buyer address to be in the United States. In Turkey the return label is produced outside and uploaded to the order, or you choose no shipping needed on the approval screen.
The product card has no length, width or height
The Shopify product card has weight and no dimensions; dimensions live only on the package definition in shipping settings, and the package assigned to a product applies only on single-line orders. That is why the data needed to calculate desi is not on the order.
You cannot add a district field at checkout
On plans other than Plus you cannot add city and district pickers at checkout; a Shopify employee says this in a reply to a request from Turkey. The Sürat side, meanwhile, expects district as a separate and required field.
The notification chain is ready, the trigger is yours
Shopify already carries shipping confirmation, shipping update, out for delivery and delivered notifications. The last two depend on an event from the carrier; so the notification layer exists, and the data that feeds it comes from the integration.
The shared result of these six points is this: in Turkey a shipping integration does not add convenience on top of Shopify, it puts a missing piece in place. Label production, tracking number and delivery status do not enter Shopify any other way.
How do you set up Shopify Sürat Kargo integration?
The six steps below cover the whole setup, from the agreement to printing the first label. The third step is specific to Sürat: it does not ask you to request passwords from a branch, you produce them yourself from your panel.
Sign your agreement and take your customer code
At Sürat the path goes through the branch: the firm's own campaign page says you can become a customer by visiting your nearest branch. The second official channel is the sales email; the service page on suratkargo.com.tr gives that address. Your customer code is assigned by the firm after the contract.
Ask for a separate contract if you will use cash on delivery
The collection service is tied to a contract separate from the carriage contract; the firm's official page writes that you need to be a contracted customer for this service. Sender-paid and collection shipments are also managed with separate accounts, so you need to request a second account.
Produce your integration passwords from the panel
The customer panel has an integration password change section, and two separate fields sit under it: the shipment password and the query password. You set both yourself from here, without waiting for an email from a branch. The panel requires an uppercase letter, a lowercase letter and a digit in the new password.
Build the connection and define your accounts
Your customer code and the two passwords go into the tool you use: the shipment password for creating and cancelling shipments, the query password for tracking and reporting. If you have a cash-on-delivery account it is added as a second account, and the right account has to be chosen when the shipment is created.
Define the address, desi and payment setup
Make address line 2 required at checkout and rename it to district; because Sürat expects city and district as separate and required fields, this step is not optional here. Also set your label printer, how shipments will be declared, and, if you will use cash on delivery, the manual payment method on the Shopify side in this step.
Confirm the flow with a test shipment
Create a shipment from a single order, print the label, and see that the tracking number is written on the order and the customer notification goes out when the package is scanned at the branch. Then check that delivery status is read back; if status does not arrive, the missing piece is the query password. Try a cancellation too, and see how the reason field works.
The table below shows which Shopify data maps to which counterpart on the carrier side.
| What Shopify has | What the carrier uses |
|---|---|
| Order | Shipment declaration |
| Order number | The store's own reference number |
| Shipping address | Recipient address, a single free-text field |
| City | A separate and required field |
| Address line 2 | District, a separate and required field |
| Phone | The number the message and phone-notice services go to |
| Weight | One side of the chargeable weight |
| Package definition | Source of the desi calculation, on single-line orders |
| Tracking number | The barcode number the firm produces itself |
| Payment status | Amount collected on a cash-on-delivery shipment |
| No Shopify field | Length, width, height; cancellation reason; extra-service choice |
The last row of the table is where this work produces the most trouble. Because length, width and height do not exist in Shopify at all, the desi declaration is either made with a fixed value or derived from the package definition; the cancellation reason and the extra-service choice, meanwhile, are pieces of information that live only on the carrier side.
Tell us about your catalog and current setup, and we will work out how the Shopify Sürat Kargo integration should be built for your product structure. You do not need to fill in a form, reach us directly by phone, email or WhatsApp.
Where do you get Sürat integration passwords?
The answer to this question is what separates Sürat from the other shipping firms: you do not request the passwords from a branch, you produce them yourself from your customer panel. There is a section in the panel called integration password change, and two separate fields sit under it. One is the shipment password, the other is the query password. Sources that tell you to put your panel login password into the integration are pointing you the wrong way; that is a third password.
The two passwords being separate is not an empty detail, they do two different jobs. The shipment password is used when a shipment is created and when a declaration is withdrawn, the query password is used for tracking and reporting. That is why a setup with only one of them defined works halfway: the shipment is created, the label is printed, but delivery status never arrives. If your order list is swelling in unfulfilled status, this is the first place to look. It also helps to know from the start that the panel requires an uppercase letter, a lowercase letter and a digit in the new password; a password that breaks the rule is not accepted.
The cash-on-delivery side is set up separately. The firm's official page writes that you need to be a contracted customer for the collection service, so your carriage contract does not cover collection on its own. On top of that, sender-paid and collection shipments are managed with separate accounts: the second one is added to the integration as a second account, and the right account has to be chosen when the shipment is created. A shipment created with the wrong account comes out with a faulty barcode.
There is also the question of who the agreement belongs to. Apps do not provide a shipping agreement; you sign it in your own company's name and the invoice comes from the carrier. The alternative is stores without their own agreement shipping on an intermediary's bulk rate; in that case the fee is paid to the intermediary. The two models must not be mixed, because who the invoice comes from and who sets the rate both change.
Why does the tracking number not arrive at once?
This is the question asked most often on shipping integrations, and the answer is usually the process itself, not an error. A barcode and a tracking number are not the same thing, and the two are created at different moments.
A barcode and a tracking number are not the same thing
The barcode is an intermediate number produced so the carrier can recognize the package. The tracking number is assigned after the package reaches the branch, the barcode is scanned and the invoice is issued. That is why the tracking number is written on the order after the package reaches the branch, not at once.
Your reference and the firm's barcode are separate fields
When the shipment is created the store gives its own reference number and uses that number in later queries; the firm's own barcode number comes back in the tracking response. Thinking the two are the same leads to searching the panel with the number on the label and finding no result.
An undeclared label cannot be scanned at the branch
The label shows an undeclared warning and the package does not enter the system. Printing the barcode first and declaring later is not a problem; the reverse is. The flow must always close with a declaration.
If the query password is missing, status is not read back
Because tracking and reporting run on a separate password at Sürat, when that field is left empty the shipment is created and the label is printed, but delivery status never arrives. This is the place where setup is left half done most often.
If the tracking number is not written, the customer sees nothing
Shopify's notification chain starts when the tracking number is written on the order. When the number is not written, the customer cannot learn that the package has left, and the support load comes back to you; if you also sell on a marketplace, the same delay hits your score on that channel.
Label size decides whether the barcode will scan
The common size in ecommerce is a fifteen-by-ten-centimeter thermal label. You can print without a thermal printer, but printing a label-size design on large paper shrinks the barcode until it will not scan; in that case a packing-slip format is preferred.
Cancellation has one detail at Sürat: a cancellation reason has to be chosen when the declaration is withdrawn. So cancelling the order in Shopify does not turn into cancelling the shipment on its own, and the flow needs to be built to carry that reason. On an address change the declaration is also cancelled and created again.
How is Sürat Tahsilatlı set up in Shopify?
Cash on delivery is set up separately on both sides: as a payment method on the Shopify side, and as a separate contract and a separate account on the carrier side. The firm's official name for this service is Sürat Tahsilatlı.
The Shopify counterpart is a manual payment method
In Settings, under payments, cash on delivery sits as a ready manual payment method. On such an order, payment opens as pending and is marked paid after collection happens.
The service is tied to a separate contract
The firm's official page writes that you need to be a contracted customer for this service to use collection. Your carriage contract does not cover collection on its own; the service is defined for firms selling at a distance.
Collection shipments are created with a separate account
Separate accounts are defined for sender-paid and collection shipments; for cash on delivery you need to take a second username and password and add it to the integration as a second account. If the right account is not chosen when the shipment is created, the barcode comes out faulty.
The money is transferred to your bank account
The firm's official definition reads like this: the amount is collected from the buyer when the product is delivered and transferred to your bank account. Because how many days the transfer takes and whether a card is accepted at the door are not written on the official page, we do not give that information here; you need to confirm it in your contract.
Region and amount limits are not built in
Restricting cash on delivery by region, setting an amount limit or adding a cash-on-delivery fee do not come as ready settings in Shopify. Those are solved with rate setup or an extra app.
Reconciliation is the integration's job
The amount to collect is read from the order total and written on the shipment, and the order is marked paid when the money reaches the account. If this match is not set up, every order is marked by hand and at month end which collection belongs to which order is lost.
The official hours that decide your end of day
Courier-call and branch-dispatch hours are written on Sürat's official question and answer page. These are not a delivery-time promise; they are operation hours that decide your packing plan directly.
Courier calls close at 3 p.m. on weekdays
You can fill the courier-call form on the site or call the contact center. The last hour on weekdays is 3 p.m.; a request given after that hour is not met the same day. You need to set your packing cut-off around it.
Courier calls close at noon on Saturday
The courier-call window on Saturday is shorter than on weekdays. Stores running a weekend campaign do well to prepare Saturday orders by that hour and take the rest into the Monday plan.
Branch dispatch runs from 9 a.m. to 5 p.m. on weekdays
If you take the package to the branch yourself, this is the window. Because it is wider than the courier-call hour, going to the branch can be the option that saves a day on busy days.
Branch dispatch runs from 9 a.m. to noon on Saturday
The Saturday branch window gets shorter too. Stores with a weekend dispatch reduce the questions about orders that did not go out by announcing their order cut-off hour to customers.
Branches and the contact center are closed on Sunday
There is no dispatch and no support on Sunday. Writing at checkout or in your shipping information that orders arriving on Sunday evening will be processed on Monday sets the delivery-time expectation correctly from the start.
The cut-off hour should be visible on the Shopify side too
Shopify's shipping rate or product page does not know these hours on its own. Writing your order cut-off hour into your store text removes the biggest reason behind the perception of delay.
Pickup from the address is an extra service at shipment level
On the Sürat side, pickup from the address, a text message to the sender and to the recipient, and a phone notice are defined as extra services turned on and off at shipment level. In setup you need to decide which shipments they will be turned on for.
The firm's message and the tool's notification are different things
The text message opened as an extra service goes out from the carrier; Shopify's shipping confirmation email goes out from you when the tracking number is written. Turning both on means a double notification for the customer, and that needs to be a deliberate choice.
A reason is required on cancellation
A cancellation reason has to be given to withdraw the declaration. Building your order cancellation flow to carry that reason prevents shipments you believed were cancelled from leaving.
Why is the shipping invoice higher than you expected?
There are two reasons and both come from Shopify's data structure: district cannot be stored as a separate field, and the product card has no dimensions. At Sürat the result of the first one is harsher, because district is a required field.
City and district are separate and required fields
On the Sürat side the rest of the address is written into a single free-text field, but city and district are separate and required. So when the district is not recognized the shipment is not created; that is different from the delay risk at other firms, it is a direct block.
The fix is turning address line 2 into district
The path used in the field is one: address line 2 is made required in checkout settings and renamed to district by editing the checkout language. The second path is taking an address confirmation after the order.
Desi is volume turned into a charge
The invoice is issued on whichever is larger, weight or desi. Package volume is found in cubic decimeters, divided by three on a domestic shipment and by five on an international shipment; the result is compared with kilograms.
The data to calculate desi is not on the order
The Shopify product card has no length, width or height field; dimensions live only on the package definition, and a multi-line order uses the store default package. That is why some integrations declare the shipment with a fixed desi.
The branch measures the real desi, the difference hits the invoice
If the declared value and the value measured at the branch differ, the invoice is issued on the measured value. The shipping charge you took from the customer stays fixed while your invoice changes, so the difference comes straight out of margin.
Rounding is not always up
The sector's official calculation texts round the fraction up from one half and down below it. Some calculators on the internet write that it is always rounded up to the next whole number; that contradicts official texts.
These two topics are where your shipping cost grows quietly. Defining your package standards and declaring shipments on their real dimensions also lets you set the shipping rate at checkout to that real cost.
Which ways can the customer send a return?
Sürat's official question and answer page defines three return paths, and the third one does not appear in how other firms describe returns. If you sell on more than one channel, two separate label worlds also come out of the same warehouse.
Return by coming to the branch in person
The customer can take the package to the branch themselves; the window runs until the branch closing hour. It is the most direct path, but because it asks the customer to go to a branch it is also the path that lowers the return-completion rate.
Return through a partner shop
A return can be left at the firm's partner shops, and the window is the shop's working hours. The point list is published on the firm's site; showing the customer the nearby point instead of a branch address reduces return friction.
Buyer-paid return from the address
The courier can come to the customer's address and take the package, with the fee paid by the customer. The courier comes during the day according to the distribution plan; a request given late in the day carries to the next day. This option usually does not appear at all in how other firms describe returns.
The return-code model is tied to an agreement
A fixed return code is the same on every return; a one-time code is specific to the order. Because the firm's official pages have no explanation of code type, we do not claim a model here; if you will set up a return flow, you need to confirm this in your contract.
The return-label option does not appear in Shopify
You can turn on self-service returns in the store, but in Turkey the create-return-label option does not appear on the approval screen. An externally produced label is uploaded, or no shipping needed is chosen and instructions are sent to the customer.
Shipping cost does not appear in one place
Marketplace shipping sits on the payout report, your own agreement sits on the monthly invoice, and cash on delivery sits in the collection flow. There is no single-screen answer to what is my shipping cost; the three sources have to be brought together.
If you have marketplace channels, label, invoice and return flow split in two: Trendyol and Hepsiburada packages leave with their own labels while your store orders go on your agreement. To run the two flows in the same warehouse without mixing them, look at Station.
The most common mistakes in a Shopify Sürat Kargo integration
The nine headings below are the mistakes met most often in setup. The results also look alike: the shipment is not created, the customer is not informed, or the invoice comes in above what was expected.
Putting the panel login password into the integration
The panel login, the shipment password and the query password are three different things. There are sources that tell you to put the panel password into the integration; the connection is not built with that password and the error message usually does not show the reason.
Defining only the shipment password
When the query password is not entered the shipment is created and the label is printed, but delivery status never arrives. The order list swells in unfulfilled status and end-of-day checks start being done by hand.
Trying passwords in the panel without knowing the rules
The panel requires an uppercase letter, a lowercase letter and a digit in the new password; a password that breaks the rule is rejected. Attempts made without knowing this stretch setup out for no reason.
Trying to send cash-on-delivery orders on the same account
Collection shipments are created with a separate account and this service is tied to a separate contract. Cash-on-delivery orders sent before the second account is defined come out with a faulty barcode.
Going live without solving the district field
District is a required field at Sürat; when it is not recognized the shipment is not created at all. Turning address line 2 into district is not an optional improvement at this firm, it is a precondition of setup.
Printing a label without a declaration
An undeclared label cannot be scanned at the branch and the package does not enter the system. Printing the barcode first and declaring later is not a problem; the reverse is.
Not counting the courier-call hour
A courier request given after 3 p.m. on weekdays and noon on Saturday is not met the same day, and there is no dispatch on Sunday. If the packing plan is not built around these hours, the perception of delay gets written on the integration.
Never setting up the desi declaration
Shipments declared with a fixed desi have their real desi measured at the branch and the difference hits the invoice. Because the shipping charge taken from the customer stays fixed, this difference comes straight out of margin.
Not putting the cancellation reason into the flow
A cancellation reason has to be given to withdraw the declaration. If the flow does not carry it, an order cancelled in Shopify stays live on the carrier side and the package leaves.
Three common problems and how we solve them
The three setup scenarios below show how we handle Shopify Sürat Kargo integration problems we have solved in stores we connected.
The connection could not be built at all
ProblemThe store was trying to set up the integration and the connection would not build, even though they were sure the account details were entered correctly. For a few days there were emails back and forth with the branch and the tool provider, setup was done from scratch twice, and the result did not change.
CauseThe panel login password had been put into the integration. Sürat has three separate passwords: the panel login, the shipment password and the query password. The last two are produced from the integration password change section of the customer panel and have nothing to do with the panel login password.
SolutionThe two integration passwords were produced from the panel; because the panel requires an uppercase letter, a lowercase letter and a digit, the first attempts were rejected and it was completed with passwords that met the rule. When the shipment password went into the shipment-creation field and the query password into the tracking field, the connection was built on the first try.
Barcode errors on cash-on-delivery orders
ProblemSender-paid orders were going out without trouble, but on part of the cash-on-delivery orders the barcode was produced faulty and the packages were turned back at the branch. The warehouse team had to separate those orders and create them again by hand.
CauseCollection shipments are created with a separate account on the Sürat side and this service is tied to a separate contract. The store had only one account defined, and cash-on-delivery shipments were being created with that account too.
SolutionA collection contract was signed, a second account was taken and added to the integration as a separate account; cash-on-delivery orders started being created from that account. Because the same setup also made the amount to collect read from the order total, month-end reconciliation stopped being a job done by hand.
Part of the shipments never get created
ProblemA few orders every day were failing at the shipment-creation step, and the warehouse team was separating them from the list and correcting the address by calling the customer. On busy campaign days this workload was reaching a few hours.
CauseCity and district are separate and required fields on the Sürat side. Because there is no separate field for district at checkout, customers were writing the district inside the address line or not writing it at all; a shipment with an unrecognized district was not delayed, it was never created.
SolutionAddress line 2 was made required in checkout settings and renamed to district; the integration was set to treat that field as district. The phone field was made required as well, because the firm's text message and phone notice extra services run on that field.
Station is the tool we built to run order, label, tracking and collection flow from one panel. If you also sell on marketplaces, their shipping flow stays separate, so seeing the two side by side makes the work easier.
Frequently Asked Questions
How do you set up Shopify Sürat Kargo integration?
How do I make an agreement with Sürat Kargo, is there a form on the site?
Where do I get my Sürat integration passwords?
What is the difference between the shipment password and the query password?
Can I use my panel login password in the integration?
The panel does not accept my new password, why?
Does Sürat have public developer documentation?
Does Sürat Kargo have its own Shopify app?
Can I set up the integration without an agreement?
Does Shopify's own shipping label work in Turkey?
Can checkout show the real shipping rate?
When is the tracking number added to the order?
I cannot search the panel with the number on the label, why?
What does the shipment has not been declared warning mean?
If the tracking number never arrives, what should I check?
If I cancel the order, is the shipment cancelled too?
What is Sürat Tahsilatlı, how does it work?
Do I need a separate account for cash on delivery?
When does the money reach my account with Sürat Tahsilatlı?
How is cash on delivery set up on the Shopify side?
How late can I call a courier?
Can I send shipments out on Sunday?
The barcode is not created because the address is not suitable, what should I do?
How is a district field added at checkout?
How is desi calculated, do I enter it?
Why did my invoice come in higher than I expected?
Which ways can my customer send a return?
How does a return code work?
Does the carrier send the text message notification?
Can I get pickup from the address?
How do marketplace shipping and my own agreement split?
Can I work with more than one shipping firm at the same time?
Does the app set the shipping price?
BİZİ TERCİH
EDENLERİN ARASINDA
YER ALIN...
Herkes için Shopify çözümleri üretiyoruz.
Yeni bir Shopify mağazası kurmak, mevcut mağazanızı geliştirmek, özel entegrasyonlar yapmak veya hız problemlerini çözmek mi istiyorsunuz? Biz, teknik işleri sizin yerinize çözen uzman bir Shopify partneriyiz.

Dossha
#shopify

Les Benjamins
#shopify

Nocturne
#shopify

Fellas
#shopify

Mai
#shopify

Karaca
#shopify

Milagron
#shopify

Kiğılı
#shopifySeo

Şölen
#shopify

Adell
#shopifyB2B

Ohora
#shopify

Rendrea
#shopifyBooking

Babeskin
#shopify

The New Lab
#shopify

DTF Town
#shopify

Eczaclick
#shopifySeo

Termos Dünyası
#shopify

Halı.net
#shopify

Blend-r
#shopify

Oioi
#shopifySeo

Nowshopfun
#shopify

Marie Claire
#shopify

Gaziburma
#shopify

Dünyada Kitap
#shopify
NEDEN BİZİMLE
ÇALIŞMANIZ GEREKTİĞİNİ
SİZE ANLATMAK İSTERİZ
Shopify'ı çok iyi anlıyoruz; Türkiye'de her segmentin karşısına biz olarak çıkıyoruz :)







Sadece Shopify konuşanlardan oluşan bir takım

Hey!
Bannerlarım kesik gözüküyor :(
Yardım eder misiniz, kampanya dönemindeyim.
Selam Elif!
2 dakikaya çözüyoruz.





.webp)
.webp)


