Creates a module component. For integration-created modules, set source to userCreated.
When source is userCreated, Scanifly automatically creates a company component-library entry for the new module and stores any optional metadata on that entry.
Module Library API
Use the Module Library API to create and manage user-created module components and add those modules to a company's component library.
Base URL
https://api.portal.scanifly.comAll endpoints are versioned under /api/v1.
Authentication
Send your Scanifly API token on each request:
x-api-token: YOUR_API_TOKENMain Workflow
- Create a user-created module component. Scanifly automatically creates the company library entry when
sourceisuserCreated. - Read the company module library to confirm the module is available.
- Update entry metadata such as nickname, tags, notes, favorite status, or texture override.
- Add an existing component to the library directly only when you already have a component ID and need to create the library entry separately.
Endpoints
| Method | Endpoint | Purpose |
|---|---|---|
GET | /api/v1/component/module | List module components |
POST | /api/v1/component/module | Create a user-created module component |
PUT | /api/v1/component/module/{componentId} | Update an existing module component |
GET | /api/v1/component/library/module | List module library entries |
POST | /api/v1/component/library | Add a component to the library |
PUT | /api/v1/component/library/{componentLibraryEntryId} | Update library entry metadata |
DELETE | /api/v1/component/library/{componentLibraryEntryId} | Delete a library entry |
Create a Module and Library Entry
POST /api/v1/component/module
The source for integration-created modules should be userCreated. When source is userCreated, Scanifly creates the module component and automatically adds it to the authenticated user's company library. Optional metadata is stored on that auto-created library entry.
{
"model": "ABC-450",
"manufacturer": "Example Solar",
"source": "userCreated",
"maxPowerOutput": 450,
"maxPowerVoltage": 41.2,
"maxPowerCurrent": 10.92,
"openCircuitVoltage": 49.8,
"shortCircuitCurrent": 11.45,
"dimensions": {
"length": 1900,
"width": 1134
},
"cellQuantity": 144,
"tempCoefficientMaxPower": -0.35,
"tempCoefficientOpenCircuit": -0.28,
"tempCoefficientShortCircuit": 0.05,
"cellType": "monoSi",
"defaultTexture": "module-monocrystalline",
"metadata": {
"nickname": "Example 450W",
"tags": ["preferred", "residential"],
"isFavorite": true
}
}Required Module Fields
| Field | Notes |
|---|---|
model | Module model name, maximum 100 characters |
manufacturer | Manufacturer name, maximum 100 characters |
source | Use userCreated for integration-created modules |
maxPowerOutput | Maximum output |
maxPowerVoltage | Maximum power voltage, Vmp/V |
maxPowerCurrent | Maximum power current, Imp/A |
openCircuitVoltage | Open circuit voltage in volts |
shortCircuitCurrent | Short circuit current in amps |
dimensions.length | Module length in millimeters, greater than 0 |
dimensions.width | Module width in millimeters, greater than 0 |
cellQuantity | Quantity of cells |
tempCoefficientMaxPower | Temperature coefficient of max power, %/C |
tempCoefficientOpenCircuit | Temperature coefficient of open circuit voltage, %/C |
tempCoefficientShortCircuit | Temperature coefficient of short circuit current, %/C |
cellType | One of the supported module cell type enum values |
defaultTexture | One of the supported module texture enum values |
Some electrical fields may not be available in every partner system. When building an integration, confirm whether the source system stores these values directly, derives them from a product catalog, or needs a fallback product-data lookup before sending the module to Scanifly.
Add an Existing Module to the Library
POST /api/v1/component/library
Use this endpoint when a module component already exists and you need to create a library entry for it separately.
{
"componentType": "module",
"componentId": "MODULE_COMPONENT_ID",
"metadata": {
"nickname": "Example 450W",
"tags": ["preferred", "residential"],
"isFavorite": true
}
}Metadata is optional and can include:
| Field | Purpose |
|---|---|
nickname | Company-specific display name |
notes | User notes |
internalSku | Company-specific SKU |
tags | Search/filter labels |
textureOverride | Custom 3D scene texture identifier |
isFavorite | Marks the module as a favorite |
Filtering and Sorting
GET /api/v1/component/module
filterBy[source][0]=userCreated
filterBy[cellType]=monoSi
filterBy[defaultTexture]=module-monocrystalline
sortBy[model]=asc
sortBy[updatedAt]=descGET /api/v1/component/library/module
filterBy[componentType]=module
filterBy[componentId]=MODULE_COMPONENT_ID
filterBy[searchText]=exampleSupported Enum Values
cellType
cellTypemonoSimultiSipolySiciscigscdteamorphous
defaultTexture
defaultTexturemodule-monocrystallinemodule-polycrystallinemodule-lg-neonmodule-monocrystalline-blackmodule-sunpower-xmodule-sunpower-x-blackmodule-polycrystalline-2module-monocrystalline-3module-monocrystalline-black-4module-monocrystalline-black-5
401 403 404
