API Versioning
How we handle API versions, backward compatibility, and changes.
Current Versionโ
| Property | Value |
|---|---|
| API Version | 2.8.0 |
| Status | Stable |
| Base URL | https://api.web3identity.com |
Versioning Strategyโ
Semantic Versioningโ
We follow Semantic Versioning (SemVer):
MAJOR.MINOR.PATCH
โ โ โโโ Bug fixes, no breaking changes
โ โโโโโโโโโ New features, backward compatible
โโโโโโโโโโโโโโโ Breaking changes
Current: v2.8.0
2= Major version (breaking changes from v1)8= Minor version (new features added)0= Patch version (bug fixes)
Version in Responsesโ
Every response includes the API version:
X-API-Version: 2.8.0
const res = await fetch('https://api.web3identity.com/api/health');
console.log(res.headers.get('X-API-Version')); // "2.8.0"
Stability Commitmentโ
What We Promiseโ
| Category | Commitment |
|---|---|
| Endpoint URLs | Won't change without major version bump |
| Response fields | Existing fields won't be removed |
| Error codes | Error codes remain stable |
| Free tier | 100 calls/day minimum guaranteed |
What May Changeโ
| Category | Type of Change |
|---|---|
| New fields | Added to responses (non-breaking) |
| New endpoints | Added regularly |
| Performance | Response times may improve |
| New error codes | Additional error types may be added |
No URL Versioningโ
We chose not to include versions in URLs:
โ
https://api.web3identity.com/api/ens/vitalik.eth
โ https://api.web3identity.com/v2/api/ens/vitalik.eth
Why:
- Simpler URLs
- Easier to use and remember
- No need to update URLs when upgrading
- Breaking changes are rare
Deprecation Policyโ
When we need to make breaking changes:
Timelineโ
| Phase | Duration | What Happens |
|---|---|---|
| Announcement | Day 0 | Blog post, changelog, email |
| Deprecation | 30 days | Old behavior works, warnings in response |
| Migration | 60 days | Both old and new work |
| Removal | 90 days | Old behavior removed |
Deprecation Warningsโ
Deprecated features include a warning header:
X-Deprecation-Warning: This endpoint will be removed on 2026-05-01. Use /api/v2/new-endpoint instead.
const res = await fetch(url);
const warning = res.headers.get('X-Deprecation-Warning');
if (warning) {
console.warn('API Deprecation:', warning);
}
Breaking vs Non-Breaking Changesโ
Non-Breaking (Safe)โ
These changes don't require action:
// Adding new fields to responses
// Before
{ "name": "vitalik.eth", "address": "0x..." }
// After (new field added - non-breaking)
{ "name": "vitalik.eth", "address": "0x...", "avatar": "https://..." }
Your code still works โ just ignore fields you don't need.
Breaking (Requires Action)โ
These changes require updating your code:
// Removing a field
// Before
{ "name": "vitalik.eth", "owner": "0x..." }
// After (field removed - BREAKING)
{ "name": "vitalik.eth" } // 'owner' gone!
// Changing field type
// Before
{ "balance": "1000000000000000000" } // string
// After (type changed - BREAKING)
{ "balance": 1000000000000000000 } // number
Migration Guideโ
Handling New Fieldsโ
// โ
Safe: Use optional chaining
const avatar = profile.avatar ?? null;
const twitter = profile.records?.['com.twitter'] ?? '';
// โ
Safe: Destructure with defaults
const { name, address, avatar = null } = profile;
Handling Deprecationsโ
// โ
Check for deprecation warnings
async function fetchWithDeprecationCheck(url) {
const res = await fetch(url);
const warning = res.headers.get('X-Deprecation-Warning');
if (warning) {
// Log for your team to address
console.warn(`[DEPRECATION] ${url}: ${warning}`);
// Optionally send to monitoring
sendToMonitoring('api_deprecation', { url, warning });
}
return res.json();
}
Changelogโ
Track all changes in our Changelog.
Recent Changesโ
| Version | Date | Type | Description |
|---|---|---|---|
| 2.8.0 | 2026-02-08 | Feature | Full modularization, 966 endpoints |
| 2.7.0 | 2026-02-08 | Feature | Cache warming, analytics |
| 2.6.0 | 2026-02-08 | Feature | Smart-fetch with fallbacks |
| 2.5.0 | 2026-02-07 | Feature | 1000+ endpoints milestone |
SDK Version Compatibilityโ
| SDK Version | API Version | Status |
|---|---|---|
| 1.1.x | 2.x | โ Compatible |
| 1.0.x | 2.x | โ Compatible |
The SDK handles version differences automatically:
import { ATVClient } from '@atv-eth/x402-sdk';
const client = new ATVClient();
// SDK automatically adapts to API version
Questions?โ
- Changelog: /resources/changelog
- Status: status.web3identity.com
- Contact: support@web3identity.com