API Migration Guide
Introduction
This guide helps you plan and execute a successful migration to MyAppAPI, whether you're moving from another API provider or upgrading from a previous version of our API. A well-executed migration ensures continuity of service, minimizes downtime, and leverages all the new features and improvements of MyAppAPI.
Enterprise Migration Support
Enterprise customers can access our dedicated migration team for personalized assistance, custom adapters, and migration planning. Contact us to learn more about our Enterprise Migration Services.
Migration Scenarios
This guide covers two primary migration scenarios:
- Provider Migration: Moving from another API provider to MyAppAPI
- Version Migration: Upgrading from a previous version of MyAppAPI (v0.x) to the current version (v1.x)
For each scenario, we'll cover planning, implementation, testing, and deployment strategies to ensure a smooth transition.
Migration Planning
A successful migration begins with thorough planning. Follow these steps to prepare for your migration:
1. Assess Your Current Integration
Begin by documenting your current integration:
- Identify all API endpoints currently in use
- Document authentication mechanisms
- List all data models and their mappings
- Catalog third-party integrations dependent on the API
- Measure API call volumes and patterns
- Identify critical paths and business workflows
2. Define Migration Goals
Clearly define what you want to achieve with the migration:
- Improved performance or reliability
- Access to new features
- Cost optimization
- Better developer experience
- Enhanced security
3. Choose a Migration Strategy
Based on your application's complexity, user base, and risk tolerance, select the most appropriate migration strategy:
Strategy | Description | Best For | Risk Level |
---|---|---|---|
Big Bang | Switch all systems to the new API at once | Simple applications, dev/test environments | High |
Incremental | Migrate functionality in phases | Complex applications with separable components | Medium |
Parallel Run | Run both APIs simultaneously, gradually shifting traffic | Mission-critical applications with zero-downtime requirements | Low |
Strangler Pattern | Create facades for old APIs while gradually replacing backend | Monolithic applications with deep API integration | Low |
4. Create a Migration Checklist
Develop a detailed checklist that includes:
- Mapping of current endpoints to MyAppAPI equivalents
- Authentication transition plan
- Data migration requirements (if applicable)
- Testing strategy and success criteria
- Rollback plan in case of issues
- Timeline with milestones
- Team responsibilities and communication plan
# Migration Checklist Template
## Pre-Migration
- [ ] Document all current API endpoints in use
- [ ] Create mapping to equivalent MyAppAPI endpoints
- [ ] Set up MyAppAPI account and obtain credentials
- [ ] Define metrics for migration success
- [ ] Prepare test cases for validation
- [ ] Create rollback plan
- [ ] Brief all stakeholders
## Implementation
- [ ] Update authentication logic
- [ ] Update API client or SDK
- [ ] Refactor endpoint calls
- [ ] Adapt data models and transformations
- [ ] Update error handling
- [ ] Implement new features (optional)
## Testing
- [ ] Unit testing of updated components
- [ ] Integration testing of API workflows
- [ ] Performance testing
- [ ] Security testing
- [ ] Validation in staging environment
## Deployment
- [ ] Final stakeholder approval
- [ ] Schedule maintenance window (if needed)
- [ ] Execute deployment strategy
- [ ] Monitor initial performance
- [ ] Be prepared to roll back if necessary
## Post-Migration
- [ ] Continuous monitoring for 48 hours
- [ ] Collect performance metrics
- [ ] Document lessons learned
- [ ] Decommission old integration (if applicable)
- [ ] Plan for optimization
5. Set Up Your MyAppAPI Environment
Before beginning the technical migration:
- Create your MyAppAPI account if you haven't already
- Set up appropriate teams and access controls
- Generate API keys for testing and development
- Familiarize yourself with the MyAppAPI Dashboard
- Install the appropriate SDKs for your platform
Migrating from Other Providers
This section covers specific considerations when migrating from other popular API providers to MyAppAPI.
Endpoint Mapping
The first step is to map your current endpoints to their equivalents in MyAppAPI:
Common Provider Pattern | MyAppAPI Equivalent | Notes |
---|---|---|
/api/users |
/v1/users |
Note the version prefix in MyAppAPI |
/api/v1/users/:id |
/v1/users/{id} |
Parameter syntax may vary |
/api/users/:id/posts |
/v1/users/{id}/posts |
Nested resource pattern is compatible |
/api/search?q=term |
/v1/search?query=term |
Query parameter names may differ |
We provide more detailed mapping guides for specific providers:
- Migrating from AWS API Gateway
- Migrating from Azure API Management
- Migrating from Stripe API
- Migrating from Twilio API
- Migrating from SendGrid API
Authentication Differences
Authentication mechanisms often vary between providers. Here's how to adapt your authentication:
Provider Auth Method | MyAppAPI Equivalent | Migration Approach |
---|---|---|
API Key in HeaderX-API-Key: key123 |
API Key in HeaderX-API-Key: key123 |
Direct replacement with MyAppAPI key |
API Key in Query?api_key=key123 |
API Key in HeaderX-API-Key: key123 |
Move key from query to header |
Basic AuthAuthorization: Basic ... |
API Key or OAuthX-API-Key: key123 orAuthorization: Bearer ... |
Replace with API key or implement OAuth flow |
Custom TokenX-Token: token123 |
API Key or OAuthX-API-Key: key123 orAuthorization: Bearer ... |
Replace with API key or implement OAuth flow |
OAuth 2.0Authorization: Bearer ... |
OAuth 2.0Authorization: Bearer ... |
Update token endpoints and flows |
For detailed information on MyAppAPI authentication methods, see our Authentication Guide.
Data Model Mapping
Different providers often use different data models and conventions. When migrating, you'll need to transform data between formats:
{
"user_id": "123456",
"user_name": "john_doe",
"first_name": "John",
"last_name": "Doe",
"email_address": "[email protected]",
"is_active": true,
"created": "2025-01-15T12:30:45Z",
"roles": ["admin", "editor"],
"meta": {
"last_login": "2025-05-10T08:15:30Z",
"login_count": 42
}
}
{
"id": "123456",
"username": "john_doe",
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"status": "active",
"createdAt": "2025-01-15T12:30:45Z",
"roles": ["admin", "editor"],
"metadata": {
"lastLoginAt": "2025-05-10T08:15:30Z",
"loginCount": 42
}
}
// Example transformation function in JavaScript
function transformUserData(legacyUser) {
return {
id: legacyUser.user_id,
username: legacyUser.user_name,
firstName: legacyUser.first_name,
lastName: legacyUser.last_name,
email: legacyUser.email_address,
status: legacyUser.is_active ? 'active' : 'inactive',
createdAt: legacyUser.created,
roles: legacyUser.roles,
metadata: {
lastLoginAt: legacyUser.meta.last_login,
loginCount: legacyUser.meta.login_count
}
};
}
Consider creating adapter functions or middleware to handle data transformations automatically during the migration period.
Error Handling Differences
Error responses often vary between providers. Update your error handling to work with MyAppAPI's format:
{
"status": "error",
"code": 400,
"message": "Invalid input data",
"errors": [
{"field": "email", "message": "Invalid email format"},
{"field": "age", "message": "Must be 18 or older"}
]
}
{
"error": {
"type": "validation_error",
"message": "The request was invalid and cannot be processed",
"code": "invalid_parameters",
"request_id": "req_abcdef123456",
"details": [
{
"field": "email",
"message": "Invalid email format",
"code": "invalid_format"
},
{
"field": "age",
"message": "Must be 18 or older",
"code": "invalid_value"
}
]
}
}
// Example error handling adapter in JavaScript
async function callApiWithErrorHandling(endpoint, options) {
try {
const response = await fetch(endpoint, options);
const data = await response.json();
// Handle successful response
if (response.ok) {
return data;
}
// Handle MyAppAPI error format
if (data.error) {
// Convert to your application's error format or handle directly
const error = new Error(data.error.message);
error.code = data.error.code;
error.requestId = data.error.request_id;
error.details = data.error.details;
throw error;
}
// Fallback for unexpected error formats
throw new Error('Unknown API error');
} catch (error) {
// Log the error with request ID if available
if (error.requestId) {
console.error(`API Error [${error.requestId}]:`, error.message);
}
// Rethrow or handle as needed
throw error;
}
}
Rate Limits and Quotas
Different providers have different rate limits and quota systems. Review your usage patterns against MyAppAPI's limits:
Plan | Rate Limit | Daily Quota | Concurrent Requests |
---|---|---|---|
Free | 60 requests/minute | 10,000 requests | 10 |
Professional | 300 requests/minute | 100,000 requests | 50 |
Business | 1,000 requests/minute | 1,000,000 requests | 200 |
Enterprise | Custom | Custom | Custom |
Ensure your chosen plan accommodates your usage patterns, and implement appropriate rate limiting and retry logic in your client code.
Migrating from MyAppAPI v0.x
If you're already using a previous version of MyAppAPI (v0.x), this section will guide you through the upgrade process to v1.x.
Key Changes in v1.x
Version 1.0 introduces several important changes:
Feature | v0.x (Legacy) | v1.x (Current) | Migration Impact |
---|---|---|---|
Base URL | https://api.myappapi.com/ |
https://api.myappapi.com/v1/ |
High - URL updates required |
Authentication | API Key in query parameter | API Key in header, OAuth, JWT | High - Auth code updates required |
Response Format | Mixed formats, no standard envelope | Standardized with data , meta , and links |
Medium - Response parsing updates |
Error Format | Basic error messages | Detailed error objects with type, code, and details | Medium - Error handling updates |
Rate Limiting | Basic per-minute limits | Sophisticated rate limiting with headers and burst capacity | Low - Client adaptations may be needed |
Parameter Naming | Inconsistent naming (camelCase, snake_case) | Consistent camelCase for request, snake_case for response | Medium - Parameter updates required |
API Features | Basic REST API | REST, GraphQL, WebSockets, Batch Operations | Low - Optional adoption of new features |
Step-by-Step Version Migration
Follow these steps to migrate from v0.x to v1.x:
1. Update Authentication
The most significant change is the authentication mechanism:
// v0.x - API key in query parameter
fetch('https://api.myappapi.com/users?api_key=your_api_key_here')
.then(response => response.json())
.then(data => console.log(data));
// v1.x - API key in header
fetch('https://api.myappapi.com/v1/users', {
headers: {
'X-API-Key': 'your_api_key_here'
}
})
.then(response => response.json())
.then(data => console.log(data.data)); // Note: response is now wrapped in a data object
# v0.x - API key in query parameter
import requests
response = requests.get('https://api.myappapi.com/users', params={
'api_key': 'your_api_key_here'
})
data = response.json()
print(data)
# v1.x - API key in header
import requests
headers = {
'X-API-Key': 'your_api_key_here'
}
response = requests.get('https://api.myappapi.com/v1/users', headers=headers)
data = response.json()
print(data['data']) # Note: response is now wrapped in a data object
2. Update Endpoint URLs
All endpoints now require the /v1/
version prefix:
v0.x Endpoint | v1.x Endpoint |
---|---|
/users |
/v1/users |
/users/123 |
/v1/users/123 |
/projects |
/v1/projects |
/search |
/v1/search |
3. Adapt to New Response Format
v1.x uses a consistent response envelope format:
[
{
"id": "123",
"name": "Project Alpha",
"created_at": "2025-01-15T12:30:45Z"
},
{
"id": "456",
"name": "Project Beta",
"created_at": "2025-02-20T09:15:30Z"
}
]
{
"data": [
{
"id": "123",
"name": "Project Alpha",
"created_at": "2025-01-15T12:30:45Z"
},
{
"id": "456",
"name": "Project Beta",
"created_at": "2025-02-20T09:15:30Z"
}
],
"meta": {
"page": 1,
"limit": 10,
"total": 42,
"has_more": true,
"request_id": "req_abcdef123456"
},
"links": {
"self": "https://api.myappapi.com/v1/projects?page=1&limit=10",
"next": "https://api.myappapi.com/v1/projects?page=2&limit=10",
"prev": null
}
}
Update your code to handle the new response structure:
// Adapter function for v1.x response format
function processApiResponse(response) {
// Check if response has the v1.x envelope structure
if (response && response.data !== undefined) {
// v1.x response
return {
data: response.data,
metadata: response.meta,
links: response.links
};
} else {
// v0.x response or unexpected format
return {
data: response,
metadata: {},
links: {}
};
}
}
4. Update Error Handling
Error responses have been standardized in v1.x:
{
"error": "Invalid parameter",
"message": "The email provided is not valid"
}
{
"error": {
"type": "validation_error",
"message": "The request was invalid and cannot be processed",
"code": "invalid_parameters",
"request_id": "req_abcdef123456",
"details": [
{
"field": "email",
"message": "The email provided is not valid",
"code": "invalid_format"
}
]
}
}
5. Adapt to Parameter Naming Conventions
v1.x uses consistent naming conventions:
- Request parameters: camelCase (
firstName
,emailAddress
) - Response fields: snake_case (
first_name
,email_address
)
Use transformation functions to maintain consistency with your application's conventions:
// Convert camelCase to snake_case for requests
function toSnakeCase(obj) {
const result = {};
Object.keys(obj).forEach(key => {
const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();
result[snakeKey] = obj[key];
});
return result;
}
// Convert snake_case to camelCase for responses
function toCamelCase(obj) {
const result = {};
Object.keys(obj).forEach(key => {
const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
result[camelKey] = obj[key];
});
return result;
}
Using the Compatibility Mode
For smoother migration, we offer a temporary compatibility mode that allows v0.x API calls to work with the v1.x API. To enable it:
- Log in to the MyAppAPI Dashboard
- Navigate to Settings → API Settings → Compatibility
- Enable v0.x Compatibility Mode
- Set a Compatibility End Date (up to 90 days)
Compatibility Mode Limitations
Compatibility mode has several limitations:
- Performance impact of ~20-30ms per request
- Some advanced v1.x features are not available
- Error responses may be less detailed
- Maximum duration of 90 days
Use compatibility mode as a temporary measure while updating your code, not as a permanent solution.
Testing & Validation
Thorough testing is critical for a successful migration. This section provides strategies for validating your integration with MyAppAPI.
Creating a Test Plan
Develop a comprehensive test plan that covers:
- Unit tests for API client code
- Integration tests for API workflows
- Authentication and authorization tests
- Error handling and edge cases
- Performance benchmarks
- Load testing (for critical applications)
Using Test Environments
MyAppAPI provides a sandbox environment for testing without affecting production data:
https://sandbox.api.myappapi.com/v1/
The sandbox environment:
- Mimics the behavior of the production API
- Uses isolated test data
- Supports all API operations
- May have higher rate limits for testing
- Data is reset periodically
Parallel Testing
For critical applications, implement parallel testing to compare results between your current provider and MyAppAPI:
async function parallelTestEndpoint(testCase) {
try {
// Call the original API
const originalStart = Date.now();
const originalResponse = await callOriginalApi(testCase.endpoint, testCase.params);
const originalDuration = Date.now() - originalStart;
// Call the new MyAppAPI
const myappapiStart = Date.now();
const myappapiResponse = await callMyAppApi(testCase.endpoint, testCase.params);
const myappapiDuration = Date.now() - myappapiStart;
// Compare responses
const comparison = compareResponses(originalResponse, myappapiResponse);
return {
testCase: testCase.name,
passed: comparison.match,
originalDuration,
myappapiDuration,
details: comparison.details
};
} catch (error) {
return {
testCase: testCase.name,
passed: false,
error: error.message
};
}
}
// Helper function to compare response data
function compareResponses(original, myappapi) {
// Extract the actual data from MyAppAPI's response envelope
const myappapiData = myappapi.data;
// Compare key fields (adapt based on your data model)
const match = original.id === myappapiData.id &&
original.name === myappapiData.name &&
original.status === myappapiData.status;
return {
match,
details: {
original,
myappapi: myappapiData
}
};
}
API Explorer Testing
Use our API Explorer to interactively test endpoints and validate responses without writing code. The Explorer allows you to:
- Configure authentication
- Set request parameters
- Send test requests
- View formatted responses
- Generate code snippets for your language
Mock Data Comparison
For data-intensive migrations, create a set of mock data to validate transformation logic:
- Generate a representative sample of data from your current provider
- Create equivalent data in MyAppAPI
- Develop automated tests to verify data integrity
- Test read and write operations with the sample data
// Sample mock data validation test
const mockUsers = [
{ id: '1', name: 'Alice', email: '[email protected]' },
{ id: '2', name: 'Bob', email: '[email protected]' },
{ id: '3', name: 'Charlie', email: '[email protected]' }
];
// Create users in MyAppAPI
async function createMockUsers() {
for (const user of mockUsers) {
await myappapi.users.create({
id: user.id,
name: user.name,
email: user.email
});
}
}
// Validate users in MyAppAPI
async function validateMockUsers() {
const results = [];
for (const expectedUser of mockUsers) {
const actualUser = await myappapi.users.get(expectedUser.id);
results.push({
id: expectedUser.id,
match: expectedUser.name === actualUser.name &&
expectedUser.email === actualUser.email,
expected: expectedUser,
actual: actualUser
});
}
return results;
}
Deployment Strategies
Once testing confirms your migration is ready, it's time to deploy. This section covers different deployment strategies to minimize risk and disruption.
Phased Rollout
A gradual rollout reduces risk by limiting the impact of any issues:
- Internal Users: Deploy to internal teams first
- Beta Users: Expand to a small group of external users
- Regional Rollout: Deploy to one region at a time
- Percentage Rollout: Gradually increase the percentage of traffic
- Full Deployment: Complete the migration for all users
// Example of percentage-based traffic routing
function routeApiRequest(userId, request) {
// Get the current rollout percentage from configuration
const rolloutPercentage = getConfigValue('myappapi_rollout_percentage', 0);
// Deterministically assign users to either the legacy API or MyAppAPI
// based on a hash of their user ID
const userHash = hashUserId(userId);
const userPercentile = userHash % 100;
if (userPercentile < rolloutPercentage) {
// Route to MyAppAPI
return callMyAppApi(request);
} else {
// Route to legacy API
return callLegacyApi(request);
}
}
Feature Flags
Use feature flags to control the migration at a granular level:
// Example feature flag implementation
const apiFeatureFlags = {
'use_myappapi_users': true, // Users API
'use_myappapi_projects': true, // Projects API
'use_myappapi_billing': false, // Billing API still using legacy
'use_myappapi_analytics': false // Analytics API still using legacy
};
// API routing based on feature flags
function routeApiRequest(endpoint, requestData) {
// Determine which API resource is being accessed
const resource = getResourceFromEndpoint(endpoint);
// Check if this resource should use MyAppAPI
const featureFlag = `use_myappapi_${resource}`;
if (apiFeatureFlags[featureFlag]) {
return callMyAppApi(endpoint, requestData);
} else {
return callLegacyApi(endpoint, requestData);
}
}
API Gateway Pattern
Implement an API gateway to abstract the migration from your clients:
The gateway handles:
- Routing requests to the appropriate API
- Transforming requests and responses as needed
- Centralizing authentication logic
- Collecting metrics on API usage
- Providing a consistent interface during migration
// Simplified API gateway example (Node.js/Express)
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
// Middleware to handle authentication
app.use((req, res, next) => {
// Extract authentication from client request
const clientAuth = req.headers['authorization'] || req.query.api_key;
// Translate to the appropriate auth mechanism
if (shouldUseMyAppApi(req.path)) {
// MyAppAPI uses header-based authentication
req.myappapiAuth = {
headers: {
'X-API-Key': getMyAppApiKey(clientAuth)
}
};
} else {
// Legacy API uses query parameter
req.legacyAuth = {
params: {
api_key: getLegacyApiKey(clientAuth)
}
};
}
next();
});
// Route API requests
app.all('/api/*', async (req, res) => {
try {
const endpoint = req.path.replace('/api', '');
let response;
if (shouldUseMyAppApi(endpoint)) {
// Route to MyAppAPI
const myappapiUrl = `https://api.myappapi.com/v1${endpoint}`;
response = await callMyAppApi(myappapiUrl, req.method, req.body, req.myappapiAuth);
// Transform response if needed
response = transformMyAppApiResponse(response);
} else {
// Route to legacy API
const legacyUrl = `https://api.legacyprovider.com${endpoint}`;
response = await callLegacyApi(legacyUrl, req.method, req.body, req.legacyAuth);
}
// Return response to client
res.status(response.status).json(response.data);
} catch (error) {
// Handle and normalize errors
const normalizedError = normalizeError(error);
res.status(normalizedError.status).json(normalizedError.data);
}
});
// Function to determine if an endpoint should use MyAppAPI
function shouldUseMyAppApi(endpoint) {
// Check feature flags, routing rules, etc.
// This can be as simple or complex as needed
const myappapiEndpoints = [
'/users',
'/projects',
'/teams'
];
return myappapiEndpoints.some(prefix => endpoint.startsWith(prefix));
}
Rollback Plan
Always have a detailed rollback plan in case of unexpected issues:
- Define Rollback Triggers: Specific metrics or issues that would trigger a rollback
- Document Rollback Steps: Step-by-step instructions for reverting to the previous API
- Assign Responsibilities: Who will make the decision and execute the rollback
- Test the Rollback: Practice the rollback procedure before the migration
- Communicate: Plan how stakeholders will be notified if a rollback occurs
Rollback Triggers Example
Common triggers for considering a rollback:
- Error rate exceeds 1% for critical endpoints
- Average response time increases by more than 300ms
- Authentication failures exceed 5% of requests
- Data integrity issues are detected
- Multiple customer-reported issues within 1 hour of deployment
Post-Migration Monitoring
After deploying your migration, closely monitor your integration to ensure everything is working correctly.
Key Metrics to Monitor
Track these important metrics during and after migration:
- Error Rate: Percentage of API calls resulting in errors
- Response Time: Average and 95th percentile response times
- Request Volume: Number of API calls per endpoint
- Success Rate: Percentage of successful API calls
- Usage Patterns: Distribution of API calls across endpoints
- Rate Limit Usage: Percentage of rate limit consumed
Dashboards and Alerts
Set up monitoring dashboards and alerts to proactively identify issues:

