• Register

Quickstart

Quickstart Guide — TECO CAM Developer Portal
Home Documentation Quickstart guide
Getting started

Quickstart guide

Register an application, obtain your Client ID and Client Secret, exchange them for a Bearer token, and make your first successful API call — in under 5 minutes.

🕐 5 min read 📅 Last updated May 2026
1
Register an app
2
Get Client ID & Secret
3
Get a Bearer token
4
Make your first call
5
Verify the response
ℹ️
Account required. Internal TECO users: sign in with your corporate email via the SSO button on the login page. External partners: register a free account before proceeding. API keys are tied to registered applications — you cannot make authenticated calls without one.
1
Register an application

Every API call in TECO CAM is associated with an application — a named entity that holds your OAuth credentials, subscription, and usage quota. Create one before obtaining your Client ID and Client Secret.

  • a
    Sign in to the portal and click My Account in the top navigation bar.
  • b
    Go to Applications → click New application.
  • c
    Enter a descriptive name, e.g. teco-integration-prod or my-test-app.
  • d
    Select Web APIs this application will use.
  • e
    Click Register Application. Your application is registered immediately.
💡
You can create multiple applications — one for development, one for production — each with its own API key and plan.
2
Copy your Client ID and Client Secret

TECO CAM uses OAuth 2.0 client credentials flow. After creating your application, a Client ID and Client Secret are automatically generated. You will use both to request a Bearer token in the next step.

  • a
    From My Account → Keys, go to your application name.
  • b
    From your application, Copy both the Key(ClientID) and Secret(ClientSecret).
⚠️
Keep your Client Secret secure. Store it in an environment variable or secrets manager — never hardcode it in source code or commit it to a repository.
3
Exchange credentials for a Bearer token

Use your Client ID and Client Secret to request an OAuth 2.0 Bearer token from the token endpoint. This token authenticates all subsequent API calls and expires after 600 seconds (10 minutes).

cURL
Python
JavaScript
Java
# Exchange Client ID + Secret for a Bearer token
curl -X POST https://api.teco-cam.com/oauth/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=YOUR_CLIENT_ID" \
  -d "client_secret=YOUR_CLIENT_SECRET"
import requests

TOKEN_URL     = "https://api.teco-cam.com/oauth/token"
CLIENT_ID     = "YOUR_CLIENT_ID"
CLIENT_SECRET = "YOUR_CLIENT_SECRET"

response = requests.post(TOKEN_URL, data={
    "grant_type":    "client_credentials",
    "client_id":     CLIENT_ID,
    "client_secret": CLIENT_SECRET
})

token = response.json()["access_token"]
print(token)
const response = await fetch("https://api.teco-cam.com/oauth/token", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    grant_type:    "client_credentials",
    client_id:     "YOUR_CLIENT_ID",
    client_secret: "YOUR_CLIENT_SECRET"
  })
});

const { access_token } = await response.json();
console.log(access_token);
import java.net.URI;
import java.net.http.*;
import java.net.URLEncoder;

String body = "grant_type=client_credentials"
    + "&client_id=YOUR_CLIENT_ID"
    + "&client_secret=YOUR_CLIENT_SECRET";

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.teco-cam.com/oauth/token"))
    .header("Content-Type", "application/x-www-form-urlencoded")
    .POST(HttpRequest.BodyPublishers.ofString(body))
    .build();

var res = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
println(res.body()); // {"access_token":"eyJ...", "expires_in":600}
Token response 200 OK
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type":   "Bearer",
  "expires_in":   600
}
💡
Tokens expire after 600 seconds (10 minutes). Request a new token using the same credentials before it expires. Store the token in memory — never log or persist it to disk.
4
Make your first API call

Use the Bearer token from Step 3 in the Authorization header to call the health check endpoint. This confirms your token is valid and the gateway is reachable.

cURL
Python
JavaScript
Java
# Use the access_token from Step 3
curl -X GET https://api.teco-cam.com/v3/health \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Accept: application/json"
import requests

ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"  # token from Step 3
BASE_URL     = "https://api.teco-cam.com/v3"

headers = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "Accept":        "application/json"
}

response = requests.get(f"{BASE_URL}/health", headers=headers)
print(response.status_code)   # 200
print(response.json())         # {"status": "ok", ...}
const ACCESS_TOKEN = "YOUR_ACCESS_TOKEN"; // token from Step 3
const BASE_URL     = "https://api.teco-cam.com/v3";

const response = await fetch(`${BASE_URL}/health`, {
  method:  "GET",
  headers: {
    "Authorization": `Bearer ${ACCESS_TOKEN}`,
    "Accept":        "application/json"
  }
});

const data = await response.json();
console.log(data); // { status: "ok", version: "3.2.0", ... }
import java.net.URI;
import java.net.http.*;

																							 
var request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.teco-cam.com/v3/health"))
    .header("Authorization", "Bearer YOUR_ACCESS_TOKEN")
    .header("Accept", "application/json")
    .GET().build();

var res = HttpClient.newHttpClient().send(
    request, HttpResponse.BodyHandlers.ofString());
System.out.println(res.statusCode()); // 200
System.out.println(res.body());       // {"status":"ok",...}
4
Verify the response

A successful call returns HTTP 200 with a JSON body confirming the gateway is healthy and your token is valid.

Expected response 200 OK
{
  "status":    "ok",
  "version":   "3.2.0",
  "region":    "us-east-1",
  "timestamp": "2026-05-13T10:00:00Z"
}
You are all set. A 200 OK with "status": "ok" confirms your Bearer token is active, your subscription is valid, and the gateway is reachable. You can now call any endpoint you are subscribed to using the same Authorization: Bearer header.
Error Likely cause How to fix
401 Unauthorized Bearer token missing, malformed, or expired Check the Authorization: Bearer header is present and the token has not expired. Request a new token from /oauth/token if needed
401 Invalid client Client ID or Client Secret is incorrect Confirm both values exactly match what is shown in My Account → Applications → OAuth Credentials
403 Forbidden Token valid but subscription not active or plan not assigned Go to My Account → Applications → your app → confirm a plan is active
404 Not Found Wrong base URL or endpoint path Confirm base URL and check for typos
429 Too Many Requests Free plan rate limit reached (100 calls/day, 10 req/min) Wait for the window to reset or upgrade your plan. Check Retry-After response header
Connection refused Firewall blocking outbound HTTPS to the gateway Confirm outbound access to the endpoint is allowed on your network