Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents
maxLevel2
minLevel2
typeflat

...

Check the list of available endpoints and methods in the Lookups API:

postman

We don't have a way to export this macro.

sweagger

Open api
openapi: 3.0.2
info:
  title: Lookup REST API
  description: |-
    API to manage lookup life cycle by communicating with the Lookups
    Manager via the HTTP protocol following REST principles.
  termsOfService: https://www.devo.com/legal
  contact:
    name: Devo Inc
    url: https://www.devo.com
    email: support@devo.com
  license:
    name: Devo license
    url: https://www.devo.com
  version: 2.2.0-SNAPSHOT
externalDocs:
  description: External docs description
  url: https://docs.devo.com/space/latest/127500289/Lookups+API
servers:
- url: https://api.apac.devo.com/lookup-api
  description: AWS APAC Lookup API server
- url: https://api.ca.devo.com/lookup-api
  description: AWS CA Lookup API server
- url: https://api.eu.devo.com/lookup-api
  description: AWS EU Lookup API server
- url: https://api.us.devo.com/lookup-api
  description: AWS US Lookup API server
paths:
  /internal/lookup/{domain}/{name}:
    delete:
      summary: Send a lookup deletion request.
      description: Asynchronously send a request to the Lookups Manager to delete
        an existing Lookup.
      operationId: internalDeleteLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the deletion request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupDeletionResponse'
        "401":
          description: Unsuccessful response. User unauthorized to delete a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/internal/lookup/galactic_empire/destroyed_planets'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. User credentials are correct but the
            domain or the lookup do not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupDeletionError'
              example:
                type: LookupDeletionError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /internal/lookup/{domain}/{name}/deploy-config:
    put:
      summary: Asynchronously send a request to the Lookups Manager to create or update
        a `Lookup`.
      description: Update the configuration for a given lookup.
      operationId: internalPutLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: forceFileType
        in: query
        description: "If true, the lookup will always be saved as a file lookup. If\
          \ unset or false, it will get the lookup type from the Recipe."
        required: false
        style: form
        explode: true
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployConfig'
            examples:
              simpleStaticQuery:
                value:
                  id:
                    creator: rebel_alliance
                    name: TotallyNotFakeData
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select 0 as key, false as IsDataFake, 2147483647 as\
                        \ RebelsImprisoned, 9223372036854775807 as CreditsOnImperialBanks,\
                        \ hex4('fffffff') as Hex4Emperor, hex8('fffffffffffffff')\
                        \ as Hex8Vader, 2.718281828459045 as EmperorClones, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as EmperorIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as EmperorIP6, 0m as TimeAfterBattleOfYavin, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: key
                    columnFilter:
                    - key
                    - IsDataFake
                    - RebelsImprisoned
                    - CreditsOnImperialBanks
                    - Hex4Emperor
                    - Hex8Vader
                    - EmperorClones
                    - Pi
                    - EmperorIP4
                    - EmperorIP6
                    - TimeAfterBattleOfYavin
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              complexStaticQuery:
                value:
                  id:
                    creator: galactic_empire
                    name: ImperialIntranetActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select eventdate, domain, userid from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - domain
                    - userid
                    contribution:
                      type: add
                    requiresDate: false
              simpleStaticS3File:
                value:
                  id:
                    creator: jedi_order
                    name: ForceSensitiveBeings
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT8
                      - name: Location
                        from: 1
                        type: STRING
                      - name: Age
                        from: 2
                        type: FLOAT8
                      - name: Species
                        from: 3
                        type: STRING
                      - name: MidiclorianLevel
                        from: 4
                        type: FLOAT4
                      - name: Hex4Age
                        from: 5
                        type: HEX4
                      - name: Hex8Age
                        from: 6
                        type: HEX8
                      - name: CommLinkIP4
                        from: 7
                        type: IP4
                      - name: CommLinkIP6
                        from: 8
                        type: IP6
                      - name: TimeFromDiscovery
                        from: 9
                        type: DURATION
                      - name: EmpireCIDR4
                        from: 10
                        type: NET4
                      - name: EmpireCIDR6
                        from: 11
                        type: NET6
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: holocrons-bucket
                        keyName: secrets/data/force-sensitive-beings.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    - Age
                    - Species
                    - MidiclorianLevel
                    - Hex4Age
                    - Hex8Age
                    - CommLinkIP4
                    - CommLinkIP6
                    - TimeFromDiscovery
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              simpleDynamicQuery:
                value:
                  id:
                    creator: confederation_of_independent_systems
                    name: TotallyNotFakeData
                  recipe:
                    recipeType: once
                    source:
                      query: "select now() as key, false as IsPalpatineLordSidious,\
                        \ 2147483647 as ClonesImprisoned, 9223372036854775807 as CreditsOnBankingClan,\
                        \ hex4('fffffff') as Hex4Sidious, hex8('fffffffffffffff')\
                        \ as Hex8Dooku, 2.718281828459045 as DroidsRandomSeed, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as GrievousIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as DroidekaIP6, 0m as TimeAfterBattleOfGeonosis, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: first-column
                    columnFilter:
                    - key
                    - IsPalpatineLordSidious
                    - ClonesImprisoned
                    - CreditsOnBankingClan
                    - Hex4Sidious
                    - Hex8Dooku
                    - DroidsRandomSeed
                    - Pi
                    - GrievousIP4
                    - DroidekaIP6
                    - TimeAfterBattleOfGeonosis
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              complexDynamicQuery:
                value:
                  id:
                    creator: galactic_republic
                    name: RepublicSenateWebActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select eventdate, sessionid, userEmail from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - sessionid
                    - userEmail
                    contribution:
                      type: add
                    requiresDate: false
                    refreshMillis: 3600000
                    startMillis: 537796640000
              allSubdomainsS3File:
                value:
                  id:
                    creator: council@jedi_order
                    name: JediTempleExits
                  visibility:
                    type: all-subdomains
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT4
                      - name: Location
                        from: 1
                        type: STRING
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: info-bucket
                        keyName: public/data/temple-exits.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    contribution:
                      type: add
                    requiresDate: false
        required: true
      responses:
        "200":
          description: Successful response. The actual deployment is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: a58a233b4a27
                code: 400
                context: null
                id: ae34801e-5387-11ed-859a-532f757eb240
                msg: "Contribution policy values can be 'add', 'del' and 'col'"
        "401":
          description: Unsuccessful response. User unauthorized to update a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/internal/lookup/galactic_empire/destroyed_planets/deploy-config'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. User credentials are correct but the
            domain or the lookup do not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /internal/lookup/{domain}/{name}/disable:
    post:
      summary: Disables an enabled Lookup setting it as inactive.
      operationId: internalDisableLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: Successful response. Lookup was disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationResponse'
        "401":
          description: Unsuccessful response. User unauthorized to disable a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/internal/lookup/galactic_empire/destroyed_planets/disable'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. User credentials are correct but the
            domain or the lookup do not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationError'
              example:
                type: LookupActivationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /internal/lookup/{domain}/{name}/enable:
    post:
      summary: Enables a disabled Lookup setting it as active.
      operationId: internalEnableLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: Successful response. Lookup was enabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationResponse'
        "401":
          description: Unsuccessful response. User unauthorized to enable a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/internal/lookup/galactic_empire/destroyed_planets/enable'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. User credentials are correct but the
            domain or the lookup do not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationError'
              example:
                type: LookupActivationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /internal/notify:
    post:
      summary: Notify lookup creation/deletion.
      operationId: internalNotifyLookup
      responses:
        "200":
          description: Successful response. Lookup was disabled.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationResponse'
        "401":
          description: Unsuccessful response. User unauthorized to disable a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/internal/lookup/galactic_empire/destroyed_planets/disable'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. User credentials are correct but the
            domain or the lookup do not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupActivationError'
              example:
                type: LookupActivationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /lookup/{domain}:
    get:
      summary: Returns meta information of the lookups existing on a given domain.
      operationId: listLookups
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: max_length
        in: query
        description: Max length of results to return. Defaults to 100.
        required: false
        style: form
        explode: true
        schema:
          maximum: 1000
          minimum: 1
          type: integer
          default: 100
      - name: pageToken
        in: query
        description: The token for continuing a previous list request on the next
          page. This should be set to the value of nextPageToken from the previous
          response.
        required: false
        style: form
        explode: true
        schema:
          minimum: 0
          type: integer
          format: int32
          default: 0
      - name: owner
        in: query
        description: |-
          Whether the API should return lookups whose owner is the user's domain, whose owners are other domains, but the user's domain has visibility over them or all of them. Supported values are:
            - THIS_DOMAIN: Only return lookups owned by the user's domain.
            - OTHER_DOMAINS: Only return lookups owned by other domains but
              are shared with the user's domain.
            - ANY_DOMAIN: Return both lookups owned by the user's domain
              and visible by it.
          Defaults to THIS_DOMAIN.
        required: false
        style: form
        explode: true
        schema:
          type: string
          enum:
          - THIS_DOMAIN
          - OTHER_DOMAINS
          - ANY_DOMAIN
          default: THIS_DOMAIN
      responses:
        "200":
          description: Successful response. Returns the list of lookups for the specified
            domain
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupMetaInfoListResponse'
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
              example:
                code: 140
                msg: Validation failed.
                cid: 981d4e9056da
                context:
                  failures: arg2 = 1001 <= must be less than or equal to 1000
        "401":
          description: Unsuccessful response. User unauthorized to list domain's lookups.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupMetaInfoListResponse'
              example:
                type: LookupMetaInfoListResponse
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /lookup/{domain}/{name}:
    get:
      summary: Returns the given lookup meta information.
      operationId: getLookupMetaInfo
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: Successful response. Returns the meta information of the given
            lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupMetaInfoResponse'
        "401":
          description: Unsuccessful response. User unauthorized to get the lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupMetaInfoResponseError'
              example:
                type: LookupMetaInfoResponseError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Lookup not found.
    delete:
      summary: Send a lookup deletion request.
      description: Asynchronously send a request to the Lookups Manager to delete
        an existing Lookup.
      operationId: deleteLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the deletion request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupDeletionResponse'
        "401":
          description: Unsuccessful response. User unauthorized to delete a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupDeletionError'
              example:
                type: LookupDeletionError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /lookup/{domain}/{name}/deploy-config:
    put:
      summary: Send a lookup update request (advanced method).
      description: Advanced method to send a request to update an existing Lookup.
        This method is valid for both file-based (CSV) and query-based lookups.
      operationId: putLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: shared
        in: query
        description: "If true, the lookup will be saved as a shared lookup. If unset\
          \ or false, it will be saved as a private lookup."
        required: false
        style: form
        explode: true
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployConfig'
            examples:
              simpleStaticQuery:
                value:
                  id:
                    creator: rebel_alliance
                    name: TotallyNotFakeData
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select 0 as key, false as IsDataFake, 2147483647 as\
                        \ RebelsImprisoned, 9223372036854775807 as CreditsOnImperialBanks,\
                        \ hex4('fffffff') as Hex4Emperor, hex8('fffffffffffffff')\
                        \ as Hex8Vader, 2.718281828459045 as EmperorClones, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as EmperorIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as EmperorIP6, 0m as TimeAfterBattleOfYavin, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: key
                    columnFilter:
                    - key
                    - IsDataFake
                    - RebelsImprisoned
                    - CreditsOnImperialBanks
                    - Hex4Emperor
                    - Hex8Vader
                    - EmperorClones
                    - Pi
                    - EmperorIP4
                    - EmperorIP6
                    - TimeAfterBattleOfYavin
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              complexStaticQuery:
                value:
                  id:
                    creator: galactic_empire
                    name: ImperialIntranetActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select eventdate, domain, userid from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - domain
                    - userid
                    contribution:
                      type: add
                    requiresDate: false
              simpleStaticS3File:
                value:
                  id:
                    creator: jedi_order
                    name: ForceSensitiveBeings
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT8
                      - name: Location
                        from: 1
                        type: STRING
                      - name: Age
                        from: 2
                        type: FLOAT8
                      - name: Species
                        from: 3
                        type: STRING
                      - name: MidiclorianLevel
                        from: 4
                        type: FLOAT4
                      - name: Hex4Age
                        from: 5
                        type: HEX4
                      - name: Hex8Age
                        from: 6
                        type: HEX8
                      - name: CommLinkIP4
                        from: 7
                        type: IP4
                      - name: CommLinkIP6
                        from: 8
                        type: IP6
                      - name: TimeFromDiscovery
                        from: 9
                        type: DURATION
                      - name: EmpireCIDR4
                        from: 10
                        type: NET4
                      - name: EmpireCIDR6
                        from: 11
                        type: NET6
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: holocrons-bucket
                        keyName: secrets/data/force-sensitive-beings.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    - Age
                    - Species
                    - MidiclorianLevel
                    - Hex4Age
                    - Hex8Age
                    - CommLinkIP4
                    - CommLinkIP6
                    - TimeFromDiscovery
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              simpleDynamicQuery:
                value:
                  id:
                    creator: confederation_of_independent_systems
                    name: TotallyNotFakeData
                  recipe:
                    recipeType: once
                    source:
                      query: "select now() as key, false as IsPalpatineLordSidious,\
                        \ 2147483647 as ClonesImprisoned, 9223372036854775807 as CreditsOnBankingClan,\
                        \ hex4('fffffff') as Hex4Sidious, hex8('fffffffffffffff')\
                        \ as Hex8Dooku, 2.718281828459045 as DroidsRandomSeed, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as GrievousIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as DroidekaIP6, 0m as TimeAfterBattleOfGeonosis, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: first-column
                    columnFilter:
                    - key
                    - IsPalpatineLordSidious
                    - ClonesImprisoned
                    - CreditsOnBankingClan
                    - Hex4Sidious
                    - Hex8Dooku
                    - DroidsRandomSeed
                    - Pi
                    - GrievousIP4
                    - DroidekaIP6
                    - TimeAfterBattleOfGeonosis
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              complexDynamicQuery:
                value:
                  id:
                    creator: galactic_republic
                    name: RepublicSenateWebActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select eventdate, sessionid, userEmail from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - sessionid
                    - userEmail
                    contribution:
                      type: add
                    requiresDate: false
                    refreshMillis: 3600000
                    startMillis: 537796640000
              allSubdomainsS3File:
                value:
                  id:
                    creator: council@jedi_order
                    name: JediTempleExits
                  visibility:
                    type: all-subdomains
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT4
                      - name: Location
                        from: 1
                        type: STRING
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: info-bucket
                        keyName: public/data/temple-exits.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    contribution:
                      type: add
                    requiresDate: false
        required: true
      responses:
        "200":
          description: Successful response. The actual deployment is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example: null
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: a58a233b4a27
                code: 400
                context: null
                id: ae34801e-5387-11ed-859a-532f757eb240
                msg: "Contribution policy values can be 'add', 'del' and 'col'"
        "401":
          description: Unsuccessful response. User unauthorized to update a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-config'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
    post:
      summary: Send a lookup creation request (advanced method).
      description: Advanced method to send a request to create a new Lookup. This
        method is valid for both file-based (CSV) and query-based lookups.
      operationId: createLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: shared
        in: query
        description: "If true, the lookup will be saved as a shared lookup. If unset\
          \ or false, it will be saved as a private lookup."
        required: false
        style: form
        explode: true
        schema:
          type: boolean
          default: false
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployConfig'
            examples:
              simpleStaticQuery:
                value:
                  id:
                    creator: rebel_alliance
                    name: TotallyNotFakeData
                  recipe:
                    recipeType: once
                    source:
                      query: "select 0 as key, false as IsDataFake, 2147483647 as\
                        \ RebelsImprisoned, 9223372036854775807 as CreditsOnImperialBanks,\
                        \ hex4('fffffff') as Hex4Emperor, hex8('fffffffffffffff')\
                        \ as Hex8Vader, 2.718281828459045 as EmperorClones, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as EmperorIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as EmperorIP6, 0m as TimeAfterBattleOfYavin, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: key
                    columnFilter:
                    - key
                    - IsDataFake
                    - RebelsImprisoned
                    - CreditsOnImperialBanks
                    - Hex4Emperor
                    - Hex8Vader
                    - EmperorClones
                    - Pi
                    - EmperorIP4
                    - EmperorIP6
                    - TimeAfterBattleOfYavin
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              complexStaticQuery:
                value:
                  id:
                    creator: galactic_empire
                    name: ImperialIntranetActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select eventdate, domain, userid from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - domain
                    - userid
                    contribution:
                      type: add
                    requiresDate: false
              simpleStaticS3File:
                value:
                  id:
                    creator: jedi_order
                    name: ForceSensitiveBeings
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT8
                      - name: Location
                        from: 1
                        type: STRING
                      - name: Age
                        from: 2
                        type: FLOAT8
                      - name: Species
                        from: 3
                        type: STRING
                      - name: MidiclorianLevel
                        from: 4
                        type: FLOAT4
                      - name: Hex4Age
                        from: 5
                        type: HEX4
                      - name: Hex8Age
                        from: 6
                        type: HEX8
                      - name: CommLinkIP4
                        from: 7
                        type: IP4
                      - name: CommLinkIP6
                        from: 8
                        type: IP6
                      - name: TimeFromDiscovery
                        from: 9
                        type: DURATION
                      - name: EmpireCIDR4
                        from: 10
                        type: NET4
                      - name: EmpireCIDR6
                        from: 11
                        type: NET6
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: holocrons-bucket
                        keyName: secrets/data/force-sensitive-beings.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    - Age
                    - Species
                    - MidiclorianLevel
                    - Hex4Age
                    - Hex8Age
                    - CommLinkIP4
                    - CommLinkIP6
                    - TimeFromDiscovery
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
              simpleDynamicQuery:
                value:
                  id:
                    creator: confederation_of_independent_systems
                    name: TotallyNotFakeData
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select now() as key, false as IsPalpatineLordSidious,\
                        \ 2147483647 as ClonesImprisoned, 9223372036854775807 as CreditsOnBankingClan,\
                        \ hex4('fffffff') as Hex4Sidious, hex8('fffffffffffffff')\
                        \ as Hex8Dooku, 2.718281828459045 as DroidsRandomSeed, 3.141592653589793\
                        \ as Pi, 87.219.9.157 as GrievousIP4, ip6('fe80::4492:bc4b:7a53:c0d5')\
                        \ as DroidekaIP6, 0m as TimeAfterBattleOfGeonosis, net4('128.0.0.0/1')\
                        \ as EmpireCIDR4, net6('ffff:ffff:ffff:ffff::/64') as EmpireCIDR6\
                        \ from siem.logtrust.web.navigation where now()-1m < eventdate\
                        \ < now() limit 1"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: first-column
                    columnFilter:
                    - key
                    - IsPalpatineLordSidious
                    - ClonesImprisoned
                    - CreditsOnBankingClan
                    - Hex4Sidious
                    - Hex8Dooku
                    - DroidsRandomSeed
                    - Pi
                    - GrievousIP4
                    - DroidekaIP6
                    - TimeAfterBattleOfGeonosis
                    - EmpireCIDR4
                    - EmpireCIDR6
                    contribution:
                      type: add
                    requiresDate: false
                    refreshMillis: 3600000
                    startMillis: 537796640000
              complexDynamicQuery:
                value:
                  id:
                    creator: galactic_republic
                    name: RepublicSenateWebActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select eventdate, sessionid, userEmail from siem.logtrust.web.navigation\
                        \ where now()-1m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: eventdate
                    columnFilter:
                    - eventdate
                    - sessionid
                    - userEmail
                    contribution:
                      type: add
                    requiresDate: false
                    refreshMillis: 3600000
                    startMillis: 537796640000
              allSubdomainsS3File:
                value:
                  id:
                    creator: council@jedi_order
                    name: JediTempleExits
                  visibility:
                    type: all-subdomains
                  recipe:
                    recipeType: once
                    source:
                      columns:
                      - name: ID
                        from: 0
                        type: INT4
                      - name: Location
                        from: 1
                        type: STRING
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                      fileProvider:
                        bucketName: info-bucket
                        keyName: public/data/temple-exits.csv
                        transferOwnership: true
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: ID
                    columnFilter:
                    - ID
                    - Location
                    contribution:
                      type: add
                    requiresDate: false
        required: true
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: recipeType values in a Recipe can be 'once' and 'periodic'
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-config'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
        "409":
          description: Unsuccessful response. Lookup already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 409
                context: null
                id: 9b6b0f0e-b162-11ee-b3ab-77fd619670ef
                msg: Lookup with domain galactic_empire and name destroyed_planets
                  already exists
  /lookup/{domain}/{name}/deploy-csv:
    put:
      summary: Send a lookup update request using a CSV
      description: Simplified endpoint to send a request to update an existing lookup.
        Only for CSV lookups.
      operationId: putCsvLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              properties:
                deploy-config:
                  $ref: '#/components/schemas/DeployCsv'
                csv:
                  type: string
                  description: CSV file to upload. Only needed if the file was not
                    uploaded to S3.
                  format: binary
          application/json:
            schema:
              $ref: '#/components/schemas/DeployCsv'
            examples:
              simpleCsvLookupUpdate:
                value:
                  columns:
                  - name: ID
                    type: INT8
                  - name: Location
                    type: STRING
                  - name: Age
                    type: FLOAT8
                  - name: Species
                    type: STRING
                  - name: MidiclorianLevel
                    type: FLOAT4
                  key:
                    type: column
                    column: ID
                  fileProvider:
                    bucketName: holocrons-bucket
                    keyName: secrets/data/force-sensitive-beings.csv
                    transferOwnership: true
                  contribution:
                    type: add
              csvLookupUpdateWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  columns:
                  - name: ID
                    type: INT8
                  - name: Location
                    type: STRING
                  - name: Age
                    type: FLOAT8
                  - name: Species
                    type: STRING
                  - name: MidiclorianLevel
                    type: FLOAT4
                  fileProvider:
                    bucketName: holocrons-bucket
                    keyName: secrets/data/force-sensitive-beings.csv
                    transferOwnership: true
                  skipPreface: null
                  hasHeader: false
                  skipEmptyLines: false
                  key:
                    type: column
                    column: ID
                  contribution:
                    type: add
        required: true
      responses:
        "200":
          description: Successful response. The actual DeployConfig object is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 200
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      columns:
                      - name: ID
                        type: INT8
                      - name: Location
                        type: STRING
                      - name: Age
                        type: FLOAT8
                      - name: Species
                        type: STRING
                      - name: MidiclorianLevel
                        type: FLOAT4
                      fileProvider:
                        bucketName: holocrons-bucket
                        keyName: secrets/data/force-sensitive-beings.csv
                        transferOwnership: true
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: key
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: 300000
                    startMillis: 1702339200000
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: a58a233b4a27
                code: 400
                context: BAD_REQUEST
                id: ae34801e-5387-11ed-859a-532f757eb240
                msg: Bad Request
        "401":
          description: Unsuccessful response. User unauthorized to update a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
    post:
      summary: Send a lookup creation request using a CSV
      description: |
        Simplified endpoint to send a request to create a new lookup. Only for CSV lookups.
        It supports:
        - a JSON body with the deploy-csv config with a fileProvider of the lookup file to be used
        - a multipart file body, with a deploy-config .JSON file and a .CSV lookup file
      operationId: createCsvLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          multipart/form-data:
            schema:
              properties:
                deploy-config:
                  $ref: '#/components/schemas/DeployCsv'
                csv:
                  type: string
                  description: CSV file to upload. Only needed if the file was not
                    uploaded to S3.
                  format: binary
            examples:
              csvLookupCreationWithCsvFiles:
                description: |
                  Example of files that can be added. How to add them will depend on what tool you use.
                  e.g: with curl:
                  ```
                  curl
                  -X POST https://host/lookup-api/lookup/self/test-upload-csv/deploy-csv
                  --header 'Authorization: Bearer abdf37e'
                  --form "deploy-config={'columns': []};type=application/json"
                  --form "csv=@devo-lookups-qa-stage-csv/all-atomic-types.csv;type=application/csv"
                  ```
                value:
                  deploy-config:
                    externalValue: https://gitlab.devotools.com/teams/lomaniacos/bruno-collections-lomaniacos/-/blob/main/files/simple-lookup-with-header/deploy-csv.json
                  csv:
                    externalValue: https://gitlab.devotools.com/teams/lomaniacos/bruno-collections-lomaniacos/-/blob/main/files/simple-lookup-with-header/simple_lookup.csv
              csvLookupCreationWithCsvFileContents:
                description: |
                  Example of file contents that can be added. How to add the files will depend on what tool you use.
                  e.g: with curl:
                  ```
                  curl
                  -X POST https://host/lookup-api/lookup/self/test-upload-csv/deploy-csv
                  --header 'Authorization: Bearer abdf37e'
                  --form "deploy-config={'columns': []};type=application/json"
                  --form "csv=@devo-lookups-qa-stage-csv/all-atomic-types.csv;type=application/csv"
                  ```
                value:
                  deploy-config: |
                    {"columns": [{"name": "ID","type": "INT8"},{"name": "Location","type": "STRING"},{"name": "Age","type": "FLOAT8"},{"name": "Species","type": "STRING"},{"name": "MidiclorianLevel","type": "FLOAT4"}],"skipPreface": null,"hasHeader": false,"skipEmptyLines": false,"key": {"type": "column","column": "ID"}
                  csv: |
                    ID,Age,Species,MidiclorianLevel
                    John Doe,30,Human,85
                    Jane Smith,25,Human,90
            encoding:
              csv:
                contentType: text/csv
                style: form
          application/json:
            schema:
              $ref: '#/components/schemas/DeployCsv'
            examples:
              simpleCsvLookupCreation:
                value:
                  columns:
                  - name: ID
                    type: INT8
                  - name: Location
                    type: STRING
                  - name: Age
                    type: FLOAT8
                  - name: Species
                    type: STRING
                  - name: MidiclorianLevel
                    type: FLOAT4
                  key:
                    type: column
                    column: ID
                  fileProvider:
                    bucketName: holocrons-bucket
                    keyName: secrets/data/force-sensitive-beings.csv
                    transferOwnership: true
              csvLookupCreationWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  columns:
                  - name: ID
                    type: INT8
                  - name: Location
                    type: STRING
                  - name: Age
                    type: FLOAT8
                  - name: Species
                    type: STRING
                  - name: MidiclorianLevel
                    type: FLOAT4
                  fileProvider:
                    bucketName: holocrons-bucket
                    keyName: secrets/data/force-sensitive-beings.csv
                    transferOwnership: true
                  skipPreface: null
                  hasHeader: false
                  skipEmptyLines: false
                  key:
                    type: column
                    column: ID
                  keepHistory: false
                  columnTimeReference: null
        required: true
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 201
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      columns:
                      - name: ID
                        type: INT8
                      - name: Location
                        type: STRING
                      - name: Age
                        type: FLOAT8
                      - name: Species
                        type: STRING
                      - name: MidiclorianLevel
                        type: FLOAT4
                      fileProvider:
                        bucketName: holocrons-bucket
                        keyName: secrets/data/force-sensitive-beings.csv
                        transferOwnership: true
                      skipPreface: null
                      hasHeader: false
                      skipEmptyLines: false
                    lookupType:
                      type: historic
                      instantPolicy: creation-instant
                    append: true
                    key:
                      type: column
                      column: key
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: null
                    startMillis: null
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: "KeyAlgorithm values can be 'first-column', 'column', 'row-hash',\
                  \ 'col-hash' and 'seq'"
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
        "409":
          description: Unsuccessful response. Lookup already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 409
                context: null
                id: 9b6b0f0e-b162-11ee-b3ab-77fd619670ef
                msg: Lookup with domain galactic_empire and name destroyed_planets
                  already exists
  /lookup/{domain}/{name}/deploy-periodic-query:
    put:
      summary: Send a lookup update request for periodic queries.
      description: Simplified method to send a request to update an existing lookup
        based on periodic queries.
      operationId: putPeriodicQueryLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployPeriodicQuery'
            examples:
              simplePeriodicQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-5m < eventdate < now()"
                  key:
                    type: column
                    column: userid
              periodicQueryLookupCreationWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-5m < eventdate < now()"
                  key:
                    type: column
                    column: userid
                  refreshPeriod: 5m
                  startDate: now
                  append: true
        required: true
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 200
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity\
                        \ where now()-5m < eventdate < now()"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: 300000
                    startMillis: 1702339200000
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: Start date format error
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-periodic-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
    post:
      summary: Send a lookup creation request for periodic queries.
      description: Simplified method to send a request to create a new lookup based
        on periodic queries.
      operationId: createPeriodicQueryLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployPeriodicQuery'
            examples:
              simplePeriodicQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-5m < eventdate < now()"
                  key:
                    type: column
                    column: userid
              periodicQueryLookupCreationWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-5m < eventdate < now()"
                  key:
                    type: column
                    column: userid
                  refreshPeriod: 5m
                  startDate: 2023-12-12T00:00:00.00Z
                  append: true
                  keepHistory: false
                  columnTimeReference: null
              periodicQueryLookupCreationWithKeepsHistory:
                value:
                  query: "select eventdate, userid, domain from siem.logtrust.web.navigation\
                    \ where now()-5m < eventdate < now()"
                  key:
                    type: column
                    column: userid
                  keepHistory: true
                  columnTimeReference: eventdate
        required: true
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 201
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity\
                        \ where now()-5m < eventdate < now()"
                    lookupType:
                      type: historic
                      instantPolicy: creation-instant
                    append: true
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: 300000
                    startMillis: 1702339200000
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: refreshPeriod should be bigger than 1 minute
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-periodic-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
        "409":
          description: Unsuccessful response. Lookup already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 409
                context: null
                id: 9b6b0f0e-b162-11ee-b3ab-77fd619670ef
                msg: Lookup with domain galactic_empire and name destroyed_planets
                  already exists
  /lookup/{domain}/{name}/deploy-sliding-window-query:
    put:
      summary: Send a lookup update request for queries with a sliding window
      description: Simplified method to send a request to update a new lookup based
        on sliding window query
      operationId: updateSlidingWindowQuery
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeploySlidingWindowQuery'
            examples:
              simpleSlidingWindowQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation"
                  key:
                    type: column
                    column: userid
                  windowSize: 1d
                  refreshPeriod: 10m
              slidingWindowQueryLookupCreationAllOptions:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation"
                  key:
                    type: column
                    column: userid
                  windowSize: 1d
                  refreshPeriod: 10m
                  startDate: 2023-12-12T00:00:00.00Z
                  columnTimeReference: eventdate
      responses:
        "200":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 200
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: 600000
                    startMillis: 1702339200000
                    slideWindow: 86400000
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: window size should be higher than 1 minute
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-sliding-window-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
    post:
      summary: Send a lookup creation request for queries with a sliding window
      description: Simplified method to send a request to create a new lookup based
        on sliding window query
      operationId: createSlidingWindowQuery
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeploySlidingWindowQuery'
            examples:
              simpleSlidingWindowQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation"
                  key:
                    type: column
                    column: userid
                  window:
                    size: 1d
                    refreshPeriod: 10m
              slidingWindowQueryLookupCreationAllOptions:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation"
                  key:
                    type: column
                    column: userid
                  windowsize: 1d
                  refreshPeriod: 10m
                  startDate: 2023-12-12T00:00:00.00Z
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 200
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: periodic
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity"
                    lookupType:
                      type: normal
                    append: true
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                    refreshMillis: 600000
                    startMillis: 1702339200000
                    slideWindow: 86400000
                    requiresDate: true
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: window size should be higher than 1 minute
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-sliding-window-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
        "409":
          description: Unsuccessful response. Lookup already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 409
                context: null
                id: 9b6b0f0e-b162-11ee-b3ab-77fd619670ef
                msg: Lookup with domain galactic_empire and name destroyed_planets
                  already exists
  /lookup/{domain}/{name}/deploy-static-query:
    put:
      summary: Send a lookup update request for static queries.
      description: Simplified method to send a request to update an existing lookup
        based on a static query.
      operationId: putStaticQueryLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployStaticQuery'
            examples:
              simpleStaticQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-1d < eventdate < now()"
                  key:
                    type: column
                    column: userid
              staticQueryLookupCreationWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-1d < eventdate < now()"
                  key:
                    type: column
                    column: userid
        required: true
      responses:
        "200":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 200
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity\
                        \ where now()-1d < eventdate < now()"
                    lookupType:
                      type: normal
                    append: false
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: "KeyAlgorithm values can be 'first-column', 'column', 'row-hash',\
                  \ 'col-hash' and 'seq'"
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-static-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
    post:
      summary: Send a lookup creation request for static queries.
      description: Simplified method to send a request to create a new lookup based
        on a static query.
      operationId: createStaticQueryLookup
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DeployStaticQuery'
            examples:
              simpleStaticQueryLookupCreation:
                value:
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-1d < eventdate < now()"
                  key:
                    type: column
                    column: userid
              staticQueryLookupCreationWithAllOptionalValues:
                value:
                  visibility:
                    type: creator-only
                  query: "select userid, domain from siem.logtrust.web.navigation\
                    \ where now()-1d < eventdate < now()"
                  key:
                    type: column
                    column: userid
                  keepHistory: false
                  columnTimeReference: null
        required: true
      responses:
        "201":
          description: Successful response. Request was submitted to the Lookups Manager.
            It includes the id of the creation request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationResponse'
              example:
                type: LookupCreationResponse
                cid: d5ce4eb105b2
                code: 201
                context: null
                id: c6b1e939-a57c-11ee-b1a9-a124bba45b9b
                msg: "Lookup sent to creation. You can check the creation status using\
                  \ the provided id: /lookup/{domain}/{name}/job/{id}"
                lookupDeployConfig:
                  id:
                    creator: rebel_alliance
                    name: GalacticEmpireActivity
                  visibility:
                    type: creator-only
                  recipe:
                    recipeType: once
                    source:
                      query: "select userid, domain from siem.logtrust.web.activity\
                        \ where now()-1d < eventdate < now()"
                    lookupType:
                      type: historic
                      instantPolicy: creation-instant
                    append: false
                    key:
                      type: column
                      column: userid
                    columnFilter: null
                    contribution:
                      type: add
                    secondaryIndexes:
                      type: none
                  notifyStatus: true
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 0cd289fa1b63
                code: 400
                context: null
                id: 9f270aca-5151-11ed-859a-5d2974203ed5
                msg: "KeyAlgorithm values can be 'first-column', 'column', 'row-hash',\
                  \ 'col-hash' and 'seq'"
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-static-query'
                  requires valid auth
                cid: 29fda52318ae
        "403":
          description: Unsuccessful response. Forbidden access.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 5
                msg: Token invalid or expired
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
        "409":
          description: Unsuccessful response. Lookup already exists.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupCreationError'
              example:
                type: LookupCreationError
                cid: 68e612d824a5
                code: 409
                context: null
                id: 9b6b0f0e-b162-11ee-b3ab-77fd619670ef
                msg: Lookup with domain galactic_empire and name destroyed_planets
                  already exists
  /lookup/{domain}/{name}/job:
    get:
      summary: Query the job uuids of the given lookup.
      description: Query the job uuids of the given lookup by domain and name.
      operationId: getLookupJobsUUIDs
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: "Successful response. Returns the filtered jobs, sorted ascendingly\
            \ by time."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobListResponse'
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobsError'
              example:
                type: LookupJobsError
                cid: 6cde7fd6a1f4
                code: 400
                context: null
                id: e08fef4d-53a2-11ed-859a-33f9a0bb845a
                msg: Unsuccessful response. Bad Request.
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/job'
                  requires valid auth
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobsError'
              example:
                type: LookupJobsError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
  /lookup/{domain}/{name}/job/{id}:
    get:
      summary: Query the statuses of a lookup job.
      description: "Query the statuses of a lookup job for a given domain, name and\
        \ job id."
      operationId: queryLookupJobStatus
      parameters:
      - name: domain
        in: path
        description: The domain of the lookup.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: name
        in: path
        description: "Name of the Lookup, unique on the given domain."
        required: true
        style: simple
        explode: false
        schema:
          type: string
      - name: id
        in: path
        description: Id of the lookup creation/update/deletion request.
        required: true
        style: simple
        explode: false
        schema:
          type: string
      responses:
        "200":
          description: "Successful response. Returns the filtered jobs' results for\
            \ the given lookup with the filters applied. Results are sorted chronologically.\
            \ The response can include the following jobs' results: - \"Lookup successfully\
            \ created\": This means the Lookups Manager was able to create the lookup\
            \ file with the configuration provided but it was not uploaded to Devo's\
            \ platform yet. - \"Lookup ready to be executed\": This means the Lookups\
            \ Manager successfully uploaded the created lookup to Devo's platform\
            \ and it is ready to be used in queries. - \"Error creating lookup\":\
            \ This means the Lookups Manager encountered an error creating the lookup\
            \ with the provided configuration."
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobStatusListResponse'
        "400":
          description: Unsuccessful response. Bad Request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobsError'
              example:
                type: LookupJobsError
                cid: 4d1eb85a908d
                code: 400
                context: null
                id: e9a9baaf-53a4-11ed-859a-2d69d242a54f
                msg: Unsuccessful response. Bad Request.
        "401":
          description: Unsuccessful response. User unauthorized to create a Lookup.<
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthError'
              example:
                code: 401
                msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/job/89732b79-a643-11ee-841d-fb670fe91f6e'
                  requires valid auth
                cid: 29fda52318ae
        "404":
          description: Unsuccessful response. Domain or Lookup not found.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LookupJobsError'
              example:
                type: LookupJobsError
                cid: 68e612d824a5
                code: 404
                context: null
                id: 901c6154-b16b-11ee-b3ab-47fc28cf5888
                msg: Domain not found.
components:
  schemas:
    AuthError:
      type: object
      properties:
        code:
          type: integer
          description: Http error code
          format: int32
        msg:
          type: string
          description: Error message
        cid:
          type: string
          description: Correlation ID of the response
      description: Standard HTTP error response for unauthorized requests.
      example:
        code: 401
        msg: Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire'
          requires valid auth
        cid: 29fda52318ae
    BasicDevoResponse:
      type: object
      properties:
        cid:
          type: string
          description: Correlation ID of the response
        code:
          type: integer
          description: Numerical API Code.
          format: int32
        context:
          type: object
          description: Object containing the context of the response.
        id:
          type: string
          description: Creation ID of the Lookup
        msg:
          type: string
          description: Descriptive message of the response.
      description: Standard HTTP response with the minimal properties.
      example:
        type: BasicDevoResponse
        cid: e42ffbbeb753
        code: 404
        context: HTTP 404 Not Found
        id: 30faa8ae-4fbd-11ed-859a-01f240ca171d
        msg: HTTP 404 Not Found
      discriminator:
        propertyName: type
    Column:
      title: Root Type for a lookup Column.
      required:
      - name
      - type
      type: object
      properties:
        name:
          type: string
          description: Name of the column.
        from:
          type: integer
          description: 0-based index of the column inside the CSV.
          format: int32
        type:
          type: string
          description: |-
            Data type of the column. Possible values are:
            - "BOOLEAN"
            - "STRING
            - "INT4"
            - "INT8"
            - "FLOAT4"
            - "FLOAT8"
            - "HEX4"
            - "HEX8"
            - "IP4"
            - "IP6"
            - "TIMESTAMP"
            - "DURATION"
            - "NET4"
            - "NET6"
      description: Descriptor for a Lookup column on a CSV source.
      example:
        name: key
        from: 0
        type: STRING
    ContributionPolicy:
      title: Root Type for ContributionPolicy
      required:
      - type
      type: object
      properties:
        type:
          type: string
          description: "Type of the ContributionPolicy. Possible values are \"add\"\
            , \"del\" and \"col\". \"add\" by default."
          enum:
          - add
          - del
          - col
          default: add
        name:
          type: string
          description: "The contribution will be extracted from the column with the\
            \ given [name]. That column type must be string and its valid values are\
            \ 'add' and 'delete'.'"
      description: "Defines how to calculate how a row contributes to the final result,\
        \ normally used on incremental lookups. For lookup CSV creation operations\
        \ it is always of type \"add\"."
      example:
        type: add
    DeployConfig:
      required:
      - recipe
      type: object
      properties:
        id:
          $ref: '#/components/schemas/LookupId'
        recipe:
          $ref: '#/components/schemas/Recipe'
        notifyStatus:
          type: boolean
          description: "If true, a notification will be sent to Devo's web once the\
            \ Lookup is executed so that the user is informed about the creation or\
            \ update of a lookup."
      description: "Deploy configuration of the Lookup to be created or updated. This\
        \ object states the id of the lookup, the recipe which is used to create it,\
        \ its visibility and if the user is to receive a notification on it's readiness."
      example:
        id:
          creator: galactic_empire
          name: ImperialIntranetActivity
        visibility:
          type: creator-only
        recipe:
          recipeType: once
          source:
            query: "select eventdate, domain, userid from siem.logtrust.web.navigation\
              \ where now()-1m < eventdate < now()"
          lookupType:
            type: normal
          append: "false,"
          key:
            type: column
            column: eventdate
          columnFilter:
          - eventdate
          - domain
          - userid
          contribution:
            type: add
          requiresDate: false
      allOf:
      - $ref: '#/components/schemas/DeployConfigBase'
    DeployConfigBase:
      type: object
      properties:
        visibility:
          type: object
          description: |-
            Visibility of the lookup. This attribute can be an object of type `Visibility`, or a string. If a string, the supported values are:
            - "creator-only": To create a lookup only visible by the user's
              domain
            - "all-subdomains": To create a lookup visible by all domains owned
              by a reseller. Can only be used by users with RESELLER_ADMIN
              permissions.
            - "all-domains": To create a lookup visible by all domains. It is
              only allowed when the domain of the user is self.
      description: Deploy configuration base
      discriminator:
        propertyName: type
    DeployCsv:
      required:
      - columns
      type: object
      properties:
        columns:
          type: array
          description: Array of Lookup column descriptors.
          items:
            $ref: '#/components/schemas/Column'
        fileProvider:
          $ref: '#/components/schemas/FileProvider'
        key:
          $ref: '#/components/schemas/KeyAlgorithm'
        skipPreface:
          type: string
          description: Enter a regular expression to ignore rows of data in a CSV
            used as source that follow the structure indicated in the regex. Defaults
            to 'null'.
        hasHeader:
          type: boolean
          description: |
            Either if the CSV file of the CSV source has a header row or
            not. Defaults to 'false'.
        skipEmptyLines:
          type: boolean
          description: Either to skip empty lines on the CSV or not. Defaults to 'false'.
        contribution:
          $ref: '#/components/schemas/ContributionPolicy'
        keepHistory:
          type: boolean
          description: |
            If enabled, Lookup Manager will store all historic
            data in the lookup, enabling historic search.
          default: false
        columnTimeReference:
          type: string
          description: |
            If given, the Lookup Manager will use the column specified as
            time instant reference for the data provided.
        append:
          type: boolean
          description: "If true, when this recipe is evaluated, the content of its\
            \ source will be appended to the lookup created on the previous evaluation.\
            \ If there is no previous lookup, or if the recipe is updated, this property\
            \ is ignored. False by default."
          default: false
      description: "Deploy csv configuration of the Lookup to be created. This object\
        \ states the visibility of the created lookup, the \"fileProvider\" indicating\
        \ the CSV file stored in AWS S3, the column descriptors and key. It also includes\
        \ metainfo from the CSV such as if it has header."
      allOf:
      - $ref: '#/components/schemas/DeployConfigBase'
    DeployPeriodicQuery:
      required:
      - query
      type: object
      properties:
        query:
          type: string
          description: Query to generate the lookup from. It must follow Devo's APIs
            LINQ syntax.
        key:
          $ref: '#/components/schemas/KeyAlgorithm'
        refreshPeriod:
          type: string
          description: |-
            Refresh period of the Lookup. Defaults to grouping period of the
            query in case it is a grouping query, or 5 minutes if not. Accepted
            values are the ones accepted by Devo's Duration type. Minimum value
            accepted is 1 minute.
        startDate:
          type: string
          description: Lookup creation start date. Defaults to the time of the request.
            Can either be an ISO-8601 datetime string or a number of milliseconds
            from EPOCH.
        append:
          type: boolean
          description: "If true, when this recipe is evaluated, the content of its\
            \ source will be appended to the lookup created on the previous evaluation.\
            \ If there is no previous lookup, or if the recipe is updated, this property\
            \ is ignored. False by default."
          default: true
        keepHistory:
          type: boolean
          description: |
            If enabled, Lookup Manager will store all historic
            data in the lookup, enabling historic search.
          default: false
        columnTimeReference:
          type: string
          description: |
            If given, the Lookup Manager will use the column specified as
            time instant reference for the data provided.
      description: "Deploy static query configuration of the Lookup to be created\
        \ or updated. This object states the visibility of the created lookup, the\
        \ lookup query and the algorithm to compute the lookup's keys."
      allOf:
      - $ref: '#/components/schemas/DeployConfigBase'
    DeploySlidingWindowQuery:
      required:
      - key
      - query
      - refreshPeriod
      - windowSize
      type: object
      properties:
        query:
          type: string
          description: Query to generate the lookup from. It must follow Devo's APIs
            LINQ syntax.
        key:
          $ref: '#/components/schemas/KeyAlgorithm'
        windowSize:
          type: string
          description: |-
            Size of the window. Every time that the query is executed, the
            lookup will contain the size of the window. Accepted values are
            the ones accepted by Devo's Duration type, Minimum value accepted
            is 1 hour.
        refreshPeriod:
          type: string
          description: |-
            Refresh period of the Lookup. Defaults to grouping period of the
            query in case it is a grouping query, or 5 minutes if not. Accepted
            values are the ones accepted by Devo's Duration type. Minimum value
            accepted is 1 minute.
        startDate:
          type: string
          description: Lookup creation start date. Defaults to the time of the request.
            Can either be an ISO-8601 datetime string or a number of milliseconds
            from EPOCH.
        keepHistory:
          type: boolean
          description: |
            If enabled, Lookup Manager will store all historic
            data in the lookup, enabling historic search.
          default: false
        columnTimeReference:
          type: string
          description: |
            If given, the Lookup Manager will use the column specified as
            time instant reference for the data provided.
      description: |-
        Deploy static query configuration of the Lookup to be created
        or updated. This object states the visibility of the created lookup, the
        lookup query and the algorithm to compute the lookup's keys.
      allOf:
      - $ref: '#/components/schemas/DeployConfigBase'
    DeployStaticQuery:
      required:
      - query
      type: object
      properties:
        query:
          type: string
          description: Query to generate the lookup from. It must follow Devo's APIs
            LINQ syntax.
        key:
          $ref: '#/components/schemas/KeyAlgorithm'
        keepHistory:
          type: boolean
          description: |
            If enabled, Lookup Manager will store all historic
            data in the lookup, enabling historic search.
          default: false
        columnTimeReference:
          type: string
          description: |
            If given, the Lookup Manager will use the column specified as
            time instant reference for the data provided.
        append:
          type: boolean
          description: "If true, when this recipe is evaluated, the content of its\
            \ source will be appended to the lookup created on the previous evaluation.\
            \ If there is no previous lookup, or if the recipe is updated, this property\
            \ is ignored. False by default."
          default: false
      description: "Deploy static query configuration of the Lookup to be created\
        \ or updated. This object states the visibility of the created lookup, the\
        \ lookup query and the algorithm to compute the lookup's keys."
      allOf:
      - $ref: '#/components/schemas/DeployConfigBase'
    FileProvider:
      title: Root Type for fileProvider.
      required:
      - bucketName
      - keyName
      - transferOwnership
      type: object
      properties:
        bucketName:
          type: string
          description: The name of the S3 bucket where the CSV is located.
        keyName:
          type: string
          description: The path of the CSV inside the bucket.
        transferOwnership:
          type: boolean
          description: A boolean that represents whether Lomana should act as the
            owner of the CSV and delete it from the bucket once it has finished creating
            the lookup.
        accessKey:
          type: string
          description: The access key of a customer’s AWS user with permissions to
            access the bucket represented in bucketName. This attribute is not mandatory.
        secretKey:
          type: string
          description: The secret key of a customer’s AWS user with permissions to
            access the bucket represented in bucketName. This attribute is not mandatory.
        host:
          type: string
          description: The S3 bucket host where to find the CSV. This attribute is
            not mandatory.
        port:
          type: integer
          description: The S3 bucket port where to find the CSV. This attribute is
            not mandatory.
          format: int32
        region:
          type: string
          description: The AWS region whether the S3 bucket has been created. This
            attribute is not mandatory.
      description: Info to get the CSV file from S3.
      example:
        bucketName: holocrons-bucket
        keyName: secrets/data/force-sensitive-beings.csv
        transferOwnership: true
    InstantPolicy:
      title: Description of instant policy
      properties:
        instantPolicy:
          type: string
          description: "Defines how to calculate the instant of each row. Only used\
            \ when the generated lookup is historic. Possible values are: - \"natural\"\
            : The associated source must be historical and the instant of each row\
            \ will be used. This is useful when the source is a historical lookup.\
            \ - \"const\": The instance of all rows will be the supplied constant.\
            \ - \"column\": The instance will be extracted from the column with the\
            \ given [name]. That column type must be timestamp."
        instant:
          minimum: 0
          type: integer
          description: Only for historic lookups of type "const".
          format: int64
        columnName:
          type: string
          description: Only for historic lookups of type "column".
      description: defines the instant policy properties
    KeyAlgorithm:
      title: Root Type for KeyAlgorithm.
      required:
      - type
      type: object
      properties:
        columns:
          type: array
          description: Columns to be used to generate the key for the lookup. Only
            used when the type of the KeyAlgorithm object is "col-hash".
          items:
            type: string
        column:
          type: string
          description: "Column to be used as the key for the lookup. Only used with\
            \ KeyAlgorithms of type: \"column\"."
        type:
          type: string
          description: "Type of Key Algorithm. Values can be \"first-column\", \"\
            column\", \"row-hash\", \"col-hash\" or \"seq\". \"first-column\" by default."
          enum:
          - first-column
          - column
          - row-hash
          - col-hash
          - seq
          default: first-column
      description: |-
        Algorithm to compute the lookup's keys. Depending on the type of the KeyAlgorithm different strategies apply:
        - "first-column": The first column on the lookup is used as key.
        - "column": The column stated in the 'column' field of the KeyAlgorithm object is used as key.
        - "row-hash": A hash of the elements on the first row on the lookup is used as key.
        - "col-hash": A hash of the columns stated on the 'columns' field of the KeyAlgorithm object is used as key.
        - "seq": The key of the lookup is generated sequentially.

        Defaults to "first-column".
      example:
        type: column
        column: key
    KeyType:
      title: Key type of a lookup.
      type: object
      properties:
        type:
          type: string
          description: "Type of the KeyType. Values can be \"first\", \"seq\" or \"\
            hash\"."
        columns:
          type: array
          description: Columns to be hashed to get the key.
          items:
            type: string
        hasher:
          type: object
          properties:
            type:
              type: string
              description: Hash function to be used
            seed:
              type: integer
              description: Seed to be used by the hash function
              format: int64
          description: Hash function to be used to generate the key.
      description: "Defines how the key of the lookup has been generated. Types can\
        \ be \"first\", meaning the key was generated by the first field on the lookup,\
        \ \"seq\", so it was generated sequentially or \"hash\", so it was generated\
        \ from the hash of a list of fields on the lookup."
      example:
        type: murmur
        seed: 1511793612
    LookupActivationError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup enable/disable endpoints.
        example:
          type: LookupActivationError
          cid: 32ac2fdbcc89
          code: 400
          context: null
          id: e111f616-4fbc-11ed-b24b-17bb564344b5
    LookupActivationResponse:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard response for lookup enable/disable endpoints.
        example:
          type: LookupActivationResponse
          cid: f44f458f7c32
          code: 200
          context: null
          id: c8234b9d-5052-11ed-b24b-85c623a0cbd8
          msg: Lookup enabled
    LookupCreationError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup creation endpoints.
        example:
          type: LookupCreationError
          cid: 9a3eda1848d1
          code: 403
          context: FORBIDDEN
          id: 00daba68-5055-11ed-859a-7b524e50491a
          msg: User is not authorized to perform operations in the domain.
    LookupCreationResponse:
      type: object
      properties:
        lookupDeployConfig:
          $ref: '#/components/schemas/DeployConfig'
      description: Standard response for lookup creation endpoints.
      example:
        type: LookupCreationResponse
        cid: d41c91a21d56
        code: 201
        context: null
        id: 5d65ff7d-2201-11ec-b04a-53c6289921cb
        msg: Lookup sent to creation
        lookupDeployConfig:
          id:
            creator: rebel_alliance
            name: GalacticEmpireActivity
          visibility:
            type: creator-only
          recipe:
            recipeType: once
            source:
              query: "select eventdate, level, domain, userid, sessionid, correlationId\
                \ from siem.logtrust.web.activity where now()-1m < eventdate < now()"
            lookupType:
              type: normal
            append: false
            key:
              type: column
              column: key
            columnFilter:
            - eventdate
            - level
            - domain
            - userid
            - sessionid
            - correlationId
            contribution:
              type: add
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
    LookupDeletionError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup deletion endpoints.
        example:
          type: LookupDeletionError
          cid: 32ac2fdbcc89
          code: 400
          context: null
          id: e111f616-4fbc-11ed-b24b-17bb564344b5
    LookupDeletionResponse:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard response for lookup deletion endpoints.
        example:
          type: LookupDeletionResponse
          cid: f44f458f7c32
          code: 200
          context: null
          id: c8234b9d-5052-11ed-b24b-85c623a0cbd8
          msg: Lookup sent to deletion
    LookupField:
      title: Field of a lookup
      type: object
      properties:
        column:
          type: string
          description: Name of the column field's name.
        type:
          type: string
          description: Data type of the lookup field.
        key:
          type: boolean
          description: Whether if the field is or is part of the key of the lookup
      description: Meta information about a lookup field
      example:
        column: ID
        type: ip4
        key: true
    LookupId:
      title: Root Type for LookupId.
      type: object
      properties:
        creator:
          type: string
          description: Domain of the creator of the Lookup.
        name:
          type: string
          description: Name of the Lookup.
      description: Object which identifies a lookup. Formed by the domain of the lookup
        inside the "creator" field and the name of the lookup.
      example:
        creator: jedi_order
        name: ForceSensitiveBeings
    LookupJobListResponse:
      required:
      - jobs
      type: object
      properties:
        jobs:
          type: array
          description: List of job uuids.
          items:
            type: string
      description: List of the last N jobs of a lookup.
      example:
        cid: e47f4ab72ded
        code: 200
        context: null
        id: 4d33777c-e37c-11ed-b5ea-0242ac120002
        msg: Lookup job uuids
        jobs:
        - 2b6b312f-c9a2-489c-8794-ea656a19b822
        - 30b6cad0-9714-48a7-9976-73e41523edfd
        - d1e969e6-48a8-46ea-ab22-e0a5458e302b
        - e2c51a3c-ad7e-4fe6-bb43-89f93e629d76
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
    LookupJobStatusListResponse:
      required:
      - jobs
      type: object
      properties:
        status:
          type: array
          description: List of statuses.
          items:
            $ref: '#/components/schemas/LookupStatusResponse'
      description: List of the last N statuses of a job.
      example:
        cid: e47f4ab72ded
        code: 200
        context: null
        id: 4d33777c-e37c-11ed-b5ea-0242ac120002
        msg: Lookup job's statuses
        status:
        - eventdate: 2021-09-29T10:18:10.805
          domain: galactic_empire
          lookup: ImperialIntranetActivity
          msg: Lookup successfully created
          code: create.ok
        - eventdate: 2021-09-29T10:18:12.472
          domain: ImperialIntranetActivity
          lookup: test-schedule
          msg: Lookup ready to be executed
          code: deploy.ok
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
    LookupJobsError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup jobs endpoints.
        example:
          type: LookupJobsError
          cid: 976559828e9a
          code: 403
          context: FORBIDDEN
          id: 0697ce1e-53a3-11ed-859a-637a8267600a
          msg: User is not authorized to perform operations in the domain.
    LookupMetaInfo:
      title: Meta information of a Lookup.
      type: object
      properties:
        name:
          type: string
          description: Lookup name.
        domain:
          type: string
          description: Lookup domain.
        fileSize:
          type: integer
          description: Size in bytes of the lookup file.
          format: int64
        numEntries:
          type: integer
          description: Number of entries in the lookup.
          format: int64
        creationDate:
          type: string
          description: Creation date of the lookup.
        keyType:
          $ref: '#/components/schemas/KeyType'
        fields:
          type: array
          description: Lookup fields.
          items:
            $ref: '#/components/schemas/LookupField'
        shared:
          type: boolean
          description: Whether the lookup is shared or not.
        owner:
          type: string
          description: Lookup owner's email.
      description: Relevant meta information of a Lookup inside the Devo platform
      example:
        name: CloneTroopersSquads
        domain: galactic_republic
        fileSize: 3600384
        numEntries: 1000
        creationDate: 2020-03-04T15:07:19
        shared: false
        owner: qa.galactic_republoc@devo.com
        keyType:
          type: first
          columns: []
          hasher: null
        fields:
        - column: ID
          type: ip4
          key: true
        - column: NumberOfUnits
          type: ip4
          key: false
        - column: JediGeneralID
          type: ip4
          key: false
        - column: Active
          type: bool
          key: false
      discriminator:
        propertyName: type
    LookupMetaInfoComplete:
      title: Complete Meta information of a Lookup.
      properties:
        deployConfig:
          $ref: '#/components/schemas/DeployConfig'
        lastStatus:
          $ref: '#/components/schemas/LookupStatusResponse'
        enabled:
          type: boolean
          description: Whether the lookup is enabled or not.
      description: "Relevant meta information of a Lookup inside the Devo platform,\
        \ including deploy config, last execution and enabled."
      example:
        name: CloneTroopersSquads
        domain: galactic_republic
        fileSize: 3600384
        numEntries: 1000
        creationDate: 2020-03-04T15:07:19
        shared: false
        owner: qa.galactic_republoc@devo.com
        enabled: true
        keyType:
          type: first
          columns: []
          hasher: null
        deployConfig: null
        lastStatus:
          eventdate: 2020-03-04T15:08:02
          domain: galactic_republic
          lookup: CloneTroopersSquads
          msg: Lookup successfully created
        fields:
        - column: ID
          type: ip4
          key: true
        - column: NumberOfUnits
          type: ip4
          key: false
        - column: JediGeneralID
          type: ip4
          key: false
        - column: Active
          type: bool
          key: false
      allOf:
      - $ref: '#/components/schemas/LookupMetaInfo'
    LookupMetaInfoListResponse:
      type: object
      properties:
        lookups:
          type: array
          description: List of lookups.
          items:
            $ref: '#/components/schemas/LookupMetaInfo'
        nextPageToken:
          type: integer
          description: Last page token. Used for pagination.
          format: int32
      description: List of N lookups inside a domain.
      example:
        type: LookupMetaInfoListResponse
        cid: e47f4ab72ded
        code: 200
        context: null
        id: 11a68f01-4fb0-11ed-b24b-99afce214fb8
        msg: galactic_empire lookups.
        lookups:
        - name: DeathStarTroopers
          domain: galactic_empire
          fileSize: 1712128
          numEntries: 10000
          creationDate: 2021-09-29T10:18:10.805
          keyType:
            type: first
            columns: []
            hasher: null
          deployConfig: null
          lastStatus:
            eventdate: 2021-09-29T10:18:10.805
            domain: galactic_empire
            lookup: DeathStarTroopers
            msg: Lookup successfully created
          fields:
          - column: "ID,"
            type: ip4
            key: true
          - column: "Name,"
            type: str
            key: false
          - column: "Category,"
            type: str
            key: false
          - column: "Age,"
            type: int4
            key: false
          - column: "Sector,"
            type: int4
            key: false
          - column: "Rank,"
            type: str
            key: false
          - column: "BlasterModel,"
            type: str
            key: false
          shared: true
          owner: qa.lomaniacos@devo.com
          enabled: true
        - name: FugitiveJedis
          domain: galactic_empire
          fileSize: 32768
          numEntries: 50
          creationDate: 2021-10-10T10:00:05.812
          keyType:
            type: hash
            columns: []
            hasher:
              type: murmur
              seed: 1511793612
          deployConfig: null
          lastStatus:
            eventdate: 2021-10-10T10:01:02.001
            domain: galactic_empire
            lookup: FugitiveJedis
            msg: Lookup successfully created
          fields:
          - column: "Name,"
            type: str
            key: true
          - column: "LightsaberColor,"
            type: str
            key: false
          - column: "LastKnownLocation,"
            type: str
            key: false
          - column: "Species,"
            type: str
            key: false
          - column: "PlanetOfOrigin,"
            type: str
            key: false
          - column: "ConsideredDangerous,"
            type: bool
            key: false
          shared: true
          owner: qa.lomaniacos@devo.com
          enabled: true
        nextPageToken: 1
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
    LookupMetaInfoResponse:
      type: object
      properties:
        lookupMetaInfo:
          $ref: '#/components/schemas/LookupMetaInfoComplete'
      description: LookupMetaInfo component for LookupMetaInfoResponse
      example:
        type: LookupMetaInfoResponse
        cid: ee5f8fb3e225
        code: 200
        context: null
        id: 23f0e93a-5050-11ed-b24b-3bba2bcd85c3
        msg: galactic_republic/CloneTroopersSquads meta information
        lookupMetaInfo:
          name: CloneTroopersSquads
          domain: galactic_republic
          fileSize: 3600384
          numEntries: 1000
          creationDate: 2020-03-04T15:07:19
          keyType:
            type: first
            columns: []
            hasher: null
          deployConfig: null
          lastStatus:
            eventdate: 2020-03-04T15:08:02
            domain: galactic_republic
            lookup: CloneTroopersSquads
            msg: Lookup successfully created
          fields:
          - column: ID
            type: ip4
            key: true
          - column: NumberOfUnits
            type: ip4
            key: false
          - column: JediGeneralID
            type: ip4
            key: false
          - column: Active
            type: bool
            key: false
          shared: true
          owner: qa.lomaniacos@devo.com
          enabled: true
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
    LookupMetaInfoResponseError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup meta info endpoints.
        example:
          type: LookupMetaInfoResponseError
          cid: 35a6a56c8fde
          code: 403
          context: null
          id: 55b9f469-504c-11ed-b24b-c5ffaee961d7
          msg: Forbidden
    LookupNotificationError:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard error response for lookup notifications.
        example:
          type: LookupNotificationError
          cid: 32ac2fdbcc89
          code: 400
          context: null
          id: e111f616-4fbc-11ed-b24b-17bb564344b5
    LookupNotificationResponse:
      allOf:
      - $ref: '#/components/schemas/BasicDevoResponse'
      - type: object
        description: Standard response for lookup notifications.
        example:
          type: LookupActivationResponse
          cid: f44f458f7c32
          code: 200
          context: null
          id: c8234b9d-5052-11ed-b24b-85c623a0cbd8
          msg: Lookup succesfully notified
    LookupStatusResponse:
      type: object
      properties:
        eventdate:
          type: string
          description: Timestamp of the status.
        domain:
          type: string
          description: Domain of the lookup.
        lookup:
          type: string
          description: Name of the lookup.
        msg:
          type: string
          description: Job status description.
        code:
          type: string
          description: Job status code (short name).
        extra:
          type: string
          description: Job status extra information.
      description: Status of the job of a lookup at a given point in time.
      example:
        eventdata: 2021-09-29T10:18:10.805
        domain: galactic_empire
        lookup: ImperialIntranetActivity
        msg: Lookup successfully created
        extra: null
        code: deploy.ok
    LookupType:
      title: Root Type for LookupType.
      required:
      - type
      type: object
      properties:
        type:
          type: string
          description: Valid values are "normal" and "historic".
          enum:
          - normal
          - historic
        instantPolicy:
          type: string
          description: "Defines how to calculate the instant of each row. Only used\
            \ when the generated lookup is historic. Possible values are: - \"const\"\
            : The instance of all rows will be the supplied constant. - \"creation-instant\"\
            : The instance of all rows will be the creation instant. - \"column\"\
            : The instance will be extracted from the column with the given [name].\
            \ That column type must be timestamp."
        instant:
          minimum: 0
          type: integer
          description: Only for historic lookups of type "const".
          format: int64
        columnName:
          type: string
          description: Only for historic lookups of type "column".
        keepHistory:
          type: boolean
          description: |
            If enabled, Lookup Manager will store all historic
            data in the lookup, enabling historic search.
          default: false
      description: "Defines the type of the lookup. It can be: - normal: Regular old\
        \ lookups. - historic: New historic lookups."
      example:
        type: normal
    Recipe:
      required:
      - lookupType
      - recipeType
      - source
      type: object
      properties:
        recipeType:
          type: string
          description: Type of the recipe. Possible values are "once" for static lookups
            and "periodic" for periodic lookups.
          enum:
          - once
          - periodic
        source:
          $ref: '#/components/schemas/Source'
        lookupType:
          $ref: '#/components/schemas/LookupType'
        append:
          type: boolean
          description: "If true, when this recipe is evaluated, the content of its\
            \ source will be appended to the lookup created on the previous evaluation.\
            \ If there is no previous lookup, or if the recipe is updated, this property\
            \ is ignored. False by default."
          default: false
        key:
          $ref: '#/components/schemas/KeyAlgorithm'
        columnFilter:
          type: array
          description: If not null a white list of columns that will be projected.
            All elements of the list must be defined on source. Columns from source
            whose name is not on this list won't be projected.
          items:
            type: string
        contribution:
          $ref: '#/components/schemas/ContributionPolicy'
        secondaryIndexes:
          $ref: '#/components/schemas/SecondaryIndexes'
        refreshMillis:
          minimum: 60000
          type: integer
          description: |-
            Refresh period of the Lookup in milliseconds. Can only be used and
            is required if recipeType is "periodic".
          format: int64
        startMillis:
          type: integer
          description: Milliseconds since Epoch. Can only be used and is required
            if recipeType is "periodic".
          format: int64
        dataTimeToLive:
          minimum: 300000
          type: integer
          description: |-
            Size of the sliding window in millis used in dynamic queries,
            infinite if not set
          format: int64
        requiresDate:
          type: boolean
          description: "If true, the source query will be enriched with a closed date\
            \ range restriction. The lower bound will be the maximum between startMillis\
            \ and the last job instant and the upper bound will be always now(). Can\
            \ only be used if recipeType is \"periodic\". False by default."
      description: |-
        Recipe of the lookup to be created. This object states the following data about the lookup: - Whether if it is going to be periodic or not via the "recipeType" attribute. - The "Source" object which defines the source of the its data. - Its type, rather if it is a normal or a historic lookup. Via the "lookupType" attribute. - Whether if the data from the source is to be appended or overriden, using the "append" attribute. - The algorithm used to create its key, via the "key" attribute. - The columns to be added to it using the "columnFilter". - The contribution type of its columns, via the "contribution" attribute. - Its secondary indexes. In case the "lookupType" is of type "historic". - In case it is periodic, some info about its periodicity using the "refreshMillis" and "startMillis" fields. Optionally, "dataTimeToLive" - "dataTimeToLive" must be great than 300000 (5 minute) defines the max-age of the data in the lookup. - Whether the source of the query is to be enriched with a closed date
          range restriction, via the "requiresDate" attribute.
      example:
        recipeType: once
        source:
          query: "select eventdate, domain, userid from siem.logtrust.web.navigation\
            \ where now()-1m < eventdate < now()"
        lookupType:
          type: normal
        append: "false,"
        key:
          type: column
          column: eventdate
        columnFilter:
        - eventdate
        - domain
        - userid
        contribution:
          type: add
        requiresDate: false
    SecondaryIndexes:
      title: Root Type for SecondaryIndexes.
      required:
      - type
      type: object
      properties:
        type:
          type: string
          description: "Type of secondary indexes to be applied to the Lookup. Possible\
            \ values are \"all\", \"none\" and \"by-name\". \"none\" by default."
          enum:
          - all
          - none
          - by-name
          default: none
        map:
          type: object
          description: Map of column names to be applied as secondary indexes when
            the SecondaryIndexes is of type "by-name"
      description: Columns of a Lookup indexed as secondary indexes.
      example:
        type: all
        map:
          v3: SORTED
    Source:
      type: object
      properties:
        columns:
          type: array
          description: |-
            Array of Lookup column descriptors. Can only be used and is
            required if the lookup is to be created through a CSV file, so
            "fileProvider" field must be informed and "query" not.
          items:
            $ref: '#/components/schemas/Column'
        skipPreface:
          type: string
          description: Enter a regular expression to ignore rows of data in a CSV
            used as source that follow the structure indicated in the regex. Only
            used in CSV sources with "fileProvider" field informed and "query" not.
        hasHeader:
          type: boolean
          description: |
            Either if the CSV file of the CSV source has a header row or
            not.
        skipEmptyLines:
          type: boolean
          description: Either to skip empty lines on the CSV or not.
        fileProvider:
          $ref: '#/components/schemas/FileProvider'
        query:
          type: string
          description: Query to generate the lookup from. It must follow Devo's APIs
            LINQ syntax.
      description: "Source used to create the Lookup. This object states if the lookup\
        \ is gonna be created through a query to Devo, either by using que \"query\"\
        \ field or through a CSV file stored in AWS S3 using the \"fileProvider\"\
        \ field."
      example:
        query: select * from siem.logtrust.web.navigation where now()-1m < eventdate
          < now()
    ValidationError:
      type: object
      properties:
        code:
          type: integer
          description: Error code
          format: int32
        msg:
          type: string
          description: Error message
        cid:
          type: string
          description: Correlation ID of the response
        context:
          type: object
          description: Object containing the context of the response.
      description: Error returned by web server validations.
      example:
        code: 140
        msg: Validation failed.
        cid: 981d4e9056da
        context:
          failures: refreshMillis = 30000 <= must be greater than or equal to 60000
    Visibility:
      required:
      - type
      properties:
        type:
          type: string
          description: |-
            Type of the visibility. Possible values are:
            - "creator-only": To create a lookup only visible by the user's
                domain
            - "all-subdomains": To create a lookup visible by all domains owned
               by a reseller. Can only be used by users with RESELLER_ADMIN
              permissions.
            - "all-domains": To create a lookup visible by all domains. It is
              only allowed when the domain of the user is self.
            - "regex": To create a lookup visible by domains for which the
              regular expression applies. If this type is used, a regular
              expression must be placed on the "regex" field of this object.
              It is only allowed for self domain admins.
          enum:
          - creator-only
          - all-subdomains
          - all-domains
          - regex
        regex:
          type: string
          description: Regular expression to be applied for the visibility of the
            lookup in case its type is "regex".
      description: Visibility of the lookup to be created. This object sets the domains
        which will be able to see the lookup in Devo. Defaults to a visibility object
        of type "creator-only".

...

Endpoints and methods

Anchor
path1
path1
GET /lookup/{domain}

Display information on the lookups existing on a given domain.

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain that contains the lookups you want to list.

Query string parameters

Query string parameters are optionally added after the path parameters, preceded by a question mark (?) and separated by an ampersand (&)

Parameter

Type

Description

max_length

integer

Maximum number of values to return. The default value is 100. The maximum value is 1000 and the minimum value is 1.

Lookups are shown from oldest to newest.

pageToken

integer

Use this parameter to consider a previously requested list on your next request. This should be set to the value shown in the nextPageToken parameter included in the response you want to consider, if successful.

For example, you may perform a request and ask for information about the oldest 5 lookups in your domain. Then, you can perform a second request including the value in the nextPageToken parameter returned with the previous response and requesting only 2 lookups. This will return the 2 lookups created after the first 5 previously requested.

The default and minimum value is 0.

owner

string

You can filter the lookups in the response based on their domain owner, that is, the domain where the lookup was created. Supported values are:

  • THIS_DOMAIN - Returns only lookups created in the domain indicated in the request URL.

  • OTHER_DOMAINS - Returns only lookups owned by other domains but visible by the domain indicated in the request URL. This might be the case of domains that belong to a multitenant structure and have access to lookups defined in other domains that belong to that structure. You can decide the visibility level of a new lookup upon its creation.

  • ANY_DOMAIN - Returns both lookups owned by the domain indicated in the request URL and those visible by them in other domains.

The default value is THIS_DOMAIN

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can decide to make a lookup visible in all the domains within the structure when you create it using POST/lookup/{domain}/{name}/deploy-config. See how to do it here.

Example

Find below a request example in cURL language. This request will return information about the 10 oldest lookups created in the domain indicated. Learn how to authorize your request in this article.

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X GET https://api-us.devo.com/lookup-api/lookup/myDomain?max_length=10

And this request will return information about all the lookups owned by the user domain and also the ones visible to them in other domains:

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X GET https://api-us.devo.com/lookup-api/lookup/myDomain?owner=ANY_DOMAIN
Rw expand
titleResponses

Code

Description

200

Successful response. The response includes the list of lookups in the given domain with their details.

Code Block
{
  "type": "LookupMetaInfoListResponse",
  "cid": "72078e04ee84",
  "code": 200,
  "context": null,
  "id": "xxxxxxxxxx-0f74-11ee-b13b-4fc634871e5f",
  "msg": "tutorial lookups.",
  "lookups": [
    {
      "name": "Lookup_test_t",
      "domain": "tutorial",
      "fileSize": 12288,
      "numEntries": 136,
      "creationDate": "2023-03-15T13:45:57.63",
      "keyType": {
        "type": "first",
        "columns": null,
        "hasher": null
      },
      "deployConfig": null,
      "lastStatus": null,
      "fields": [
        {
          "column": "domain",
          "type": "str",
          "key": true
        },
        {
          "column": "CDNProvider",
          "type": "str",
          "key": false
        }
      ],
      "owner": "user@devo.com"
    },
    {
      "name": "CDN_Providers",
      "domain": "tutorial",
      "fileSize": 12288,
      "numEntries": 136,
      "creationDate": "2023-03-15T13:45:57.806",
      "keyType": {
        "type": "first",
        "columns": null,
        "hasher": null
      },
      "deployConfig": null,
      "lastStatus": null,
      "fields": [
        {
          "column": "domain",
          "type": "str",
          "key": true
        },
        {
          "column": "CDNProvider",
          "type": "str",
          "key": false
        }
      ],
      "shared": false,
      "owner": "user@devo.com"
    },
    {
      "name": "test_101",
      "domain": "tutorial",
      "fileSize": 40960,
      "numEntries": 307,
      "creationDate": "2023-03-15T13:45:58.338",
      "keyType": {
        "type": "first",
        "columns": null,
        "hasher": null
      },
      "deployConfig": null,
      "lastStatus": null,
      "fields": [
        {
          "column": "alertName",
          "type": "str",
          "key": true
        },
        {
          "column": "alertType",
          "type": "str",
          "key": false
        },
        {
          "column": "alertMitreTactics",
          "type": "str",
          "key": false
        },
        {
          "column": "alertMitreTechniques",
          "type": "str",
          "key": false
        },
        {
          "column": "alertPriority",
          "type": "int4",
          "key": false
        }
      ],
      "owner": "user@devo.com"
    },
    {
      "name": "d14022023api",
      "domain": "tutorial",
      "fileSize": 8192,
      "numEntries": 1,
      "creationDate": "2023-03-15T13:46:58.05",
      "keyType": {
        "type": "first",
        "columns": null,
        "hasher": null
      },
      "deployConfig": null,
      "lastStatus": null,
      "fields": [
        {
          "column": "key",
          "type": "int4",
          "key": true
        },
        {
          "column": "fbool",
          "type": "bool",
          "key": false
        }
      ],
      "owner": null
    }
  ],
  "nextPageToken": -1
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupMetaInfoResponseError",
  "cid": "046ead1c8323",
  "code": 400,
  "context": null,
  "id": "xxxxxx-4fbb-11ed-859a-f19049cfd717"
}

401

Unsuccessful response. The user is unauthorized to list the domain's lookups.

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupMetaInfoResponseError",
  "cid": "e33f677a6981",
  "code": 404,
  "context": null,
  "id": "xxxxxx-504c-11ed-859a-99d2d0713c21",
  "msg": "Not Found"
}

