Skip to main content

pajgps-api

A Python library for communicating with the PAJ GPS API.

Installation

pip install pajgps-api

Usage

All API methods are async and must be awaited. Use asyncio.run() or an existing event loop.

import asyncio
from pajgps_api import PajGpsApi

async def main():
    # Initialize the API (can also be used as an async context manager)
    async with PajGpsApi(email="your_email@example.com", password="your_password") as api:
        # Log in
        try:
            await api.login()
            print(f"Logged in successfully! User ID: {api.user_id}")
        except Exception as e:
            print(f"Login failed: {e}")

        # Subsequent requests will automatically use the token and refresh it if needed.

        # Reading Devices
        devices = await api.get_devices()
        for device in devices:
            print(f"ID: {device.id}, Name: {device.name}, IMEI: {device.imei}")

        # Current Positions for all devices
        device_ids = [device.id for device in devices]
        if device_ids:
            last_positions = await api.get_all_last_positions(device_ids)
            for pos in last_positions:
                print(f"Device {pos.iddevice}: Lat {pos.lat}, Lng {pos.lng}, Speed {pos.speed}")

        # Voltage Sensor (for the first device)
        if devices:
            sensor_data = await api.get_last_sensor_data(devices[0].id)
            if hasattr(sensor_data, "volt"):
                print(f"Voltage: {sensor_data.volt} mV")

asyncio.run(main())

API Endpoint Coverage

✅ Supported

Category Method Endpoint Library method
Login POST /api/v1/login login()
Login POST /api/v1/updatetoken update_token()
Device GET /api/v1/device get_devices()
Device GET /api/v1/device/{DeviceID} get_device()
Device PUT /api/v1/device/{DeviceID} update_device()
Tracking Data GET /api/v1/trackerdata/{DeviceID}/last_minutes get_tracking_data_last_minutes()
Tracking Data GET /api/v1/trackerdata/{DeviceID}/last_points get_tracking_data_last_points()
Tracking Data GET /api/v1/trackerdata/{DeviceID}/date_range get_tracking_data_date_range()
Tracking Data POST /api/v1/trackerdata/getalllastpositions get_all_last_positions()
Tracking Data GET /api/v1/sensordata/last/{DeviceID} get_last_sensor_data()
Notifications GET /api/v1/notifications get_notifications()
Notifications GET /api/v1/notifications/{deviceID} get_device_notifications()
Notifications GET /api/v1/customnotifications/{deviceID} get_custom_notifications()
Notifications PUT /api/v1/notifications/markReadByDevice/{deviceID} mark_notifications_read_by_device()
Notifications PUT /api/v1/notifications/markReadByCustomer mark_notifications_read_by_customer()

❌ Not Yet Supported

