Most of SimItNow points one way: a simulated station dials out to your CSMS. The hosted CSMS reverses that. Your station firmware, a test rig or a real charger dials in to a CSMS that SimItNow runs for you, so you can test the station side before a backend exists. It speaks OCPP 1.6, 2.0.1 and 2.1 on the same address.
This suits firmware developers, integrators bringing up a new charger model, and QA teams that want a counterpart that accepts everything and tells them exactly what it received.
Get your address
One call provisions your instance. It is safe to repeat and always returns the same csmsId:
curl -X PUT https://api.simitnow.com/v2/csms -H "SIMITNOW-API-KEY: $API_KEY"
{"csmsId": "AbCdEf0123456789", "wsHost": "csms.simitnow.com", "public": true, "connectionLimit": 20}
The same address appears in the "Your CSMS" card on the dashboard, with a copy button. Add the charge point id to the end and give that URL to the charger:
wss://csms.simitnow.com/ocpp/AbCdEf0123456789/CP-001
The station offers ocpp1.6, ocpp2.0.1 or ocpp2.1 in the Sec-WebSocket-Protocol header. The CSMS picks the first version in the station's list that it supports. If none match, it completes the upgrade and then closes the socket with code 1002.
No hardware yet? A simulated station can connect too. Create it with wss://csms.simitnow.com/ocpp/AbCdEf0123456789 as csmsUrl and its own id. SimItNow appends the id, as it does for any CSMS.
Public and private mode
A new instance is public. Any charge point that has the address can connect with no registration and no password, which is OCPP Security Profile 0. The number of simultaneous connections is capped by your plan's chargepoint allowance (connectionLimit in the response above, with activeConnections on GET /v2/csms). A connection over the cap gets HTTP 429 during the handshake.
Public means public. Anyone who knows or guesses the csmsId can connect under any charge point id. Use it for short, disposable tests.
For anything longer, switch to private mode:
curl -X PUT https://api.simitnow.com/v2/csms -H "SIMITNOW-API-KEY: $API_KEY" -H "Content-Type: application/json" -d '{"public":false}'
Now every charge point must be registered first. The response contains a password that is shown once, and the full connection URL:
curl -X PUT https://api.simitnow.com/v2/csms/cp/CP-001 -H "SIMITNOW-API-KEY: $API_KEY" -H "Content-Type: application/json" -d '{"displayName":"Test rig 1"}'
The charger sends that password as HTTP Basic Auth in the upgrade request (Security Profile 1). The CSMS checks the password, not the username. An unregistered id gets 404 and a wrong password gets 401. Registering while the instance is public returns 409, since there is no allow-list to add to. Registrations are kept while you are in public mode and apply again when you switch back.
What the CSMS answers
It is a permissive reference backend. BootNotification is accepted, Heartbeat gets the current time, every Authorize token is accepted, and on OCPP 1.6 each StartTransaction gets a transaction id. On 2.0.1 and 2.1 every TransactionEvent is answered. Every other message a station can send also gets a valid reply, usually an empty result for notifications. Where a reply could promise something, it says it does not: DataTransfer answers UnknownVendorId, and a SignCertificate request is rejected.
It never delays or faults anything on purpose, so it is a clean baseline. Where a feature needs state it does not keep, the reply declines instead of promising. On 2.0.1 and 2.1 that includes Get15118EVCertificate and GetCertificateStatus (Failed) and the EV charging needs and schedule notifications (Rejected). On 2.1 a few replies are a bare Accepted with nothing behind them, for example OpenPeriodicEventStream and VatNumberValidation.
It never sends commands on its own. RemoteStart, Reset and similar requests come from a CSMS to the station. In private mode the dashboard lists each registered chargepoint that is connected with Remote Start and Remote Stop buttons, and that is the only control you get.
Watch the traffic
The Activity Log on your dashboard shows every OCPP frame the hosted CSMS receives and sends, tagged [ocpp], with the action, the message id and the payload. Lifecycle lines tagged [lifecycle] record when a charge point connected, disconnected, or was replaced by a newer connection with the same id. A station that offers no supported subprotocol leaves a line such as refused: no supported OCPP subprotocol offered with what it offered and what the CSMS supports. That is the only place to read why the station saw a 1002 close. You can filter by time, from the last hour to everything, and download the log. It is kept for one week.
Things to know
- A second connection with the same charge point id replaces the first one, provided the connection cap leaves room for it. At the cap, the new connection gets 429 until the old socket is gone, which can take under a minute when the old peer vanished without closing.
displayNameis required when you register. The password is shown once and cannot be read back, so after losing it, delete the registration and register the charge point again.- On the Free plan, with one chargepoint, only one connection fits.
DELETE /v2/csms/cp/{id}removes a registration but does not drop a live session. The session ends the next time that charger reconnects.DELETE /v2/csmsremoves every registered charge point and leaves your address and mode unchanged.- If the address leaks, switch to private mode. The address does not change.
For the opposite direction, where SimItNow plays the charger against your own backend, start with What is a CSMS?. Create a free account to get your address.