{
    "openapi": "3.0.3",
    "info": {
        "title": "ChargeLK charging station API",
        "version": "1.0.0",
        "description": "Real-time availability, location, facilities and prices of ChargeLK EV chargers in Sri Lanka, for navigation and fleet software. Read only. No customer data. ChargeLK is operated by CMS Techno Solutions."
    },
    "servers": [
        {
            "url": "https://chargelk.com/api/v1"
        }
    ],
    "security": [
        {
            "ApiKey": []
        }
    ],
    "tags": [
        {
            "name": "Stations",
            "description": "A site with one or more chargers."
        },
        {
            "name": "Chargers",
            "description": "One charger on its own."
        }
    ],
    "paths": {
        "/stations": {
            "get": {
                "summary": "List stations with their chargers",
                "description": "A station is a site with one or more chargers. Give \"near\" to get the closest first, each with distance_km.",
                "parameters": [
                    {
                        "name": "near",
                        "in": "query",
                        "description": "A point as \"lat,lng\", for example 6.9271,79.8612. Returns stations within radius_km, nearest first.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "radius_km",
                        "in": "query",
                        "description": "Used with near. Default 25.",
                        "schema": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 500
                        }
                    },
                    {
                        "name": "city",
                        "in": "query",
                        "description": "Only stations in this city, spelled as in the data.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "status",
                        "in": "query",
                        "description": "Only chargers with this status. Stations with no matching charger are left out.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "available",
                                "occupied",
                                "offline",
                                "faulted",
                                "maintenance"
                            ]
                        }
                    },
                    {
                        "name": "connector",
                        "in": "query",
                        "description": "Only chargers with this connector.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "CCS2",
                                "CHAdeMO",
                                "GBT",
                                "Type2"
                            ]
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Which page of results. 1 is the first.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "How many stations on a page, up to 200.",
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 200,
                            "default": 100
                        }
                    }
                ],
                "tags": [
                    "Stations"
                ],
                "responses": {
                    "200": {
                        "description": "Stations and their chargers.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StationList"
                                },
                                "example": {
                                    "data": [
                                        {
                                            "id": 12,
                                            "name": "Galle Face Car Park",
                                            "address": "1 Galle Road, Colombo 3",
                                            "city": "Colombo",
                                            "location": {
                                                "lat": 6.9271,
                                                "lng": 79.8438
                                            },
                                            "opening_hours": "Daily 06:00 to 22:00",
                                            "amenities": [
                                                "seating",
                                                "washrooms",
                                                "wifi"
                                            ],
                                            "distance_km": 1.4,
                                            "chargers": [
                                                {
                                                    "id": "CP-001",
                                                    "status": "available",
                                                    "status_checked_at": "2026-11-02T09:14:52+00:00",
                                                    "connector": {
                                                        "type": "CCS2",
                                                        "current": "DC",
                                                        "count": 1
                                                    },
                                                    "power_kw": 30,
                                                    "price": {
                                                        "currency": "LKR",
                                                        "per_kwh": {
                                                            "lkr": 100,
                                                            "cents": 10000
                                                        },
                                                        "idle_fee_per_minute": {
                                                            "lkr": 0,
                                                            "cents": 0
                                                        },
                                                        "tax_included": true
                                                    },
                                                    "planned_outage": null
                                                }
                                            ]
                                        }
                                    ],
                                    "meta": {
                                        "total": 1,
                                        "page": 1,
                                        "per_page": 100,
                                        "generated_at": "2026-11-02T09:15:01+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "A parameter is not valid."
                    },
                    "401": {
                        "description": "The API key is missing, wrong, expired or revoked.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "This key has used up its requests for the minute.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/stations/{id}": {
            "get": {
                "summary": "One station",
                "tags": [
                    "Stations"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "example": 12,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The station and its chargers.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StationOne"
                                },
                                "example": {
                                    "data": {
                                        "id": 12,
                                        "name": "Galle Face Car Park",
                                        "address": "1 Galle Road, Colombo 3",
                                        "city": "Colombo",
                                        "location": {
                                            "lat": 6.9271,
                                            "lng": 79.8438
                                        },
                                        "opening_hours": "Daily 06:00 to 22:00",
                                        "amenities": [
                                            "seating",
                                            "washrooms",
                                            "wifi"
                                        ],
                                        "chargers": [
                                            {
                                                "id": "CP-001",
                                                "status": "available",
                                                "status_checked_at": "2026-11-02T09:14:52+00:00",
                                                "connector": {
                                                    "type": "CCS2",
                                                    "current": "DC",
                                                    "count": 1
                                                },
                                                "power_kw": 30,
                                                "price": {
                                                    "currency": "LKR",
                                                    "per_kwh": {
                                                        "lkr": 100,
                                                        "cents": 10000
                                                    },
                                                    "idle_fee_per_minute": {
                                                        "lkr": 0,
                                                        "cents": 0
                                                    },
                                                    "tax_included": true
                                                },
                                                "planned_outage": null
                                            }
                                        ]
                                    },
                                    "meta": {
                                        "generated_at": "2026-11-02T09:15:01+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "No such station."
                    },
                    "401": {
                        "description": "The API key is missing, wrong, expired or revoked.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "This key has used up its requests for the minute.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/chargers/{id}": {
            "get": {
                "summary": "One charger by its id",
                "tags": [
                    "Chargers"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "description": "The charger id, for example CP-001.",
                        "example": "CP-001",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The charger, with station_id.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ChargerOne"
                                },
                                "example": {
                                    "data": {
                                        "id": "CP-001",
                                        "status": "available",
                                        "status_checked_at": "2026-11-02T09:14:52+00:00",
                                        "connector": {
                                            "type": "CCS2",
                                            "current": "DC",
                                            "count": 1
                                        },
                                        "power_kw": 30,
                                        "price": {
                                            "currency": "LKR",
                                            "per_kwh": {
                                                "lkr": 100,
                                                "cents": 10000
                                            },
                                            "idle_fee_per_minute": {
                                                "lkr": 0,
                                                "cents": 0
                                            },
                                            "tax_included": true
                                        },
                                        "planned_outage": null,
                                        "station_id": 12
                                    },
                                    "meta": {
                                        "generated_at": "2026-11-02T09:15:01+00:00"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "No such charger."
                    },
                    "401": {
                        "description": "The API key is missing, wrong, expired or revoked.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    },
                    "429": {
                        "description": "This key has used up its requests for the minute.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "securitySchemes": {
            "ApiKey": {
                "type": "http",
                "scheme": "bearer",
                "description": "Your key, as \"Authorization: Bearer clk_...\". \"X-Api-Key: clk_...\" works too."
            }
        },
        "schemas": {
            "Money": {
                "type": "object",
                "properties": {
                    "lkr": {
                        "type": "number",
                        "example": 100,
                        "description": "Rupees, with decimals."
                    },
                    "cents": {
                        "type": "integer",
                        "example": 10000,
                        "description": "Whole cents, for exact arithmetic."
                    }
                }
            },
            "Charger": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "CP-001"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "available",
                            "occupied",
                            "offline",
                            "faulted",
                            "maintenance"
                        ],
                        "description": "A live reading, not a forecast."
                    },
                    "status_checked_at": {
                        "type": "string",
                        "format": "date-time",
                        "nullable": true,
                        "description": "When the charger last spoke to ChargeLK."
                    },
                    "connector": {
                        "type": "object",
                        "properties": {
                            "type": {
                                "type": "string",
                                "enum": [
                                    "CCS2",
                                    "CHAdeMO",
                                    "GBT",
                                    "Type2"
                                ]
                            },
                            "current": {
                                "type": "string",
                                "enum": [
                                    "AC",
                                    "DC"
                                ]
                            },
                            "count": {
                                "type": "integer"
                            }
                        }
                    },
                    "power_kw": {
                        "type": "integer",
                        "description": "The most the charger can deliver."
                    },
                    "price": {
                        "type": "object",
                        "properties": {
                            "currency": {
                                "type": "string",
                                "example": "LKR"
                            },
                            "per_kwh": {
                                "$ref": "#/components/schemas/Money"
                            },
                            "idle_fee_per_minute": {
                                "$ref": "#/components/schemas/Money"
                            },
                            "tax_included": {
                                "type": "boolean"
                            }
                        }
                    },
                    "planned_outage": {
                        "type": "object",
                        "nullable": true,
                        "properties": {
                            "starts_at": {
                                "type": "string",
                                "format": "date-time"
                            },
                            "ends_at": {
                                "type": "string",
                                "format": "date-time"
                            },
                            "active": {
                                "type": "boolean"
                            }
                        }
                    }
                }
            },
            "Station": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer",
                        "example": 12
                    },
                    "name": {
                        "type": "string"
                    },
                    "address": {
                        "type": "string",
                        "nullable": true
                    },
                    "city": {
                        "type": "string",
                        "nullable": true
                    },
                    "location": {
                        "type": "object",
                        "properties": {
                            "lat": {
                                "type": "number"
                            },
                            "lng": {
                                "type": "number"
                            }
                        }
                    },
                    "opening_hours": {
                        "type": "string",
                        "nullable": true
                    },
                    "amenities": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "enum": [
                                "seating",
                                "washrooms",
                                "food",
                                "wifi",
                                "shelter",
                                "security",
                                "accessible"
                            ]
                        }
                    },
                    "distance_km": {
                        "type": "number",
                        "description": "Only when \"near\" was given."
                    },
                    "chargers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Charger"
                        }
                    }
                }
            },
            "StationList": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Station"
                        }
                    },
                    "meta": {
                        "type": "object",
                        "properties": {
                            "total": {
                                "type": "integer"
                            },
                            "page": {
                                "type": "integer"
                            },
                            "per_page": {
                                "type": "integer"
                            },
                            "generated_at": {
                                "type": "string",
                                "format": "date-time"
                            }
                        }
                    }
                }
            },
            "StationOne": {
                "type": "object",
                "properties": {
                    "data": {
                        "$ref": "#/components/schemas/Station"
                    },
                    "meta": {
                        "type": "object",
                        "properties": {
                            "generated_at": {
                                "type": "string",
                                "format": "date-time"
                            }
                        }
                    }
                }
            },
            "ChargerOne": {
                "type": "object",
                "properties": {
                    "data": {
                        "allOf": [
                            {
                                "$ref": "#/components/schemas/Charger"
                            },
                            {
                                "type": "object",
                                "properties": {
                                    "station_id": {
                                        "type": "integer"
                                    }
                                }
                            }
                        ]
                    },
                    "meta": {
                        "type": "object",
                        "properties": {
                            "generated_at": {
                                "type": "string",
                                "format": "date-time"
                            }
                        }
                    }
                }
            },
            "Error": {
                "type": "object",
                "properties": {
                    "message": {
                        "type": "string"
                    },
                    "code": {
                        "type": "string",
                        "example": "invalid_api_key"
                    }
                }
            }
        }
    }
}