Register an installer account
POST /api/v1/installer/signup
Creates a new installer account immediately, without requiring email confirmation. Use signup-with-confirmation if you want to enforce email verification before the account becomes active.
Installer’s email address. Used as the login identifier.
Must be at least 10 characters, containing at least one uppercase letter, one lowercase letter, and one digit.
Installer’s given name.
Installer’s family name.
Name of the installer’s employer or contracting company.
201 Created
Register with email confirmation
POST /api/v1/installer/signup-with-confirmation
Same as signup, but the account is created in a pending_verification state. Dynamo CSMS sends a confirmation email; the installer must click the link before they can log in.
Accepts the same body as POST /api/v1/installer/signup.
201 Created
Log in
POST /api/v1/installer/login
Authenticates an installer and returns a JWT access token. Include this token as Authorization: Bearer <access_token> in all subsequent installer API calls.
The installer’s registered email address.
The installer’s password.
200 OK
JWT token to use in the
Authorization: Bearer header.Always
"Bearer".Token lifetime in seconds (default 3600 — 1 hour).
The authenticated installer’s ID.
Log out
POST /api/v1/installer/logout
Invalidates the current access token server-side. After logging out, the token will be rejected on all subsequent requests.
204 No Content
Request password reset
POST /api/v1/installer/forgot-password
Sends a password reset email to the specified address if an account exists. The response is always 200 OK regardless of whether the email is registered, to prevent account enumeration.
The email address associated with the installer account.
200 OK
Reset password
POST /api/v1/installer/reset-password
Completes a password reset using the token from the email link.
The reset token extracted from the password reset email link.
The new password. Must meet the same strength requirements as signup.
200 OK
Get profile
GET /api/v1/installer/profile
Returns the authenticated installer’s profile information.
200 OK
Update profile
PUT /api/v1/installer/profile
Updates the authenticated installer’s profile. All fields are optional — only include the ones you want to change.
Updated given name.
Updated family name.
Updated company name.
Contact phone number in E.164 format (e.g.
"+1-555-0100").200 OK — returns the full updated profile object (same schema as GET profile).
Get verification status
GET /api/v1/installer/verification-status
Returns the current identity verification state for the installer account.
200 OK
true when identity verification has been approved.One of
not_submitted, under_review, approved, rejected.Human-readable reason if status is
rejected, otherwise null.Submit identity verification
POST /api/v1/installer/verify-identity
Submits identity documents for review. Verification is required before an installer can commission charge points in production.
Type of identity document. One of:
passport, drivers_license, national_id.The document’s identification number.
Document expiry date in
YYYY-MM-DD format.URL of an uploaded selfie image for liveness check. Upload the image to your storage first and provide the URL.
URL of the front-of-document image.
URL of the back-of-document image. Required for
drivers_license and national_id.202 Accepted
Accept terms of service
POST /api/v1/installer/accept-terms
Records that the installer has accepted the current Dynamo CSMS Terms of Service. This must be called before the installer can register charge points.
The version string of the terms being accepted (e.g.
"2024-01"). You can find the current version in your Dynamo CSMS dashboard.200 OK
Error responses
| Status | Code | Meaning |
|---|---|---|
400 | validation_error | One or more required fields are missing or invalid |
401 | invalid_credentials | Email or password is incorrect |
401 | token_expired | The access token has expired — log in again |
403 | account_pending | Account not yet email-confirmed |
403 | identity_required | Identity verification needed before this action |
403 | terms_required | Terms of service must be accepted first |
409 | email_taken | An account with this email already exists |
422 | weak_password | Password does not meet strength requirements |