Quick start
The fastest way to test the API is a GET request with query parameters. This example estimates an Office 365 tenant-to-tenant migration for 50 users with no file containers, complex permissions or Teams migration.
curl.exe "https://neodefender.com/api/migration-calculator/calculate?platform=office365&users=50&files_included=false"Expected total: $4,250.
Endpoints
| Method | URL | Use case | Cache |
|---|---|---|---|
| GET | https://neodefender.com/api/migration-calculator/calculate | Browser tests and simple HTTP clients. | public, max-age=60 |
| POST | https://neodefender.com/api/migration-calculator/calculate | Applications sending JSON bodies. | no-store |
Both variants return the same JSON response and use the same pricing function. CORS is public. No authentication is required.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| platform | string | Yes | office365, google-workspace, exchange, zimbra, imap, cpanel |
| users | integer | Yes | 1-9999. More than 500 returns enterprise planning state. |
| files_included | boolean | Yes | true/false, or 1/0 for GET requests. |
| file_containers | integer | No | 0-1000. Required when files_included=true. |
| complex_permissions | string | No | none, 1-5, 6-20, 20+. Defaults to none. |
| teams_included | boolean | No | true/false, or 1/0. Defaults to false. |
Legacy platforms are exchange, zimbra, imap and cpanel. File migration is only valid for office365 and google-workspace.
Response
A successful response returns the calculated total, project tier, timeline and cost breakdown.
{
"estimated_total_usd": 4250,
"tier": "small",
"duration_business_days_min": 4,
"duration_business_days_max": 7,
"pilot_users": 4,
"hypercare_days": 7,
"breakdown": {
"base": 750,
"mailboxes": 3500,
"file_containers": 0,
"complex_permissions": 0,
"teams": 0
},
"volume_discount_applied": 0,
"is_enterprise": false,
"contact_required": true,
"contact_message": "This is an estimate. Contact us at hello@neodefender.com for a formal quote."
}Examples
GET example
curl.exe "https://neodefender.com/api/migration-calculator/calculate?platform=office365&users=200&files_included=true&file_containers=12&complex_permissions=6-20&teams_included=true"POST example
curl.exe -X POST "https://neodefender.com/api/migration-calculator/calculate" ^
-H "Content-Type: application/json" ^
-d "{\"platform\":\"office365\",\"users\":200,\"files_included\":true,\"file_containers\":12,\"complex_permissions\":\"6-20\",\"teams_included\":true}"Enterprise state
curl.exe "https://neodefender.com/api/migration-calculator/calculate?platform=office365&users=750&files_included=false"Rate limiting
The migration calculator API allows 10 requests per IP per minute. GET and POST share the same counter. When the limit is exceeded, the API returns429 with a Retry-After: 60 header.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests allowed in the current window. |
| X-RateLimit-Remaining | Requests remaining in the current window. |
| Retry-After | Seconds to wait before retrying after a 429. |
Errors
400 — Validation failed
Returned when parameters are missing, invalid, out of range, duplicated, or incompatible.
429 — Too many requests
Returned when rate limit is exceeded. Wait 60 seconds and retry. The Retry-After header indicates the wait time.
500 — Server error
Returned for unexpected errors. Should be rare. Retry the request; if it persists, contact hello@neodefender.com.
Need a formal quote?
This API provides estimates only. For formal quotes, custom requirements, or to discuss your specific migration, contact us:


