> ## Documentation Index
> Fetch the complete documentation index at: https://conductorone-leet-slack-mcp-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Finding Transformation Rule

> Create a new finding transformation rule.



## OpenAPI

````yaml https://spec.speakeasy.com/conductor-one/conductorone/my-source-with-code-samples post /api/v1/findings/transformation-rules
openapi: 3.1.0
info:
  description: The C1 API is a HTTP API for managing C1 resources.
  title: C1 API
  version: 0.1.0-alpha
servers:
  - description: The C1 API server for the current tenant.
    url: https://{tenantDomain}.conductor.one
    variables:
      tenantDomain:
        default: example
        description: The domain of the tenant to use for this request.
security:
  - bearerAuth: []
    oauth: []
paths:
  /api/v1/findings/transformation-rules:
    post:
      tags:
        - Finding Transformation Rules
      summary: Create Finding Transformation Rule
      description: Create a new finding transformation rule.
      operationId: >-
        c1.api.finding.v1.FindingTransformationRuleService.CreateFindingTransformationRule
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/c1.api.finding.v1.CreateFindingTransformationRuleRequest
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/c1.api.finding.v1.CreateFindingTransformationRuleResponse
          description: Successful response
      x-codeSamples:
        - lang: go
          label: CreateFindingTransformationRule
          source: "package main\n\nimport(\n\t\"context\"\n\t\"github.com/conductorone/conductorone-sdk-go/pkg/models/shared\"\n\tconductoronesdkgo \"github.com/conductorone/conductorone-sdk-go\"\n\t\"log\"\n)\n\nfunc main() {\n    ctx := context.Background()\n\n    s := conductoronesdkgo.New(\n        conductoronesdkgo.WithSecurity(shared.Security{\n            BearerAuth: \"<YOUR_BEARER_TOKEN_HERE>\",\n            Oauth: \"<YOUR_OAUTH_HERE>\",\n        }),\n    )\n\n    res, err := s.FindingTransformationRule.CreateFindingTransformationRule(ctx, nil)\n    if err != nil {\n        log.Fatal(err)\n    }\n    if res.CreateFindingTransformationRuleResponse != nil {\n        // handle response\n    }\n}"
components:
  schemas:
    c1.api.finding.v1.CreateFindingTransformationRuleRequest:
      description: The CreateFindingTransformationRuleRequest message.
      properties:
        transformationRule:
          oneOf:
            - $ref: '#/components/schemas/c1.api.finding.v1.FindingTransformationRule'
            - type: 'null'
      title: Create Finding Transformation Rule Request
      type: object
      x-speakeasy-name-override: CreateFindingTransformationRuleRequest
    c1.api.finding.v1.CreateFindingTransformationRuleResponse:
      description: The CreateFindingTransformationRuleResponse message.
      properties:
        transformationRule:
          oneOf:
            - $ref: '#/components/schemas/c1.api.finding.v1.FindingTransformationRule'
            - type: 'null'
      title: Create Finding Transformation Rule Response
      type: object
      x-speakeasy-name-override: CreateFindingTransformationRuleResponse
    c1.api.finding.v1.FindingTransformationRule:
      description: >-
        FindingTransformationRule transforms a finding at processing time,
        before
         routing runs. Rules fall through: every matching rule applies its transforms
         in ascending evaluation_order; the last rule to write a given field wins.
      properties:
        appId:
          description: The appId field.
          type: string
        condition:
          description: >-
            CEL boolean over the Finding object; empty matches all. Evaluated
            over
             base/immutable inputs only (see the transformation env).
          type: string
        createdAt:
          format: date-time
          type:
            - string
            - 'null'
        description:
          description: The description field.
          type: string
        displayName:
          description: The displayName field.
          type: string
        enabled:
          description: The enabled field.
          type: boolean
        evaluationOrder:
          description: >-
            Application order (ascending; last-applied rule wins per field). A
            sequence,
             not a precedence rank.
          format: int32
          type: integer
        id:
          description: The id field.
          type: string
        templateId:
          description: The templateId field.
          type: string
        transforms:
          description: Ordered transforms applied when the rule matches.
          items:
            $ref: '#/components/schemas/c1.api.finding.v1.FindingTransform'
          type:
            - array
            - 'null'
        updatedAt:
          format: date-time
          type:
            - string
            - 'null'
      title: Finding Transformation Rule
      type: object
      x-speakeasy-name-override: FindingTransformationRule
    c1.api.finding.v1.FindingTransform:
      description: >
        FindingTransform is a single mutation applied to a finding by a matched
         transformation rule. Structured ops are the v1 authoring surface; a future
         raw-CEL arm continues numbering at 103.

        This message contains a oneof named kind. Only a single field of the
        following list may be set at a time:
          - setSeverity
          - setTags
          - removeTags
      properties:
        removeTags:
          oneOf:
            - $ref: '#/components/schemas/c1.api.finding.v1.RemoveTags'
            - type: 'null'
        setSeverity:
          oneOf:
            - $ref: '#/components/schemas/c1.api.finding.v1.SetSeverity'
            - type: 'null'
        setTags:
          oneOf:
            - $ref: '#/components/schemas/c1.api.finding.v1.SetTags'
            - type: 'null'
      title: Finding Transform
      type: object
      x-speakeasy-name-override: FindingTransform
    c1.api.finding.v1.RemoveTags:
      description: The RemoveTags message.
      properties:
        keys:
          description: The keys field.
          items:
            type: string
          type:
            - array
            - 'null'
      title: Remove Tags
      type: object
      x-speakeasy-name-override: RemoveTags
    c1.api.finding.v1.SetSeverity:
      description: The SetSeverity message.
      properties:
        severity:
          description: The severity field.
          enum:
            - FINDING_SEVERITY_UNSPECIFIED
            - FINDING_SEVERITY_INFO
            - FINDING_SEVERITY_LOW
            - FINDING_SEVERITY_MEDIUM
            - FINDING_SEVERITY_HIGH
            - FINDING_SEVERITY_CRITICAL
          type: string
          x-speakeasy-unknown-values: allow
      title: Set Severity
      type: object
      x-speakeasy-name-override: SetSeverity
    c1.api.finding.v1.SetTags:
      description: The SetTags message.
      properties:
        tags:
          additionalProperties:
            type: string
          description: The tags field.
          type: object
      title: Set Tags
      type: object
      x-speakeasy-name-override: SetTags
  securitySchemes:
    bearerAuth:
      scheme: bearer
      type: http
    oauth:
      description: >-
        This API uses OAuth2 with the Client Credential flow.

        Client Credentials must be sent in the BODY, not the headers.

        For an example of how to implement this, refer to the
        [c1TokenSource.Token()](https://github.com/ConductorOne/conductorone-sdk-go/blob/3375fe7c0126d17e7ec4e711693dee7b791023aa/token_source.go#L101-L187)
        function.
      flows:
        clientCredentials:
          scopes: {}
          tokenUrl: /auth/v1/token
      type: oauth2

````