Wenn API (latest)

Download OpenAPI specification:Download

API documentation.

API is built on HTTP and is RESTful. It has predictable resource URLs and returns HTTP response codes.

Introduction

Wenn ASA was founded in 2017 in Stavanger, Norway. Our innovative technology automatically detects damages on cars. By enhancing the assessment of vehicle conditions, Wenn ASA makes the rental experience more efficient and accurate, benefiting both rental companies and customers. We are developing solutions to improve damage handling. Our AI streamlines the process of detecting and documenting car damage for the whole car industry. We are focusing on taking away the pain points in the car rental process, with successful operations on major European car rental locations.

Basic terms

  • CaptureUnit - A physical camera rig to record the car as it drives by. The recordings are turned into imagesets
  • CaptureSets - A set of two Capture Units
  • Passing - When the car drives through a capture set, it is called a passing/passage
  • ImageSets - The video recording of the car driving through the capture sets is processed and a few selected frames are chosen (depending on tenant settings) and turned into an imageset
  • Tenants - Each customer has their own unique tenant in the Wenn Cloud Solution. Each tenant has access to a Capture Set and the passings through this capture set will appear in the tenant

Main concept

Capture sets are installed at the location and cars drive through the capture sets. There are normally one capture set for RETURN and one capture set for PICKUP. The recordings are sent to the Wenn Cloud solution were the passing is turned into an imageset and sent to the correct tenant based on the license plate assignments. Based on tenant settings, the car will receive ML damage processing

Authentication

Wenn uses a JWT token.  Use to make short-life tokens that expire after one hour. The token authorizes all requests and allows access to the API. A Bearer Token must be set in every API call's Authorization header.

annotatorJobs

Get statistics about annotator jobs.

Get statistics about annotator jobs based on timestamp range [startDate, endDate]. These parameters are given in query string. For every annotator with non zero result, it returns total annotated jobs and reviewed jobs. Also returns information about stray annotations / reviews. If startDate and endDate not given, it returns results from last 90 days. If either startDate or endDate is given, then it also returns 90 days range based on provided param.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
startDate
integer <int64>

Start of date range as a timestamp

endDate
integer <int64>

End of date range as a timestamp

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "statistics about annotator jobs fetched successfully",
  • "success": true
}

Add reviewer to the waiting queue

Allows a reviewer to add themselves to the waiting queue, when no review jobs are available

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
reviewerId
string <uuid>

Reviewer's ID

Responses

Request samples

Content type
application/json
{
  • "reviewerId": "047040ea-c47a-4866-8390-53451374057d"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Reviewer successfully placed in the queue",
  • "success": true
}

captureUnits

Returns list of capture units

Returns list of capture units with it's details. Cannot fetch virtual capture units. Use GET /captureSets to fetch info about virtual rigs.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
limit
integer

limit number of capture units to be returned

page
integer

page number to be returned

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    },
  • "success": true
}

Returns details of capture unit

Returns details of capture unit. Cannot fetch virtual capture unit. Use GET /captureSets to fetch info about virtual rig

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

identifier of capture unit

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Fetched capture unit details successfully",
  • "success": true
}

Assign tenants to capture unit

Assign tenants to capture unit. You cannot modify virtual capture unit using this endpoint.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

identifier of capture unit

Request Body schema: application/json
tenants
Array of strings <uuid> [ items <uuid > ]

Tenants uuids to assign

Responses

Request samples

Content type
application/json
{
  • "tenants": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Assigned tenants to capture unit successfully",
  • "success": true
}

Set default tenant for capture units

Set default tenant for capture units. You cannot modify virtual capture unit using this endpoint.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

identifier of capture unit

Request Body schema: application/json
tenant
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "tenant": "f71e2466-af9c-4f98-b2dc-c3cfed1165f5"
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "message": "The capture units default tenant is set successfully",
  • "success": true
}

Unassign tenants from capture unit

Unassign tenants from capture unit. You cannot modify virtual capture unit using this endpoint.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

ID of the unit

Request Body schema: application/json
tenants
Array of strings <uuid> [ items <uuid > ]

Responses

Request samples

Content type
application/json
{
  • "tenants": [
    ]
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Successfully unassigned tenants from capture unit",
  • "success": true
}

captureSets

List capture sets

