Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions assets/icons/brand-linkedin.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion config/_default/menu.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,12 @@
identifier = "github"
name = "GitHub"
url = "https://github.com/naturalfunction"

[social.params]
icon = "brand-github"

[[social]]
identifier = "linkedin"
name = "LinkedIn"
url = "https://www.linkedin.com/in/vitorribeiro1"
[social.params]
icon = "brand-linkedin"
4 changes: 2 additions & 2 deletions config/_default/params.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ since = 2025
customText = ""

[dateFormat]
published = "Nov 03, 2025"
lastUpdated = "Nov 03, 2025 00:00 MST"
published = "Jan 02, 2006"
lastUpdated = "Jan 02, 2006 15:04 MST"

[sidebar]
emoji = "🧮"
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
247 changes: 247 additions & 0 deletions content/post/getting-started-with-KORE-connectivity-api/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,247 @@
---
title: "Getting started with KORE ConnectivityPRO™ API"
date: 2025-11-05
description: "This article covers the basics to start using the Kore Wireless ConnectivityPRO™ API, I hope this guide helps you onboard the API faster!"
categories: ["KORE", "ConnectivityPRO™", "API"]
tags: ["KORE", "ConnectivityPRO™", "API", "Connectivity", "How to", "Getting Started"]
image: "KORE-LOGO-CONNECTIVITYPRO.jpeg"
---

![](KORE-LOGO-CONNECTIVITYPRO.png)

## Introduction