The MyAppAPI Dashboard provides built-in monitoring tools, including:
- Real-time metrics dashboard
- Customizable alerts
- Error rate monitoring
- Usage reports
- Integration with external monitoring tools
Gradual Decommissioning
After successful migration, gradually decommission your old API integration:
- Maintain both integrations in parallel for an initial period (14-30 days)
- Gradually reduce traffic to the old API
- Monitor for any issues as traffic shifts
- Archive old integration code but keep it accessible
- Update documentation to remove references to the old API
- Cancel subscriptions or reduce capacity for the old API
Migration Retrospective
Conduct a migration retrospective to capture lessons learned:
- What went well during the migration?
- What unexpected challenges were encountered?
- How did your testing strategy perform?
- Were there any performance impacts?
- What would you do differently next time?
Document these lessons for future API migrations and share them with your team.
Frequently Asked Questions
How long should I plan for a migration to MyAppAPI?
The migration timeline depends on the complexity of your integration, but typically:
- Simple applications: 1-2 weeks
- Moderate complexity: 2-4 weeks
- Complex enterprise applications: 1-3 months
These timelines include planning, implementation, testing, and gradual deployment. Enterprise customers with complex migrations should consider working with our Professional Services team to accelerate the process.
Can I migrate gradually, or do I need to switch everything at once?
A gradual migration is highly recommended for most applications. You can:
- Migrate one resource type at a time (e.g., users, then projects, then billing)
- Implement a percentage-based rollout to gradually shift traffic
- Use an API gateway to abstract the migration from your client applications
- Start with non-critical endpoints before migrating critical functionality
A big-bang migration (switching everything at once) is only recommended for simple applications or development environments.
Will I need to update my client-side code during migration?
In most cases, yes. Client-side code updates are typically needed for:
- Authentication method changes
- Endpoint URL updates
- Response format handling
- Error handling
However, you can minimize client-side changes by:
- Using our official SDKs, which abstract many of the differences
- Implementing an API gateway that presents a consistent interface
- Creating adapter functions to handle format differences
Do you provide migration tools or services?
Yes, we offer several migration tools and services:
- Migration Assessment Tool: Analyzes your current API usage and provides a detailed migration plan
- Provider-Specific Adapters: Pre-built adapters for common API providers
- Data Migration Utilities: Tools to help transfer data between platforms
- Professional Services: Expert assistance for complex migrations (Enterprise plan)
- Migration Office Hours: Weekly sessions with our engineering team (Business and Enterprise plans)
Contact our support team to learn more about these offerings.
How do I migrate my data to MyAppAPI?
Data migration depends on your specific use case:
- API as data source: Use our Import Tool to migrate data from your current provider
- API as operation layer: If your data resides in your own databases, no data migration is needed
- Hybrid approach: Use our Batch API to efficiently transfer large volumes of data
For large datasets (over 1GB), we offer dedicated data import services for Enterprise customers. Contact our sales team for details.
What happens to my data if I need to roll back the migration?
To protect your data during migration:
- We recommend a read-before-write approach for initial testing
- Use a migration strategy that maintains data in both systems temporarily
- Consider implementing dual-write patterns for critical data
- Take snapshots of your data before beginning the migration
In case of rollback, data written to MyAppAPI during migration may need to be manually reconciled with your original system. Our Export Tool can help extract data from MyAppAPI if needed.