Introduction

Welcome to the API documentation.

Authentication

To authenticate with the API, you must provide your VanMoof credentials to obtain an access token. All Bearer Tokens use JWT (JSON Web Token)

Headers

Most API requests require the following header:

  • Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819

This is "api_key": 3

Only the new *.vanmoof.cloud Endpoints do not require it.

1. Obtain Initial Token

First, retrieve an initial authentication token using your email and password.

Response

The response will include a token and a refresh_token.

2. Obtain Application Token (JWT)

Exchange the initial token for an Application Token (JWT), which is required for most other endpoints.

Response

The response will include a token.

3. Authenticating Requests

For all subsequent requests (e.g., getting bike data), include the Application Token in the Authorization header:

Authorization: Bearer <application_token>

Authentication

Endpoints for user authentication

1. Obtain Initial Token

POST
https://api.vanmoof-api.com
/v8/authenticate

Authenticate with email and password to get an initial token. This token is then exchanged for an Application JWT which expires within two hours. This token however is valid for one year to continusly optain new Application JWTs without re-authenticating.

JWT Payload:

{
  "iss": "http://api.vanmoof-api.com",
  "iat": {issued_at_timestamp},
  "nbf": {not_before_timestamp},
  "exp": {expiration_timestamp},
  "user": {userID},
  "api_key": 3,
  "device": null,
  "refresh_token": "{UUIDv4}"
}

Headers

Authorization
Example:
Basic dXNlckBleGFtcGxlLmNvbTpwYXNzd29yZA==
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/authenticate" \
    --header "Authorization: Basic dXNlckBleGFtcGxlLmNvbTpwYXNzd29yZA==" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "token": "{TOKEN}",
    "refreshToken": "UUIDv4"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

2. Obtain Application Token

GET
https://api.vanmoof-api.com
/v8/getApplicationToken
requires authentication

Exchange the initial token for an Application JWT used for subsequent requests.

JWT payload:

{
  "iss": "http://api.vanmoof-api.com",
  "iat": {issued_at_timestamp},
  "nbf": {not_before_timestamp},
  "exp": {expiration_timestamp},
  "user": "{email}",
  "uuid": "{UUIDv3}",
  "bikes": [
    {bikeID},
  ],
  "owner": [
    "{FrameNumber}"
  ]
}

Headers

Authorization
Example:
Bearer {INITIAL_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getApplicationToken" \
    --header "Authorization: Bearer {INITIAL_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "token": "{JWT_TOKEN}"
}
{
    "error": "UnexpectedError",
    "message": "An unexpected error occurred. Please contact support if this problem persists."
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Refresh Token

POST
https://api.vanmoof-api.com
/v8/token

Refresh the authentication token using a refresh token.

Headers

Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/token" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
    --data "{
    \"refreshToken\": null
}"
Example response:
{
    "token": "eyXXX.eyXXX"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "UnexpectedError",
    "message": "An unexpected error occurred. Please contact support if this problem persists."
}

Bike

Endpoints for bike operations

Change Bike Name

POST
https://api.vanmoof-api.com
/v8/changeBikeName/{bikeId}
requires authentication

Change the name of a specific bike. Limited to 255 Characters.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

URL Parameters

bikeId
integer
required

The bike ID

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/changeBikeName/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
    --data "{
    \"name\": null
}"
Example response:
{
    "result": true
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Changed Backup Code

POST
https://api.vanmoof-api.com
/v8/changedBackupCode
requires authentication

Notify Backend that the bikes backup code was changed. Requires macAddress in body. Since the SA5 do not have the macAddress in the API.. This is kinda pointless. Even with the SA3 the API responds with macAddress field is required.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/changedBackupCode" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"macAddress\": null
}"
Example response:
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "macAddress": [
            "The macAddress field is required."
        ]
    }
}

Get Bike Sharing Invitations

GET
https://api.vanmoof-api.com
/v8/getBikeSharingInvitations
requires authentication

