Your developer sends a message on a Tuesday.
"I had the AI write the Aras integration. It took two days. Labels are printing, tracking numbers are coming back. Why are we paying for a shipping platform?"
And the thing is — they're right. It works. You watch a label print. You scan the tracking number and it resolves. Two days, not the six weeks somebody quoted you last year. The code is clean, it's commented, it has tests. In 2026 this is a completely reasonable Tuesday.
Then comes the part nobody demos.
In November you add a second carrier, because one carrier is a single point of failure during campaign month and you learned that the hard way. In February the carrier tightens a field validation without telling anyone and forty labels fail in one morning. In April you start offering cash on delivery and discover that COD is a different endpoint with different reconciliation. In June the carrier announces it's retiring the authentication method your integration uses, with a deadline. Somewhere in there the developer who wrote it moves on, and the person who inherits it opens a folder of code that no human ever fully read — because a model wrote it in two days and it worked on day one, so nobody had a reason to.
None of that is an argument against AI. AI genuinely did make the first version cheap. The problem is that the first version was never the expensive part, and the bill for the rest of it arrives late enough that most stores never connect it back to the Tuesday it started.
If you want the technical picture first — what a shipping API does, what SOAP and REST mean in practice, how long a first integration takes — read our shipping API integration guide. That post is about building one. This one is about owning one: what changes underneath it, what it costs to keep alive, and how to tell which side of the decision you're on.
The Part AI Made Cheap Was Never the Expensive Part
There's a number from software engineering that has been stable for about forty years, across wildly different technologies: maintenance accounts for roughly 60-80% of a piece of software's total lifetime cost. The IEEE Computer Society puts it in that range, and it's the figure behind the old joke that you don't buy software, you adopt it.
Sit with what that means for the Tuesday above. If writing the integration was 20-40% of the total cost, and AI cut that portion by, say, three quarters, then AI reduced the total lifetime cost of your carrier integration by somewhere between 15% and 30%. That's real. It is also nothing like the reduction it feels like when you watch a working integration appear in two days.
The feeling and the number diverge, and the size of that gap is itself measurable. In July 2025, the research nonprofit METR ran a randomized controlled trial on experienced open-source developers working in codebases they knew well. The developers predicted AI would make them 24% faster. Measured, they were 19% slower. The remarkable part is what happened after: having just been slower, they still estimated they had been about 20% faster.
That result deserves an honest caveat, and it's one most people quoting it skip. METR revised the experiment design in February 2026 after finding the original sample was skewed, and a newer cohort showed a much smaller effect — around 4% slower, with a confidence interval wide enough to include a real speedup. So the headline number is contested and you shouldn't build a business case on it.
What isn't contested is the perception gap. Developers were confidently wrong about their own speed in the direction of optimism, and every subsequent study has found some version of that. Google's 2025 DORA report — 90% of respondents now use AI at work — found AI adoption correlating with higher throughput and higher instability at the same time: more change failures, more rework, longer time to recover. About 30% of respondents said they had little or no trust in the code the AI produced. DORA's own summary of the pattern is that AI amplifies whatever your team already is.
For a store owner, that translates cleanly. AI does not make your team better at owning a carrier integration. It makes your team faster at acquiring one.
What Actually Changes Underneath a Carrier Integration
This is the part that's invisible when you're evaluating the decision, because on the day you decide, nothing has changed yet. Here is the actual list, in rough order of how expensive each one is.
1. The carrier replaces the API on a published deadline
These are the good ones, because at least you get warning. They're also the most expensive, because they aren't a patch — they're a rewrite of the layer everything else sits on.
Two recent examples, both real and both dated:
- UPS stopped issuing access keys in June 2023 and required OAuth 2.0 on every API call after June 3, 2024. Legacy XML and SOAP integrations had to move to the REST APIs. Not a config change: a new auth flow, new token lifecycle, new error handling, new payload format.
- FedEx is retiring its legacy Web Services now. Compatible providers had to finish by March 31, 2026, and direct customers must complete migration by June 1, 2026. SOAP goes away; everything moves to REST with OAuth2.
Notice the shape. Both carriers gave long notice. Both migrations still consumed real weeks from real teams, worldwide, on the carrier's calendar rather than the merchant's. And if you had integrated both carriers yourself, those were two separate projects with two separate deadlines that had nothing to do with each other.
Fix it: whoever owns your integration should have a written answer to "which carrier's forced migration is next, and when." If nobody can answer that, you don't have an integration, you have a countdown.
2. The carrier changes things it never announces
The announced migrations are rare. The unannounced changes are constant, and they're the ones that show up as a bad morning rather than a project.
A field that accepted 40 characters starts rejecting at 35. A new service type appears and orders using it come back with an error code that isn't in any document you have. A status code that used to mean "at the branch" starts being used for something slightly different, so your tracking page tells customers the wrong thing. A surcharge type gets added and your cost calculation is quietly wrong for a month. A carrier gets acquired and rebranded — which is not hypothetical here, since MNG Kargo is now DHL eCommerce.
None of these break loudly. That's what makes them expensive: the failure mode isn't an alert, it's forty parcels that didn't go out today and a customer service queue tomorrow.
Fix it: if you keep your own integration, you need error-rate monitoring per carrier, not just "did the request succeed." A label endpoint that starts failing 4% of the time will not page anyone. It will just cost you four out of every hundred orders until someone notices.
3. Your own business changes, and every change multiplies by carrier count
This is the cost that surprises people most, because it isn't the carrier's fault at all.
You add cash on delivery — that's different endpoints, different reconciliation, different failure cases, and you implement it once per carrier. You open a second warehouse — pickup addresses, per-location rules, once per carrier. You start selling on a second sales channel — orders arriving in a different shape, mapped to every carrier you support. You want returns — a whole second flow, per carrier. You want to send tracking notifications — now you need normalized status events across carriers that all describe delivery differently.
The pattern: your integration cost is not number of carriers. It's roughly number of carriers × number of shipping capabilities. Adding your third carrier doesn't cost what the first one cost — it costs what the first one cost, times everything you've built since.
Fix it: before you build carrier number two, write down the capability list you expect to need in eighteen months — COD, returns, multi-warehouse, notifications, e-invoicing, rate comparison. Multiply. That's the real scope, and it's the number that should be compared against a platform subscription, not the two days it took to print the first label.
4. The rules around the shipment change
Shipping isn't only a technical integration; it sits inside regulation that moves independently of both you and the carrier. e-Fatura and e-Arşiv obligations shift as thresholds are revised. Notification practice sits under KVKK and, for commercial messaging, İYS. Consumer rights around delivery windows and returns get updated.
Every one of those can land as a change request on the same integration, and none of them are things a model can warn you about in advance, because they aren't in the code.
The Five Hardest Parts of a Carrier Integration Aren't Code
This is the section I'd most want a technical founder to read, because it explains why "AI can write it" doesn't resolve the question. AI is excellent at the code. The code is not where Turkish carrier integrations go wrong.
There's no public documentation to give the model. To get Aras Kargo API credentials you contact your branch and request web integration details, or request them through the ESAS web panel under Entegrasyon → XML servisleri. For Yurtiçi Kargo you obtain the integration document from your account rep and apply separately for web service credentials. These documents are emailed, versioned informally, and not on the public internet — which means they're not in any model's training data, and there's no URL to paste. The model can write you a beautiful SOAP client for an API whose actual contract you haven't received yet.
Most of these APIs are from a different era. SOAP, XML request/response, WSDL-generated clients. Integration guides for Yurtiçi still specify server-side requirements like open port 80 and enabled SOAP, cURL and OpenSSL extensions. Nothing about that is unworkable — it's just that the "modern REST API" mental model your developer and the AI both start from is the wrong one, and the gap shows up as a week of debugging XML namespaces rather than an afternoon.
Sandboxes don't match production. Test credentials generally exist, but test environments are not full replicas. The reliable way to find out whether your integration works is to send real parcels and watch what happens — which means your test plan has a physical component and a cost per test.
A label is a physical object with a pass/fail at the counter. Your integration is not correct because the API returned 200. It's correct when the barcode scans at the branch, the address prints inside the readable area, the Turkish characters aren't mangled, and the label carries the right service and payment type. No model can verify any of that. Someone has to stand at a counter.
Someone has to be awake on the worst possible day. Carrier APIs fail during peak season more than any other time, because that's when load is highest on their side too. If your integration is yours, then at 09:00 on the Friday of campaign week, when the label endpoint starts timing out, the fallback plan is a person. The question isn't whether you can build a retry queue — you can, AI will help. The question is who decides, in the moment, to switch that carrier off and route the day's volume elsewhere.
The Cost Model Nobody Runs Before Saying "We'll Just Build It"
Here's the estimate to actually write down, in developer-days rather than currency, because days don't need inflation adjusting and they're the resource that's genuinely scarce.
For each carrier you integrate yourself:
| Item | Realistic budget | Frequency |
|---|---|---|
| First working integration (labels+tracking) | 2-3 weeks | Once per carrier |
| Each additional capability (COD, returns…) | Days to a week | Per capability, per carrier |
| Unannounced breakages | Half a day to two days | A few times a year, per carrier |
| Announced forced migration | 1-3 weeks | Roughly every 2-3 years, per carrier |
| Availability when it breaks | Not a number — a person | Continuous |
The two-to-three-week figure for a first integration is the same one in our shipping API guide, and AI genuinely compresses it. Call it days instead of weeks now. But look down the rest of that column: AI compresses the first row and touches almost nothing below it. Unannounced breakages require knowing what changed, which requires someone who knows what the code assumed. Forced migrations require reading a carrier's migration guide and re-testing physically. Availability is a human being.
Now run it at three carriers, which is where most stores end up once they care about carrier performance and want a fallback. You are committing to a permanent line item on one developer's calendar — not a large one, but one that arrives without warning and always at the worst time, because carrier problems cluster exactly when volume does.
The honest comparison isn't "platform subscription vs. zero." It's "platform subscription vs. the developer days you'll spend, plus the orders that don't ship on the days you're spending them."
What Changes When There's Only One Integration Point
This is where the argument for a platform stops being philosophical and becomes structural. It isn't that a platform writes better code than your developer plus a good model. It's that the work stops being per carrier.
With Shipink's API, you integrate once — a REST API, Open API compliant, standardized request and response shapes — and reach 15+ carriers behind it. The specific consequences:
- Adding a carrier is a configuration change, not a code change. Your code stays the same when new carriers are added. That single property is what breaks the carriers × capabilities multiplication above.
- Error codes are normalized. One carrier's
102and another'sERR_ADDRESSarrive as the same thing, so your error handling is written once. - Carrier migrations stop being your project. When a carrier moves to OAuth or retires SOAP, that work happens on our side of the boundary. Your integration doesn't change.
- Rate comparison comes with it. One request, quotes from multiple carriers — rather than a fan-out you build and maintain per carrier.
- Webhooks instead of polling. Status changes are pushed to you, normalized, which is also what makes branded tracking and notifications possible without you mapping every carrier's status vocabulary yourself.
- The capabilities you'd otherwise build separately are already there: bulk labels, automation rules, e-fatura, per-carrier reporting, COD, and your own carrier agreements or ours side by side on the same screen.
And the honest other side, because it matters: you're taking a dependency. Requests route through another system, which adds milliseconds and adds an availability relationship. You give up the ability to send a carrier a bespoke field that nobody else needs. If you have genuinely unusual shipping logic that's part of your product, that constraint is real.
For most stores shipping 50-5,000 orders a month, that trade is not close. Shipping is a cost center you want to be excellent and invisible. It is not the thing your customers choose you for.
When Building Your Own Is Actually the Right Call
A post like this loses its credibility if it never says "don't." So:
Build your own if you ship with one carrier and genuinely expect that to hold. One carrier, one capability set, no fallback ambition — the multiplication never starts, and a single integration is a manageable thing to own.
Build your own if shipping logic is your product. If you're a marketplace, a 3PL, or a platform whose customers are shippers, carrier integration is core and you should own it. That's a different business from selling homeware.
Build your own if you have a hard requirement that no aggregator exposes — a contractual field, a bespoke label format a large buyer mandates, a routing rule tied to your own systems.
And one more, which is really a "don't": if you already have a working integration and nobody is being paged about it, don't migrate today. A stable integration is an asset. The right trigger isn't this article — it's the second carrier, the first forced migration notice, or the first morning you lose orders to a change you didn't know about. Also worth saying plainly: don't replatform your store to fix a shipping integration problem. That's a much larger, much riskier project aimed at the wrong layer.
Why This Decision Landed on Your Desk in 2026 Specifically
Two curves crossed this year, and they're pushing in opposite directions.
The first is that building became temptingly cheap. Not fake-cheap — genuinely cheap. A competent developer with a good model really can produce a working carrier integration in days. That's new, it's real, and it makes "let's just build it" a reasonable sentence in a way it wasn't in 2022.
The second is that the industry-wide maintenance bill came due at the same moment. FedEx's legacy web services are retiring on June 1, 2026 — that deadline is live right now. UPS's OAuth cutover already happened. Turkish carriers are on their own modernization paths at their own pace. Every hand-rolled carrier integration in the country has forced work on its 2026 calendar, whether or not anyone has put it on a calendar.
And there's a quieter third thing. The evidence on AI-written code that people have to keep is getting less comfortable. GitClear's 2026 analysis of 623 million code changes from 2023 to 2026 found duplicated code blocks up 81%, refactoring down to 3.8% of changed lines in 2026 from around 21% earlier in the decade, updates to older code down 74%, and error-masking constructs up 47%. Read that as a whole and it describes a specific style of codebase: lots of new code that works, very little of it folded back into what already existed. That's exactly the shape of a codebase that's cheap to add to and expensive to change — which is the wrong shape for something a carrier will force you to change on their schedule.
So the timing argument is not "AI is bad." It's that AI made acquiring an integration cheap in the same year the cost of owning one became unusually visible. If you're going to decide, this is the year the two numbers are actually on the table at the same time.
The practical version, if you're heading into campaign season: you have roughly until the end of September to change anything structural. After about T-30, an untested integration change gets its first real trial on your highest-volume day, which is the most expensive test environment that exists.
The Audit: Twelve Questions About the Integration You Already Have
If you have a hand-built integration, these are answerable in an afternoon. The ones you can't answer are the actual finding.
- Who owns this integration by name, and what happens the week they're on holiday?
- Has a human read the code, or did it work on day one and get merged?
- Which carrier's forced migration deadline is next, and what's the date?
- Are the API credentials documented somewhere other than one person's inbox?
- What's the label-creation error rate per carrier over the last 30 days?
- Would you find out about a 4% failure rate from a dashboard, or from a customer?
- If a carrier's API is down for three hours, what happens to the day's orders?
- Can you switch a day's volume to a different carrier without a code deploy?
- Does every carrier's tracking status map to the same set of statuses on your side?
- What would adding a fourth carrier cost, in days, including COD and returns?
- Is COD reconciliation automatic, or does someone check it against a statement?
- Can you answer "which carrier cost the most per delivered order last month" in under a minute?
Fewer than eight confident answers means the integration is running on one person's memory. That's fine at one carrier. It stops being fine the first time that person is unavailable on a Friday in campaign week.
The Bottom Line
Building your own carrier integration was never mainly a coding problem, which is why making coding cheaper didn't settle the question. It's an ownership problem: carriers change their APIs on their own schedule, they change more things than they announce, your own roadmap multiplies every change by the number of carriers you support, and none of that appears on the day the first label prints.
AI is genuinely useful here — just not where people are pointing it. Use it to move faster inside your own product, where you own the roadmap and nobody can force a migration on you. Then put shipping behind one integration that someone else is contractually obliged to keep working.
If you want to see what that boundary looks like in practice, the API documentation shows the request and response shapes, and you can start free and connect a carrier today without writing an integration at all. If you're still weighing it, our guide to choosing shipping software works through the rest of the decision.