Category Method Endpoint Description
Customer GET /api/v1/customer Get customer data
Customer GET /api/v1/customer/{CustomerID} Get customer data by ID
Customer PUT /api/v1/customer/{CustomerID} Update customer by ID
Dashboard POST /api/v1/customer/dashboard/dataDistance Data and distance calculation
Dashboard POST /api/v1/customer/dashboard/downloadpdf Trip and rest PDF download
Dashboard POST /api/v1/customer/dashboard/triprest_data Trip and rest data
Geofence POST /api/v1/geofences Get all geofences for given devices
Geofence POST /api/v1/geofence/{DeviceID} Create geofence for a device
Geofence PUT /api/v1/geofence/{DeviceID}/{GeofenceID} Update a geofence
Geofence DELETE /api/v1/geofence/{DeviceID}/{GeofenceID} Delete a geofence
Car Manufacturer GET /api/v1/cars Get all car manufacturers
Car Manufacturer POST /api/v1/addcar Add car manufacturer
Car Manufacturer PUT /api/v1/cars/{carManufacturerID} Update car manufacturer
Car Manufacturer DELETE /api/v1/cars/{carManufacturerID} Delete car manufacturer
Car Model GET /api/v1/carmodels/{Make_ID} Get car models of a manufacturer
Car Model POST /api/v1/addcarmodel Add car model
Car Model PUT /api/v1/carmodels/{carModelID} Update car model
Car Model DELETE /api/v1/carmodels/{carModelID} Delete car model
Car Device Data GET /api/v1/sdevice/car Get car-device linked data
Car Device Data POST /api/v1/sdevice/car Link car to device
Car Device Data GET /api/v1/sdevice/car/{CarDevice_id} Get single car-device link
Car Device Data PUT /api/v1/sdevice/car/{CarDevice_id} Update car-device link
Car Device Data DELETE /api/v1/sdevice/car/{CarDevice_id} Delete car-device link
Logbook Routes GET /api/v1/logbook/getAllRoutes/{DeviceID} Get all routes of a device
Logbook Routes GET /api/v1/logbook/getAllRoutes/{DeviceID}/{CarDevice_id} Get routes with linked car
Logbook Routes GET /api/v1/logbook/generateSingleDeviceRoutes/{DeviceID} Generate logbook routes
Logbook Routes GET /api/v1/logbook/generateSingleDeviceAddress/{DeviceID} Generate route addresses
Logbook Driver GET /api/v1/logbook/driver Get drivers
Logbook Driver POST /api/v1/logbook/driver Create driver
Logbook Driver PUT /api/v1/logbook/driver/{DriverID} Update driver
Logbook Driver DELETE /api/v1/logbook/driver/{DriverID} Delete driver
Logbook Reason GET /api/v1/logbook/reason Get reasons
Logbook Reason POST /api/v1/logbook/reason Create reason
Logbook Reason PUT /api/v1/logbook/reason/{ReasonID} Update reason
Logbook Reason DELETE /api/v1/logbook/reason/{ReasonID} Delete reason
Logbook Contact GET /api/v1/logbook/contact Get contacts
Logbook Contact POST /api/logbook/contact Create contact
Logbook Contact PUT /api/v1/logbook/contact/{ContactID} Update contact
Logbook Contact DELETE /api/v1/logbook/contact/{ContactID} Delete contact

Timeouts and Retries

By default, every HTTP request made by PajGpsApi uses incremental timeouts and automatic retries:

  • Attempts: 3
  • Timeouts per attempt: 5s, 10s, 15s (each attempt adds the base timeout)
  • Retries on: network timeouts/connection errors and HTTP status codes 500, 502, 503, 504, 429
  • Not retried: 4xx client errors like 404
  • 401 handling: for authenticated endpoints, a token refresh is attempted once automatically, then the request is retried within the same attempt.

You can configure these via the constructor:

from pajgps_api import PajGpsApi

api = PajGpsApi(
    email="your_email@example.com",
    password="your_password",
    timeout=5,       # base timeout (seconds) for the first attempt
    max_retries=3,   # total number of attempts
    base_url="https://connect.paj-gps.de/",  # optional, override if the API URL changes
)

Metadata

Release files for pajgps-api 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pajgps-api 0.4.1
File Size Uploaded Provenance Actions
pajgps_api-0.4.1.tar.gz 59.0 kB Without provenance Details for pajgps_api-0.4.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for pajgps-api 0.4.1
File Interpreter ABI Platform Actions
pajgps_api-0.4.1-py3-none-any.whl Python 3 none any Details for pajgps_api-0.4.1-py3-none-any.whl

Total release size: 74.5 kB

Release files / pajgps_api-0.4.1.tar.gz

Download URL pajgps_api-0.4.1.tar.gz
Size 59.0 kB
Tags Source
SHA-256 checksum
How to use checksums
12dacc143c156be0498cd18b3e379bc7fe658d09d4839dafcf11e4136d4703fe
BLAKE2b-256 checksum
How to use checksums
bb9e6e1b57d6e6c6da43c4238f23b6d3cf9a546d7769f21c63279f1d410ab906
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / pajgps_api-0.4.1-py3-none-any.whl

Download URL pajgps_api-0.4.1-py3-none-any.whl
Size 15.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
03665f13223a36298421d6ffb0da7b2c4d50fce516b687b500452cf9c047b860
BLAKE2b-256 checksum
How to use checksums
4a75ed1e8cf4135a04d4a97888fb263c6ae5c0862b841ac8be93748f8cb6eb5f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Security for pajgps-api 0.4.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page