Retrieve bike sharing invitations for the authenticated user. Hash is likely MD5.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getBikeSharingInvitations" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "invitations": [],
    "hash": "{MD5_HASH}"
}
{
  "invitations": [
    {
      "guid": "{UUIDv3}",
      "expiresAt": "{ISO8601 Date}",
      "startsAt": null,
      "endsAt": null,
      "duration": {time in seconds},
      "ownerName": "{Owner Name}",
      "bikeName": "{Bike Name}",
      "modelName": "B-05S-E01EU-XX",
      "modelColor": {
        "name": "Gray",
        "primary": "#929393",
        "secondary": "#929393"
      },
      "frameShape": "S",
      "bleProfile": "ELECTRIFIED_2022",
      "links": {
        "thumbnail": "https://my.vanmoof.com/image/model/99"
      }
    }
  ],
  "hash": "{MD5_HASH}"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Bike Sharing Invitations For Bike

GET
https://api.vanmoof-api.com
/v8/getBikeSharingInvitationsForBike/{bikeId}
requires authentication

Retrieve bike sharing invitations for a specific bike.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The bike ID

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getBikeSharingInvitationsForBike/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "invitations": []
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Bike Data

GET
https://api.vanmoof-api.com
/v8/getBikeData/{bikeId}
requires authentication

Retrieve detailed data for a specific bike. Returns same structure as bikeDetails in getCustomerData. Hash is likely MD5.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The bike ID

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getBikeData/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "data": {
        "id": "{BikeID}",
        "name": "{Bike Name}",
        "frameNumber": "{Frame Number}",
        "bikeId": "{Bike ID}",
        "frameSerial": "{Frame Serial}",
        "ownerName": "{Owner Name}",
        "tripDistance": 0,
        "pendingSmartmoduleMacAddress": null,
        "macAddress": null,
        "mainEcuSerial": "{ECU Serial}",
        "smartmoduleCurrentVersion": null,
        "smartmoduleDesiredVersion": null,
        "smartmoduleLatestStable": false,
        "changeBackupCode": true,
        "isTracking": false,
        "highestAvailableSpeedLimit": null,
        "messageAvailable": false,
        "modelName": "{Model Name}",
        "modelDetails": null,
        "modelColor": {
            "name": "{Color Name}",
            "primary": "{Hex Color}",
            "secondary": "{Hex Color}"
        },
        "frameShape": "{Shape}",
        "manufacturer": "{Manufacturer}",
        "controller": "{Controller}",
        "updateMethod": "OAD (encrypted)",
        "eLock": true,
        "gsmModule": "{GSM Module}",
        "speaker": true,
        "bleProfile": "{BLE Profile}",
        "bleVersion": null,
        "messagesViaBLE": "BLEv2",
        "customerRoleFamily": "Responsible",
        "customerRole": "owner",
        "startsAt": "{ISO8601 Date}",
        "endsAt": null,
        "permissions": [
            "ADD_USER",
            "FIRMWARE_UPDATES",
            "REMOVE_USER",
            "REPORT_FOUND",
            "REPORT_STOLEN",
            "SEND_STATISTICS",
            "BACKUP_CODE",
            "BIKE_NAME",
            "VIEW_THEFT_CASES",
            "ALARM_SETTINGS",
            "COUNTRY_SETTINGS",
            "LIGHTS",
            "MOTOR_SUPPORT_LEVEL",
            "UNLOCK",
            "READ_VALUES",
            "STOLEN_MODE",
            "SWAP_SMARTMODULE"
        ],
        "key": null,
        "isFactoryKey": true,
        "customerCount": 1,
        "invitationCount": 0,
        "stolen": {
            "isStolen": false,
            "dateStolen": null,
            "status": "not_stolen",
            "latestLocation": null
        },
        "hasPeaceOfMind": false,
        "peaceOfMind": null,
        "links": {
            "hash": "http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}",
            "thumbnail": "https://my.vanmoof.com/image/model/{ModelID}"
        },
        "serviceModeEnabled": false,
        "workshopInfo": []
    },
    "hash": "{MD5_HASH}"
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Bike Messages

GET
https://api.vanmoof-api.com
/v8/getBikeMessages/{bikeId}
requires authentication

Retrieve messages for a specific bike.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The bike ID

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getBikeMessages/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
[]
[
    {
        "content": ""
    }
]
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Theft Case

GET
https://api.vanmoof-api.com
/v8/getTheftCase/{frameNumber}
requires authentication

Retrieve theft case information for a specific bike by frame number.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

frameNumber
string
required

The bike frame number

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getTheftCase/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{}
{
    "error": "BikeNotStolenException",
    "message": "Bike not stolen"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Bike Data Hash

GET
https://api.vanmoof-api.com
/v8/getBikeDataHash/{bikeId}
requires authentication

Retrieve the hash for a specific bike using its bike ID.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The bike ID

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getBikeDataHash/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "hash": "{MD5_HASH}"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Create Bike Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/createBikeSharingInvitation
requires authentication

Create an invitation to share a bike with another user via email.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/createBikeSharingInvitation" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"email\": null,
    \"duration\": null,
    \"bikeId\": null
}"
Example response:
{
    "result": {
        "guid": "{UUIDv3}",
        "expiresAt": "{ISO8601 Date}",
        "startsAt": null,
        "endsAt": null,
        "duration": "{time in seconds}",
        "role": "user",
        "email": "{email}"
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "email": [
            "The email must be a valid email address."
        ],
        "duration": [
            "The duration must be an integer."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Revoke Workshop Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/revokeWorkshopSharingInvitation
requires authentication

Revoke workshop sharing invitations for a specific bike. It updates the invitation and sets endsAt to now.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/revokeWorkshopSharingInvitation" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null
}"
Example response:
{
    "result": [
        {
            "email": "{Workshop Email}",
            "name": "{Workshop Name}",
            "startsAt": "{ISO8601 Date}",
            "endsAt": "{ISO8601 Date}"
        }
    ]
}
{
    "result": []
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Revoke Bike Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/revokeBikeSharingInvitation/{guid}
requires authentication

Revoke a previously created bike sharing invitation by GUID.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

guid
string
required

Invitation GUID

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/revokeBikeSharingInvitation/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "result": true
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "BikeSharingInvitationNotFoundException",
    "message": "This bike sharing invitation does not exist."
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Create Workshop Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/createWorkshopSharingInvitation
requires authentication

Create an invitation for a workshop to access a bike. Valid for 6 months. QR Code content "https://www.vanmoof.com/invite-shop?email={Workshop Email}&name={workshop Name}"

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/createWorkshopSharingInvitation" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
    --data "{
    \"email\": null,
    \"bikeId\": null
}"
Example response:
{
    "result": {
        "email": "{Workshop Email}",
        "name": "{Workshop Name}",
        "startsAt": "{ISO8601 Date}",
        "endsAt": "{ISO8601 Date}"
    }
}
{
    "error": "BikeSharingNotAWorkshopException",
    "message": "The provided e-mail address does not belong to a valid bike workshop."
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Decline Bike Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/declineBikeSharingInvitation/{guid}
requires authentication

Decline a bike sharing invitation using the invitation GUID.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

guid
string
required

The GUID of the bike sharing invitation to decline.

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/declineBikeSharingInvitation/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "result": true
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}
{
    "error": "BikeSharingInvitationNotFoundException",
    "message": "This bike sharing invitation does not exist."
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Accept Bike Sharing Invitation

POST
https://api.vanmoof-api.com
/v8/acceptBikeSharingInvitation/{guid}
requires authentication

Accept a bike sharing invitation using the invitation GUID. It responds with the same schema as getBikeData. "user" is missing ADD_USER, FIRMWARE_UPDATES, REMOVE_USER, BACKUP_CODE, BIKE_NAME, STOLEN_MODE, SWAP_SMARTMODULE permissions.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

guid
string
required

The GUID of the bike sharing invitation to accept.

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/acceptBikeSharingInvitation/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
  "data": {
    "id": {BikeID},
    "name": "{Bike Name}",
    "frameNumber": "{Frame Number}",
    "bikeId": "{Bike ID}",
    "frameSerial": "{Frame Serial}",
    "ownerName": "{Owner Name}",
    "tripDistance": 0,
    "pendingSmartmoduleMacAddress": null,
    "macAddress": null,
    "mainEcuSerial": "{ECU Serial}",
    "smartmoduleCurrentVersion": null,
    "smartmoduleDesiredVersion": null,
    "smartmoduleLatestStable": false,
    "changeBackupCode": true,
    "isTracking": false,
    "highestAvailableSpeedLimit": null,
    "messageAvailable": false,
    "modelName": "{Model Name}",
    "modelDetails": null,
    "modelColor": {
      "name": "{Color Name}",
      "primary": "{Primary Color}",
      "secondary": "{Secondary Color}"
    },
    "frameShape": "S",
    "manufacturer": "pegatron",
    "controller": "2022",
    "updateMethod": "OAD (encrypted)",
    "eLock": true,
    "gsmModule": "4G",
    "speaker": true,
    "bleProfile": "ELECTRIFIED_2022",
    "bleVersion": null,
    "messagesViaBLE": "BLEv2",
    "customerRoleFamily": "User",
    "customerRole": "user",
    "startsAt": "{ISO8601 Date}",
    "endsAt": "{ISO8601 Date}",
    "permissions": [
      "REPORT_FOUND",
      "SEND_STATISTICS",
      "REPORT_STOLEN",
      "VIEW_THEFT_CASES",
      "ALARM_SETTINGS",
      "COUNTRY_SETTINGS",
      "LIGHTS",
      "MOTOR_SUPPORT_LEVEL",
      "UNLOCK",
      "READ_VALUES"
    ],
    "key": null,
    "isFactoryKey": true,
    "customerCount": 2,
    "invitationCount": 2,
    "stolen": {
      "isStolen": false,
      "dateStolen": null,
      "status": "not_stolen",
      "latestLocation": null
    },
    "hasPeaceOfMind": false,
    "peaceOfMind": null,
    "links": {
      "hash": "http://api.vanmoof-api.com/v8/getBikeDataHash/176393",
      "thumbnail": "https://my.vanmoof.com/image/model/99"
    },
    "serviceModeEnabled": false,
    "workshopInfo": []
  }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "guid": [
            "The guid field is required."
        ]
    }
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Remove Customer Bike Sharing For Bike

POST
https://api.vanmoof-api.com
/v8/removeCustomerBikeSharingForBike
requires authentication

Remove all bike sharing invitations for a specific bike.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/removeCustomerBikeSharingForBike" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null
}"
Example response:
{
    "result": true
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Register Bike To Current User

POST
https://api.vanmoof-api.com
/v8/registerBikeToCurrentUser
requires authentication

Register a bike to the currently authenticated user using the frame number and verification code. QR Code Content: https://my.vanmoof.com/proof-of-ownership?bike_id={framenumber}&validation={validationCode}

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/registerBikeToCurrentUser" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"framenumber\": null,
    \"verification\": null
}"
Example response:
{
    "error": "BikeRegisterToCurrentCustomerException",
    "message": "This frame number can’t be registered."
}
{
    "error": "InvalidVerificationCodeException",
    "message": "An invalid verification code is provided to register bike with framenumber / frameserial: {FrameNumber} verification code : {VerificationCode}"
}
{
    "error": "BikeNotFoundException",
    "message": "No bike found during registration"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Desired Update Version Info

GET
https://api.vanmoof-api.com
/v8/getDesiredUpdateVersionInfo/{bikeId}
requires authentication

Retrieve the desired update version information for a specific bike. This only works for at least the SA3/SA4 bikes. SA5 and later uses another API.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The ID of the bike to retrieve update information for.

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getDesiredUpdateVersionInfo/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
  "updateVersion": "{Version}",
  "releaseDate": "{ISO8601 Date}",
  "latestStable": false,
  "releaseNotes": "",
  "fileSize": 0,
  "firmwareCrc": "{CRC}",
  "transportCrc": "{CRC}",
  "encrypted": true,
  "pendingUpdatesCount": 0,
  "pendingUpdates": [
    {
      "updateVersion": "{Version}",
      "releaseDate": "{ISO8601 Date}",
      "latestStable": true,
      "releaseNotes": "",
      "fileSize": 0",
      "firmwareCrc": "{CRC}",
      "transportCrc": "{CRC}",
      "encrypted": true
    }
  ]
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Desired Update Version File

GET
https://api.vanmoof-api.com
/v8/getDesiredUpdateVersionFile/{bikeId}
requires authentication

Retrieve the desired update version file for a specific bike. This only works for at least the SA3/SA4 bikes. SA5 and later uses another API.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The ID of the bike to retrieve the update file for.

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getDesiredUpdateVersionFile/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
application/zip
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Report Stolen

POST
https://api.vanmoof-api.com
/v8/reportStolen
requires authentication

Report a bike as stolen.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/reportStolen" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null
}"
Example response:
{
    "isStolen": true,
    "dateStolen": "{ISO8601 Date}",
    "status": "confirmed",
    "latestLocation": null,
    "publicTrackingUrl": "https://my.vanmoof.com/findmybike/show/{UUIDv4}"
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Report Found

POST
https://api.vanmoof-api.com
/v8/reportFound
requires authentication

Report a bike as found and optionally disable tracking.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/reportFound" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null
}"
Example response:
{
    "result": true
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ]
    }
}
{
    "error": "BikeNotStolenException",
    "message": "Bike not stolen"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Remove Bike Ownership

POST
https://api.vanmoof-api.com
/v8/removeBikeOwnership
requires authentication

Remove ownership of a bike by providing the bike ID.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/removeBikeOwnership" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null
}"
Example response:
{
    "result": true
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Update Customer on Bike

POST
https://api.vanmoof-api.com
/v8/updateCustomerOnBike
requires authentication

Update the customer associated with a bike, specifying their role.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/updateCustomerOnBike" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null,
    \"email\": null,
    \"role\": null
}"
Example response:
{
    "result": true
}
[Empty response]
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ],
        "role": [
            "This is not a regular customer role."
        ]
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "email": [
            "There is no customer with this email."
        ]
    }
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Remove Customer from Bike

