Frequently asked questions
- When should a SaaS API get a new version?
- Create a new version when a change would break existing clients, such as removing fields, changing data types, or altering required behavior.
- Is URL versioning better than header versioning?
- URL versioning is simpler to understand and operate for many teams, while header versioning can keep URLs cleaner. Choose the approach your clients can adopt most reliably.
- How long should an API version stay supported?
- Support depends on your customer base and contract commitments, but many teams use a documented deprecation window of months, not weeks, and communicate early.
- Can additive changes avoid a new version?
- Yes. Adding optional fields, new endpoints, or new enum values is often backward compatible if clients ignore unknown data safely.
- What is the biggest mistake in API versioning?
- The biggest mistake is treating versioning as a substitute for compatibility discipline. Good change management and deprecation policies matter more than version numbers alone.
Why API versioning matters in SaaS
For SaaS products, APIs are not just technical interfaces. They are customer contracts. Every mobile app, integration partner, internal service, or automation workflow that depends on your API can break when the contract changes unexpectedly.
In Indonesia, this matters even more because many SaaS companies serve mixed environments: startups moving fast, enterprises with approval-heavy procurement, and operations teams that rely on WhatsApp, billing, identity, or compliance workflows. A broken API can interrupt revenue, support, and trust at the same time.
The goal of versioning is not to version everything. The goal is to protect clients while keeping your platform evolvable.
What is the best API versioning strategy?
The best strategy for most SaaS teams is simple: prefer backward-compatible changes, introduce versions only for breaking changes, and publish a clear deprecation policy.
That means:
- Add fields instead of changing existing ones
- Add endpoints instead of overloading old behavior
- Keep old fields working until clients migrate
- Reserve major versions for true contract breaks
- Communicate timelines early and repeatedly
This approach reduces version sprawl. It also keeps your engineering team from maintaining too many parallel code paths.
Which versioning model should you choose?
There is no single correct model, but there are trade-offs.
URL versioning
Example: /v1/orders, /v2/orders
This is the most visible and easiest for many teams to understand. It works well when you need a clean separation between old and new behavior. It is also practical for public APIs and partner integrations.
The downside is that teams can overuse major versions because they feel easy to create. If every change becomes /v2, /v3, or /v4, maintenance becomes expensive.
Header versioning
Example: Accept: application/vnd.company.v1+json
This keeps URLs stable and can support finer-grained negotiation. It is useful when you want to evolve responses without changing endpoints.
The downside is operational complexity. Some clients, proxies, and debugging tools make header-based behavior harder to inspect. For many teams, especially those supporting external integrators, this adds friction.
Query parameter versioning
Example: /orders?version=1
This is usually the least preferred for long-term API design because it can be ambiguous and harder to enforce consistently.
Practical recommendation
For most funded startups and enterprise SaaS teams in Indonesia, URL versioning is the most practical default. It is easy to document, easy to test, and easy for external developers to adopt. Use it with discipline, not as a shortcut for poor compatibility.
How do you avoid breaking changes?
Backward compatibility is the real foundation of a good API strategy.
A change is usually safe when it is additive and optional. Examples include:
- Adding a new optional field to a response
- Adding a new endpoint for a new use case
- Adding a new enum value, if clients can safely ignore unknown values
- Expanding filters or sorting options
A change becomes risky when it alters assumptions clients already depend on. Examples include:
- Removing a field
- Renaming a field
- Changing a field type from string to number
- Making an optional field required
- Changing error shapes or status codes without warning
The safest teams treat API contracts like product interfaces, not just code. They review changes from the client’s point of view: mobile apps, BI tools, partner systems, and internal automation.
What should your deprecation policy include?
A versioning strategy is incomplete without a deprecation policy.
At minimum, your policy should define:
- How you announce deprecations
- How long old versions remain supported
- What counts as a breaking change
- How clients can detect deprecated usage
- Who owns migration support
A good policy reduces surprises. It also gives customer success and engineering a shared language when discussing migration.
For Indonesian SaaS teams serving enterprises, this is especially important because procurement and security reviews often require advance notice. A documented policy helps align technical change with business expectations.
How can teams migrate safely between versions?
Migration should be treated as a rollout, not a one-time event.
A practical migration sequence looks like this:
- Ship the new version or new behavior behind a clear contract
- Keep the old version running
- Instrument usage so you know who is still on the old version
- Notify customers with specific dates and examples
- Provide SDK updates, sample requests, and migration notes
- Monitor errors and adoption during the transition
- Retire the old version only after usage drops and stakeholders are ready
If you support customers in Jakarta, Surabaya, Singapore, or other markets, remember that migration speed varies. A startup may move in days, while an enterprise may need weeks or months.
What does good API design look like in practice?
Good API design makes future change easier.
A few habits help a lot:
- Use stable resource names
- Return predictable error formats
- Keep response shapes consistent
- Avoid overloading one endpoint with too many behaviors
- Design for unknown fields and unknown enum values
- Separate public contracts from internal data models
This is where architecture discipline pays off. If your service layer, database schema, and API contract are tightly coupled, every internal change becomes a client risk. If they are separated well, you can evolve the backend without forcing constant version bumps.
Key takeaways
- Version APIs only when a change would break existing clients.
- Prefer backward-compatible, additive changes before introducing a new version.
- URL versioning is often the simplest choice for SaaS teams serving external clients.
- A written deprecation policy is as important as the version number itself.
- Treat API migration as a managed rollout with communication, telemetry, and support.
How APLINDO helps SaaS teams
APLINDO, PT. Arsitek Perangkat Lunak Indonesia, works with funded startups and enterprises from Jakarta and beyond on SaaS engineering, applied AI, Fractional CTO support, and ISO/compliance consulting. For API-heavy products, that often means helping teams design safer contracts, reduce breaking changes, and plan migrations that fit real customer operations.
For example, a team building billing, identity, or engagement systems may need stronger contract discipline before scaling integrations. APLINDO’s remote-first engineering team can help define versioning rules, deprecation workflows, and release practices that support growth without creating unnecessary technical debt.
If your product also touches compliance-sensitive workflows, such as e-signature, WhatsApp engagement, or internal controls, API stability becomes even more important. Products like SealRoute, Patuh.ai, RTPintar, and BlastifyX reflect the same principle: reliable interfaces make adoption easier and support costs lower.
Final recommendation
If you are building a SaaS platform in Indonesia, do not rely on version numbers to solve compatibility problems. Build for stability first, version only when needed, and communicate changes like a product owner, not just an engineer.
That approach keeps your API easier to adopt, easier to support, and easier to evolve as your customer base grows.

