Activate a SIM card by porting an existing phone number from another carrier.
Validate Port-In Eligibility
Pre-check whether an MDN is eligible for port-in before submitting a full port-in request.
Endpoint: GET /sim/port-in/validate/{mdn}
Rate Limit: 60 requests/minute
Authentication: Bearer token required
Request Parameters
| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
mdn |
path | string | Yes | 10-digit phone number to validate |
sim |
query | string | No | ICCID (alphanumeric, max 25 characters) |
Response Schema
| Field | Type | Description |
|---|---|---|
mdn |
string | 10-digit Mobile Number |
eligible |
boolean | Whether the MDN is eligible for port-in |
status |
string | success or failure |
message |
string | Human-readable description |
provider_name |
string | Current carrier name (e.g., AT&T Mobility) — only present on success |
provider_id |
string | Current carrier ID (e.g., 6214) — only present on success |
Response Examples
Eligible (200 OK):
{
"mdn": "1234567890",
"eligible": true,
"status": "success",
"message": "Eligible",
"provider_name": "AT&T Mobility",
"provider_id": "6214"
}
Not Eligible (200 OK):
{
"mdn": "1234567890",
"eligible": false,
"status": "failure",
"message": "MSISDN not eligible for Port In (GENS-0043)",
"provider_name": null,
"provider_id": null
}
Possible Error Codes
GENS-0043, GENS-0161, GENS-0374, GENS-0013
For full error details see Error & Response Codes.
Port-In Request
Submit a port-in request to move a phone number from another carrier.
Endpoint: POST /sim/port-in/
Rate Limit: 30 requests/minute
Authentication: Bearer token required
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
sim |
string | Yes | ICCID to activate (alphanumeric, max 25 chars) |
plan_id |
string | Yes | Plan ID (must be in user's authorized plans) |
mdn |
string | Yes | Number to port (10 digits) |
account_number |
string | Yes | Previous carrier account number |
account_pin |
string | Yes | Previous carrier PIN/password |
first_name |
string | Yes | Subscriber first name |
last_name |
string | Yes | Subscriber last name |
address1 |
string | Yes | Billing address line 1 |
address2 |
string | No | Billing address line 2 |
city |
string | Yes | City |
state |
string | Yes | 2-letter US state code |
zip_code |
string | Yes | 5-digit ZIP code |
transaction_id |
string | No | Unique transaction ID (auto-generated with PORT_ prefix if not provided) |
Request Example
{
"sim": "89014103211118512345",
"plan_id": "2063",
"mdn": "1234567890",
"account_number": "123456789",
"account_pin": "1234",
"first_name": "John",
"last_name": "Doe",
"address1": "123 Main St",
"city": "New York",
"state": "NY",
"zip_code": "10001",
"transaction_id": "PORT_TX123"
}
Response Examples
Success (200 OK):
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_8694AF90ECDF",
"message": "INTER",
}
Success with WFC Warning (200 OK):
Port-in submitted but WFC could not be added (E911 address missing or invalid):
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_8694AF90ECDF",
"message": "SUCCESS",
"warning": "Portin Completed Successfully: Failed To Add WFC due to E911 address not provided. Please Provide E911 Address and Try add WFC with AddWFC API",
"wfc_status": false
}
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_8694AF90ECDF",
"message": "SUCCESS",
"warning": "Portin Completed Successfully: Failed To Add WFC due to Invalid E911 Address. Please Retry With AddWFC API",
"wfc_status": false
}
Failure (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_8694AF90ECDF",
"message": "The MSISDN is already submitted for port-in (GENS-0161)",
"error": ["The MSISDN is already submitted for port-in (GENS-0161)"]
}
Conflict (409):
Possible Error Codes
GENS-0006, GENS-0030, GENS-0031, GENS-0043, GENS-0050, GENS-0051, GENS-0052, GENS-0054, GENS-0090, GENS-0161, GENS-0170, GENS-0180, GENS-0197, GENS-0289, GENS-0374
For full error details see Error & Response Codes.
Query Port-In Status
Check the current status of a port-in request.
Endpoint: GET /sim/port-in/status/{mdn}
Rate Limit: 60 requests/minute
Authentication: Bearer token required
Request Parameters
| Parameter | Location | Type | Required | Description |
|---|---|---|---|---|
mdn |
path | string | Yes | 10-digit phone number with a pending port-in |
Response Schema
| Field | Type | Description |
|---|---|---|
status |
string | success or failure |
mdn |
string | 10-digit Mobile Number |
transaction_id |
string | Auto-generated query transaction ID |
message |
string | Port status description (INTER, RESOLUTION REQUIRED, COMPLETED) |
error |
array | Error details (on failure only) |
Note
The message field contains the actual port status from the carrier. Key values to handle:
INTER— Port is in progress (inter-carrier transfer)RESOLUTION REQUIRED— Old carrier rejected, needs correction via ModifyCOMPLETED— Port is done, number is active on your network
Response Examples
In Progress (200 OK):
{
"status": "success",
"mdn": "1234567890",
"transaction_id": "PORT_QUERY_A1B2C3D4",
"message": "INTER",
}
Resolution Required (200 OK):
Port-in needs additional information — use Modify Port-In to update:
{
"status": "success",
"mdn": "1234567890",
"transaction_id": "PORT_QUERY_A1B2C3D4",
"message": "RESOLUTION REQUIRED",
}
Completed (200 OK):
{
"status": "success",
"mdn": "1234567890",
"transaction_id": "PORT_QUERY_A1B2C3D4",
"message": "COMPLETED",
}
No Port Found (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"transaction_id": "PORT_QUERY_A1B2C3D4",
"message": "No Port-In request found for the MSISDN provided. (GENS-0041)",
"error": ["No Port-In request found for the MSISDN provided. (GENS-0041)"]
}
Port Already Cancelled (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"transaction_id": "PORT_QUERY_A1B2C3D4",
"message": "The port-in request for this number was cancelled. Please submit a new port-in request. (GENS-0048)",
"error": ["The port-in request for this number was cancelled. Please submit a new port-in request. (GENS-0048)"]
}
Possible Error Codes
GENS-0041, GENS-0047, GENS-0048, GENS-0049
Carrier status/rejection codes: 1B, 1C, 1E, 1L, 1M, 1N, 1P, 6A, 6B, 6C, 6D, 6E, 6F, 6G, 6H, 6J, 6K, 6L, 6M, 6N, 6P, 6R, 7A
For full error details see Error & Response Codes and Port-In Status / Rejection Codes.
Modify Port-In
Update details of a pending port-in request. Typically used when the port status is "Resolution Required" (e.g., incorrect account number, name mismatch).
Endpoint: POST /sim/port-in/modify/
Rate Limit: 30 requests/minute
Authentication: Bearer token required
Warning
A port-in can only be modified when its status is "Resolution Required". If the port is already in-progress, you will receive error GENS-0049.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
mdn |
string | Yes | 10-digit Mobile Number |
sim |
string | Yes | ICCID (alphanumeric, max 25 chars) |
agent_account |
string | No | Admin/agent account ID |
order_id |
string | No | Port-in order ID |
authorized_by |
string | No | Authorizing person name |
business_name |
string | No | Business name |
old_account |
string | No | Old provider account number |
old_password |
string | No | Old provider PIN/password |
old_ssn |
string | No | Last 4 of SSN (old provider) |
old_dob |
string | No | Date of birth (YYYY-MM-DD) |
first_name |
string | No | Subscriber first name |
last_name |
string | No | Subscriber last name |
address1 |
string | No | Billing address line 1 |
address2 |
string | No | Billing address line 2 |
city |
string | No | City |
state |
string | No | 2-letter state code |
zip_code |
string | No | 5-digit ZIP code |
transaction_id |
string | No | Unique transaction ID (auto-generated with PORT_MOD_ prefix if not provided) |
Request Example
{
"mdn": "1234567890",
"sim": "89014103211118512345",
"old_account": "987654321",
"old_password": "5678",
"first_name": "John",
"last_name": "Doe",
"address1": "456 Oak Ave",
"city": "Houston",
"state": "TX",
"zip_code": "77001",
"transaction_id": "PORT_MOD_TX123"
}
Response Examples
Success (200 OK):
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_MOD_TX123",
"message": "INTER",
}
Success with WFC Warning (200 OK):
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_MOD_TX123",
"message": "SUCCESS",
"warning": "UpdatePort Completed Successfully: Failed To Add WFC due to Invalid E911 Address. Please Retry With AddWFC API",
"wfc_status": false
}
Cannot Modify (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_MOD_TX123",
"message": "PortIn request is pending and no modifications are required at this time (GENS-0049)",
"error": ["PortIn request is pending and no modifications are required at this time (GENS-0049)"]
}
SIM Mismatch (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_MOD_TX123",
"message": "SIM passed for UpdatePortIn request does not match with original PortIN request. (GENS-0125)",
"error": ["SIM passed for UpdatePortIn request does not match with original PortIN request. (GENS-0125)"]
}
Possible Error Codes
GENS-0041, GENS-0049, GENS-0050, GENS-0051, GENS-0052, GENS-0090, GENS-0125, GENS-0289, GENS-0417, GENS-0425
For full error details see Error & Response Codes.
Cancel Port-In
Cancel a pending port-in request.
Endpoint: POST /sim/port-in/cancel/
Rate Limit: 30 requests/minute
Authentication: Bearer token required
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
mdn |
string | Yes | 10-digit Mobile Number |
sim |
string | Yes | ICCID (alphanumeric, max 25 chars) |
transaction_id |
string | No | Unique transaction ID (auto-generated with PORT_CANCEL_ prefix if not provided) |
Request Example
Response Examples
Success (200 OK):
{
"status": "success",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_CANCEL_TX123",
"message": "PortIn request cancelled successfully",
}
No Port Found (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_CANCEL_TX123",
"message": "No Port-In request found for the MSISDN provided. (GENS-0041)",
"error": ["No Port-In request found for the MSISDN provided. (GENS-0041)"]
}
Already Cancelled (400 Bad Request):
{
"status": "failure",
"mdn": "1234567890",
"sim": "89014103211118512345",
"transaction_id": "PORT_CANCEL_TX123",
"message": "The port-in request for this number was cancelled. Please submit a new port-in request. (GENS-0048)",
"error": ["The port-in request for this number was cancelled. Please submit a new port-in request. (GENS-0048)"]
}
Possible Error Codes
GENS-0041, GENS-0048, GENS-0012
For full error details see Error & Response Codes.
Port-In with MDN Change (Conversion)
Port a new phone number onto an existing subscriber's SIM, replacing the current MDN. Used when a subscriber wants to keep their SIM but switch to a number ported from another carrier.
Endpoint: POST /sim/port-in/convert/
Rate Limit: 30 requests/minute
Authentication: Bearer token required
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
mdn |
string | Yes | Current MDN on the SIM (10 digits) |
new_mdn |
string | Yes | MDN to port in from other carrier (10 digits) |
sim |
string | Yes | Current ICCID |
plan_id |
string | Yes | Plan ID (must be in user's authorized plans) |
zip_code |
string | Yes | Service ZIP (5 digits or ZIP+4) |
authorized_by |
string | Yes | Authorized person name |
first_name |
string | Yes | Subscriber first name |
last_name |
string | Yes | Subscriber last name |
address1 |
string | Yes | Billing address line 1 |
city |
string | Yes | City |
state |
string | Yes | 2-letter US state code |
account_number |
string | Yes | Old carrier account number |
account_pin |
string | Yes | Old carrier PIN/password |
address2 |
string | No | Billing address line 2 |
e911_address1 |
string | No | E911 street address |
e911_address2 |
string | No | E911 street address line 2 |
e911_city |
string | No | E911 city |
e911_state |
string | No | E911 state |
e911_zip |
string | No | E911 ZIP code |
transaction_id |
string | No | Unique transaction ID (auto-generated with PORT_CONVERT_ prefix if not provided) |
Request Example
{
"mdn": "5550199888",
"new_mdn": "2125550100",
"sim": "89014103211118500000",
"plan_id": "2037",
"zip_code": "10001",
"authorized_by": "John Doe",
"first_name": "John",
"last_name": "Doe",
"address1": "123 Main St",
"address2": "Apt 4B",
"city": "New York",
"state": "NY",
"account_number": "987654321",
"account_pin": "1234",
"e911_address1": "123 Main St",
"e911_city": "New York",
"e911_state": "NY",
"e911_zip": "10001"
}
Response Examples
Success (200 OK):
{
"status": "success",
"mdn": "2125550100",
"sim": "89014103211118500000",
"transaction_id": "PORT_CONVERT_8694AF90ECDF",
"message": "SUCCESS",
}
Success with WFC Warning (200 OK):
{
"status": "success",
"mdn": "2125550100",
"sim": "89014103211118500000",
"transaction_id": "PORT_CONVERT_8694AF90ECDF",
"message": "Success",
"warning": "Portin Completed Successfully: Failed To Add WFC due to Invalid E911 Address. Please Retry With AddWFC API",
"wfc_status": false
}
Failure (400 Bad Request):
{
"status": "failure",
"mdn": "2125550100",
"sim": "89014103211118500000",
"transaction_id": "PORT_CONVERT_8694AF90ECDF",
"message": "The MSISDN is not eligible for Port In (GENS-0043)",
"error": ["The MSISDN is not eligible for Port In (GENS-0043)"]
}
Possible Error Codes
GENS-0006, GENS-0013, GENS-0043, GENS-0050, GENS-0051, GENS-0054, GENS-0090, GENS-0161, GENS-0170, GENS-0180, GENS-0250, GENS-0289, GENS-0374
For full error details see Error & Response Codes.
Port-Out Validation
Looking for port-out?
Port-out validation is handled via a webhook callback, not an API you call directly. When another carrier requests to port out one of your subscribers, Vela Mobile forwards the request to your application for an approve/deny decision.
See Callbacks → Port-Out Validation for full details on setting up your webhook, the JSON payloads you'll receive, and the decision codes you can return.
Common HTTP Errors (All Port Endpoints)
| HTTP Code | Meaning |
|---|---|
| 400 | Bad request / upstream carrier operation failed |
| 401 | Not authenticated (missing or invalid Bearer token) |
| 403 | Forbidden (insufficient permissions or unauthorized plan) |
| 409 | Conflict (duplicate transaction_id) |
| 422 | Validation error (invalid state code, ZIP format, MDN format) |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
Full error reference: Error & Response Codes