POST
https://api.vanmoof-api.com
/v8/removeCustomerFromBike
requires authentication

Remove a customer from a bike using the bike ID and customer email.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/removeCustomerFromBike" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null,
    \"email\": null
}"
Example response:
{
    "result": true
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "You are not registered as customer of this bike."
        ],
        "role": [
            "This is not a regular customer role."
        ]
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "email": [
            "There is no customer with this email."
        ]
    }
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Post Statistics

POST
https://api.vanmoof-api.com
/v8/postStatistics
requires authentication

Submit ride statistics for a specific bike.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/postStatistics" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"bikeId\": null,
    \"timestamp\": null,
    \"distance\": null,
    \"rideTime\": null,
    \"batteryLevel\": null,
    \"averageSpeed\": null,
    \"maxSpeed\": null
}"
Example response:
{
    "result": true
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Post Bike Response

POST
https://api.vanmoof-api.com
/v8/postBikeResponse/{bikeId}
requires authentication

Submit a response from the bike using its bike ID.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

URL Parameters

bikeId
string
required

The ID of the bike to submit the response for.

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/postBikeResponse/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"data\": null
}"
Example response:
{
    "result": true
}
[Empty response]
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "bikeId": [
            "The bikeId field is required."
        ]
    }
}
{
    "error": "BikeNotFoundException",
    "message": "Bike not found"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Create Certificate

POST
https://api.vanmoof-api.com
/bikes/{frameNumber}/create_certificate
requires authentication

Create a certificate for a bike using its Bike ID. This endpoint uses the Bike API (bikeapi.production.vanmoof.cloud) instead of the main API. Ratelimited at 100 requests per 15 seconds.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Content-Type
Example:
application/json; charset=utf-8

URL Parameters

frameNumber
string
required

The frame number of the bike.

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/bikes//create_certificate" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"public_key\": null
}"
Example response:
{
    "created_at": "{ISO8601 Date}",
    "expiry": "{ISO8601 Date}",
    "certificate": "{Base64 Encoded Certificate}"
}
{
    "err": "invalid body: EOF"
}
{
    "err": "bike_id format invalid"
}
{
    "err": "invalid ed25519 public key"
}
{
    "err": "invalid body: illegal base64 data at input byte 0"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "err": "forbidden"
}

