Overview
The Teams Phone Calculator API estimates project effort for Microsoft Teams Phone migrations. It accounts for the base implementation project, phone number porting, auto attendants, call queues and connectivity model.
The API is public, requires no authentication, supports both GET and POST, uses public CORS, is rate limited to 10 requests per IP per minute, and is documented with an OpenAPI 3.1 specification.
Endpoints
| Method | URL | Use case | Cache |
|---|---|---|---|
| GET | https://neodefender.com/api/teams-phone-calculator/calculate | Browser tests, simple HTTP clients and query-parameter integrations. | public, max-age=60 |
| POST | https://neodefender.com/api/teams-phone-calculator/calculate | Applications sending JSON bodies. | no-store |
| OPTIONS | https://neodefender.com/api/teams-phone-calculator/calculate | CORS preflight. | no-store |
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| users | integer | Yes | 1-9999. Number of Teams Phone users in scope. Values above 200 return enterprise planning state. |
| numbers_to_port | integer | No | 0-1000. Count of existing phone numbers the customer intends to port to Teams Phone. Defaults to 0. The deprecated alias numbers_ported is still accepted and returns a deprecation_warnings entry. |
| auto_attendants | integer | No | 0-50. Auto attendants to configure. Defaults to 0. |
| call_queues | integer | No | 0-50. Inbound call queues with agent routing. Defaults to 0. |
| connectivity | string | Yes | microsoft-calling-plans, operator-connect, direct-routing. |
Direct Routing returns an enterprise planning response because it requires Session Border Controller setup and carrier integration.
Pricing logic
| Item | Price |
|---|---|
| Base project | $1,500 |
| Numbers ported | $100 per number |
| Auto attendants | $250 each |
| Call queues | $250 each |
| Microsoft Calling Plans | $0 connectivity surcharge |
| Operator Connect | $500 connectivity surcharge |
| Direct Routing | Enterprise planning required |
Total = $1,500 + phone number porting + auto attendants + call queues + connectivity surcharge.
Enterprise triggers are users > 200 and direct-routing. Direct Routing uses the direct-routing reason and custom planning message.
Response schema
Calculated responses include the estimate, project tier, duration, porting timeline, breakdown, connectivity model, user count and contact message.
{
"estimated_total_usd": 4250,
"tier": "small",
"duration_weeks_min": 3,
"duration_weeks_max": 4,
"porting_timeline_weeks_min": 2,
"porting_timeline_weeks_max": 3,
"breakdown": {
"base": 1500,
"number_porting": 2500,
"auto_attendants": 250,
"call_queues": 0,
"connectivity_surcharge": 0
},
"connectivity_model": "microsoft-calling-plans",
"users_count": 25,
"is_enterprise": false,
"contact_required": true,
"contact_message": "This is an estimate. Microsoft licenses and hardware are sold separately. Recurring management is included in NeoDefender Managed Support. Contact us at hello@neodefender.com for a formal quote."
}Enterprise responses do not return a project price.
{
"estimated_total_usd": 0,
"tier": "enterprise",
"is_enterprise": true,
"enterprise_reason": "direct-routing",
"contact_required": true,
"contact_message": "Direct Routing requires Session Border Controller setup and carrier integration. Our team designs custom solutions. Contact us for tailored pricing."
}Examples
Example 1: Small migration
curl.exe "https://neodefender.com/api/teams-phone-calculator/calculate?users=25&numbers_to_port=25&auto_attendants=1&call_queues=0&connectivity=microsoft-calling-plans"{
"estimated_total_usd": 4250,
"tier": "small",
"duration_weeks_min": 3,
"duration_weeks_max": 4,
"porting_timeline_weeks_min": 2,
"porting_timeline_weeks_max": 3,
"is_enterprise": false
}Example 2: Medium migration
curl.exe -X POST "https://neodefender.com/api/teams-phone-calculator/calculate" ^
-H "Content-Type: application/json" ^
-d "{\"users\":100,\"numbers_to_port\":100,\"auto_attendants\":3,\"call_queues\":4,\"connectivity\":\"operator-connect\"}"{
"estimated_total_usd": 13750,
"tier": "mid",
"duration_weeks_min": 4,
"duration_weeks_max": 6,
"porting_timeline_weeks_min": 2,
"porting_timeline_weeks_max": 3,
"is_enterprise": false
}Example 3: Enterprise state
curl.exe "https://neodefender.com/api/teams-phone-calculator/calculate?users=50&numbers_to_port=50&auto_attendants=1&call_queues=0&connectivity=direct-routing"{
"estimated_total_usd": 0,
"tier": "enterprise",
"is_enterprise": true,
"enterprise_reason": "direct-routing",
"contact_required": true,
"contact_message": "Direct Routing requires Session Border Controller setup and carrier integration. Our team designs custom solutions. Contact us for tailored pricing."
}Rate limiting
The Teams Phone Calculator API allows 10 requests per IP per minute in a 60-second rolling window. GET and POST share the same counter.
| 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. |
Authentication
No authentication is required. CORS is public with Access-Control-Allow-Origin: *, so the endpoint is safe for browser, server, AI agent and integration use.
Errors
400 - Validation failed
Returned when parameters are missing, invalid, out of range, duplicated, or incompatible. The details array is sanitized.
429 - Rate limit exceeded
Returned when the per-IP request limit is exceeded. The Retry-After header indicates the wait time.
500 - Internal server error
Returned for unexpected errors. Retry the request; if it persists, contact hello@neodefender.com.
OpenAPI specification
The machine-readable OpenAPI 3.1 specification is available for code generation, tool discovery and AI agent integration.
OpenAPI 3.1 specification

