KeepMyNumber
Home Sign in

Porting endpoint reference

Every endpoint you need to port a number, in the order you will use them. Nothing else — account, API-key and admin management are covered by the Authentication guide, and each section below links to the guide with full request/response examples.

All endpoints take Authorization: Bearer pk_live_YOUR_KEY. Interactive schemas for every endpoint live in the API reference.

Before ordering

Method & path Purpose
POST /v2/portability_checks Can these numbers port? Country, number type, current carrier, provider
GET /v2/porting/requirements?phone_number= (or ?country_code=&number_type=) What porting that number needs — no order created; incl. the localized LOA text to show the signer

The order

Method & path Purpose
POST /v2/porting_orders Open draft order(s) with requirements attached — phone numbers are all it takes. JSON body; supports Idempotency-Key
GET /v2/porting_orders List your orders — filter by status, batch_id, customer_reference
GET /v2/porting_orders/{id} One order: status, numbers, requirements (incl. per-field status + exception_reason)
PATCH /v2/porting_orders/{id} Edit a draft/rejection order's settings: FOC date, reference, routing, webhook override
DELETE /v2/porting_orders/{id} Delete a never-submitted draft; frees its numbers for a new order

Requirements on the order

Method & path Purpose
GET /v2/porting_orders/{id}/requirements The order's requirements and their fulfillment status
PATCH /v2/porting_orders/{id}/requirements/{slug} Fulfill one, by slug (e.g. auth_person_name, location, recent_invoice, loa): field_value (text, address object, or document id), signature (base64 PNG for the LOA), or — document requirements only — the file itself as multipart/form-data (uploads + attaches in one call)

The array covers everything, end-user data included: auth_person_name, entity_name, billing_phone_number and location (an address object) are ordinary requirements on every order — there is no separate end-user object to manage. How each field_type is fulfilled — with examples — is in Port-in orders → Requirements.

Documents

Method & path Purpose
POST /v2/documents Upload a file (PDF/PNG/JPEG/TIFF, ≤ 20 MB) without attaching it — useful when one file serves several orders; attach the returned id to a requirement. Direct-uploaded files (multipart PATCH on a requirement) land here too
GET /v2/documents List your documents
GET /v2/documents/{id} Metadata for one document
GET /v2/documents/{id}/download The file itself — incl. platform-generated signed LOA PDFs

Submit and track

Method & path Purpose
GET /v2/porting_orders/{id}/readiness Dry run of the submit validation: ready flag + what is still missing
POST /v2/porting_orders/{id}/submit Submit for review (validated first; parks in in_review — our desk verifies every field, then forwards it to the losing carrier)
POST /v2/porting_orders/{id}/cancel Request cancellation — instant while still in_review; cancel_pending until the carrier confirms once forwarded
GET /v2/porting/loa/signatures/{document_id} Audit record of a signed LOA (signer, timestamp, IP, locale, SHA-256)

Progress and results

Method & path Purpose
POST /v2/webhook_endpoints Register a URL for signed event pushes (porting_order.status_changed, loa.signed, number.activated, …)
GET /v2/porting/events?porting_order_id= Append-only event history — the polling fallback for missed webhooks
GET /v2/numbers Your registry: ported numbers, lifecycle status, routing config

Webhook signature verification, retries and the delivery audit log: Webhooks. Numbers lifecycle and routing: Numbers registry. When another carrier asks to take a number away: Port-outs.