Cloud

Endpoints for the Cloud.

Get Subscriptions

GET
https://api.vanmoof-api.com
/subscriptions
requires authentication

Retrieve a list of subscriptions. USE https://subscription.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
subscription.production.vanmoof.cloud

Query Parameters

status
string

Filter by subscription status (e.g. ACTIVE, EXPIRED).

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/subscriptions" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: subscription.production.vanmoof.cloud"
Example response:
[]
[
    {
        "id": "{uuid}",
        "vehicle_id": "{vehicle_id}",
        "sku": "BETA-TRIAL",
        "status": "EXPIRED",
        "product": "FEATURE_SUBSCRIPTION",
        "billing_cycle": "NONE",
        "is_recurring": false,
        "created_at": "2026-01-01T01:00:00.000000Z",
        "updated_at": "2026-01-01T01:00:00.000000Z",
        "expired_at": "2026-01-01T01:00:00.000000Z",
        "canceled_at": null,
        "next_billing_at": null,
        "trial_until": null
    }
]
Unauthorized

Get Notification Preferences

GET
https://api.vanmoof-api.com
/preferences
requires authentication

Retrieve notification preferences for the user. USE https://notification.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
notification.production.vanmoof.cloud
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/preferences" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: notification.production.vanmoof.cloud"
Example response:
{
    "languages": [
        "en-US"
    ],
    "channels": {
        "push": {
            "vehicles": {
                "FrameNumber": {
                    "notifications": {
                        "alarm_state/1": {
                            "enabled": false
                        },
                        "alarm_state/2": {
                            "enabled": true
                        },
                        "alarm_state/3": {
                            "enabled": false
                        },
                        "battery_charge/custom": {
                            "enabled": false,
                            "preferences": {
                                "soc": 25
                            }
                        },
                        "battery_charge/empty": {
                            "enabled": true
                        },
                        "battery_charge/full": {
                            "enabled": true
                        },
                        "battery_charge/low": {
                            "enabled": true
                        },
                        "location_update": {
                            "enabled": true
                        },
                        "not_locked": {
                            "enabled": true
                        }
                    }
                }
            }
        }
    }
}
Unauthorized

Get Vehicle Accesses

GET
https://api.vanmoof-api.com
/external/vehicles/{vehicle_id}/accesses
requires authentication

Retrieve access list for a specific vehicle, showing owners and guests. USE https://vehicleregistry.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
vehicleregistry.production.vanmoof.cloud

URL Parameters

vehicle_id
string
required

The frame number of the vehicle.

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/external/vehicles//accesses" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: vehicleregistry.production.vanmoof.cloud"
Example response:
{
    "vehicle_id": "{vehicle_id}",
    "vehicle_access": [
        {
            "rider_id": "{uuid}",
            "rider_name": "Rider Name",
            "rider_email": "rider@vanmoof.com",
            "owner_id": "{owner_uuid}",
            "owner_name": "Owner Name",
            "owner_email": "owner@vanmoof.com",
            "role": "GUEST",
            "expires_at": "2027-01-01T01:00:00.000000Z",
            "starts_at": "2026-01-01T01:00:00.000000Z"
        }
    ]
}
Unauthorized

Get Rider Invitations

GET
https://api.vanmoof-api.com
/external/riders/{uuid}/invitations
requires authentication

Retrieve invitations for a specific rider. USE https://vehicleregistry.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
vehicleregistry.production.vanmoof.cloud
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/external/riders/{uuid}/invitations" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: vehicleregistry.production.vanmoof.cloud"
Example response:
[]

Get External Invitations

GET
https://api.vanmoof-api.com
/external/invitations
requires authentication

