How to List Porting Records
Warning: Beta software This API is in beta stage and may be subject to change. Therefore, we do not recommend using this in production.
Interested in this feature? Please reach out to mobility-services-developer@cisco.com
ListPortingRecords
is a method that allows you to list porting records by using one or more of the following filters: subscriber number prefix, operator code or valid from.
This method is part of the Number Portability API and belongs to the NumberPortabilityService
.
Prerequisites
Code Dependencies
curl -sL https://github.com/working-group-two/wgtwoapis/releases/latest/download/mobility.binpb --output mobility.binpb
<dependency>
<groupId>com.wgtwo.api.v1.grpc</groupId>
<artifactId>number_portability</artifactId>
<version>1.10.1</version>
</dependency>
Code
You can test our APIs without authorization by targeting
sandbox.api.shamrock.wgtwo.com
instead ofapi.{region}.wgtwo.com
and removing any authorization from the request/code sample.
#!/usr/bin/env bash
grpcurl \
--protoset mobility.binpb \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '
{
"subscriberNumberPrefix": "+467123",
"operatorCode": "A21",
"validFrom": "2020-01-01T00:00:00Z"
}
' \
sandbox.api.shamrock.wgtwo.com:443 \
wgtwo.number_portability.v1.NumberPortabilityService/ListPortingRecords
package com.example.numberPortability
import com.google.protobuf.Timestamp
import com.wgtwo.api.v1.number_portability.NumberPortabilityServiceGrpcKt
import com.wgtwo.api.v1.number_portability.listPortingRecordsRequest
import io.grpc.ManagedChannelBuilder
import io.grpc.Status
import io.grpc.StatusException
import kotlinx.coroutines.runBlocking
import kotlin.test.assertFailsWith
private val channel = ManagedChannelBuilder.forAddress("sandbox.api.shamrock.wgtwo.com", 443).build()
private val stub = NumberPortabilityServiceGrpcKt.NumberPortabilityServiceCoroutineStub(channel)
fun main() = runBlocking {
val listPortingRecordsRequest = listPortingRecordsRequest {
subscriberNumberPrefix = "+467000"
validFrom = Timestamp.newBuilder().setSeconds(System.currentTimeMillis() / 1000).build()
}
println("listPortingRecordsRequest:
$listPortingRecordsRequest")
val listPortingRecordsResponse = stub.listPortingRecords(listPortingRecordsRequest)
println("listPortingRecordsResponse:
$listPortingRecordsResponse")
val listPortingRecordsRequestWithInvalidSubscriberNumberPrefix = listPortingRecordsRequest {
subscriberNumberPrefix = "invalid"
}
val exception = assertFailsWith<StatusException>("exception is not a StatusException") {
stub.listPortingRecords(listPortingRecordsRequestWithInvalidSubscriberNumberPrefix)
}
assert(exception.status.code == Status.INVALID_ARGUMENT.code) {
"status code is not INVALID_ARGUMENT: ${exception.status.code}"
}
}
Example Results Success
{
"records": [
{
"subscriberNumber": "+46712345678",
"operatorCode": "A21",
"validFrom": "2024-04-01T00:00:00Z",
"metadata": {
"test_key": "test_value"
}
}
]
}
records {
subscriber_number {
e164: "+46714991322"
}
operator_code: "A24"
routing_code: "039"
valid_from {
seconds: 1712570280
nanos: 209405000
}
metadata {
key: "test_key"
value: "test_val_2096299844"
}
}
records {
subscriber_number {
e164: "+46703322254"
}
operator_code: "C45"
routing_code: "021"
valid_from {
seconds: 1712566680
nanos: 218947000
}
metadata {
key: "test_key1"
value: "test_value"
}
metadata {
key: "test_key2"
value: "test_value2"
}
}
Example Results Error
ERROR:
Code: InvalidArgument
Message: Invalid subscriber number prefix
Status code: INVALID_ARGUMENT
Status description: Invalid subscriber number