Skip to main content

Publish your first station

Step 4 of 4
import { GoodchargeStation } from '@goodcharge/sdk';

const station = new GoodchargeStation({ apiKey: process.env.GOODCHARGE_API_KEY! });

await station.publish({
metadata: {
gps_coordinates: { latitude: 45.764, longitude: 4.835 },
address: '1 place Bellecour',
city: 'Lyon',
postal_code: '69002',
country: 'FR',
private: { level: 'public' },
},
charging_points: [{ plug_type: 'type_2', power: 22, status: 'free' }],
pricing: { connection_fee: 0.5, price_per_kilowatt_hour: 0.35, currency: 'EUR' },
});

// When a car plugs in:
await station.updatePoints([{ position: 1, status: 'occupied' }]);

// When nothing changes, keep the station alive (goodcharge flags it after 15 minutes of silence):
const stop = station.startHeartbeat({ onError: console.error });

Calls on one GoodchargeStation are serialised: each one waits for whichever call is already in flight to settle before it starts its own first attempt, so a retried write can never land after a newer call, and a heartbeat never races an app call. You do not need to await or lock anything yourself. Call the methods in order.

What happens next​

publish returns { state }. Right after this first publish, state.dot is orange: every station of an operator with data shows orange until goodcharge approves the company, from your registration document and this first station's data. Once approved, later stations go green as soon as they are published. They are not reviewed individually.

From here, keeping occupancy fresh with updatePoints and the heartbeat is a guide of its own, and the full method-by-method reference documents publish, updatePoints, heartbeat, get, and startHeartbeat.