Retrieve all external invitations. USE https://vehicleregistry.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
vehicleregistry.production.vanmoof.cloud
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/external/invitations" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: vehicleregistry.production.vanmoof.cloud"
Example response:
[]
Unauthorized

Get Rider Vehicles

GET
https://api.vanmoof-api.com
/external/riders/{uuid}/vehicles
requires authentication

Retrieve vehicles associated with a specific rider. USE https://vehicleregistry.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
vehicleregistry.production.vanmoof.cloud
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/external/riders/{uuid}/vehicles" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: vehicleregistry.production.vanmoof.cloud"
Example response:
{
    "rider_id": "{uuid}",
    "vehicle_access": []
}
Unauthorized

Bike Tracking

GET
https://api.vanmoof-api.com
/v1/rider/bikes
requires authentication

Bike Tracking. USE https://biketracking.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
biketracking.production.vanmoof.cloud
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v1/rider/bikes" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: biketracking.production.vanmoof.cloud"
Example response:
{
    "items": []
}
Unauthorized

Get Bike Tracking State

GET
https://api.vanmoof-api.com
/v2/states/{vehicle_id}
requires authentication

Retrieve the tracking state of a specific vehicle. USE https://biketracking.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Host
Example:
biketracking.production.vanmoof.cloud

URL Parameters

vehicle_id
string
required

The frame number of the vehicle.

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v2/states/" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Host: biketracking.production.vanmoof.cloud"
Example response:
{
    "id": "{uuid}",
    "missing": "NOT_MISSING",
    "tracking": "ENABLED",
    "created_at": "2026-01-01T10:00:00.000000Z"
}
Unauthorized

Update Notification Preferences

PATCH
https://api.vanmoof-api.com
/preferences
requires authentication

Update the notification preferences for the user. USE https://notification.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Content-Type
Example:
application/json; charset=utf-8
Host
Example:
notification.production.vanmoof.cloud
Example request:
curl --request PATCH \
    "https://api.vanmoof-api.com/preferences" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Content-Type: application/json; charset=utf-8" \
    --header "Host: notification.production.vanmoof.cloud"
Example response:
{
    "languages": [
        "en-US"
    ],
    "channels": {
        "push": {
            "vehicles": {
                "FrameNumber": {
                    "notifications": {
                        "alarm_state/1": {
                            "enabled": false
                        },
                        "alarm_state/2": {
                            "enabled": true
                        },
                        "alarm_state/3": {
                            "enabled": false
                        },
                        "battery_charge/custom": {
                            "enabled": false,
                            "preferences": {
                                "soc": 25
                            }
                        },
                        "battery_charge/empty": {
                            "enabled": true
                        },
                        "battery_charge/full": {
                            "enabled": true
                        },
                        "battery_charge/low": {
                            "enabled": true
                        },
                        "location_update": {
                            "enabled": true
                        },
                        "not_locked": {
                            "enabled": true
                        }
                    }
                }
            }
        }
    }
}
{
    "error_code": 1000,
    "error_message": "could not decode request"
}
Unauthorized

Remove Notification Channel

DELETE
https://api.vanmoof-api.com
/channels
requires authentication

Remove a notification channel for the user. USE https://notification.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Content-Type
Example:
application/json; charset=utf-8
Host
Example:
notification.production.vanmoof.cloud
Example request:
curl --request DELETE \
    "https://api.vanmoof-api.com/channels" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Content-Type: application/json; charset=utf-8" \
    --header "Host: notification.production.vanmoof.cloud"
Example response:
[Empty response]
{
    "error_code": 1000,
    "error_message": "could not decode request"
}
Unauthorized

Create Notification Channel

POST
https://api.vanmoof-api.com
/channels
requires authentication

Create a new notification channel for the user. USE https://notification.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Content-Type
Example:
application/json; charset=utf-8
Host
Example:
notification.production.vanmoof.cloud
Example request:
curl --request POST \
    "https://api.vanmoof-api.com/channels" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}" \
    --header "Content-Type: application/json; charset=utf-8" \
    --header "Host: notification.production.vanmoof.cloud"
Example response:
{
    "id": "{CHANNEL_ID}"
}
{
    "error_code": 1000,
    "error_message": "could not decode request"
}
Unauthorized

Customer

Endpoints for customer data

Get Customers On Bike

GET
https://api.vanmoof-api.com
/v8/getCustomersOnBike/{bikeId}
requires authentication

Retrieve all customers associated with a specific bike.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

URL Parameters

bikeId
integer
required

The bike ID

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getCustomersOnBike/" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "customers": [
        {
            "name": "{Customer Name}",
            "email": "{Customer Email}",
            "role": "owner",
            "start": "{ISO8601 Date}",
            "end": null,
            "status": "current"
        }
    ]
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Update Customer

POST
https://api.vanmoof-api.com
/v8/updateCustomer
requires authentication

Update current customer's profile (partial updates allowed). Updating the email or the password requires a fresh initial token from v8/authenticate.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/updateCustomer" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
Example response:
{
    "result": {
        "uuid": "{Customer UUIDv3}",
        "name": "{Customer Name}",
        "email": "{Customer Email}",
        "emailConfirmed": "boolean",
        "phone": "{Customer Phone}",
        "country": "{ISO 3166-1}",
        "links": {
            "show": "http://api.vanmoof-api.com/v8/getCustomerData"
        }
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Create Customer

POST
https://api.vanmoof-api.com
/v8/createCustomer

Create a new customer account. All fields are required. Password policy: The password must contain between 6 and 50 characters, a digit, an upper case and a lower case character

Headers

Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/createCustomer" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
    --data "{
    \"name\": null,
    \"email\": null,
    \"country\": null,
    \"password\": null,
    \"confirmationUrl\": null
}"
Example response:
{
    "result": {
        "uuid": "{Customer UUIDv3}",
        "name": "{Customer Name}",
        "email": "{Customer Email}",
        "emailConfirmed": false,
        "privacyPolicyAccepted": false
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "name": [
            "The name field is required."
        ],
        "email": [
            "The email field is required."
        ],
        "country": [
            "The country field is required."
        ],
        "password": [
            "The password field is required."
        ],
        "confirmationUrl": [
            "The confirmationUrl field is required."
        ]
    }
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "email": [
            "The email has already been taken."
        ]
    }
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "CustomerNotAuthorizedException",
    "message": "Customer not authorized for this action"
}

