PHPackages                             amattu2/golo365-wrapper - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. amattu2/golo365-wrapper

ActiveLibrary[API Development](/categories/api)

amattu2/golo365-wrapper
=======================

A Golo365.com and X431.com API wrapper class for interacting with their hidden diagnostic APIs.

v1.0.1b(3y ago)29[2 issues](https://github.com/amattu2/golo365-Wrapper/issues)AGPL-3.0-or-laterPHP

Since Jun 5Pushed 3y ago1 watchersCompare

[ Source](https://github.com/amattu2/golo365-Wrapper)[ Packagist](https://packagist.org/packages/amattu2/golo365-wrapper)[ RSS](/packages/amattu2-golo365-wrapper/feed)WikiDiscussions master Synced 4w ago

READMEChangelog (3)DependenciesVersions (2)Used By (0)

Introduction
============

[](#introduction)

What is Golo365?
----------------

[](#what-is-golo365)

Golo365 is the underlying data connection service behind many automotive diagnostic computers and equipment. Device manufacturers, such as Launch Tech LTD and Matco Tools rely on them for various services. The goal of this API wrapper is to simplify access to Golo365's *extremely undocumented* API endpoints, and to allow for independent individuals or companies to integrate critical data connections between Golo365 and their own proprietary services.

How can I use this wrapper?
---------------------------

[](#how-can-i-use-this-wrapper)

The end goal of the wrapper is to remove the concept of relying the handheld diagnostic computer, as well as the physical connection to the vehicle, in order to retrieve diagnostic history for a vehicle. This is possible because Golo365 (i.e. AIT / DBSCAR / X431) stores the scan history in the cloud. Here are some ways you can use this API wrapper to facilitate a connection between your service (e.g. a Shop Management System) and Golo365:

- Fetch Diagnostic Scan History reports by License Plate or VIN numbers
- Perform a VIN-to-License plate decode
- Perform a License-to-VIN decode
- ... More integrations coming soon

Need More?
----------

[](#need-more)

I've put an extensive amount of Golo365 research into the [DOCUMENTATION.md](./DOCUMENTATION.md) file. If you want to create your own wrapper, without reverse engineering this one, rely on information from that file. The [DOCUMENTATION.md](./DOCUMENTATION.md) file also details endpoints discovered but not implemented yet.

Contributions
-------------

[](#contributions)

Many hours days of research and development went into discovering these entirely undocumented API endpoints. If you have an unlisted Golo365 endpoint, or know something that isn't listed in this repository, please reach out via a GitHub Issue or Pull Request.

Postman / Thunder Client
------------------------

[](#postman--thunder-client)

This repository comes with a Thunder Client collection for the Golo365 API. To use it, visit [.vscode/thunder-client](./.vscode/thunder-client) and import the json into your VS Code Thunder Client extension.

---

Usage
=====

[](#usage)

The function documentation is below. Alternatively, see the `example.php` file included with the repository for hands-on demonstrations of various functionality.

Install
-------

[](#install)

```
composer require amattu2/golo365-wrapper
```

\_\_construct
-------------

[](#__construct)

The class constructor accepts only optional arguments.

```
/**
 * Class Constructor
 *
 * @param  ?string $serial_no reporting device serial number
 * @param  ?string $service Golo365 service ait|aitus
 * @author Alec M.
 * @since  1.0.0
 */
public function __construct(string $serial_no = "", string $service = "aitus")
```

If a reporting device `serial_no` is provided, any search/reporting queries that use the optional `serial_no` argument will be provided with this serial number. See the variable documentation in the class for notes on what this argument is.

The `service` argument defines which Golo365 service to report/receive data from. If your diagnostic tablet is built for the U.S., it's likely that all of your device-generated reports will reside within the AITUS service.

setSerialNo
-----------

[](#setserialno)

This function returns the class instance, which enables function call chaining.

```
/**
 * Set or Remove the Device Serial Number
 *
 * @param  ?string $serial_no
 * @return self
 * @since  1.0.0
 */
public function setSerialNo(string $serial_no = "") : self
```

An empty or invalid `serial_no` argument will result in the `serial_no` being returned to the default.

setListSize
-----------

[](#setlistsize)

For the API endpoints that support pagination, this specifies the number of results per page. This function supports chaining.

```
/**
 * Set or Remove the Report Listing Size Limit
 *
 * @param  ?integer $size
 * @return self
 * @since  1.0.0
 */
public function setListSize(int $size = 0) : self
```

A `size` of 0 or below results in the removal of a size pagination limitation.

reportListByVIN
---------------

[](#reportlistbyvin)

This function fetches all reported diagnostic events for the provided VIN.

```
/**
 * Fetch Diagnostic Scan History by VIN
 *
 * Note:
 * (1) If the serial_no variable is not empty,
 *     it will be used to limit results to that
 *     specific device
 *
 * @param  string $vin VIN to search
 * @param  mixed $page page number to fetch
 * @return Array of diagnostic scan history
 * @throws \TypeError
 * @throws \InvalidArgumentException
 * @since  1.0.0
 */
public function reportListByVIN(string $VIN, $page = "") : array
```

### Output

[](#output)

```
Array
(
  [0] => Array
  (
    [record_id] => int
    [serial_no] => int
    [date] => Y-m-d H:i:s
    [VIN] => string
    [plate_number] => string
    [url] => string
    [type] => string
    [_raw] => Closure
    [_reportDetail] => Closure
  )

  // ... repeating

)
```

### Notes

[](#notes)

1. To access the raw API data (messy), you can use the closure function available via the `_raw` index.
2. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.

reportListByPlateNumber
-----------------------

[](#reportlistbyplatenumber)

```
/**
 * Fetch Diagnostic Scan History by License Plate Number
 *
 * Note:
 * (1) If the serial_no variable is not empty,
 *     it will be used to limit results to that
 *     specific device
 *
 * @param  string $plate_number License Plate # to search
 * @param  mixed $page page number to fetch
 * @return Array of diagnostic scan history
 * @throws \TypeError
 * @throws \InvalidArgumentException
 * @since  1.0.0
 */
public function reportListByPlateNumber(string $plate_number, $page = "") : array
```

### Output

[](#output-1)

```
Array
(
  [0] => Array
  (
    [record_id] => int
    [serial_no] => int
    [date] => Y-m-d H:i:s
    [VIN] => string
    [plate_number] => string
    [url] => string
    [type] => string
    [_raw] => Closure
    [_reportDetail] => Closure
  )

  // ... repeating

)
```

### Notes

[](#notes-1)

1. The reliability of this function is dependent on end-users reporting the License Plate Number during the diagnostic session. If this was not done, those results will not be included in the return value. **If possible, use `reportListByVIN` instead**.
2. To access the raw API data (messy), you can use the closure function available via the `_raw` index.
3. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.

reportList
----------

[](#reportlist)

This function fetches all reports produced by a device serial number. It accepts one optional argument. The serial number provided during class instantiation (or via `setSerialNo`) is used.

```
/**
 * Fetch Diagnostic Scan History by Serial Number
 *
 * @param mixed $page page number to fetch
 */
public function reportList($page = "") : array
```

### Output

[](#output-2)

```
Array
(
  [0] => Array
  (
    [record_id] => int
    [serial_no] => int
    [date] => Y-m-d H:i:s
    [VIN] => string
    [plate_number] => string
    [url] => string
    [type] => string
    [_raw] => Closure
    [_reportDetail] => Closure
  )

  // ... repeating

)
```

### Notes

[](#notes-2)

1. To access the raw API data (messy), you can use the closure function available via the `_raw` index.
2. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.

reportDetail
------------

[](#reportdetail)

This endpoint provides additional details about a diagnostic event record; such as which systems were scanned, which software was used, etc.

```
/**
 * Fetch additional details about a diagnostic scan
 *
 * @param  int $record_id
 * @param  string $type
 * @return array
 * @throws \TypeError
 * @throws \InvalidArgumentException
 * @since  1.0.0
 */
public function reportDetail(int $record_id, string $type) : array
```

### Output

[](#output-3)

```
Array
(
  [software_version] => string
  [software_package] => string
  [system_list] => Array
  (
    [0] => Array
    (
        [system_uid] => padded int
        [system] => string
        [name_id] => int
        [is_new_sys] => int
    )
  )
  [_raw] => Closure Object
)
```

### Notes

[](#notes-3)

1. To access the raw data from this array, call the anonymous function (closure) `_raw`

getPlateByVIN
-------------

[](#getplatebyvin)

This function will return a license plate number associated with a VIN number. **Important** see the notes about this endpoint below.

```
/**
 * Fetch a License Plate by the VIN Number
 *
 * @param  string $VIN the vehicle VIN number to search a plate for
 * @return array
 * @throws \InvalidArgumentException
 * @since  1.0.0
 */
public function getPlateByVIN(string $VIN) : array
```

### Output

[](#output-4)

```
Array
(
  [VIN] => string
  [plate_number] => string
  [_raw] => Closure Object
)
```

### Notes

[](#notes-4)

1. This endpoint relies on user-inputted data to return a matching plate number. This endpoint does not rely on a government data source, and could easily provide incorrect information.
2. To access raw API data, simply call the `_raw` closure object

getVINByPlateNumber
-------------------

[](#getvinbyplatenumber)

This function is the inverse of `getPlateByVIN`, and returns a VIN number when provided a license plate number. **Important** see the notes about this endpoint below.

```
/**
 * Fetch the VIN by License Plate
 *
 * @param  string $plate_number License Plate # to search
 * @return array
 * @throws TypeError
 * @throws InvalidArgumentException
 * @since  1.0.0
 */
public function getVINByPlateNumber(string $plate_number) : array
```

### Output

[](#output-5)

```
Array
(
  [VIN] => string
  [plate_number] => string
  [_raw] => Closure Object
)
```

### Notes

[](#notes-5)

1. This endpoint **does not rely on a government data source**. It relies on the data passed when a diagnostic device is submitting a diagnostic event. Unless the plate number was reported during this diagnostic event, no results will be returned.
2. The only raw data returned is `vin` and `plate_number`; but for consistency sake, the `_raw` closure object is still available for accessing the raw API data.

---

To-Do
=====

[](#to-do)

- upload\_report\_data
- upload\_accessory\_info
- mergeMultiReport

---

Requirements &amp; Dependencies
===============================

[](#requirements--dependencies)

- PHP7+
- cURL Extension

###  Health Score

17

—

LowBetter than 6% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

1433d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/45d27ac587ba85712309c969ca2e277df1044c60ce9f2f8a5ca69118211e30d6?d=identicon)[amattu2](/maintainers/amattu2)

---

Top Contributors

[![amattu2](https://avatars.githubusercontent.com/u/38357871?v=4)](https://github.com/amattu2 "amattu2 (34 commits)")

---

Tags

golo365obd2phpwrapper

### Embed Badge

![Health badge](/badges/amattu2-golo365-wrapper/health.svg)

```
[![Health](https://phpackages.com/badges/amattu2-golo365-wrapper/health.svg)](https://phpackages.com/packages/amattu2-golo365-wrapper)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M475](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M270](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M186](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M33](/packages/facebook-php-business-sdk)[microsoft/microsoft-graph

The Microsoft Graph SDK for PHP

65723.5M95](/packages/microsoft-microsoft-graph)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