List regular or virtual capture sets from all or specified tenant (s

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
virtual
boolean
Default: null

Either true or false, depends on capture set type

logos
boolean
Default: null

Requests signed urls of tenant logos if turned on

fromAllTenants
boolean
Default: false

Either true or false, only for Global Admin

limit
integer
Default: 10

limit number of capture sets to be returned

page
integer
Default: 1

page number to be returned

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    },
  • "success": true
}

Create a new capture set

Creates a capture set from given capture units. You can also create virtual capture sets using this endpoint. When you want create virtual capture sets, do not provide "captureUnits" field in body and use "virtual" flag in query params. You need to be either global admin or tenant admin to perform this operation. You can have maximum 1000 virtual rigs per tenant. By default, passages generated by that device set will have the same machine learning pipeline what the related tenant. If the "lenses" parameter is not provided, the default values for lenses will be used.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
virtual
boolean

Either true or false, depends on capture set type. By default set to false

Request Body schema: application/json
Array of objects
countryCode
string
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

Country code

defaultAlprImage
string
Default: "rear"
Enum: "rear" "front"

Default image used for license plate detection by the ALPR system

label
string
Enum: "return" "pickup"

Label for the capture set

object
location
string

Capture set location

name
string

Capture set name

pipelineMask
Array of strings

ML pipeline mask. If you add ML job name to this mask, this job will be not started even if it is in tenant's settings. Must contain elements within [damage_detection, part_detection]

priority
integer >= 0
Default: 0

Define priority of the processing passages. The higher the priority is, the sooner the passage will be processed

camerasCount
integer

Number of cameras

Responses

Request samples

Content type
application/json
{
  • "camerasCount": 6,
  • "captureUnits": [
    ],
  • "countryCode": "NO",
  • "label": "return",
  • "lenses": {
    },
  • "location": "Norway",
  • "name": "My first capture set",
  • "pipelineMask": [
    ],
  • "priority": 0
}

Response samples

Content type
application/json
{
  • "message": "New capture set created",
  • "success": true
}

Suggestions for captureSets' field values

Returns all fields values that contains given pattern (e.g. 'Norway' for 'no')

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
location
string
Example: location=it

location value pattern

name
string
Example: name=ex

name value pattern

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Get capture set details

Get capture set details and related units

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the capture set

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Get capture set details",
  • "success": true
}

Update the given capture set details

Update the given capture set details. Cannot modify virtual capture set.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the capture set

Request Body schema: application/json
Array of objects
countryCode
string
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

Country code

defaultAlprImage
string
Default: "rear"
Enum: "rear" "front"

Default image used for license plate detection by the ALPR system

label
string
Enum: "return" "pickup"

Label for the capture set

object
location
string

Capture set location

name
string

Capture set name

pipelineMask
Array of strings

ML pipeline mask. If you add ML job name to this mask, this job will be not started even if it is in tenant's settings. Must contain elements within [damage_detection, part_detection]

priority
integer >= 0
Default: 0

Define priority of the processing passages. The higher the priority is, the sooner the passage will be processed

camerasCount
integer

Number of cameras

Responses

Request samples

Content type
application/json
{
  • "camerasCount": 6,
  • "captureUnits": [
    ],
  • "countryCode": "NO",
  • "defaultAlprImage": "rear",
  • "label": "return",
  • "lenses": {
    },
  • "location": "Norway",
  • "minLicensePlateArea": 25000,
  • "name": "My first capture set",
  • "pipelineMask": [
    ],
  • "priority": 0
}

Response samples

Content type
application/json
{
  • "message": "Capture set updated",
  • "success": true
}

cars

Delete car from a tenant's list

Deletes car from a tenant's list. If car belongs to another tenant, then error occurres. Otherwise car is being deleted.

Authorizations:
oAuthWenn.ai
query Parameters
registrationNo
required
string

a valid registration number of car to delete

countryCode
string
Default: "NO"
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

country code of the given registration number. Can be provided in either lowercase or uppercase. If not provided NO will be set.

masterTenantAction
string
Default: "false"
Enum: "false" "true"

when provided with value true and the users tenant is a master tenant, then the operation will be executed for all the tenants that belong to groups, where the current tenant is a master tenant.

Responses

Response samples

Content type
application/json
{
  • "data": "NO#32167",
  • "message": "Car successfully deleted",
  • "success": true
}

Get list of cars

