{"id":27193401,"url":"https://github.com/amattu2/golo365-wrapper","last_synced_at":"2025-07-26T18:04:27.816Z","repository":{"id":57702925,"uuid":"458839744","full_name":"amattu2/golo365-Wrapper","owner":"amattu2","description":"A dependency-free API wrapper for golo365.com vehicle data service endpoints. Opens up access to OBD-ii diagnostic scan histories, plateToVin, VinToPlate, \u0026 more.","archived":false,"fork":false,"pushed_at":"2023-03-09T13:41:03.000Z","size":227,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-10-12T05:28:31.038Z","etag":null,"topics":["golo365","obd2","php","wrapper"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amattu2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-02-13T14:53:50.000Z","updated_at":"2024-09-29T13:42:08.000Z","dependencies_parsed_at":"2022-09-26T16:40:22.599Z","dependency_job_id":null,"html_url":"https://github.com/amattu2/golo365-Wrapper","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":"amattu2/project-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amattu2%2Fgolo365-Wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amattu2%2Fgolo365-Wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amattu2%2Fgolo365-Wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amattu2%2Fgolo365-Wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amattu2","download_url":"https://codeload.github.com/amattu2/golo365-Wrapper/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248094053,"owners_count":21046762,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["golo365","obd2","php","wrapper"],"created_at":"2025-04-09T18:55:49.119Z","updated_at":"2025-04-09T18:55:49.684Z","avatar_url":"https://github.com/amattu2.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Introduction\n\n## What is Golo365?\n\nGolo365 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.\n\n## How can I use this wrapper?\n\nThe 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:\n\n- Fetch Diagnostic Scan History reports by License Plate or VIN numbers\n- Perform a VIN-to-License plate decode\n- Perform a License-to-VIN decode\n- ... More integrations coming soon\n\n## Need More?\n\nI'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.\n\n## Contributions\n\nMany ~~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.\n\n## Postman / Thunder Client\n\nThis 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.\n\n___\n\n# Usage\n\nThe function documentation is below. Alternatively, see the `example.php` file included with the repository for hands-on demonstrations of various functionality.\n\n## Install\n\n```bash\ncomposer require amattu2/golo365-wrapper\n```\n\n## __construct\n\nThe class constructor accepts only optional arguments.\n\n```PHP\n/**\n * Class Constructor\n *\n * @param  ?string $serial_no reporting device serial number\n * @param  ?string $service Golo365 service ait|aitus\n * @author Alec M.\n * @since  1.0.0\n */\npublic function __construct(string $serial_no = \"\", string $service = \"aitus\")\n```\n\nIf 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.\n\nThe `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.\n\n## setSerialNo\n\nThis function returns the class instance, which enables function call chaining.\n\n```PHP\n/**\n * Set or Remove the Device Serial Number\n *\n * @param  ?string $serial_no\n * @return self\n * @since  1.0.0\n */\npublic function setSerialNo(string $serial_no = \"\") : self\n```\n\nAn empty or invalid `serial_no` argument will result in the `serial_no` being returned to the default.\n\n## setListSize\n\nFor the API endpoints that support pagination, this specifies the number of results per page. This function supports chaining.\n\n```PHP\n/**\n * Set or Remove the Report Listing Size Limit\n *\n * @param  ?integer $size\n * @return self\n * @since  1.0.0\n */\npublic function setListSize(int $size = 0) : self\n```\n\nA `size` of 0 or below results in the removal of a size pagination limitation.\n\n## reportListByVIN\n\nThis function fetches all reported diagnostic events for the provided VIN.\n\n```PHP\n/**\n * Fetch Diagnostic Scan History by VIN\n *\n * Note:\n * (1) If the serial_no variable is not empty,\n *     it will be used to limit results to that\n *     specific device\n *\n * @param  string $vin VIN to search\n * @param  mixed $page page number to fetch\n * @return Array of diagnostic scan history\n * @throws \\TypeError\n * @throws \\InvalidArgumentException\n * @since  1.0.0\n */\npublic function reportListByVIN(string $VIN, $page = \"\") : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [0] =\u003e Array\n  (\n    [record_id] =\u003e int\n    [serial_no] =\u003e int\n    [date] =\u003e Y-m-d H:i:s\n    [VIN] =\u003e string\n    [plate_number] =\u003e string\n    [url] =\u003e string\n    [type] =\u003e string\n    [_raw] =\u003e Closure\n    [_reportDetail] =\u003e Closure\n  )\n\n  // ... repeating\n\n)\n```\n\n### Notes\n\n1. To access the raw API data (messy), you can use the closure function available via the `_raw` index.\n2. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.\n\n## reportListByPlateNumber\n\n```PHP\n/**\n * Fetch Diagnostic Scan History by License Plate Number\n *\n * Note:\n * (1) If the serial_no variable is not empty,\n *     it will be used to limit results to that\n *     specific device\n *\n * @param  string $plate_number License Plate # to search\n * @param  mixed $page page number to fetch\n * @return Array of diagnostic scan history\n * @throws \\TypeError\n * @throws \\InvalidArgumentException\n * @since  1.0.0\n */\npublic function reportListByPlateNumber(string $plate_number, $page = \"\") : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [0] =\u003e Array\n  (\n    [record_id] =\u003e int\n    [serial_no] =\u003e int\n    [date] =\u003e Y-m-d H:i:s\n    [VIN] =\u003e string\n    [plate_number] =\u003e string\n    [url] =\u003e string\n    [type] =\u003e string\n    [_raw] =\u003e Closure\n    [_reportDetail] =\u003e Closure\n  )\n\n  // ... repeating\n\n)\n```\n\n### Notes\n\n1. 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**.\n2. To access the raw API data (messy), you can use the closure function available via the `_raw` index.\n3. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.\n\n## reportList\n\nThis 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.\n\n```PHP\n/**\n * Fetch Diagnostic Scan History by Serial Number\n *\n * @param mixed $page page number to fetch\n */\npublic function reportList($page = \"\") : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [0] =\u003e Array\n  (\n    [record_id] =\u003e int\n    [serial_no] =\u003e int\n    [date] =\u003e Y-m-d H:i:s\n    [VIN] =\u003e string\n    [plate_number] =\u003e string\n    [url] =\u003e string\n    [type] =\u003e string\n    [_raw] =\u003e Closure\n    [_reportDetail] =\u003e Closure\n  )\n\n  // ... repeating\n\n)\n```\n\n### Notes\n\n1. To access the raw API data (messy), you can use the closure function available via the `_raw` index.\n2. You may call the `reportDetail` function via the `_reportDetail` index; it takes no arguments as they are derived from the current element.\n\n## reportDetail\n\nThis endpoint provides additional details about a diagnostic event record; such as which systems were scanned, which software was used, etc.\n\n```PHP\n/**\n * Fetch additional details about a diagnostic scan\n *\n * @param  int $record_id\n * @param  string $type\n * @return array\n * @throws \\TypeError\n * @throws \\InvalidArgumentException\n * @since  1.0.0\n */\npublic function reportDetail(int $record_id, string $type) : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [software_version] =\u003e string\n  [software_package] =\u003e string\n  [system_list] =\u003e Array\n  (\n    [0] =\u003e Array\n    (\n        [system_uid] =\u003e padded int\n        [system] =\u003e string\n        [name_id] =\u003e int\n        [is_new_sys] =\u003e int\n    )\n  )\n  [_raw] =\u003e Closure Object\n)\n```\n\n### Notes\n\n1. To access the raw data from this array, call the anonymous function (closure) `_raw`\n\n## getPlateByVIN\n\nThis function will return a license plate number associated with a VIN number. **Important** see the notes about this endpoint below.\n\n```PHP\n/**\n * Fetch a License Plate by the VIN Number\n *\n * @param  string $VIN the vehicle VIN number to search a plate for\n * @return array\n * @throws \\InvalidArgumentException\n * @since  1.0.0\n */\npublic function getPlateByVIN(string $VIN) : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [VIN] =\u003e string\n  [plate_number] =\u003e string\n  [_raw] =\u003e Closure Object\n)\n```\n\n### Notes\n\n1. 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.\n2. To access raw API data, simply call the `_raw` closure object\n\n## getVINByPlateNumber\n\nThis 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.\n\n```PHP\n/**\n * Fetch the VIN by License Plate\n *\n * @param  string $plate_number License Plate # to search\n * @return array\n * @throws TypeError\n * @throws InvalidArgumentException\n * @since  1.0.0\n */\npublic function getVINByPlateNumber(string $plate_number) : array\n```\n\n### Output\n\n```PHP\nArray\n(\n  [VIN] =\u003e string\n  [plate_number] =\u003e string\n  [_raw] =\u003e Closure Object\n)\n```\n\n### Notes\n\n1. 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.\n2. 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.\n\n___\n\n# To-Do\n\n- upload_report_data\n- upload_accessory_info\n- mergeMultiReport\n\n___\n\n# Requirements \u0026 Dependencies\n\n- PHP7+\n- cURL Extension\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famattu2%2Fgolo365-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famattu2%2Fgolo365-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famattu2%2Fgolo365-wrapper/lists"}