ERM Rest API: new CodeGen Endpoints¶
The Omnivoltaic API provides a comprehensive set of endpoints for interacting with the Omnivoltaic platform. This API allows distributors, agents, and administrators to manage devices, generate codes, and perform various operations related to the Omnivoltaic ecosystem.
Base URL¶
All API requests should be made to the following base URL:
Authentication¶
Most endpoints require authentication using an access token.
/user/login¶
URL:
Request headers:
| Header | Value |
|---|---|
| Content-Type | application/json |
Request body:
Successful response example:
Product Identification¶
Products can be identified using any of the following IDs:
- OEMItemID
- SellerItemId/PPID/Account Number
- ERMId
Key Endpoints¶
User Management¶
/user/login— Authenticate and obtain an access token
Code Generation¶
/otp/daysCode/v2— Generate days activation codes for devices/code/code/freecodeotp/v2— Generate free codes for permanent device unlocking/code/code/resetcode/v2— Generate reset codes to return devices to locked state/oves/v2/codeHistoryList/{productID}/{offset}/{limit}— History of committed codes
Generate Days Code¶
This API is used to generate an OTP for the given product ID.
productId can be the device's OEMItemID, SellerItemID, or ERM ID, as returned by the assignedItemsList GET API.
The "days" parameter must be a value between 1 and 1095.
Endpoint: https://api.omnivoltaic.com/otp/daysCode/v2
Headers
| Header | Value |
|---|---|
| Authorization | Authorization: {{authorization}} |
| Content-Type | application/json |
Example request
curl --location 'https://api.omnivoltaic.com/otp/daysCode/v2' \
--header 'Authorization: {{authorization}}' \
--header 'Content-Type: application/json' \
--data '{"productId":"TEST2503000017","days":5}'
Example Requests
- Response expected:
{
"message": "Succeed",
"otpCount": 0,
"code": "*024 413 975 593 119 504 641#",
"otpHash": "9184C537B9EFDD01"
}
Generate Free Code¶
A "free code" is a special code that will cause an Omnivoltaic device to unlock permanently, that is free to use.
This API is used to generate "free code", and commit a state change to the code-generator, for the given product ID.
productId can be the device's OEMItemID, SellerItemID, or ERM ID, as returned by the assignedItemsList GET API.
Endpoint: https://api.omnivoltaic.com/code/code/freecodeotp/v2
Headers
| Header | Value |
|---|---|
| Authorization | Authorization: {{authorization}} |
| Content-Type | application/json |
Example request
curl --location 'https://api.omnivoltaic.com/code/code/freecodeotp/v2' \
--header 'Authorization: {{authorization}}' \
--header 'Content-Type: application/json' \
--data '{"productId":"TEST2503000017"}'
Example Requests
Response expected
Generate Reset Code¶
A "reset code" is a special code that will cause an Omnivoltaic device to go to a "0-day locked" state.
This API is used to generate "reset code", and commit a state change to the code-generator, for the given product ID.
productId can be the device's OEMItemID, SellerItemID, or ERM ID, as returned by the assignedItemsList GET API.
Endpoint: https://api.omnivoltaic.com/code/code/resetcode/v2
Headers
| Header | Value |
|---|---|
| Authorization | Authorization: {{authorization}} |
| Content-Type | application/json |
Example request
curl --location 'https://api.omnivoltaic.com/code/code/resetcode/v2' \
--header 'Authorization: {{authorization}}' \
--header 'Content-Type: application/json' \
--data '{"productId":"TEST2503000017"}'
Example Requests
Response Expected
Token Code History¶
codeHistoryList (GET)¶
Returns the history of committed codes for a product.
Endpoint
Path parameters:
| Parameter | Description |
|---|---|
| productID | The device's product identifier from the assignedItemsList GET API (can be ERM ID, OEMItemID, or SellerItemID; same identifiers you use for code generation). |
| offset | Pagination: how many records to skip. |
| limit | Pagination: how many records to return. |
Example Requests
Endpoint
https://api.omnivoltaic.com/oves/v2/codeHistoryList/64ba2e1eaa6c7f107d7a8918/0/10
Example request
Endpoint
https://api.omnivoltaic.com/oves/v2/codeHistoryList/01AH2307000009/0/10
Example request
Headers
| Header | Value |
|---|---|
| Authorization | Your bearer or session token (e.g. {{authorization}}). |
| Content-Type | application/x-www-form-urlencoded |
Example response (200 OK, for any selected product ID tab)
{
"page": {
"edges": [
{
"cursor": "YXJyYXljb25uZWN0aW9uOjA=",
"node": {
"_id": "69c500938a5dfe4b5d56f5eb",
"codeType": "DAYSCODE",
"codeDays": 60,
"codeHexString": "7F1E998A6EBE89D3",
"codeDecString": "*021 327 118 181 857 980 883#",
"codeNumber": 21,
"createdAt": "2026-03-26T09:46:59.000Z",
"updatedAt": "2026-03-26T09:46:59.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjE=",
"node": {
"_id": "69c4ff9d8a5dfe4b5d56f5e1",
"codeType": "DAYSCODE",
"codeDays": 5,
"codeHexString": "4333AEFC41A17EDD",
"codeDecString": "*011 274 606 041 101 102 813#",
"codeNumber": 20,
"createdAt": "2026-03-26T09:42:53.000Z",
"updatedAt": "2026-03-26T09:42:53.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjI=",
"node": {
"_id": "69c4ff9265294b928d6ef41a",
"codeType": "DAYSCODE",
"codeDays": 5,
"codeHexString": "0B6319B11D0B5760",
"codeDecString": "*001 910 440 170 487 282 528#",
"codeNumber": 19,
"createdAt": "2026-03-26T09:42:42.000Z",
"updatedAt": "2026-03-26T09:42:42.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjM=",
"node": {
"_id": "69c4c7508a5dfe4b5d56f33f",
"codeType": "RESETCODE",
"codeDays": 2192,
"codeHexString": "E578757C4C293D69",
"codeDecString": "*038 498 768 601 277 771 113#",
"codeNumber": 18,
"createdAt": "2026-03-26T05:42:40.000Z",
"updatedAt": "2026-03-26T05:42:40.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjQ=",
"node": {
"_id": "69c4c7438a5dfe4b5d56f33e",
"codeType": "FREECODE",
"codeDays": 1096,
"codeHexString": "6C9E95CF4CBD071C",
"codeDecString": "*018 223 323 671 287 456 540#",
"codeNumber": 17,
"createdAt": "2026-03-26T05:42:27.000Z",
"updatedAt": "2026-03-26T05:42:27.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjU=",
"node": {
"_id": "695e5b292b7a59f5b9dba9ca",
"codeType": "DAYSCODE",
"codeDays": 0,
"codeHexString": "A038D89C2A98C13D",
"codeDecString": "*026 880 800 280 714 654 013#",
"codeNumber": 16,
"createdAt": "2026-01-07T13:10:01.000Z",
"updatedAt": "2026-01-07T13:10:01.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjY=",
"node": {
"_id": "695b3b049ace409404837835",
"codeType": "DAYSCODE",
"codeDays": 60,
"codeHexString": "A038D89C2A98C13D",
"codeDecString": "*026 880 800 280 714 654 013#",
"codeNumber": 15,
"createdAt": "2026-01-05T04:16:04.000Z",
"updatedAt": "2026-01-05T04:16:04.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjc=",
"node": {
"_id": "695b3afa4e870342cde5c469",
"codeType": "DAYSCODE",
"codeDays": 60,
"codeHexString": "A3CEB5E56CCE06CD",
"codeDecString": "*027 482 331 891 825 441 485#",
"codeNumber": 14,
"createdAt": "2026-01-05T04:15:54.000Z",
"updatedAt": "2026-01-05T04:15:54.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjg=",
"node": {
"_id": "695b3af2a5961f65ed0a6ef1",
"codeType": "DAYSCODE",
"codeDays": 60,
"codeHexString": "BE2A5D9A5436855A",
"codeDecString": "*031 904 475 141 412 859 226#",
"codeNumber": 13,
"createdAt": "2026-01-05T04:15:46.000Z",
"updatedAt": "2026-01-05T04:15:46.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
},
{
"cursor": "YXJyYXljb25uZWN0aW9uOjk=",
"node": {
"_id": "6957dbed84fab32d83a48c9e",
"codeType": "DAYSCODE",
"codeDays": 15,
"codeHexString": "30F5630E78F15334",
"codeDecString": "*008 213 880 462 029 081 396#",
"codeNumber": 12,
"createdAt": "2026-01-02T14:53:33.000Z",
"updatedAt": "2026-01-02T14:53:33.000Z",
"__typename": "CodeEvent"
},
"__typename": "CodeEventEdge"
}
],
"pageInfo": {
"hasPreviousPage": false,
"hasNextPage": true,
"__typename": "CodeEventPageInfo"
},
"__typename": "CodeEventConnection"
},
"pageData": {
"count": 27,
"limit": 10,
"offset": 0,
"__typename": "PageData"
}
}
codeHistoryMetadata (GET)¶
This API returns metadata (table/column structure) related to committed codeHistory.
Endpoint
Headers
| Header | Value |
|---|---|
| Authorization | {{authorization}} |
| Content-Type | application/x-www-form-urlencoded |
Curl example
curl --location 'https://api.omnivoltaic.com/oves/codeHistory_Metadata' \
--header 'Authorization: {{authorization}}' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data ''
Response
{
"tableName": "codeHistory",
"tableDescription": "",
"totalColumns": 5,
"columns": [
{
"Field": "codeHistoryID",
"Type": "int(11)"
},
{
"Field": "otpGeneratorID",
"Type": "int(11)"
},
{
"Field": "codeIndex",
"Type": "tinyint(4)"
},
{
"Field": "codeValue",
"Type": "varchar(45)"
},
{
"Field": "codeDate",
"Type": "datetime"
}
]
}
Rate Limits and Constraints¶
- Frequency Limit: Minimum 6 seconds between code generation requests
- Code Limit Count: Products cannot exceed 1096 days (unlocked after this limit)
- Daily Code Count Limit: Maximum 10 codes per day
- Credit Stacking Limit: Set according to distributor preferences