Upload a porting document
Upload ONE porting document and get back its documentId. For the
signed LOA / carrier invoice the id goes to loaDocumentId /
invoiceDocumentId; for a country-specific document requirement
(international ports) it becomes that requirement's fieldValue.
Requirement documents are normalized to PDF automatically (regulators
reject raw images). PDF, JPEG, or PNG, 10MB max. Uploads must be
attached to an order within 30 minutes or the carrier deletes them.
API key authentication - use your Zernio API key as a Bearer token
In: header
The document (PDF/JPEG/PNG, 10MB max).
binary'loa', 'invoice', or any short slug for requirement documents. Informational; used for the stored filename.
Response Body
application/json
application/json
import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.phonenumbers.uploadPhoneNumberPortInDocument();console.log(data);{
"documentId": "string"
}{
"error": "Unauthorized"
}Upload a KYC document POST
Upload ONE document and get back its provider document id, to reference from POST /v1/phone-numbers/kyc via `documents[].documentId`. Send the RAW file bytes as the request body (not base64); put the filename in the `X-Filename` header. Uploading documents one-per-request keeps each request under the ~4.5MB body limit. The document streams straight to the number provider and is not stored by Zernio.
Pre-validate KYC address POST
Optional early check for the address step of a Tier 4 (end-user identity) registration: validates a postal address for deliverability BEFORE the full KYC submit, so it can be corrected before any documents are uploaded. The full submit (POST /v1/phone-numbers/kyc) re-validates the address, so this call is purely a fast feedback path and skipping it is safe. Only the postal address is sent (no documents, no gov-ID fields). A region (`administrative_area`) is required by the validator; when it is omitted the pre-check is skipped and `{ ok: true, skipped: true }` is returned (the final submit still validates).