Get list of cars that are assigned to a tenant, check weather they have recent damages or check if they can be assigned to passages

Authorizations:
oAuthWenn.ai
query Parameters
limit
integer
Default: 100

limit number of registration numbers to be returned

page
integer
Default: 1

page number to be returned

hasDamages
boolean
Default: null

Either true or false, determines if checking the damages of car

carIds
string
Example: carIds=12345678-abcd-abcd-abcd-123456789012,12345678-wxyz-wxyz-wxyz-123456789012

list of car ids divided by a comma, these would be checked if have damages

passageIds
string
Example: passageIds=12345678-abcd-abcd-abcd-123456789012,12345678-wxyz-wxyz-wxyz-123456789012

list of passages ids divided by a comma- together with country code and registration number checks if a car can be assigned to given passages

countryCode
string
Default: "NO"
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

country code of the given registration number. Can be provided in either lowercase or uppercase. If not provided NO will be set.

registrationNo
string

a valid registration number of car

tenantId
string

allows for filtering out cars of a given tenant, if not provided the currently logged tenant will be set

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    },
  • "success": true
}

Assign (by adding) cars to a tenant

Allows tenant admin to add cars (registration numbers) to a tenant. Sending an empty list returns error. If the registration number is already assigned to the current tenant, nothing is changed. If a registration number already exist in the DB as assigned to other tenant, an error occurs. Both of newly assigned and already assigned cars are returned in the response. Unassigned passings and imagesSets will be updated. Provide registration numbers list in dictionary where corresponding keys are country codes.

Authorizations:
oAuthWenn.ai
query Parameters
masterTenantAction
string
Default: "false"
Enum: "false" "true"

when provided with value true and the users tenant is a master tenant, then the operation will be executed for all the tenants that belong to groups, where the current tenant is a master tenant.

Request Body schema:
Array of objects (carInfo)

if you set cars then registrationNumbersByCountryCode will be ignored

registrationNumbersByCountryCode
required
object

Country codes with corresponding lists of registration numbers within them

Responses

Request samples

Content type
{
  • "cars": [
    ],
  • "registrationNumbersByCountryCode": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Car assignments have been updated",
  • "success": true
}

Assign (by overwriting) cars to a tenant

Allows tenant admin to overwrite cars assignments (registration numbers) in a tenant. Sending an empty list removes all existing assignments for the tenant. If a registration number already exist in the DB as assigned to other tenant, then only valid license plates are assigned. Unassigned passings and imagesSets will be updated. Provide registration numbers list in dictionary where corresponding keys are country codes.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
masterTenantAction
string
Default: "false"
Enum: "false" "true"

when provided with value true and the users tenant is a master tenant, then the operation will be executed for all the tenants that belong to groups, where the current tenant is a master tenant.

Request Body schema:
Array of objects (carInfo)

if you set cars then registrationNumbersByCountryCode will be ignored

registrationNumbersByCountryCode
required
object

Country codes with corresponding lists of registration numbers within them

Responses

Request samples

Content type
{
  • "cars": [
    ],
  • "registrationNumbersByCountryCode": {
    }
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Car assignments have been updated",
  • "success": true
}

damages

Delete damages

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
ids
string
Example: ids=12345678-abcd-abcd-abcd-123456789012,12345678-efgh-efgh-efgh-123456789012

List of damagesIds to be deleted, separated by comas

deleteRepresentatives
boolean

Filter for deleting list of representatives ids; possible values are: true, false

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Successfully deleted damages",
  • "success": true
}

List of damages

Returns a paginated list of damages filtered out by given query params values. Different sorting options are possible, like sorting by the proximity to the given frame in the image set or by the time of occurrence. In order to sort results by proximity, please provide values for both query params: closestToImageSetId and closestToImageId. Other kind of sorting is available via sortBy query parameter. By default, if tenantId and countryCode+registrationNo is provided in the query params, in the response all damages with: state created/accepted, firstDamageId equal to null will be returned. If imageSetId query parameter is provided (and no additional filtering is applied), all the damages with states created/accepted will be returned - including first occurrence damages and damages merged with the first occurrences (meaning: firstDamageId can have null and non-null values). To get damages for a particular car, a pair of tenant ID and the car's registration number has to be provided. filterByState, isDeleted, isPotential and sortBy query parameters are available only for tenant admins, annotators and reviewers. The included information about size of a damage is always given in mm. returnRepresentatives query parameter which by default is set to true, provides representative damages from list of damages.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
appraisalId
string <uuid>
imageSetId
string <uuid>
tenantId
string <uuid>
countryCode
string
Default: "NO"
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

