---
title: "Submit a port"
method: POST
path: "/lines/{e164}/port"
---

# Submit a port

`POST /lines/{e164}/port`

## Request

- Base URL: `https://osis.co/api/v1/comms`
- URL: `https://osis.co/api/v1/comms/lines/{e164}/port`
- Auth: HTTP bearer

Transfer an existing number onto a locked dedicated line. Live customer porting must be enabled, and authorized must be true. Corrected details may be resubmitted after a rejected carrier attempt has been cancelled. An active or completed transfer cannot be duplicated. Carrier credentials are encrypted and never returned. Scope: comms_lines_write. Limits: 3 a day per line and 10 a day per workspace.

## Path parameters

- `e164` string, required

## Headers

- `Idempotency-Key` string

## Request body

- StartPortRequest
  - `target_e164` string, required: The number you're bringing to Comms, in E.164 format. It replaces the locked line's number.
  - `lnp` LnpFields, required: Details from your current carrier. They must match the carrier's records exactly. You can't read them back later.
    - `account_number` string, required: Your account number with your current carrier.
    - `porting_pin` string, required: Your port-out PIN from your current carrier. If they don't use one, send 0000.
    - `account_holder_first_name` string, required
    - `account_holder_last_name` string, required
    - `address_line1` string, required
    - `address_line2` string
    - `city` string, required
    - `state` string, required
    - `zip` string, required
    - `country` string, required: Country name.
  - `authorized` true: Confirm authorization from the account holder. Required to be true for Gather customer ports.
  - `port_id` string: Recommended: current preparation ID from POST /lock or GET /port. A stale ID is rejected with 409.

## Response `201`

Port submitted

- LinePortResponse
  - `port` LinePort, required: The port's status, times, and errors. The account details you sent are never returned.
    - `id` string, required
    - `org_id` string, required
    - `locked_e164` string, required: The dedicated line locked for this port.
    - `target_e164` string, nullable: The number you're bringing to Comms. Set once you submit the port.
    - `status` 'number_locked' | 'port_submitted' | 'port_in_progress' | 'port_completed' | 'port_failed', required: Where the port is right now.
    - `error_code` string, nullable
    - `error_message` string, nullable
    - `submitted_at` string, date-time, nullable
    - `foc_at` string, date-time, nullable
    - `completed_at` string, date-time, nullable
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `400`: Something in the body is wrong
- `401`: API key is missing or wrong
- `403`: You don't have porting access yet, or your key is missing the scope
- `404`: Not found
- `409`: The conversation isn't available, or the request conflicts with an earlier one
- `429`: Too many requests. Slow down and retry.

---

[API](https://skmtc.dev/osis/apis/comms-api.md) · [All operations](https://skmtc.dev/osis/apis/comms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/osis/apis/comms-api/revisions/59a4c0ba8936?raw)