Get Customer Data Hash

GET
https://api.vanmoof-api.com
/v8/getCustomerDataHash
requires authentication

Retrieve MD5 hash of customer data.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getCustomerDataHash" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "hash": "{MD5_HASH}"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Customer Data

GET
https://api.vanmoof-api.com
/v8/getCustomerData
requires authentication

Retrieve the authenticated customer's data and associated bikes. Data Hash is likely MD5. If a workshop is invited. The Field contains email, name, start and end. Also serviceModeEnabled is true for the time being in service mode.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819

Query Parameters

includeBikeDetails
boolean

Include details about the customer's bikes.

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getCustomerData" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "data": {
        "uuid": "{UUIDv4}",
        "name": "{Customer Name}",
        "email": "{Customer Email}",
        "confirmed": "boolean",
        "privacyPolicyAccepted": "boolean",
        "phone": "",
        "country": "{Country Code}",
        "bikes": [
            {
                "id": "{BikeID}",
                "name": "VanMoof",
                "frameNumber": "ASY31ddddd",
                "bikeId": "ASY31ddddd",
                "frameSerial": null,
                "ownerName": "{Owner}",
                "pendingSmartmoduleMacAddress": null,
                "macAddress": "{MAC Address}",
                "mainEcuSerial": null,
                "bleProfile": "ELECTRIFIED_2021",
                "controller": "2020 S",
                "eLock": true,
                "speaker": true,
                "smartmoduleCurrentVersion": "1.8.2",
                "smartmoduleDesiredVersion": "1.9.1",
                "smartmoduleLatestStable": false,
                "highestAvailableSpeedLimit": null,
                "tripDistance": "{TripDistance}",
                "modelName": "VM01-203-EU",
                "modelColor": {
                    "name": "Light",
                    "primary": "#7a99ac",
                    "secondary": "#7a99ac"
                },
                "frameShape": "S",
                "customerRole": "owner",
                "startsAt": "{Date}",
                "endsAt": null,
                "permissions": [
                    "ADD_USER",
                    "FIRMWARE_UPDATES",
                    "REMOVE_USER",
                    "REPORT_FOUND",
                    "REPORT_STOLEN",
                    "SEND_STATISTICS",
                    "BACKUP_CODE",
                    "BIKE_NAME",
                    "VIEW_THEFT_CASES",
                    "ALARM_SETTINGS",
                    "COUNTRY_SETTINGS",
                    "LIGHTS",
                    "MOTOR_SUPPORT_LEVEL",
                    "UNLOCK",
                    "READ_VALUES",
                    "STOLEN_MODE",
                    "SWAP_SMARTMODULE"
                ],
                "isTracking": false,
                "stolen": {
                    "isStolen": false,
                    "dateStolen": null,
                    "status": "not_stolen",
                    "latestLocation": null
                },
                "links": {
                    "thumbnail": "https://my.vanmoof.com/image/model/84",
                    "show": "http://api.vanmoof-api.com/v8/getBikeData/{BikeID}"
                }
            },
            {
                "id": "{BikeID}",
                "name": "VanMoof",
                "frameNumber": "SVTBKLdddddLL",
                "bikeId": "SVTBKLdddddLL",
                "frameSerial": "AST52IdddddL",
                "ownerName": "{Owner}",
                "pendingSmartmoduleMacAddress": null,
                "macAddress": null,
                "mainEcuSerial": "",
                "bleProfile": "ELECTRIFIED_2022",
                "controller": "2022",
                "eLock": true,
                "speaker": true,
                "smartmoduleCurrentVersion": null,
                "smartmoduleDesiredVersion": null,
                "smartmoduleLatestStable": false,
                "highestAvailableSpeedLimit": null,
                "tripDistance": "{TripDistance}",
                "modelName": "B-05S-E01EU-XX",
                "modelColor": {
                    "name": "Gray",
                    "primary": "#929393",
                    "secondary": "#929393"
                },
                "frameShape": "S",
                "customerRole": "owner",
                "startsAt": "{Date}",
                "endsAt": null,
                "permissions": [
                    "ADD_USER",
                    "FIRMWARE_UPDATES",
                    "REMOVE_USER",
                    "REPORT_FOUND",
                    "REPORT_STOLEN",
                    "SEND_STATISTICS",
                    "BACKUP_CODE",
                    "BIKE_NAME",
                    "VIEW_THEFT_CASES",
                    "ALARM_SETTINGS",
                    "COUNTRY_SETTINGS",
                    "LIGHTS",
                    "MOTOR_SUPPORT_LEVEL",
                    "UNLOCK",
                    "READ_VALUES",
                    "STOLEN_MODE",
                    "SWAP_SMARTMODULE"
                ],
                "isTracking": false,
                "stolen": {
                    "isStolen": false,
                    "dateStolen": null,
                    "status": "not_stolen",
                    "latestLocation": null
                },
                "links": {
                    "thumbnail": "https://my.vanmoof.com/image/model/99",
                    "show": "http://api.vanmoof-api.com/v8/getBikeData/{BikeID}"
                }
            }
        ],
        "hasPendingBikeSharingInvitations": false,
        "links": {
            "hash": "http://api.vanmoof-api.com/v8/getCustomerDataHash",
            "devices": "http://api.vanmoof-api.com/v8/getDevices",
            "resendConfirmation": null,
            "update": "http://api.vanmoof-api.com/v8/updateCustomer",
            "addBike": "http://api.vanmoof-api.com/v8/registerBikeToCurrentUser",
            "addFcmToken": "http://api.vanmoof-api.com/v8/registrationToken",
            "theftCases": "http://api.vanmoof-api.com/v8/getCurrentTheftCasesForCurrentUser"
        },
        "bikeDetails": [
            {
                "id": "{BikeID}",
                "name": "VanMoof",
                "frameNumber": "ASY31ddddd",
                "bikeId": "ASY31ddddd",
                "frameSerial": null,
                "ownerName": "{Owner}",
                "tripDistance": 1234,
                "pendingSmartmoduleMacAddress": null,
                "macAddress": "{MAC Address}",
                "mainEcuSerial": null,
                "smartmoduleCurrentVersion": "1.8.2",
                "smartmoduleDesiredVersion": "1.9.1",
                "smartmoduleLatestStable": false,
                "changeBackupCode": false,
                "isTracking": false,
                "highestAvailableSpeedLimit": null,
                "messageAvailable": false,
                "modelName": "VM01-203-EU",
                "modelDetails": {
                    "Gears": "Automatic 4 speed shifting gears",
                    "Motor": "250 - 500 W front-wheel hub motor",
                    "Top Speed": "25 km/h (EU speed)",
                    "Range": "60 km (full power) ~ 150 km (economy mode)",
                    "Edition": "ES-3 2G"
                },
                "modelColor": {
                    "name": "Light",
                    "primary": "#7a99ac",
                    "secondary": "#7a99ac"
                },
                "frameShape": "S",
                "manufacturer": "muco",
                "controller": "2020 S",
                "updateMethod": "OAD (encrypted)",
                "eLock": true,
                "gsmModule": "2G",
                "speaker": true,
                "bleProfile": "ELECTRIFIED_2021",
                "bleVersion": null,
                "messagesViaBLE": "BLEv2",
                "customerRoleFamily": "Responsible",
                "customerRole": "owner",
                "startsAt": "{Date}",
                "endsAt": null,
                "permissions": [
                    "ADD_USER",
                    "FIRMWARE_UPDATES",
                    "REMOVE_USER",
                    "REPORT_FOUND",
                    "REPORT_STOLEN",
                    "SEND_STATISTICS",
                    "BACKUP_CODE",
                    "BIKE_NAME",
                    "VIEW_THEFT_CASES",
                    "ALARM_SETTINGS",
                    "COUNTRY_SETTINGS",
                    "LIGHTS",
                    "MOTOR_SUPPORT_LEVEL",
                    "UNLOCK",
                    "READ_VALUES",
                    "STOLEN_MODE",
                    "SWAP_SMARTMODULE"
                ],
                "key": {
                    "encryptionKey": "{BLE Encryption Key}",
                    "passcode": "{BLE Passcode}",
                    "userKeyId": 1
                },
                "isFactoryKey": false,
                "customerCount": 1,
                "invitationCount": 0,
                "stolen": {
                    "isStolen": false,
                    "dateStolen": null,
                    "status": "not_stolen",
                    "latestLocation": null
                },
                "hasPeaceOfMind": false,
                "peaceOfMind": null,
                "links": {
                    "hash": "http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}",
                    "thumbnail": "https://my.vanmoof.com/image/model/84"
                },
                "serviceModeEnabled": false,
                "workshopInfo": []
            },
            {
                "id": "{BikeID}",
                "name": "VanMoof",
                "frameNumber": "SVTBKLdddddLL",
                "bikeId": "SVTBKLdddddLL",
                "frameSerial": "AST52IdddddL",
                "ownerName": "{Owner}",
                "tripDistance": "{TripDistance}",
                "pendingSmartmoduleMacAddress": null,
                "macAddress": null,
                "mainEcuSerial": "",
                "smartmoduleCurrentVersion": null,
                "smartmoduleDesiredVersion": null,
                "smartmoduleLatestStable": false,
                "changeBackupCode": true,
                "isTracking": false,
                "highestAvailableSpeedLimit": null,
                "messageAvailable": false,
                "modelName": "B-05S-E01EU-XX",
                "modelDetails": null,
                "modelColor": {
                    "name": "Gray",
                    "primary": "#929393",
                    "secondary": "#929393"
                },
                "frameShape": "S",
                "manufacturer": "pegatron",
                "controller": "2022",
                "updateMethod": "OAD (encrypted)",
                "eLock": true,
                "gsmModule": "4G",
                "speaker": true,
                "bleProfile": "ELECTRIFIED_2022",
                "bleVersion": null,
                "messagesViaBLE": "BLEv2",
                "customerRoleFamily": "Responsible",
                "customerRole": "owner",
                "startsAt": "{Date}",
                "endsAt": null,
                "permissions": [
                    "ADD_USER",
                    "FIRMWARE_UPDATES",
                    "REMOVE_USER",
                    "REPORT_FOUND",
                    "REPORT_STOLEN",
                    "SEND_STATISTICS",
                    "BACKUP_CODE",
                    "BIKE_NAME",
                    "VIEW_THEFT_CASES",
                    "ALARM_SETTINGS",
                    "COUNTRY_SETTINGS",
                    "LIGHTS",
                    "MOTOR_SUPPORT_LEVEL",
                    "UNLOCK",
                    "READ_VALUES",
                    "STOLEN_MODE",
                    "SWAP_SMARTMODULE"
                ],
                "key": null,
                "isFactoryKey": true,
                "customerCount": 1,
                "invitationCount": 0,
                "stolen": {
                    "isStolen": false,
                    "dateStolen": null,
                    "status": "not_stolen",
                    "latestLocation": null
                },
                "hasPeaceOfMind": false,
                "peaceOfMind": null,
                "links": {
                    "hash": "http://api.vanmoof-api.com/v8/getBikeDataHash/{BikeID}",
                    "thumbnail": "https://my.vanmoof.com/image/model/99"
                },
                "serviceModeEnabled": false,
                "workshopInfo": []
            }
        ]
    },
    "hash": "{DATA_HASH}"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Current Theft Cases For Current User