Country code

registrationNo
string

a valid registration number of car

closestToImageSetId
string <uuid>

Together with 'closestToImageId' enables sorting the results list (potentially closest damages first)

closestToImageId
string <uuid>

Together with 'closestToImageSetId' enables sorting the results list (potentially closest damages first)

filterByState
string
Example: filterByState=accepted,created,suggested

selected filter for damage boxes; comma separated values of wanted states, possible values are: accepted, created, suggested, annotated, rejected

isPotential
string
Enum: "true" "false"

selected filter for damage boxes; possible values are: true, false

isDeleted
string
Enum: "true" "false"

selected filter for damage boxes; possible values are: true, false

returnRepresentatives
string
Enum: "true" "false"

selected filter for damage boxes; possible values are: true, false.

returnFamilyOf
string <uuid>

representativeId of requested damage family.

sortBy
string
Enum: "default" "timestamp"

possible values are: default, timestamp (newest first)

limit
integer

limit number of damages to be returned

page
integer

page number to be returned

masterTenantAction
bool

return all damages for related tenants; possible values are: true, false

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Successfully fetched damages with related parts",
  • "metadata": {
    },
  • "success": true
}

Update damages data

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
Array of objects[ items >= 2 properties ]

Responses

Request samples

Content type
application/json
{
  • "damages": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Successfully updated damages",
  • "success": true
}

Create new damages

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
Array of objects
Array of objects

Array of damages found on pictogram

Responses

Request samples

Content type
application/json
{
  • "damages": [
    ],
  • "pictogramDamages": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Successfully created damages",
  • "success": true
}

Merge unique damage first occurrences

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
damages
Array of strings <UUID> [ items <UUID > ]

Ids of damages first occurrences to merge

Responses

Request samples

Content type
application/json
{
  • "damages": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "Successfully merged unique damages",
  • "success": true
}

Get single damage

Returns a single damage of given ID.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Fetched damage details successfully",
  • "success": true
}

images

List of images

Lists images related to the imageSet

query Parameters
imageSetId
required
string <uuid>
Example: imageSetId=12345678-abcd-abcd-abcd-123456789012

ID of an image set

forReview
boolean

Either true or false, returns images with visible damages

Responses

Response samples

Content type
application/json
{
  • "listImages": {
    },
  • "listImagesForReview": {
    }
}

Delete single image by ID

Deletes single image by ID

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: 12345678-abcd-abcd-abcd-123456789012

ID of an image

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Image deleted successfully",
  • "success": true
}

Get single image by ID

Gets single image by ID. If successful, the endpoint responds with '302 - Found', which redirects to the right image (based on the 'Location' header).

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: 12345678-abcd-abcd-abcd-123456789012

ID of an image

Responses

Response samples

Content type
application/json
{
  • "message": "URL to the content in the Location header",
  • "success": true
}

imageSets

Get image sets list

Get the list of the image sets.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
tenantId
string <uuid>
Example: tenantId=12345678-fghj-fghj-fghj-123456789012

tenantId as UUID string

ids
string
Example: ids=12345678-abcd-abcd-abcd-123456789012,12345678-wxyz-wxyz-wxyz-123456789012

List of imageSetIds, separated by coma to filter by

limit
integer
Example: limit=50

Limit number of image sets to be returned per page

page
integer
Example: page=1

Page number to be returned

registrationNo
string
Example: registrationNo=ABC123

Filter by car registration number. Please provide also country code

countryCode
string
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

Filter by country code of car registration number. If not provided but registrationNo given- 'NO' is the default value

unassignedItems
boolean

filters image sets (not) related to any tenant

isManualProcessingSkipped
boolean

filter image sets with manual annotation (not) skipped

haveImages
boolean

if set to true, returns image set with images only

haveNewDamagesDetected
boolean

if set to true, returns image sets that have new damages detected

startDate
integer <int64>
Example: startDate=1600000000

Timestamp to filter image sets younger than timestamp; should not be later than endDate

endDate
integer <int64>
Example: endDate=1700000000

Timestamp to filter image sets older than timestamp; should not be earlier than startDate