Hi there, my name is **Vitor Ribeiro**, and I am a **Solutions Architect** at [**Kore Wireless**](http://korewireless.com).
Part of my job includes onboarding customers on our [**Developer Portal**](http://developer-app.korewireless.com) for our [**Connectivity API**](https://developer-app.korewireless.com/api?product=Connectivity).

This article covers some of the frequently asked questions related to our Connectivity API and how to get started.


---

## Prerequisites

You can view the [**Developer Portal API documentation**](http://developer-app.korewireless.com), but to view and manage your API keys, you must be contracted for **Kore Wireless ConnectivityPro™**.
Otherwise, you won’t be able to see the **Authentication endpoint** described below.

If you are **not** a Kore Wireless customer and are interested in our services, [contact us here](https://www.korewireless.com/contact-us/).

You don’t need to be a software developer but should be familiar with what a **REST API** is.
AWS has [this article](https://aws.amazon.com/what-is/restful-api/) on REST APIs that can help.

For API calls, this article uses **Postman**.
You can watch their [101 videos](https://www.youtube.com/watch?v=hISzpFJ5fPs) or view their [**webinar**](https://www.postman.com/events/intergalactic/) for a quick start.

---

## Overview

The [**Developer Portal**](http://developer-app.korewireless.com) is a public web page for customers, partners, and builders to integrate and leverage **Kore Wireless Services** through APIs.

It enables Kore Wireless to manage all APIs from a single point — referred to as **KORE One™**.

### Available APIs

| API | Description |
|------|-------------|
| **Connectivity** | For ConnectivityPro™; manage SIM subscriptions. |
| **Streaming** | For ConnectivityPro™; manage SIM subscriptions. |

This article focuses on the [**Connectivity API**](https://developer-app.korewireless.com/api?product=Connectivity), which allows you to manage SIM subscriptions via API.

---

## Why Use Kore’s API?

If you are using carriers like [**Verizon**](https://thingspace.verizon.com/documentation/apis/connectivity-management/api-reference.html) or [**AT&T**](https://developer.cisco.com/docs/control-center/cisco-iot-control-center-overview/), your team would need to integrate multiple APIs — each with its own endpoints and structures.

![](mnos-apis.png)

With **Kore Wireless**, you write code against **one unified API endpoint**.
From that point forward, all service types available under your contract become accessible.

![](kore-one-api.png)

---
## Introduction

### Creating a Client

Once you have access to the Developer Portal:

1. Follow the [**Getting Started**](https://developer.korewireless.com/getting-started?id=2.1.1.5) guide to create your first client.
2. Selecting the client will let you view your **Production** keys.

![](devportal-api-client.png)

---
### Getting an Authentication Token

Source: [Developer Portal – Getting Started](https://developer.korewireless.com/getting-started?id=2.1.1.3)

KORE uses the **OAuth 2.0 Client Credentials Workflow**.

When you create a client, you receive:

- **Client ID** – Unique identifier of your application
- **Client Secret** – Used for secure API calls
- **API Key** – Allows KORE to identify client access

See below for a high-level overview.

![](KORE-OAuth-Diagram.png)

Using Postman, set up a POST request to https://api.korewireless.com/Api/api/token for Production.

The body of your request must include:

- The key **“grant_type”** key with a value of “client_credentials”.
- The key **“client_id”** key with a value from the Developer Portal.
- The key **“client_secret”** key with a value from the Developer Portal.

![](postman-get-token.jpg)

You can also use **cURL** to get an authentication token, use the example below to perform a request.

<pre style="background:#1e1e1e;color:#dcdcdc;padding:1em;border-radius:8px;">
<code>
curl -L -X POST "https://api.korewireless.com/Api/api/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=[REPLACE_WITH_YOUR_INFO]" \
-d "client_secret=[REPLACE_WITH_YOUR_INFO]"
</code>
</pre>

Here’s what the **cURL** returns:

![](curl-response.jpg)

The authentication Token is valid for 10 hours, after 10 hours, you will need to call the authentication endpoint again for a new token.

---

### Getting the account-id

Most endpoints from the Connectivity API will require the **“account-id”** as part of the required fields; obtaining your **“account-id”** is essential to interface with Kore’s Connectivity API.

Using Postman, setup a GET request to https://api.korewireless.com/connectivity/v1/accounts?email=<YOUR_EMAIL>

Your GET request must include:

- The key **“email”** with a value from the Developer Portal.
- A valid Authentication token
- **x-api-key** as part of your headers

![](postman-get-accountid.jpg)

---

### Getting the activation-profile-id

Using Postman, setup a GET request to https://api.korewireless.com/connectivity/v1/accounts/{account-id}/activation-profiles

Your GET request must include:

- The key **“account-id”** with a value from your previous call
- A valid Authentication token
- **x-api-key** as part of your headers

![](postman-get-profileid.png)

---

## Managing your SIM subscriptions

### Requesting details about a subscription

Using Postman, setup a GET request to https://api.korewireless.com/connectivity/v1/accounts/{account-id}/subscriptions

Your GET request must include:

- The key **“account-id”** with a value from your previous call
- A valid Authentication token
- **x-api-key** as part of your headers
- A query-string parameter, in my example, I will use the **EID** found on my SIM.

![](postman-get-subscription-details.png)

---
### Activation

Using Postman, setup a POST request to https://api.korewireless.com/connectivity/v1/accounts/{account-id}/provisioning-requests/activate

Your POST request must include:

- The key **“account-id”** with a value from your previous call
- A valid Authentication token
- **x-api-key** as part of your headers
- A body containing the **Activate** schema

In this example, my subscription state is set to **STOCK**, which is the default state once you place an order and sims are available on your account.

I want to set my state as **test state**, this state allows a customer to perform a device/sim validation test while in the production line without turning the subscription into a billable item.

<pre style="background:#1e1e1e;color:#dcdcdc;padding:1em;border-radius:8px;">
<code>
{
"activate": {
"activation-profile-id": "<YOUR_ACTIVATION_PROFILE>",
"activation-state": "test",
"subscriptions": [
{
"subscription-id": "<YOUR_SUBSCRIPTION_ID>"
}
]
}
}
</code>
</pre>

You will be given 3 thresholds for a subscription, a data usage threshold, an SMS usage threshold, and a time threshold. Whichever it is triggered first, set the state to Active - billable. These terms are defined in your contract, you can discuss this with your Account Rep.

For more information on States, read this [article.](https://korewireless.service-now.com/kb_view.do?sys_kb_id=659a58e397eae110d038301e6253af63)

Response Sample:

<pre style="background:#1e1e1e;color:#dcdcdc;padding:1em;border-radius:8px;">
<code>
{
"status": "success",
"data": {
"provisioning-request-id": "cmp-cpro-request-9591174",
"message": "Your request has been acknowledged"
}
}
</code>
</pre>

---

## Considerations

This article covered how to get an **Authentication Token**, how to obtain the **account-id**, how to get the **activation-profile-id**, how to get **subscription-id**, and how to **activate** a SIM.

As shown, it is important that your headers include your **x-api-key**, a valid **auth token**, and an **account-id**.

For activation, you must have your **subscription-id** first and your **activation-profile-id**.

If you have any questions, don’t hesitate to reach out to me [here](mailto:vribeiro@korewireless.com).

---
## Available Resources

### Postman Collection

Kore offers a Postman collection that enables you to validate the APIs without writing any code, alternatively, the Developer Portal documentation also includes the ability to call the endpoints, you must be logged into the Developer Portal to view this [Auth Section](https://developer-app.korewireless.com/api?product=Connectivity#auth).

![](devportal-postman.png)

---
### Github

Kore Wireless has a [GitHub repository](https://github.com/korewireless) containing code samples. You can view code samples related to the Connectivity API [here](https://github.com/korewireless/Developer-API).

![](kore-github.png)

You can also read this article on Substack [here](https://vitorr.substack.com/p/getting-started-with-kore-wireless)
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
13 changes: 6 additions & 7 deletions content/post/welcome-to-vitor-ribeiro-blog/index.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
---
title: "Welcome to Vitor Ribeiro's Blog"
date: 2025-11-03T21:45:00-06:00
description: "Welcome to my new Hugo blog powered by the Stack theme"
date: 2025-11-04
description: ""
categories: ["Welcome"]
tags: ["welcome"]
image: "VR-background.png" # Add your featured image filename here
---

# Welcome to Vitor Ribeiro's blog!

This is my new blog built with Hugo and the Stack theme, automatically deployed to GitHub Pages.
Welcome to my new [Hugo](https://gohugo.io/) blog powered by the [Stack](https://stack.jimmycai.com/) theme.

## What's Next?

I can now:
- Write posts in Markdown
- Push to GitHub for automatic deployment
- Write posts in [Markdown](https://www.markdownguide.org/)
- Push to [GitHub](https://github.com/) for automatic deployment
- Customize the theme as needed
- Add new content easily

Expand Down
23 changes: 23 additions & 0 deletions layouts/partials/article/time.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{{- $dateFormat := site.Params.dateFormat.published | default "Jan 02, 2006" -}}
{{- $publishDate := .PublishDate.Format $dateFormat -}}

<div class="article-time">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-clock" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z"/>
<circle cx="12" cy="12" r="9" />
<polyline points="12,7 12,12 15,15" />
</svg>

{{- if ne .Date .PublishDate }}
<time class="article-time--published">
{{- T "article.publishedAt" | default "Published at" -}}: {{ $publishDate }}
</time>
<time class="article-time--modified">
{{- T "article.lastUpdatedOn" | default "Updated on" -}}: {{ .Date.Format $dateFormat }}
</time>
{{- else }}
<time class="article-time--published">
{{ $publishDate }}
</time>
{{- end }}
</div>
11 changes: 11 additions & 0 deletions layouts/partials/head/custom.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<!-- Custom CSS -->
{{ $customCSS := resources.Get "scss/custom.scss" | css.Sass | resources.Minify }}
<link rel="stylesheet" href="{{ $customCSS.RelPermalink }}">

<!-- Meta tags for better SEO -->
<meta name="theme-color" content="#2d3748">
<meta name="msapplication-TileColor" content="#2d3748">

<!-- Performance optimizations -->
<link rel="dns-prefetch" href="//fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
Loading