> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://catena.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://catena.ferndocs.com/_mcp/server.

# Get TSP

GET https://api.catenatelematics.com/v2/orgs/tsps/{tsp_id}

Get detailed information about a specific TSP.

Reference: https://catena.ferndocs.com/api-reference/orgs/tsps/get-tsp

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `tsp_id` (string, required)

## Response

### 200

Successful Response

- `name` (string, required)
- `source_name` (enum, required) — TSP enum identifier for API references
  - Allowed values: `ada`, `ai_eld`, `air_eld`, `alfa_eld`, `alpha_eld`, `als`, `anytrek_pro`, `anytrek_classic`, `apex_eld`, `apollo`, `apollocloud`, `ascend`, `att`, `autogri_eld`, `awaregps`, `azuga`, `bigroad`, `bluehorse_eld`, `blueinktech`, `bouncie`, `budgetgps`, `catena_simulator`, `captain_eld`, `carrier_lynx`, `chronos`, `club_eld`, `cogo_eld`, `counting_trucks_eld`, `cyntrx`, `dfl_eld`, `digital_eld`, `dragon_eld`, `dreyev`, `drive_hos`, `drive_hos_v2`, `driver_tech`, `dsg_elogs`, `dynamic_eld`, `eighteighteight_eld`, `eld_88`, `eld_books`, `eld_mandate`, `eld_mandate_prime`, `eroad`, `eva_eld`, `evo_eld`, `expressway_eld`, `extreme_eld`, `ezlogz`, `ez_lynk`, `factor_eld`, `firstgate`, `fleetcomplete`, `fleetcompletehub`, `fleethunt`, `fleetpulse`, `fleetsharp`, `fleetup`, `fm`, `fordpro`, `forwardthinking`, `forza_eld`, `geotab`, `gpsinsight`, `gpstab`, `gpstrackit`, `grand_eld`, `greenlight`, `groundhog`, `hcss`, `hos247`, `hutch`, `intellishift`, `ilog_eld`, `ironman_eld`, `isaac`, `jjkeller`, `kinexaiot`, `knight_eld`, `konexial`, `lioneight`, `linxup`, `loop_eld`, `lucid_eld`, `luna_eld`, `lytx`, `lytxv3`, `mapon`, `matrack`, `maven`, `mdm_eld`, `michelin_connected_fleet`, `mobilefleet`, `moonlight_eld`, `motion_eld`, `motive`, `monster_eld`, `my_drivebook`, `my_logs_eld`, `nero`, `netradyne`, `new_eld_world`, `nextgen_eld`, `nextraq`, `nexus_eld`, `omnitracs`, `1sew_eld`, `onestep`, `ontime_eld`, `optima`, `optimus_tracker`, `orbcomm`, `orient_eld`, `ozod_eld`, `panda_eld`, `patriot_eld`, `payd`, `peak_eld`, `pedigree`, `peoplenet`, `phillips_connect`, `phoenix`, `pop_eld`, `prestige_eld`, `prologs`, `proride_eld`, `qualitylogs_eld`, `randmcnally`, `rastrac`, `raven`, `redfox`, `regulog_eld`, `ridehub`, `rigbot`, `roadeazy`, `roadready`, `rock_eld`, `rollingtrans`, `routemate`, `route_one_eld`, `royal_eld`, `safelane`, `samsara`, `selectivedrive`, `simba_eld`, `skybitz`, `smart_elds`, `sparkle_eld`, `spireon`, `sts_eld`, `sun_eld`, `sunriser_eld`, `surfsight`, `swift`, `switchboard`, `synergy_eld`, `teletracnavman`, `teletracnavman_director`, `telogis`, `tenna`, `teslemetry`, `thermo_king`, `think`, `tive`, `topcompliance_eld`, `traccar`, `trackease_eld`, `trackpro`, `traclog`, `transflo`, `trimac`, `trimble`, `truckford`, `truckspy`, `truckx`, `trucking_office`, `trueroad_eld`, `tt`, `txt_eld`, `us_fast_eld`, `verizon_connect`, `vista_eld`, `vistracks`, `vlog_eld`, `vulcansols_eld`, `wialon`, `webfleet`, `wizefleet_eld`, `xplore_eld`, `youlog_eld`, `zigzag_eld`, `zms_eld`, `zonar`, `zubie`, `daily_eld`, `simple_way_eld`, `zaphira_eld`, `eld_rider`, `top_eld`, `hive_eld`, `clutch_eld`, `core_eld`
- `conn_type` (enum, required) — The type of connection usedt to authenticate with the TSP
  - Allowed values: `access_token`, `api_auth`, `api_basic`, `api_key`, `azuga_slc`, `bouncie`, `client_id_secret`, `company_access`, `company_id`, `database`, `driver_tech`, `ez_lynk`, `ez_lynk_access`, `ezlogz`, `factor_eld`, `fleetup`, `fleetup_slc`, `geotab`, `isaac`, `motive`, `oauth1`, `oauth2`, `oauth2_initiate`, `oauth2_private_key`, `ontime`, `optimus_tracker`, `private_key`, `route_one_eld`, `s3`, `samsara`, `switchboard`, `spireon_slc`, `sftp`, `token`, `tt_creds`, `truckx_creds`, `truckx_slc`, `txt_eld_slc`, `verizon_connect`, `verizon_connect_slc`