captureSetLocation
string
Example: captureSetLocation=Norway

a value for the capture set's location to filter results

captureSetName
string
Example: captureSetName=name

a value for the capture set's name to filter results

searchByCaptureSetLocation
string
Example: searchByCaptureSetLocation=nor

a value for the capture set's location to search by

searchByCaptureSetName
string
Example: searchByCaptureSetName=na

a value for the capture set's name to search by

searchByRegistrationNo
string
Example: searchByRegistrationNo=ABC1

a value for registration number to search by

groupByRegistrationNo
boolean

If set to true returns aggregated results, grouped by registrationNo; for each registrationNo additionally returns fields as imageSetCount, lastRecDate or damagesInLatestPassage

returnImageCount
boolean

If set to true returns image count for every image set

forManualAnnotation
boolean

Available only for the annotator role. If set to true, returns exactly one job (image set) for the annotator. If not provided, it is set to false by default

forManualReview
boolean

Available only for the reviewer role. If set to true, returns exactly one job (image set) for the reviewer. If not given it is set to false by default

Responses

Response samples

Content type
application/json
Example
{
  • "data": {
    },
  • "meta": {
    },
  • "success": true
}

Create a new image set

Creates a image set for images, which are going to be added later. If country code not provided, NO will be set.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
countryCode
string
Default: "NO"
Enum: "NO" "DE" "DK" "AT" "ES" "FR" "GB" "SE" "CH"

Country code

deviceSetId
string <uuid>

Capture set ID

recDate
string

Date timestamp of image set creation

registrationNo
string

a valid registration number of car

tenantId
required
string <uuid>
vin
string

a valid vin number of car

Responses

Request samples

Content type
application/json
{
  • "countryCode": "DK",
  • "deviceSetId": "00000000-af9c-4f98-b2dc-c3cfed110000",
  • "recDate": "1669982152",
  • "registrationNo": "KL9802",
  • "tenantId": "f71e2466-af9c-4f98-b2dc-c3cfed1165f5",
  • "vin": "JH4KA8162MC010197"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Successfully added new image set",
  • "success": true
}

Assign image sets to tenant

Assign unassigned items to the current tenant

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
required
Array of objects

Responses

Request samples

Content type
application/json
{
  • "imageSets": [
    ]
}

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "success": true
}

Counts image sets

Counts image sets in annotation or review processes. At least one query param- either 'forManualReview' or 'forManualAnnotation' has to be set to 'true'

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
forManualReview
boolean

if set to true, counting review jobs

forManualAnnotation
boolean

if set to true, counting annotation jobs

Responses

Response samples

Content type
application/json
{
  • "forManualAnnotation": {
    },
  • "forManualReview": {
    },
  • "message": "Image sets counted successfully",
  • "success": true
}

Check if image sets have new / recent damages.

Checks if image sets with given ids are related with damages that first occurrence is within last 120h. If has damages within last 24h - labels them as 'new' If has damages within last 120h - labels them an 'recent'

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
ids
required
string
Example: ids=12345678-abcd-abcd-abcd-123456789012,12345678-wxyz-wxyz-wxyz-123456789012

list of image set ids divided by a comma

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Successfully checked if imageSets have new / recent damages",
  • "success": true
}

Redirect image set to allowed tenant

Redirect user to allowed tenant

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
imageSetIds
required
Array of strings <uuid> [ items <uuid > ]
refreshToken
string

Responses

Request samples

