Parking & Charging

About

On this page we are outlining how you, as a Parking Operator, can integrate with Monta via our Partner API to enable your users to park & charge on your premises.

Using Monta as your Charge Point Management System (CPMS) and integrating via Partner API will open up a ton of potential:

  • By utilizing the API you can provide your users with a seamless experience:
    • Charge Point & Parking Spot availability in one place
    • You control charging from your system - not forcing the user to switch to another app
    • You are able to invoice your users once by combining your parking fees with the charge transaction costs you receive via our APIs
    • No disruption of the user journey - since they stay in your app, you are in charge of the journey and your branding
  • You have all the benefits, flexibility and control of the Monta CPMS solution. Focus on your core business - we will cover for best-in-class charging experience and quality.

Pre-requisites

During Development

During Development you will need an operator account at Monta with access to Partner API. Your contact at Monta will help you setting it up.

While we have an OCPP Emulator to emulate charge points it is strongly recommended to connect your own, physical charge point, to Monta for testing your integration and develop against the Partner API.

Required Scopes

Depending on the level of integration you are going to need access to these scopes:

ScopeDescriptionRequired
charge-points:readGives you read-access to all charge points within your operator. You can use this to query for charge points or sites and their states.
charge-transactions:readThis gives you access to read charge transaction within your operator. Charge transactions are created whenever a charge was started. Once the state changed to completed they are immutable.
control-charging:writeThis gives you access to manage charges within Monta. You need this to start/stop charges once your customers have successfully paid.

💡

Read more about Scopes here: Scopes

Example: Display Charge Points and Availability

You can utilize the GET /charge-points or GET /sites APIs to retrieve your charge points. This is recommended when you start your API integration.

We strongly suggest to utilize our webhooks system to retrieve any updates to your charge points, ie. you would get notified by us when a charge point changed from busy to available state.

💡

Read more about Webhooks here: Webhooks

Example: Charge Flow

Starting a Charge

Given you have:

  • Access to the charge point,
  • Permissions to manage charges,
  • Reserved payment (optionally, how you implement this is up to you)

you can initiate a charge using the POST /charges API. Here we expect the following parameters:

  • chargePointId: identifies the Charge Point where a charge should be started [mandatory]
  • payingTeamId: identifies the team that is paying for a charge. Technically we do not collect payments (other than maybe transaction fees) here, but you might still want to link these charges to a specific team. [mandatory]
  • partnerExternalId: an external id that you can use to identify this charge session. Managed by you - we never change or use this field. We recommend setting this on every charge; this allows you to find and identify a started charge even when the start charge call timed out or your service weren't able to capture the charge id or similar. [optional]

💡

If you know the price model of the charge point you can also limit the charge max kWhs by setting a value for kwhLimit. You can also set a priceLimit when initiating a charge.

Monitoring a Charge

To monitor a charge we strongly recommend making use of our webhooks system. Otherwise you will end up making too many requests and run into rate-limits. You can find more details here:

As a fallback you can use the Rest API to retrieve information about a charge. If you know the charge.id, make use of GET /charges/{chargeId}, if you weren't able to capture it but you set a partnerExternalId when starting a charge, make use of GET /charges?partnerExternalId={yourPartnerExternalId}.

Since all API consumers are rate-limited, we strongly suggest making use of webhooks though!

Either way, via webhooks or Rest API, you will receive the up-to-date charge object (also known as charge transaction) which provides you with helpful information to manage everything on your end. Most important fields to monitor consumption and state are:

  • consumedKwh: Consumed kWh during this charge session
  • state: Indicates the state of the charge session, ie. starting, charging, stopped, released, completed, ...

Stopping a Charge

A charge can be stopped for various reasons:

  • A user might stop it via the vehicle (by unplugging the cable)
  • A user might stop it via the Charge Point
  • A user might stop it via an App, RFID card or other connected solutions
  • You might stop it via API once the reserved amount (payment) would be exceeded by charging more

To monitor stopped charges not initiated by you, follow the state field on a charge object. If it changed to completed you can use the information on the charge transaction to bill the user.

If you want to stop a charge yourself, make use of the GET /charges/{chargeId}/stop API.

💡

Use the data from the Charge transaction and your own parking transaction to create a single, unified invoice or receipt for your users.