GET
https://api.vanmoof-api.com
/v8/getCurrentTheftCasesForCurrentUser
requires authentication

Retrieve theft cases for the authenticated user.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getCurrentTheftCasesForCurrentUser" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "theftCases": []
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Get Devices

GET
https://api.vanmoof-api.com
/v8/getDevices
requires authentication

Retrieve registered devices for the authenticated user.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v8/getDevices" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
[
    {
        "device": null,
        "key": "{Device Key}"
    }
]
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Resend Confirmation Email

POST
https://api.vanmoof-api.com
/v8/resendConfirmationEmail
requires authentication

Resend confirmation email to the authenticated user.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/resendConfirmationEmail" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{}
{
    "error": "CustomerAlreadyConfirmedException",
    "message": "Customer account is already confirmed"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Validate Customer Email

POST
https://api.vanmoof-api.com
/v8/validateCustomerEmail
requires authentication

Validate a customer's email address using a token.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/validateCustomerEmail" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json" \
    --data "{
    \"token\": null
}"
Example response:
{
    "result": true
}
{
    "error": "CustomerNotConfirmedException",
    "message": "Customer account is not confirmed"
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Accept Privacy Policy

POST
https://api.vanmoof-api.com
/v8/privacyPolicyAccepted
requires authentication

Mark the privacy policy as accepted for the authenticated customer.

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json
Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/privacyPolicyAccepted" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json"
Example response:
{
    "result": true
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Forgot Password

POST
https://api.vanmoof-api.com
/v8/forgotPassword

Request a password reset email for the given email address.

Headers

Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/forgotPassword" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"email\": null,
    \"redirectUrl\": null
}"
Example response:
{
    "result": true
}
{
    "error": "ValidationException",
    "message": "Validation failed",
    "violations": {
        "email": [
            "The selected email is invalid."
        ]
    }
}

Register APN Token

POST
https://api.vanmoof-api.com
/v8/registrationToken
requires authentication

Submit a APN registration token. (Used for push notifications on Android. No longer used)

Headers

Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Content-Type
Example:
application/json; charset=utf-8

Body Parameters

Example request:
curl --request POST \
    "https://api.vanmoof-api.com/v8/registrationToken" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Content-Type: application/json; charset=utf-8" \
    --data "{
    \"token\": null
}"
Example response:
{
    "result": true
}
{
    "error": "AuthenticationException",
    "message": "Invalid Credentials"
}
{
    "error": "Please provide your 'Api-Key' header. You can obtain an API key from VanMoof. For more information see the documentation: http://api.vanmoof-api.com/apidoc/my/pretty",
    "message": "Please provide an API key"
}

Firmwares

Endpoints for SA5+ firmwares

Get Latest Firmware (SA5+)

GET
https://api.vanmoof-api.com
/v1/firmwares/last
requires authentication

Retrieve the latest firmware version and release notes for SA5 and later Bikes. USE https://fima.production.vanmoof.cloud

Headers

Authorization
Example:
Bearer {APPLICATION_JWT_TOKEN}
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/v1/firmwares/last" \
    --header "Authorization: Bearer {APPLICATION_JWT_TOKEN}"
Example response:
{
    "version": "{version}",
    "stage": "{stage}",
    "releaseNotes": {
        "EN": "",
        "DE": "",
        "NL": ""
    }
}
{
    "error": "Token not found"
}

Rides

Endpoints for tracking and retrieving rider rides

Get Rider Preferences

GET
https://api.vanmoof-api.com
/api/v1/riders/{riderID}/preferences

Retrieve rider preferences by rider UUID. The city field uses a format like "{COUNTRY CITY}" where COUNTRY is the international country code (e.g., DE for Germany) and CITY is the city code (e.g., FRA for Frankfurt am Main). Example: "DE FRA". USE https://tenjin.vanmoof.com/

Headers

Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/api/v1/riders/{riderID}/preferences" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819"
Example response:
{
    "recordRides": true,
    "recordCountry": false,
    "city": "{COUNTRY CITY}",
    "optedOutOfCity": false
}
{
    "error": "Unauthorized"
}

Get Cities

GET
https://api.vanmoof-api.com
/api/v1/cities
requires authentication

Retrieve a list of cities. USE https://tenjin.vanmoof.com

Headers

Api-Key
Example:
fcb38d47-f14b-30cf-843b-26283f6a5819
Authorization
Example:
Bearer {YOUR_AUTH_TOKEN}
Host
Example:
tenjin.vanmoof.com
Rider-Etag
Example:
{ETAG}
Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/api/v1/cities" \
    --header "Api-Key: fcb38d47-f14b-30cf-843b-26283f6a5819" \
    --header "Authorization: Bearer {YOUR_AUTH_TOKEN}" \
    --header "Host: tenjin.vanmoof.com" \
    --header "Rider-Etag: {ETAG}"
Example response:
[
    {
        "country": "DE",
        "code": "DE FRA",
        "name": "Frankfurt (Frankfurt am Main)",
        "location": {
            "lat": 50.1136,
            "long": 8.6797
        }
    }
]
{
    "error": "Unauthorized"
}

Website

Endpoints you interact with via the VanMoof website

Get Bike Coordinates

GET
https://api.vanmoof-api.com
/findmybike/coords/{bike UUIDv4}

Retrieve the latest known coordinates of a bike by its UUIDv4. This endpoint does not require authentication nor is it disabled after the bike is found. USE https://my.vanmoof.com

Example request:
curl --request GET \
    --get "https://api.vanmoof-api.com/findmybike/coords/{bike UUIDv4}"
Example response:
{
    "coordinates": [
        {
            "lat": -10.47,
            "lon": 105.61,
            "acc": 0,
            "datetime": {
                "user": {
                    "date": "{DD-MM-YYYY}",
                    "time": "13:37"
                },
                "bike": {
                    "date": "{DD-MM-YYYY}",
                    "time": "13:37"
                }
            },
            "timezone": {
                "user": "Europe/Amsterdam",
                "bike": "Europe/Berlin"
            },
            "firstTime": {
                "user": "13:37",
                "bike": "13:37"
            },
            "measurements": 1,
            "type": "ublox",
            "measured_by": []
        }
    ],
    "timezone": 2
}