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.

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 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
}

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
}

auth

Use auth resources to manage your account and users in the system like login, reset the password, update user details, etc. Moreover, here you can manage a tenant.

Login

Login to to the system to obtain authorization token.

Request Body schema: application/json
password
required
string
username
required
string

Responses

Request samples

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

Response samples

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

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 also 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

user id as UUID

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 for a 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

user id

Responses

Response samples

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

Gives information about api key

Gives information as apiKey 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

user id

Responses

Response samples

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

Switch currently used tenant

Switch currently used tenant inside the system.

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

Responses

Request samples

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

Response samples

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

Assign given users to given group

Assign given users to given group inside the system. Available groups are: GLOBAL_ADMIN, ANNOTATOR, REVIEWER

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
groupName
required
string
userId
required
string

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 given users from given group

Unassign given users from the group inside the system.

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
groupName
required
string
userId
required
string

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
}

Register new user

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

Request Body schema: application/json
email
string
firstName
string
lastName
string
password
required
string

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

phone
required
string

Responses

Request samples

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

Response samples

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

Verifies registred user

Verifies a new user with one time password

Request Body schema: application/json
code
required
string
username
required
string

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 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

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
password
required
string
username
required
string

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
}

List available tenant groups

List all tenant groups in the system

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 new tenant group in system

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
members
Array of strings
name
required
string
powerTenantId
string

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.

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

tenant group UUID

Request Body schema: application/json
members
string

list of tenants/members for given group

name
string

tenant group's name

powerTenantId
string

power tenant ID for tenant 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
}

List available tenants

List all tenants in the system

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
limit
integer

limit number of appraisals 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 system

Authorizations:
oAuthWenn.aiApiKeyAuth
Request Body schema: application/json
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 given users to given tenants

Assign given users to given tenants inside the system.

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

Responses

Request samples

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

Response samples

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

Unassign given users from given tenants

Unassign given users from the tenants inside the system.

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

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, provided in query params.

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
}

It returns tenants details

It returns tenants details in the system.

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

tenant UUID

Responses

Response samples

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

Update tenants details

Allow to update tenant details. You are allowed to change fields in setting like expiryAfter, manualAnnotationEnabled, manualReviewEnabled, isHandicapped or turnaroundConfiguration. If turnaroundConfiguration.isEnabled is equal to false, all passages of this tenant will be rental. Otherwise, if time difference (in seconds) between pickup and return passages is smaller than given threshold, the passage will be marked as turnaround.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string
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
}

Refresh token

Use a Refresh Token To exchange the Refresh Token you received during authorization for a new Id Token

Request Body schema: application/json
refreshToken
required
string
username
required
string

Responses

Request samples

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

Response samples

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

Delete user account

Delete user account from the system.

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string
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
}

carinfo

Use CarInfo to get vehicle details. You can get information about the car via VIN or license plate. Moreover you can retrieve information about the average car’s price in the market

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
}

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
}

assets

This is the main part of the Wenn system. Assets are cars, capture sets, imagesets, images (like logos and a specific image from an imageset), and damages in an imageset. You can use the operations contained in this section to retrieve or update data such as imageSets, captureSets, cars and damages etc

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

start of date range as a timestamp

endDate
integer

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
revieverId
string

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
}

Soft-delete image set by appraisal ID

Soft-delete image set and damages which are related to it

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

the id of the image set you would like to remove

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "message": "The image set is removed",
  • "success": true
}

List capture sets

Allows to list regular or virtual capture sets from all or specific 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 Wenn 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
camerasCount
integer
Array of objects
countryCode
string
label
string
object
location
string
name
string
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, cost, damage_identification]

priority
integer

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

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

the id of the capture set

Request Body schema: application/json
camerasCount
integer
Array of objects
countryCode
string
label
string
object
location
string
name
string
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, cost, damage_identification]

priority
integer

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": "Capture set updated",
  • "success": true
}

Returns list of capture units

Returns list of capture units with it's details. Logos for tenants can be only in size either 54x54 or 100x100. 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

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 > ]

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 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": "Unassigned tenants to capture unit successfully",
  • "success": true
}

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"

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"

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": "ZZZZZZZ",
  • "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

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

passageIds
string

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

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

Responses

Response samples

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

Assign (by adding) cars to a tenant

Allows tenant admin to add cars assignments (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"

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

if you set cars then registrationNumbersByCountryCode will be ignored

registrationNumbersByCountryCode
required
object

country codes with corresponding registration numbers lists within it

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"

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

if you set cars then registrationNumbersByCountryCode will be ignored

registrationNumbersByCountryCode
required
object

country codes with corresponding registration numbers lists within it

Responses

Request samples

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

Response samples

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

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
imageSetId
string
tenantId
string
countryCode
string
registrationNo
string
closestToImageSetId
string

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

closestToImageId
string

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

filterByState
string

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

isPotential
string

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

isDeleted
string

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

returnRepresentatives
string

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

returnFamilyOf
string

representativeId of requested damage family

sortBy
string

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
{
  • "data": {
    },
  • "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

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

Responses

Response samples

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

Get image sets list

Get the list of the image sets.

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
tenantId
string
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
Example: countryCode=NO

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

works only with groupByRegistrationNo=true; if set to true, returns image sets that have new damages detected

startDate
integer
Example: startDate=1600000000

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

endDate
integer
Example: endDate=1700000000

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

captureSetLocation
string
Example: captureSetLocation=Norway

allowed only when groupByRegistrationNo is set to true; a value for the capture set's location to filter results

captureSetName
string
Example: captureSetName=name

allowed only when groupByRegistrationNo is set to true; a value for the capture set's name to filter results

searchByCaptureSetLocation
string
Example: searchByCaptureSetLocation=nor

allowed only when groupByRegistrationNo is set to true; a value for the capture set's location to search by

searchByCaptureSetName
string
Example: searchByCaptureSetName=na

allowed only when groupByRegistrationNo is set to true; 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
deviceSetId
string
recDate
string
registrationNo
string
tenantId
required
string
vin
string

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

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
refreshToken
string

Responses

Request samples

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

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

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

the id of the image set you would like to access

Request Body schema: application/json
object
partnerState
string

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

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
}

Update image set status

Update status of given image set

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string

the id of the image set you would like to access

Request Body schema: application/json
isSkipped
boolean
status
integer

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

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

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
}

List of images

Lists images related to the imageSet

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
imageSetId
required
string
Example: imageSetId=12345678-abcd-abcd-abcd-123456789012

id of an image set

forReview
boolean

returns images with visible damages

Responses

Response samples

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

Delete single image by id

Deletes single image by id

Authorizations:
oAuthWenn.aiApiKeyAuth
path Parameters
id
required
string
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
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
}

Get list of logos

Get list of logos

Authorizations:
oAuthWenn.aiApiKeyAuth
query Parameters
tenantIds
required
string

ids of tenants you would like to fetch logos

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
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
}