Anchor
path2
path2
GET /lookup/{domain}/{name}

Return information of a specific lookup.

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain that contains the lookup you want to retrieve.

name required

string

Enter the name of the lookup you want to get information about.

Example

Find below a request example in cURL language. This request will return information about the lookup called myLookup created in the domain indicated. Learn how to authorize your request in this article.

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X GET https://api-us.devo.com/lookup-api/lookup/myDomain/myLookup
Rw expand
titleResponses

Code

Description

200

Successful response. The response includes information about the requested lookup.

Code Block
{
  "type": "LookupMetaInfoResponse",
  "cid": "3c9bb672512c",
  "code": 200,
  "context": null,
  "id": "xxxxxxxxx-0f75-11ee-b13b-636d49ade562",
  "msg": "tutorial/test_101 meta information.",
  "lookupMetaInfo": {
    "name": "test_101",
    "domain": "tutorial",
    "fileSize": 40960,
    "numEntries": 307,
    "creationDate": "2023-03-15T13:45:58.14",
    "keyType": {
      "type": "first",
      "columns": null,
      "hasher": null
    },
    "deployConfig": null,
    "lastStatus": null,
    "fields": [
      {
        "column": "alertName",
        "type": "str",
        "key": true
      },
      {
        "column": "alertType",
        "type": "str",
        "key": false
      },
      {
        "column": "alertMitreTactics",
        "type": "str",
        "key": false
      },
      {
        "column": "alertMitreTechniques",
        "type": "str",
        "key": false
      },
      {
        "column": "alertPriority",
        "type": "int4",
        "key": false
      }
    ],
    "owner": "user@devo.com"
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupMetaInfoResponseError",
  "cid": "4b6cdd188a82",
  "code": 400,
  "context": null,
  "id": "xxxxxx-5052-11ed-859a-910aa97972a3",
  "msg": "Unsuccessful response. Bad Request."
}

401

Unsuccessful response. The user is unauthorized to get information about the lookup.

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

404

Unsuccessful response. Lookup not found.

Code Block
{
  "type": "LookupMetaInfoResponseError",
  "cid": "e33f677a6981",
  "code": 404,
  "context": null,
  "id": "xxxxxx-504c-11ed-859a-99d2d0713c21",
  "msg": "Not Found"
}

Anchor
path3
path3
GET /lookup/{domain}/{name}/job

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain that contains the required lookup.

name required

string

Enter the name of the required lookup.

Example

Find below a request example in cURL language. This request will return information about the last jobs generated by the lookup called myLookup created in the domain indicated. Learn how to authorize your request in this article.

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X GET https://api-us.devo.com/lookup-api/lookup/myDomain/myLookup/job
Rw expand
titleResponses

Code

Description

200

Successful response. Returns the job UUIDs of the given lookup.

Code Block
{
  "cid": "e47f4ab72ded",
  "code": 200,
  "context": null,
  "id": "xxxxxxxx-e37c-11ed-b5ea-0242ac120002",
  "msg": "Lookup job uuids",
  "jobs": [
    "xxxxxxx-c9a2-489c-8794-ea656a19b822",
    "xxxxxxx-9714-48a7-9976-73e41523edfd",
    "xxxxxxx-48a8-46ea-ab22-e0a5458e302b",
    "xxxxxxx-ad7e-4fe6-bb43-89f93e629d76"
  ]
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupMetaInfoResponseError",
  "cid": "6cde7fd6a1f4",
  "code": 400,
  "context": null,
  "id": "xxxxxxx-53a2-11ed-859a-33f9a0bb845a",
  "msg": "Unsuccessful response. Bad Request."
}

401

Unsuccessful response. The user is unauthorized to access the lookup

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

Anchor
path4
path4
GET /lookup/{domain}/{name}/job/{id}

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain that contains the required lookup.

name required

string

Enter the name of the required lookup.

id required

string

Enter the UUID of the required lookup job. You can get a job UUID using the request explained above, under the jobs parameter in the response.

Example

Find below a request example in cURL language. This request will return information about the lookup called myLookup created in the domain indicated. Learn how to authorize your request in this article.

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X GET https://api-us.devo.com/lookup-api/lookup/myDomain/myLookup/job/123456
Rw expand
titleResponses

Code

Description

200

Successful response. Returns the job statuses.

Code Block
{
  "cid": "e47f4ab72ded",
  "code": 200,
  "context": null,
  "id": null,
  "msg": "Lookup job's statuses",
  "status": [
    {
      "eventdata": "2021-09-29T10:18:10.805",
      "domain": "galactic_empire",
      "lookup": "ImperialIntranetActivity",
      "msg": "Lookup successfully created"
      "code": "create.ok"
    },
    {
      "eventdata": "2021-09-29T10:18:12.472",
      "domain": "ImperialIntranetActivity",
      "lookup": "test-schedule",
      "msg": "Lookup ready to be executed"
      "code": "deploy.ok"
    }
  ]
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupJobsError",
  "cid": "4d1eb85a908d",
  "code": 400,
  "context": null,
  "id": "xxxxxx-53a4-11ed-859a-2d69d242a54f",
  "msg": "Unsuccessful response. Bad Request."
}

401

Unsuccessful response. The user is unauthorized to access the lookup

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

Anchor
path5
path5
POST/lookup/{domain}/{name}/deploy-config

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the new lookup.

name required

string

Enter the name of the new lookup.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:


Anchor
id
id

id - Lookup ID object.

Parameter

Type

Description

creator

string

Domain of the lookup.

name

string

Name of the lookup.

Example value:

Code Block
"id": {
  "creator": "self",
  "name": "ForceSensitiveBeings"
}

Anchor
visibility
visibility

visibility - (string) Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.


Anchor
recipe
recipe

recipe required - Recipe of the lookup to be created.

Parameter

Type

Description

recipeType required

string

Type of the lookup recipe. Allowed values are once (static lookup) and periodic (dynamic lookup). Learn more about lookup types in this article.

source required

object

Source data of the lookup to be created. This object states if the lookup will be created using a query (using the query field), or through a CSV file stored in AWS S3 (using the fileProvider field).

Note

Check more about uploading a lookup using a CSV through S3, see this article.

  • columns - (array) Array of lookup column descriptors. Only used and required in CSV sources with fileProvider parameter informed and query parameter empty. Each column object may contain the following parameters:

    • name required - (string) Name of the column.

    • from - (integer) 0-based index of the column in the CSV.

    • type - (string) Data type of the column. Possible values are:

      • BOOLEAN

      • STRING

      • INT4

      • INT8

      • FLOAT4

      • FLOAT8

      • HEX4

      • HEX8

      • IP4

      • IP6

      • TIMESTAMP

      • DURATION

  • skipPreface - (string) Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • hasHeader - (boolean) Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • skipEmptyLines - (boolean) Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • fileProvider - (array) Info to get the CSV file from S3.

    • bucketName required (string) - Name of the S3 bucket where the CSV is located.

    • keyName required (string) - Path of the CSV in the bucket.

    • transferOwnership required (boolean) - Set this parameter to true if you want to transfer the CSV ownership to Devo and delete it from the bucket once the lookup is created.

    • accessKey - (string) - The access key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

    • secretKey - (string) - The secret key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

    • host - (string) - The S3 bucket host where the CSV is located.

    • port - (integer) - The S3 bucket port where the CSV is located.

    • region - (string) - The AWS region where the S3 bucket has been created.

  • query - (string) Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

    • boolean

    • string

    • int4

    • int8

    • float4

    • float8

    • hex4

    • hex8

    • ip4

    • ip6

    • timestamp

    • duration

lookupType

object

Indicate the lookup type.

  • type required - (string) Valid values are normal (regular lookups) and historic (time range lookups).

  • instantPolicy - (string) Defines how to calculate the instant of each row. Only used when the generated lookup type is historic. Possible values are:

    • natural - The associated source must be historical and the instant of each row will be used.

    • const - The instance of all rows will be the supplied constant value.

    • column - The instance will be extracted from the column with the given name. That column type must be timestamp.

  • instant - (number) Only for historic lookups of type const.

  • columnName - (string) Only for historic lookups of type column.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation.

However, note that if there is no previous lookup or the recipe is updated (that is to say, the query is modified), this property will be ignored and the lookup will be recreated.

The default value is false.

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

columnFilter

array

If not null, a white list of columns will be projected. All elements of the list must be defined by the source. Columns whose name is not on this list won't be projected.

contribution

object

Defines how a row contributes to the final result, normally used on incremental lookups.

  • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

  • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete.

secondaryIndexes

object

Columns of a lookup indexed as secondary indexes.

  • type required - (string) Type of the secondary indexes to be applied to the lookup. Values can be all, none or by-name. The default value is none.

  • map - Map of column names to be applied as secondary indexes when the type selected is by-name.

refreshMillis

number

Refresh time of the lookup. Can only be used and is required if the recipe type chosen is periodic.

startMillis

number

Millis since Epoch. Can only be used and is required if the recipe type chosen is periodic.

requiresDate

boolean

If true, the source query will be enriched with a closed date range restriction. The lower bound will be the maximum between startMillis and the last job instant, and the upper bound will be always now(). Can only be used if the recipe type chosen is periodic. The default value is false.


Anchor
status
status

notifyStatus - (boolean) If true, a notification will be sent to the Devo app once the lookup is executed. If you do not include this parameter, it will be false by default.


Check below an example of request body:

Code Block
{
  "id": {
    "creator": "rebel_alliance",
    "name": "TotallyNotFakeData"
  },
  "recipe": {
    "recipeType": "once",
    "source": {
      "query": "select 0 as key, false as IsDataFake, 2147483647 as RebelsImprisoned, 9223372036854775807 as CreditsOnImperialBanks, hex4('fffffff') as Hex4Emperor, hex8('fffffffffffffff') as Hex8Vader, 2.718281828459045 as EmperorClones, 3.141592653589793 as Pi, 87.219.9.157 as EmperorIP4, ip6('fe80::4492:bc4b:7a53:c0d5') as EmperorIP6, 0m as TimeAfterBattleOfYavin from siem.logtrust.web.navigation where now()-1m < eventdate < now() limit 1"
    },
    "lookupType": {
      "type": "normal"
    },
    "append": false,
    "key": {
      "type": "column",
      "column": "key"
    },
    "columnFilter": [
      "key",
      "IsDataFake",
      "RebelsImprisoned",
      "CreditsOnImperialBanks",
      "Hex4Emperor",
      "Hex8Vader",
      "EmperorClones",
      "Pi",
      "EmperorIP4",
      "EmperorIP6",
      "TimeAfterBattleOfYavin"
    ],
    "contribution": {
      "type": "add"
    },
    "requiresDate": false
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the creation request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d41c91a21d56",
  "code": 201,
  "context": null,
  "id": "xxxxxx-2201-11ec-b04a-53c6289921cb",
  "msg": "Lookup sent to creation",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": "creator-only",
    "recipe": {
      "type": "once",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": false,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": [
        "eventdate",
        "level",
        "domain",
        "userid",
        "sessionid",
        "correlationId"
      ],
      "contribution": {
        "type": "add"
      }
    }
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": "BAD_REQUEST",
  "id": "xxxxxx-5151-11ed-859a-5d2974203ed5",
  "message": "Bad Request"
}

401

Unsuccessful response. The user is unauthorized to create a lookup.

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

403

Unsuccessful response. User credentials are correct but does not have permission to create this lookup.

Code Block
{
  "type": "LookupCreationError",
  "cid": "9a3eda1848d1",
  "code": 403,
  "context": "FORBIDDEN",
  "id": "xxxxxx5055-11ed-859a-7b524e50491a",
  "msg": "User is not authorized to perform operations in the domain."
}

Anchor
path6
path6
POST/lookup/{domain}/{name}/deploy-csv

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

columns required

array

Array of lookup column descriptors. Each column object may contain the following parameters:

  • name required - (string) Name of the column.

  • from - (integer) 0-based index of the column in the CSV.

  • type - (string) Data type of the column. Possible values are:

    • BOOLEAN

    • STRING

    • INT4

    • INT8

    • FLOAT4

    • FLOAT8

    • HEX4

    • HEX8

    • IP4

    • IP6

    • TIMESTAMP

    • DURATION

fileProvider

array

Info to get the CSV file from S3.

  • bucketName required (string) - Name of the S3 bucket where the CSV is located.

  • keyName required (string) - Path of the CSV in the bucket.

  • transferOwnership required (boolean) - Set this parameter to true if you want to transfer the CSV ownership to Devo and delete it from the bucket once the lookup is created.

  • accessKey - (string) - The access key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

  • secretKey - (string) - The secret key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

  • host - (string) - The S3 bucket host where the CSV is located.

  • port - (integer) - The S3 bucket port where the CSV is located.

  • region - (string) - The AWS region where the S3 bucket has been created.

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

skipPreface

string

Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

hasHeader

boolean

Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty. Default value is false.

skipEmptyLines

boolean

Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty. Default value is false.

contribution

object

Defines how a row contributes to the final result, normally used on incremental lookups.

  • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

  • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

Check below an example of request body:

Code Block
{
  "columns": [
    {
      "name": "ID",
      "type": "INT8"
    },
    {
      "name": "Location",
      "type": "STRING"
    },
    {
      "name": "Age",
      "type": "FLOAT8"
    },
    {
      "name": "Species",
      "type": "STRING"
    },
    {
      "name": "MidiclorianLevel",
      "type": "FLOAT4"
    }
  ],
  "key": {
    "type": "column",
    "column": "ID"
  },
  "fileProvider": {
    "bucketName": "holocrons-bucket",
    "keyName": "secrets/data/force-sensitive-beings.csv",
    "transferOwnership": true
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "columns": [
          {
            "name": "ID",
            "type": "INT8"
          },
          {
            "name": "Location",
            "type": "STRING"
          },
          {
            "name": "Age",
            "type": "FLOAT8"
          },
          {
            "name": "Species",
            "type": "STRING"
          },
          {
            "name": "MidiclorianLevel",
            "type": "FLOAT4"
          }
        ],
        "fileProvider": {
          "bucketName": "holocrons-bucket",
          "keyName": "secrets/data/force-sensitive-beings.csv",
          "transferOwnership": true
        },
        "skipPreface": null,
        "hasHeader": false,
        "skipEmptyLines": false
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": null,
      "startMillis": null,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path7
path7
POST/lookup/{domain}/{name}/deploy-csv

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request multipart/form-data body must include the CSV file and an associated JSON configuration object. Click them in the following list to see its details:

Parameter

Type

Description

deploy-config

object

Deploy CSV configuration of the lookup to be created. This object states the visibility of the created lookup, the fileProvider indicating the CSV file stored in AWS S3, the column descriptors and key. It also includes metainfo from the CSV.

  • visibility - (string) Visibility level of the lookup. Allowed values are:

    • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

    • all-subdomains - (string) The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

  • columns required - (array) Array of lookup column descriptors. Only used and required in CSV sources with fileProvider parameter informed and query parameter empty. Each column object may contain the following parameters:

    • name required - (string) Name of the column.

    • from - (integer) 0-based index of the column in the CSV.

    • type - (string) Data type of the column. Possible values are:

      • BOOLEAN

      • STRING

      • INT4

      • INT8

      • FLOAT4

      • FLOAT8

      • HEX4

      • HEX8

      • IP4

      • IP6

      • TIMESTAMP

      • DURATION

  • fileProvider - (array) Info to get the CSV file from S3.

    • bucketNamerequired - (string) The name of the S3 bucket where the CSV is located.

    • keyNamerequired- (string) The path of the CSV inside the bucket.

    • transferOwnershiprequired - (boolean) This parameter represents whether Lomana should act as the owner of the CSV and delete it from the bucket once it has finished creating the lookup.

    • accessKey - (string) The access key of a customer’s AWS user with permissions to access the bucket represented in bucketName.

    • secretKey - (string) The secret key of a customer’s AWS user with permissions to access the bucket represented in bucketName.

    • host - (string) The S3 bucket host where to find the CSV.

    • port - (integer) The S3 bucket port where to find the CSV.

    • region - (string) The AWS region whether the S3 bucket has been created.

  • key - (string) In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

    • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

    • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

    • type required - (string). Type of key algorithm. Values can be:

      • first-column - The first column of the lookup will be used as key. This is the default value.

      • column - The column indicated in the column parameter will be used as key.

      • row-hash - A hash of the elements on the first row of the lookup will be used as key.

      • col-hash - A hash of the columns stated in the columns parameter will be used as key.

      • seq - The key of the lookup will be generated sequentially.

  • skipPreface - (string) Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • hasHeader - (boolean) Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • skipEmptyLines - (boolean) Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • contribution - (array) Defines how a row contributes to the final result, normally used on incremental lookups.

    • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

    • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete

  • keepHistory - (boolean) If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

  • columnTypeReference- (string) If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

  • append- (boolean) If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

csv

file

CSV file to upload. Only needed if the file was not uploaded to S3.

Note

Check more about uploading a lookup using a CSV through S3, see this article.

Check below an example of request body:

Code Block
{
  "deploy-config": {
    "externalValue": "https://devo.com/main/files/simple-lookup-with-header/deploy-csv.json"
  },
  "csv": {
    "externalValue": "https://devo.com/main/files/simple-lookup-with-header/simple_lookup.csv"
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "columns": [
          {
            "name": "ID",
            "type": "INT8"
          },
          {
            "name": "Location",
            "type": "STRING"
          },
          {
            "name": "Age",
            "type": "FLOAT8"
          },
          {
            "name": "Species",
            "type": "STRING"
          },
          {
            "name": "MidiclorianLevel",
            "type": "FLOAT4"
          }
        ],
        "fileProvider": {
          "bucketName": "holocrons-bucket",
          "keyName": "secrets/data/force-sensitive-beings.csv",
          "transferOwnership": true
        },
        "skipPreface": null,
        "hasHeader": false,
        "skipEmptyLines": false
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": null,
      "startMillis": null,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path8
path8
POST/lookup/{domain}/{name}/deploy-static-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

Check below an example of request body:

Code Block
{
  "visibility": {
    "type": "creator-only"
  },
  "query": "select userid, domain from siem.logtrust.web.navigation where now()-1d < eventdate < now()",
  "key": {
    "type": "column",
    "column": "userid"
  },
  "keepHistory": false,
  "columnTimeReference": null
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "once",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": false,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": [
        "eventdate",
        "level",
        "domain",
        "userid",
        "sessionid",
        "correlationId"
      ],
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      }
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-static-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path9
path9
POST/lookup/{domain}/{name}/deploy-periodic-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queryable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

refreshPeriod

string

Refresh period of the lookup. Defaults to grouping period of the query in case it is a grouping query, or 5 minutes if not. Accepted values are the ones accepted by Devo's duration type.

The minimum value accepted is 1 minute.

startDate

string

Lookup creation start date. Defaults to the time of the request. Can either be an ISO-8601 date time string or a number of milliseconds from Epoch.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

Check below an example of request body:

Code Block
{
  "visibility": {
    "type": "creator-only"
  },
  "query": "select userid, domain from siem.logtrust.web.navigation where now()-5m < eventdate < now()",
  "key": {
    "type": "column",
    "column": "userid"
  },
  "refreshPeriod": "5m",
  "startDate": "2023-12-12T00:00:00.00Z",
  "append": true,
  "keepHistory": false,
  "columnTimeReference": null
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": 300000,
      "startMillis": 1702339200000,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "refreshPeriod should be bigger than 1 minute"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-periodic-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path10
path10
POST/lookup/{domain}/{name}/deploy-sliding-window-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

keyrequired

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

windowSizerequired

string

Size of the sliding window. Every time the query is executed, the lookup will contain the size of the window. Accepted values are the ones accepted by Devo duration type. The minimum value accepted is 1 hour (Example: Xh, Xd).

refreshPeriod required

string

Lookup refresh period. Defaults to query’s grouping period in case of a grouping query, or 5 minutes if not. Accepted values are the ones accepted by Devo duration type. The minimum value accepted is 1 minute (Example: Xm, Xh, Xd).

startDate

string

Lookup creation start date. Defaults to the time of the request. Can either be an ISO-8601 date time string or a number of milliseconds from Epoch.

keepHistory

boolean

If set to true, the Lookup Manager will store all historic data in the lookup, enabling historic search.

columnTimeReference

string

If given, the Lookup Manager will use the column specified as time instant reference for the data provided.

Check below an example of request body:

Code Block
{
    "visibility": {
      "type": "creator-only"
    },
    "query": "from box.unix group by machine, srcIp",
    "key": {
        "type": "column",
        "column": "machine"
    },
    windowSize": "30d",
    "refreshPeriod" : "5m"
}
Rw expand
titleResponses

Code

Description

200

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 200,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "query": "select userid, domain from siem.logtrust.web.activity"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "userid"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": 600000,
      "startMillis": 1702339200000,
      "slideWindow": 86400000,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "refreshPeriod should be bigger than 1 minute"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-sliding-window-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path11
path11
PUTlookup/{domain}/{name}/deploy-config

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where that contains the lookup you want to update.

name required

string

Enter the name of the lookup you want to update.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:


Anchor
id
id

id  - Lookup ID object.

Parameter

Type

Description

creator

string

Domain of the lookup.

name

string

Name of the lookup.

Example value:

Code Block
"id": {
  "creator": "self",
  "name": "ForceSensitiveBeings"
}

Anchor
visibility
visibility

visibility - (string) Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain.. Only multitenant Admin users will be able to use this value.


Anchor
recipe
recipe

recipe required - Recipe of the lookup to be updated.

Parameter

Type

Description

recipeType required

string

Type of the lookup recipe. Allowed values are once (static lookup) and periodic (dynamic lookup). Learn more about lookup types in this article.

source required

object

Source data of the lookup to be created. This object states if the lookup will be created using a query (using the query field), or through a CSV file stored in AWS S3 (using the fileProvider field).

  • columns - (array) Array of lookup column descriptors. Only used and required in CSV sources with fileProvider parameter informed and query parameter empty. Each column object may contain the following parameters:

    • name required - (string) Name of the column.

    • from - (integer) 0-based index of the column in the CSV.

    • type - (string) Data type of the column. Possible values are:

      • BOOLEAN

      • STRING

      • INT4

      • INT8

      • FLOAT4

      • FLOAT8

      • HEX4

      • HEX8

      • IP4

      • IP6

      • TIMESTAMP

      • DURATION

  • skipPreface - (string) Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • hasHeader - (boolean) Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • skipEmptyLines - (boolean) Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • fileProvider - (array) Info to get the CSV file from S3.

    • bucketName required (string) - Name of the S3 bucket where the CSV is located.

    • keyName required (string) - Path of the CSV in the bucket.

    • transferOwnership required (boolean) - Set this parameter to true if you want to transfer the CSV ownership to Devo and delete it from the bucket once the lookup is created.

    • accessKey - (string) - The access key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

    • secretKey - (string) - The secret key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

    • host - (string) - The S3 bucket host where the CSV is located.

    • port - (integer) - The S3 bucket port where the CSV is located.

    • region - (string) - The AWS region where the S3 bucket has been created.

  • query - (string) Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

    • boolean

    • string

    • int4

    • int8

    • float4

    • float8

    • hex4

    • hex8

    • ip4

    • ip6

    • timestamp

    • duration

lookupType

object

Indicate the lookup type.

  • type required - (string) Valid values are normal (regular lookups) and historic (time range lookups).

  • instantPolicy - (string) Defines how to calculate the instant of each row. Only used when the generated lookup type is historic. Possible values are:

    • natural - The associated source must be historical and the instant of each row will be used.

    • const - The instance of all rows will be the supplied constant value.

    • column - The instance will be extracted from the column with the given name. That column type must be timestamp.

  • instant - (number) Only for historic lookups of type const.

  • columnName - (string) Only for historic lookups of type column.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation.

However, note that if there is no previous lookup or the recipe is updated (that is to say, the query is modified), this property will be ignored and the lookup will be recreated.

The default value is false.

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

columnFilter

array

If not null, a white list of columns will be projected. All elements of the list must be defined by the source. Columns whose name is not on this list won't be projected.

contribution

object

Defines how a row contributes to the final result, normally used on incremental lookups.

  • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

  • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete.

secondaryIndexes

object

Columns of a lookup indexed as secondary indexes.

  • type required - (string) Type of the secondary indexes to be applied to the lookup. Values can be all, none or by-name. The default value is none.

  • map - Map of column names to be applied as secondary indexes when the type selected is by-name.

refreshMillis

number

Refresh time of the lookup. Can only be used and is required if the recipe type chosen is periodic.

startMillis

number

Millis since Epoch. Can only be used and is required if the recipe type chosen is periodic.

requiresDate

boolean

If true, the source query will be enriched with a closed date range restriction. The lower bound will be the maximum between startMillis and the last job instant, and the upper bound will be always now(). Can only be used if the recipe type chosen is periodic. The default value is false.


Anchor
status
status

notifyStatus - (boolean) If true, a notification will be sent to the Devo app once the lookup is executed. If you do not include this parameter, it will be false by default.


Check below an example of request body:

Code Block
{
  "id": {
    "creator": "rebel_alliance",
    "name": "TotallyNotFakeData"
  },
  "recipe": {
    "recipeType": "once",
    "source": {
      "query": "select 0 as key, false as IsDataFake, 2147483647 as RebelsImprisoned, 9223372036854775807 as CreditsOnImperialBanks, hex4('fffffff') as Hex4Emperor, hex8('fffffffffffffff') as Hex8Vader, 2.718281828459045 as EmperorClones, 3.141592653589793 as Pi, 87.219.9.157 as EmperorIP4, ip6('fe80::4492:bc4b:7a53:c0d5') as EmperorIP6, 0m as TimeAfterBattleOfYavin from siem.logtrust.web.navigation where now()-1m < eventdate < now() limit 1"
    },
    "lookupType": {
      "type": "normal"
    },
    "append": false,
    "key": {
      "type": "column",
      "column": "key"
    },
    "columnFilter": [
      "key",
      "IsDataFake",
      "RebelsImprisoned",
      "CreditsOnImperialBanks",
      "Hex4Emperor",
      "Hex8Vader",
      "EmperorClones",
      "Pi",
      "EmperorIP4",
      "EmperorIP6",
      "TimeAfterBattleOfYavin"
    ],
    "contribution": {
      "type": "add"
    },
    "requiresDate": false
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d41c91a21d56",
  "code": 201,
  "context": null,
  "id": "xxxxxx-2201-11ec-b04a-53c6289921cb",
  "msg": "Lookup sent to creation",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": "creator-only",
    "recipe": {
      "type": "once",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": false,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": [
        "eventdate",
        "level",
        "domain",
        "userid",
        "sessionid",
        "correlationId"
      ],
      "contribution": {
        "type": "add"
      }
    }
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": "BAD_REQUEST",
  "id": "xxxxxx-5151-11ed-859a-5d2974203ed5",
  "message": "Bad Request"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}

403

Unsuccessful response. User credentials are correct but does not have permission to update this lookup.

Code Block
{
  "type": "LookupCreationError",
  "cid": "9a3eda1848d1",
  "code": 403,
  "context": "FORBIDDEN",
  "id": "xxxxxx5055-11ed-859a-7b524e50491a",
  "msg": "User is not authorized to perform operations in the domain."
}

Anchor
path12
path12
PUTlookup/{domain}/{name}/deploy-csv

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the domain name of the lookup you want to update.

name required

string

Enter the name of the lookup you want to update.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

columns required

array

Array of lookup column descriptors. Each column object may contain the following parameters:

  • name required - (string) Name of the column.

  • from - (integer) 0-based index of the column in the CSV.

  • type - (string) Data type of the column. Possible values are:

    • BOOLEAN

    • STRING

    • INT4

    • INT8

    • FLOAT4

    • FLOAT8

    • HEX4

    • HEX8

    • IP4

    • IP6

    • TIMESTAMP

    • DURATION

fileProvider

array

Info to get the CSV file from S3.

  • bucketName required (string) - Name of the S3 bucket where the CSV is located.

  • keyName required (string) - Path of the CSV in the bucket.

  • transferOwnership required (boolean) - Set this parameter to true if you want to transfer the CSV ownership to Devo and delete it from the bucket once the lookup is created.

  • accessKey - (string) - The access key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

  • secretKey - (string) - The secret key of a customer’s AWS user with permissions to access the bucket represented in the bucketName parameter.

  • host - (string) - The S3 bucket host where the CSV is located.

  • port - (integer) - The S3 bucket port where the CSV is located.

  • region - (string) - The AWS region where the S3 bucket has been created.

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

skipPreface

string

Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

hasHeader

boolean

Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty. Default value is false.

skipEmptyLines

boolean

Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty. Default value is false.

contribution

object

Defines how a row contributes to the final result, normally used on incremental lookups.

  • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

  • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

Check below an example of request body:

Code Block
{
  "columns": [
    {
      "name": "ID",
      "type": "INT8"
    },
    {
      "name": "Location",
      "type": "STRING"
    },
    {
      "name": "Age",
      "type": "FLOAT8"
    },
    {
      "name": "Species",
      "type": "STRING"
    },
    {
      "name": "MidiclorianLevel",
      "type": "FLOAT4"
    }
  ],
  "key": {
    "type": "column",
    "column": "ID"
  },
  "fileProvider": {
    "bucketName": "holocrons-bucket",
    "keyName": "secrets/data/force-sensitive-beings.csv",
    "transferOwnership": true
  },
  "contribution": {
    "type": "add"
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupUpdateResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "columns": [
          {
            "name": "ID",
            "type": "INT8"
          },
          {
            "name": "Location",
            "type": "STRING"
          },
          {
            "name": "Age",
            "type": "FLOAT8"
          },
          {
            "name": "Species",
            "type": "STRING"
          },
          {
            "name": "MidiclorianLevel",
            "type": "FLOAT4"
          }
        ],
        "fileProvider": {
          "bucketName": "holocrons-bucket",
          "keyName": "secrets/data/force-sensitive-beings.csv",
          "transferOwnership": true
        },
        "skipPreface": null,
        "hasHeader": false,
        "skipEmptyLines": false
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": null,
      "startMillis": null,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

Anchor
path13
path13
PUTlookup/{domain}/{name}/deploy-csv

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request multipart/form-data body must include the CSV file and an associated JSON configuration object. Click them in the following list to see its details:

Parameter

Type

Description

deploy-config

object

Deploy CSV configuration of the lookup to be created. This object states the visibility of the created lookup, the fileProvider indicating the CSV file stored in AWS S3, the column descriptors and key. It also includes metainfo from the CSV.

  • visibility - (string) Visibility level of the lookup. Allowed values are:

    • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

    • all-subdomains - (string) The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

  • columns required - (array) Array of lookup column descriptors. Only used and required in CSV sources with fileProvider parameter informed and query parameter empty. Each column object may contain the following parameters:

    • name required - (string) Name of the column.

    • from - (integer) 0-based index of the column in the CSV.

    • type - (string) Data type of the column. Possible values are:

      • BOOLEAN

      • STRING

      • INT4

      • INT8

      • FLOAT4

      • FLOAT8

      • HEX4

      • HEX8

      • IP4

      • IP6

      • TIMESTAMP

      • DURATION

  • fileProvider - (array) Info to get the CSV file from S3.

    • bucketNamerequired - (string) The name of the S3 bucket where the CSV is located.

    • keyNamerequired- (string) The path of the CSV inside the bucket.

    • transferOwnershiprequired - (boolean) This parameter represents whether Lomana should act as the owner of the CSV and delete it from the bucket once it has finished creating the lookup.

    • accessKey - (string) The access key of a customer’s AWS user with permissions to access the bucket represented in bucketName.

    • secretKey - (string) The secret key of a customer’s AWS user with permissions to access the bucket represented in bucketName.

    • host - (string) The S3 bucket host where to find the CSV.

    • port - (integer) The S3 bucket port where to find the CSV.

    • region - (string) The AWS region whether the S3 bucket has been created.

  • key - (string) In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

    • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

    • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

    • type required - (string). Type of key algorithm. Values can be:

      • first-column - The first column of the lookup will be used as key. This is the default value.

      • column - The column indicated in the column parameter will be used as key.

      • row-hash - A hash of the elements on the first row of the lookup will be used as key.

      • col-hash - A hash of the columns stated in the columns parameter will be used as key.

      • seq - The key of the lookup will be generated sequentially.

  • skipPreface - (string) Enter a regular expression to ignore rows of data in a CSV used as source that follow the structure indicated in the regex. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • hasHeader - (boolean) Indicate if the source CSV file has a header row or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • skipEmptyLines - (boolean) Indicate if you want to skip empty lines in the source CSV or not. Only used in CSV sources with fileProvider parameter informed and query parameter empty.

  • contribution - (array) Defines how a row contributes to the final result, normally used on incremental lookups.

    • type required - (string) Type of the contribution policy. Values can be add, del or col. The default value is add.

    • name - (string) The contribution will be extracted from the column with the given name. That column type must be string and its valid values are add and delete

  • keepHistory - (boolean) If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

  • columnTypeReference- (string) If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

  • append- (boolean) If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

csv

file

CSV file to upload. Only needed if the file was not uploaded to S3.

Note

Check more about uploading a lookup using a CSV through S3, see this article.

Check below an example of request body:

Code Block
{
  "deploy-config": {
    "externalValue": "https://devo.com/main/files/simple-lookup-with-header/deploy-csv.json"
  },
  "csv": {
    "externalValue": "https://devo.com/main/files/simple-lookup-with-header/simple_lookup.csv"
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "columns": [
          {
            "name": "ID",
            "type": "INT8"
          },
          {
            "name": "Location",
            "type": "STRING"
          },
          {
            "name": "Age",
            "type": "FLOAT8"
          },
          {
            "name": "Species",
            "type": "STRING"
          },
          {
            "name": "MidiclorianLevel",
            "type": "FLOAT4"
          }
        ],
        "fileProvider": {
          "bucketName": "holocrons-bucket",
          "keyName": "secrets/data/force-sensitive-beings.csv",
          "transferOwnership": true
        },
        "skipPreface": null,
        "hasHeader": false,
        "skipEmptyLines": false
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": null,
      "startMillis": null,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-csv' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path14
path14
PUTlookup/{domain}/{name}/deploy-static-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the domain name of the lookup you want to update.

name required

string

Enter the name of the lookup you want to update.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

Check below an example of request body:

Code Block
{
  "visibility": {
    "type": "creator-only"
  },
  "query": "select userid, domain from siem.logtrust.web.navigation where now()-1d < eventdate < now()",
  "key": {
    "type": "column",
    "column": "userid"
  }
}
Rw expand
titleResponses

Code

Description

201

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "once",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": false,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": [
        "eventdate",
        "level",
        "domain",
        "userid",
        "sessionid",
        "correlationId"
      ],
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      }
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "KeyAlgorithm values can be 'first-column', 'column', 'row-hash', 'col-hash' and 'seq'"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-static-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

Anchor
path15
path15
PUTlookup/{domain}/{name}/deploy-periodic-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the domain name of the lookup you want to update.

name required

string

Enter the name of the lookup you want to update.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queryable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

key

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

refreshPeriod

string

Refresh period of the lookup. Defaults to grouping period of the query in case it is a grouping query, or 5 minutes if not. Accepted values are the ones accepted by Devo's duration type.

The minimum value accepted is 1 minute.

startDate

string

Lookup creation start date. Defaults to the time of the request. Can either be an ISO-8601 date time string or a number of milliseconds from Epoch.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation.

However, note that if there is no previous lookup or the recipe is updated (that is to say, the query is modified), this property will be ignored and the lookup will be recreated.

The default value is false.

append

boolean

If true, when this recipe is evaluated, the content of its source will be appended to the lookup created on the previous evaluation. If there is no previous lookup, or if the recipe is updated, this property is ignored. The default value is false.

keepHistory

boolean

If true, the Lookup Manager will store in the lookup all historic data, enabling historic search. The default value is false.

columnTimeReference

string

If given, the Lookup Manager will use the specified column as time instant reference for the data provided.

Check below an example of request body:

Code Block
{
  "visibility": {
    "type": "creator-only"
  },
  "query": "select userid, domain from siem.logtrust.web.navigation where now()-5m < eventdate < now()",
  "key": {
    "type": "column",
    "column": "userid"
  },
  "refreshPeriod": "5m",
  "startDate": "now",
  "append": true
}
Rw expand
titleResponses

Code

Description

200

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 201,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "query": "select eventdate, level, domain, userid, sessionid, correlationId from siem.logtrust.web.activity where now()-1m < eventdate < now()"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "key"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": 300000,
      "startMillis": 1702339200000,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "refreshPeriod should be bigger than 1 minute"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-periodic-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

Anchor
path16
path16
PUTlookup/{domain}/{name}/deploy-sliding-window-query

...

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain where you want to create the lookup.

name required

string

Enter the name of the lookup you want to create.

Request body

The request JSON body must include the following objects and key-value pairs. Click them in the following list to see its details:

Parameter

Type

Description

visibility

string

Visibility level of the lookup. Allowed values are:

  • creator-only - The lookup will be visible only in the creator's domain. This is the default value.

  • all-subdomains - The lookup will be queriable in all the subdomains in a multitenant domain. It will only be visible in the lookup management web page in the root domain. Only multitenant Admin users will be able to use this value.

  • all-domains - To create a lookup visible by all domains. It is only allowed when the domain of the user is self.

Info

Lookup ownership VS visibility

  • Lookup ownership refers to the domain where the lookup is defined.

  • Lookup visibility refers to the domain(s) where a lookup is visible. Note that lookups are created in a specific Devo domain, but they can be visible in other domains as well. If your domain belongs to a multitenant structure, you can use the all-subdomains parameter defined above to make it visible in all the domains within the structure.

query required

string

Query to generate the lookup from. It must be written using LINQ syntax. Allowed field data types are:

  • boolean

  • string

  • int4

  • int8

  • float4

  • float8

  • hex4

  • hex8

  • ip4

  • ip6

  • timestamp

  • duration

keyrequired

object

In case the key of the lookup is not the name of a column, it can be computed through an algorithm using the elements on this data type.

  • columns - (string) List of columns to be used to generate the key for the lookup. This is only used when the type of the object is col-hash

  • column - (string) Name of the column to be used as the key for the lookup. This is only used when the type of the object is column

  • type required - (string) Type of key algorithm. Values can be:

    • first-column - The first column of the lookup will be used as key. This is the default value.

    • column - The column indicated in the column parameter will be used as key.

    • row-hash - A hash of the elements on the first row of the lookup will be used as key.

    • col-hash - A hash of the columns stated in the columns parameter will be used as key.

    • seq - The key of the lookup will be generated sequentially.

windowSizerequired

string

Size of the sliding window. Every time the query is executed, the lookup will contain the size of the window. Accepted values are the ones accepted by Devo duration type. The minimum value accepted is 1 hour (Example: Xh, Xd).

refreshPeriod required

string

Lookup refresh period. Defaults to query’s grouping period in case of a grouping query, or 5 minutes if not. Accepted values are the ones accepted by Devo duration type. The minimum value accepted is 1 minute (Example: Xm, Xh, Xd).

startDate

string

Lookup creation start date. Defaults to the time of the request. Can either be an ISO-8601 date time string or a number of milliseconds from Epoch.

keepHistory

boolean

If set to true, the Lookup Manager will store all historic data in the lookup, enabling historic search.

columnTimeReference

string

If given, the Lookup Manager will use the column specified as time instant reference for the data provided.

Check below an example of request body:

Code Block
{
    "visibility": {
      "type": "creator-only"
    },
    "query": "from box.unix group by machine, srcIp",
    "key": {
        "type": "column",
        "column": "machine"
    },
    "windowSize": "30d",
    "refreshPeriod" : "5m"
}
Rw expand
titleResponses

Code

Description

200

Successful response. Request submitted. The response includes the ID of the update request.

Code Block
{
  "type": "LookupCreationResponse",
  "cid": "d5ce4eb105b2",
  "code": 200,
  "context": null,
  "id": "c6b1e939-a57c-11ee-b1a9-a124bba45b9b",
  "msg": "Lookup sent to creation. You can check the creation status using the provided id: /lookup/{domain}/{name}/job/{id}",
  "lookupDeployConfig": {
    "id": {
      "creator": "rebel_alliance",
      "name": "GalacticEmpireActivity"
    },
    "visibility": {
      "type": "creator-only"
    },
    "recipe": {
      "recipeType": "periodic",
      "source": {
        "query": "select userid, domain from siem.logtrust.web.activity"
      },
      "lookupType": {
        "type": "normal"
      },
      "append": true,
      "key": {
        "type": "column",
        "column": "userid"
      },
      "columnFilter": null,
      "contribution": {
        "type": "add"
      },
      "secondaryIndexes": {
        "type": "none"
      },
      "refreshMillis": 600000,
      "startMillis": 1702339200000,
      "slideWindow": 86400000,
      "requiresDate": true
    },
    "notifyStatus": true
  }
}

400

Unsuccessful response. Bad request.

Code Block
{
  "type": "LookupCreationError",
  "cid": "0cd289fa1b63",
  "code": 400,
  "context": null,
  "id": "9f270aca-5151-11ed-859a-5d2974203ed5",
  "msg": "refreshPeriod should be bigger than 1 minute"
}

401

Unsuccessful response. The user is unauthorized to update the lookup.

Code Block
{
  "code": 401,
  "msg": "Access to 'https://api.us.devo.com/lookup-api/lookup/galactic_empire/destroyed_planets/deploy-sliding-window-query' requires valid auth",
  "cid": "29fda52318ae"
}

403

Unsuccessful response. Forbidden access.

Code Block
{
  "code": 5,
  "msg": "Token invalid or expired",
  "cid": "29fda52318ae"
}

404

Unsuccessful response. Domain not found.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 404,
  "context": null,
  "id": "901c6154-b16b-11ee-b3ab-47fc28cf5888",
  "msg": "Domain not found."
}

409

Unsuccessful response. Lookup already exists.

Code Block
{
  "type": "LookupCreationError",
  "cid": "68e612d824a5",
  "code": 409,
  "context": null,
  "id": "9b6b0f0e-b162-11ee-b3ab-77fd619670ef",
  "msg": "Lookup with domain galactic_empire and name destroyed_planets already exists"
}

Anchor
path17
path17
DELETE/lookup/{domain}/{name}

Send a request to delete a specific lookup.

Rw ui expands macro
Rw expand
titleRequest

Path parameters

Add the following path parameters as part of the endpoint:

Parameter

Type

Description

domain required

string

Enter the name of the domain that contains the lookup you want to delete.

name required

string

Enter the name of the lookup you want to delete.

Example

Find below a request example in cURL language. This request will return information about the 10 oldest lookups created in the domain indicated. Learn how to authorize your request in this article.

Code Block
curl -H "standAloneToken:YOUR_TOKEN" -X DELETE   https://api-us.devo.com/lookup-api/lookup/myDomain/myLookup
Rw expand
titleResponses

Code

Description

200

Successful response. Deletion request sent. The response includes the ID of the request.

Code Block
{
  "type": "LookupDeletionResponse",
  "cid": "f44f458f7c32",
  "code": 200,
  "context": null,
  "id": "xxxxxx-5052-11ed-b24b-85c623a0cbd8",
  "msg": "Lookup sent to deletion"
}

401

Unsuccessful response. The user is unauthorized to delete this lookup.

Code Block
{
  "error": {
    "code": 401,
    "message": "Unauthorized"
  }
}