Content type
application/json
{
  • "imageSetIds": [
    ],
  • "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Delete image set by ID

Soft delete image set with related damage boxes and images

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to delete

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Image set details

Returns details of given image set

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Update image set

Update details of given image set

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Request Body schema: application/json
object
partnerState
string
Enum: "accepted" "reviewed" "rejected"

Damage state from partners external applications

Responses

Request samples

Content type
application/json
{
  • "carInfo": {
    },
  • "partnerState": "reviewed"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Lock image set

Lock image set for annotation or review

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Request Body schema: application/json
manualProcess
string
Enum: "ANNOTATION" "REVIEW"

The type of manual process you wold like to lock image set

Responses

Request samples

Content type
application/json
{
  • "manualProcess": "ANNOTATION"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Update image set status

Update status of given image set

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Request Body schema: application/json
isSkipped
boolean
status
integer
Enum: 0 1 2

Manual processing status, 0 - before manual annotation, 1 - after annotation, 2 - after review

Responses

Request samples

Content type
application/json
{
  • "isSkipped": true,
  • "status": 2
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Trigger image set

Trigger image set

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Unlock image set

Unlock image set for annotation or review

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>

The ID of the image set you would like to access

Request Body schema: application/json
manualProcess
string
Enum: "ANNOTATION" "REVIEW"

Responses

Request samples

Content type
application/json
{
  • "manualProcess": "ANNOTATION"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

logos

Get list of logos

Get list of logos

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
tenantIds
required
string
Example: tenantIds=12345678-abcd-abcd-abcd-123456789012,12345678-efgh-efgh-efgh-123456789012

List of tenants ids you would like to fetch logos, separated by coma

Responses

Response samples

Content type
application/json
{}

Add a new logo

Allows to add a new logo to the given tenant. Returns a presigned URL for the file

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
fileName
string

Logo file name

tenant
string <uuid>

Responses

Request samples

Content type
application/json
{
  • "fileName": "image.jpg",
  • "tenantId": "f71e2466-af9c-4f98-b2dc-c3cfed1165f5"
}

Response samples

Content type
application/json
{
  • "data": {},
  • "message": "Pre-signed URL successfully created",
  • "success": true
}

apiKey

Creates an api key for a given user ID

Creates an api key for a given user ID in the body parameter. Description can be added optionally. After creating the Api Key, user can use it instead of authorization token when sending a request by attaching it to the "x-api-key" header value. Created api key exists until it is deleted. The API Key allows users to log in using generated keys. You can allow devices or services to communicate with App Services. If user doesn't exist exception occurs. If user has got already api key exception occurs. User must be a global admin to perform this operation. If operation done successfully endpoint returns information about created api key.

Authorizations:
oAuthWenn.ai
Request Body schema: application/json
description
string

Description for api key as string

userId
required
string <uuid>

User ID of which api key should be created.

Responses

Request samples

Content type
application/json
{
  • "description": "Example description",
  • "userId": "ac821ae7-c4c5-46cb-bc7a-50ceaee1a43e"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Api key successfully created",
  • "success": true
}

Deletes api key for a given user

Deletes api key of given user, based on user ID in path parameter. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.ai
path Parameters
id
required
string <uuid>

User ID of whom the api key should be deleted

Responses

Response samples

Content type
application/json
{
  • "message": "User successfully deleted",
  • "success": true
}

Gives information about api key

Gives information about api key and its description, based on given user ID in path parameter. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.ai
path Parameters
id
required
string <uuid>

User ID of which apiKey has to be returned

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "User successfully fetched",
  • "success": true
}

register

Register new user

Registers a new user. Phone number should include country to be able to receive a one time password for verification during the registration process.

Request Body schema: application/json
email
string <email>

Email address.

firstName
string

First name

lastName
string

Second name

password
required
string

Password policy uppercase letters, lowercase letters, numbers, minimum password length 8 chars

phone
required
string

Phone number of created account.

Responses

Request samples

Content type
application/json
{
  • "firstName": "John",
  • "lastName": "Doe",
  • "password": "passwordWithLettersNumbers1SpecialsLike!",
  • "phone": "+47000000000"
}

Response samples

Content type
application/json
{
  • "message": "User has been created, needs confirmation",
  • "success": true
}

Verifies registered user

Verifies a new user with one time password

Request Body schema: application/json
code
required
string

Code sent to provided phone number

username
required
string

Valid user phone number

Responses

Request samples

Content type
application/json
{
  • "code": "123ASD",
  • "username": "+47000000000"
}

Response samples

Content type
application/json
{
  • "message": "User has been verified",
  • "success": true
}

reset

Reset a users password

Submit a request for a new password, and start forgot password procedure to obtain a one time password to the verified phone number.

Request Body schema: application/json
username
required
string

Valid user phone number

Responses

Request samples

Content type
application/json
{
  • "username": "+47000000000"
}

Response samples

Content type
application/json
{
  • "message": "Please check your registered email or phone for validation code",
  • "success": true
}

Confirm password change

Confirm a password reset by submitting and verifying one time password from password reset procedure.

Request Body schema: application/json
code
required
string

Code sent to provided phone number

password
required
string

New password

username
required
string

Valid user phone number

Responses

Request samples

Content type
application/json
{
  • "code": "ASD123",
  • "password": "NewPasswordWithLettersNumbers1SpecialsLike!",
  • "username": "+47000000000"
}

Response samples

Content type
application/json
{
  • "message": "Please check your registered email or phone for validation code",
  • "success": true
}

token

Refresh token

Use a Refresh Token to exchange the one you received during authorization for a new ID Token.

Request Body schema: application/json
refreshToken
required
string

Refresh token received during login procedure

username
required
string

Valid user phone number

Responses

Request samples

Content type
application/json
{
  • "refreshToken": "eyJhbGciOiCJ9.eyJzdWIIiwiaTE2MjM5MDIyfQ.SflKSMeKKF2Qssw5c",
  • "username": "+47000000000"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "expiresIn": 3600,
  • "success": true
}

tenantGroups

List available tenant groups.

List all tenant groups in the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
limit
integer

Limit number of tenant groups to be returned

page
integer

Page number to be returned

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "expiresIn": 3600,
  • "meta": {
    },
  • "success": true
}

Create new tenant group

Create a new tenant group in the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
members
Array of strings <uuid> [ items <uuid > ]

Optional field including tenant ids which will be added to the group

name
required
string

Tenant's group name

powerTenantId
string <uuid>

Optional field including ID of tenant which will become power tenant of the group

Responses

Request samples

Content type
application/json
{
  • "members": [
    ],
  • "name": "Tenant Group C",
  • "powerTenantId": "acf2461b-0160-4d14-b11b-efae4d66c69b"
}

Response samples

Content type
application/json
{
  • "message": "Added tenant group",
  • "success": true
}

Update tenant groups

Allow to update tenant groups. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: b1d9f509-d468-4595-ba23-ca40e4d5d256

Tenant group UUID

Request Body schema: application/json
members
Array of strings <uuid> [ items <uuid > ]

New list of tenants which will become group members

name
string

New tenant group's name

powerTenantId
string <uuid>

Tenant ID which will become power tenant of the group.

Responses

Request samples

Content type
application/json
{
  • "members": [
    ],
  • "name": "Tenant Group Name",
  • "powerTenantId": "b1d9f509-d468-4595-ba23-ca40e4d5d256"
}

Response samples

Content type
application/json
{
  • "data": "Updated",
  • "success": true
}

tenants

List available tenants

List all tenants in the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
limit
integer

Limit number of tenants to be returned

page
integer

Page number to be returned

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "expiresIn": 3600,
  • "meta": {
    },
  • "success": true
}

Create new tenant

Create new tenants in the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
description
any
name
required
string

Responses

Request samples

Content type
application/json
{
  • "name": "Tenant C"
}

Response samples

Content type
application/json
{
  • "message": "Added tenant",
  • "success": true
}

Assign provided tenant to specified user

Assign the specified tenants to given user within the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
required
Array of objects
user
required
string <uuid>

User ID to which tenants will be assigned

Responses

Request samples

Content type
application/json
{
  • "tenants": [
    ],
  • "user": "582d4140-bfd1-4afc-bb47-420a9694e3fc"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Unassign the specified tenants from the user

Unassign the tenants for the specified user within the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
tenants
required
Array of strings <uuid> [ items <uuid > ]
user
required
string <uuid>

User ID from which tenants will be unassigned

Responses

Request samples

Content type
application/json
{
  • "tenants": [
    ],
  • "user": "682d4140-bfd1-4afc-bb47-420a9694e3fc"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

It returns tenants details related to the user

It returns tenants details related to the user and its roles, provided in query params. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
users
required
string
Example: users=b1d9f509-d468-4595-ba23-ca40e4d5d256,6eff2dac-e72e-49bd-b269-049650625906

List of users UUID's

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Returning tenants details

Returns tenants details based on provided ID's. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: b1d9f509-d468-4595-ba23-ca40e4d5d256

Tenant UUID

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Update tenants details

Updates tenant details fields. Fields allowed to be updated: expiryAfter, manualAnnotationEnabled, manualReviewEnabled, newDamageNotification, faceblurServiceEnabled, damageDetectionServiceEnabled, minDamagesForManualProcessing, separateQueue, isHandicapped or turnaroundConfiguration If turnaroundConfiguration.isEnabled is equal to false, all passages of this tenant will be rental. Otherwise, if the time difference (in seconds) between pickup and return passages is smaller than the given threshold, the passage will be marked as turnaround. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: b1d9f509-d468-4595-ba23-ca40e4d5d256

Tenant UUID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{
  • "settings": {
    }
}

Response samples

Content type
application/json
{
  • "data": "Updated",
  • "success": true
}

groups

Assign the given users to the specified group

Assign the given users to the specified group within the system. The available groups are: GLOBAL_ADMIN, ANNOTATOR, REVIEWER. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
groupName
required
string
Enum: "GLOBAL_ADMIN" "ANNOTATOR" "REVIEWER"

Group which will be assigned to user

userId
required
string <uuid>

User ID on which action will be performed

Responses

Request samples

Content type
application/json
{
  • "groupName": "ANNOTATOR",
  • "userId": "582d4140-bfd1-4afc-bb47-420a9694e3fc"
}

Response samples

Content type
application/json
{
  • "message": "Modified (POST) group isAnnotator for 6eff1dac-e72e-49bd-b269-049650625906",
  • "success": true
}

Unassign the given users from the specified group

Unassign the given users from the group within the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
groupName
required
string
Enum: "GLOBAL_ADMIN" "ANNOTATOR" "REVIEWER"

Group name from which user will be removed

userId
required
string <uuid>

User ID on which action will be performed

Responses

Request samples

Content type
application/json
{
  • "groupName": "ANNOTATOR",
  • "userId": "582d4140-bfd1-4afc-bb47-420a9694e3fc"
}

Response samples

Content type
application/json
{
  • "message": "Modified (POST) group isAnnotator for 6eff1dac-e72e-49bd-b269-049650625906",
  • "success": true
}

users

Delete user account

Delete user account from the system. User must be a global admin to perform this operation.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string <uuid>
Example: b1d9f509-d468-4595-ba23-ca40e4d5d256

User UUID's

Responses

Response samples

Content type
application/json
{
  • "message": "User b1d9f509-d468-4595-ba23-ca40e4d5d256 has been deleted",
  • "success": true
}

login

Login

Log in to the system to obtain an authorization token.

Request Body schema: application/json
password
required
string

Account's password

username
required
string

Valid user phone number

Responses

Request samples

Content type
application/json
{
  • "password": "passwordWithLettersNumbers1SpecialsLike!",
  • "username": "+47000000000"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "expiresIn": 3600,
  • "success": true
}

currentTenant

Switch currently used tenant

Switch the currently used tenant within the system

Authorizations:
ApiKeyAuth
Request Body schema: application/json
refreshToken
required
string

Refresh token received during login procedure

tenant
required
string <uuid>

The ID of the tenant you would like to switch to

Responses

Request samples

Content type
application/json
{
  • "refreshToken": "refreshToken",
  • "tenant": "3bfd3a56-c2ea-41e5-92c3-aa295b24637b"
}

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

license

Get car vin number

Takes a car registration license plate as input and returns VIN number

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

the id of the vehicle, in the form of a registration plate

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Vehicle identification number found",
  • "success": true
}

Vehicle list price

Based on input in the format of a registration number, average list price is returned

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

Registration plate number of the car

query Parameters
km
required
integer

Mileage on the car in KM

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Vehicle found",
  • "success": true
}

vin

Get vehicle information

Based on input in the format of a VIN number, information is returned from the DMV

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

VIN number of the car

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "Vehicle found",
  • "success": true
}

profile

Use profile to render user details from the Wenn system. It is used for clients to present user information.

Get profile list

Get the list of a users profile.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
limit
integer

limit number of appraisals to be returned

page
integer

page number to be returned

tenant
string

tenant to fetch

searchBy
string

filter content by using firstName, lastName or phone

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "meta": {
    },
  • "success": true
}

Get profile detail

Extract all the information stored in the users profile.

Authorizations:
oAuthWenn.ai
path Parameters
id
required
string

The id of user you would like fetch from service

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

Get profile tenants

Extract all tenants related to the user.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

The id of user you would like fetch from service

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}

introduce

Get profile names

Get the list of names of the users

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
users
required
string

Array uuid of users that will be fetched example: ?users=533c1e58-27ed-461b-8ccd-982eb6ca71b8,b2d9f509-d468-4595-ba23-ca40e4d5d256

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "success": true
}