- `id` (string, required) — Unique Catena TSP identifier
- `slug` (string, required) — URL-friendly TSP identifier
- `created_at` (datetime, required) — When the TSP was added to Catena
- `updated_at` (datetime, required) — Last modification timestamp
- `description` (string, optional, nullable) — A description of the TSP
- `websites` (list of string, optional, nullable) — List of websites associated with the TSP. The website is used to map users to an organization based on their email domain and to authenticate them accordingly in the scope of the organization.
- `status` (enum, optional) — The status of the TSP
  - Allowed values: `active`, `inactive`, `deleted`, `integrated`, `in_progress`, `pending`
- `is_sandbox` (boolean, optional, default: false) — Indicates whether the TSP is a sandbox integrations for testing purposes.
- `logo_url` (string, optional, nullable) — URL to the TSP's logo image, used for display purposes in the UI
- `logo_dark_url` (string, optional, nullable) — URL to the TSP's logo image optimized for dark mode, used for display purposes in the UI
- `ext_tsp_id` (string, optional, nullable) — Linked external TSP ID from regulatory registry
- `registry` (string, optional, nullable) — The regulatory body that certified this provider (e.g. 'fmcsa'). None if not linked to any registry.
- `compliance_status` (enum, optional) — ELD compliance status. 'compliant' means at least one device is registered. 'non_compliant' means ALL devices have been revoked. 'unknown' means the TSP is not linked to a regulatory registry or has no registered devices.
  - Allowed values: `compliant`, `non_compliant`, `unknown`

## Errors

### 400 Bad Request Error

Bad Request

- `code` (integer, optional, default: 400)
- `message` (string, optional, default: Bad Request)
- `detail` (string, optional, nullable)

### 401 Unauthorized Error

Unauthorized

- `code` (integer, optional, default: 401)
- `message` (string, optional, default: Unauthorized)
- `detail` (string, optional, nullable)

### 403 Forbidden Error

Forbidden

- `code` (integer, optional, default: 403)
- `message` (string, optional, default: Forbidden)
- `detail` (string, optional, nullable)

### 404 Not Found Error

Not Found

- `code` (integer, optional, default: 404)
- `message` (string, optional, default: Not Found)
- `detail` (string, optional, nullable)

### 405 Method Not Allowed Error

Method Not Allowed

- `code` (integer, optional, default: 405)
- `message` (string, optional, default: Method Not Allowed)
- `detail` (string, optional, nullable)

### 409 Conflict Error

Conflict

- `code` (integer, optional, default: 409)
- `message` (string, optional, default: Conflict)
- `detail` (string, optional, nullable)

### 422 Unprocessable Entity Error

Unprocessable Entity

- `code` (integer, optional, default: 422)
- `message` (string, optional, default: Invalid Request Body)
- `detail` (list of ValidationErrorDetail, optional, nullable)

### 429 Too Many Requests Error

Too Many Requests

- `code` (integer, optional, default: 429)
- `message` (string, optional, default: Too Many Requests)
- `detail` (RetryAfterDetail, optional, nullable)

### 500 Internal Server Error

Internal Server Error

- `message` (string, optional, default: Internal Server Error)

## Types

### ValidationErrorDetail

- `path` (string, required)
- `input` (string, required)
- `message` (string, required)
- `error_type` (string, required)

### RetryAfterDetail

- `retry_after_seconds` (integer, required)
- `message` (string, required)

## Examples

**Response**

```json
{
  "name": "Samsara",
  "source_name": "samsara",
  "conn_type": "oauth2",
  "id": "11223344-5566-7788-99aa-bbccddeeff00",
  "slug": "samsara",
  "created_at": "2024-01-15T09:00:00Z",
  "updated_at": "2025-11-20T16:45:00Z",
  "description": "Connected operations platform for fleet management and industrial operations",
  "websites": [
    "https://www.samsara.com"
  ],
  "status": "active",
  "is_sandbox": false,
  "logo_url": "https://cdn.sanity.io/images/abc123/samsara-logo.png",
  "logo_dark_url": "https://cdn.sanity.io/images/abc123/samsara-logo-dark.png",
  "registry": "fmcsa",
  "compliance_status": "compliant"
}
```

**SDK Code**

```python
import requests

url = "https://api.catenatelematics.com/v2/orgs/tsps/tsp_id"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.catenatelematics.com/v2/orgs/tsps/tsp_id';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.catenatelematics.com/v2/orgs/tsps/tsp_id"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.catenatelematics.com/v2/orgs/tsps/tsp_id")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.catenatelematics.com/v2/orgs/tsps/tsp_id")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.catenatelematics.com/v2/orgs/tsps/tsp_id', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.catenatelematics.com/v2/orgs/tsps/tsp_id");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.catenatelematics.com/v2/orgs/tsps/tsp_id")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```