> ## Documentation Index
> Fetch the complete documentation index at: https://docs.go.aiinsurance.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Export Preset For Member

> Creates a **private saved export preset** in the export screen of the
company member named by **`ownerUserId`**. The preset belongs to that
member: the caller never becomes the owner unless it names itself as
`ownerUserId`. The caller is recorded as the preset's creator for audit.

**`fieldKeys`** are the preset's columns and are saved in the order given.
Every key must be one the company's export surface offers for that
`entityType`: the system columns `id`, `createdAt`, `updatedAt`, the
configured export-surface columns, and for `event` the financial overview
columns. Child (`rowSource`) columns are not supported here.

- An unknown key fails the whole request with `400 UnknownExportFieldKey`;
  the error carries `unknownFieldKeys`, listing every key that was refused.
  Nothing is saved.
- An `ownerUserId` who is not a member of the company is
  `400 ExportPresetOwnerNotMember`.
- A `name` the owner already uses for a preset of that entity type
  (compared case-insensitively, ignoring surrounding spaces) is
  `409 ExportPresetNameTaken`; the error carries `existingPresetNames`, the
  owner's current preset names for that entity type.

The created preset is private: only its owner (and staff) sees it, and the
owner finds it in their export screen for that entity type.

**Required permission:** `export-preset.create-for-member`




## OpenAPI

````yaml /openapi/generated-external-api.yaml post /api/v1/companies/{companyId}/export-presets
openapi: 3.0.3
info:
  title: AI Insurance External API
  description: External API for AI Insurance platform
  version: 1.0.0
  contact:
    email: support@aiinsurance.io
servers:
  - url: https://go.aiinsurance.io
    description: Production
security:
  - ApiKeyAuth: []
paths:
  /api/v1/companies/{companyId}/export-presets:
    post:
      tags:
        - Entities
      summary: Create Export Preset For Member
      description: >
        Creates a **private saved export preset** in the export screen of the

        company member named by **`ownerUserId`**. The preset belongs to that

        member: the caller never becomes the owner unless it names itself as

        `ownerUserId`. The caller is recorded as the preset's creator for audit.


        **`fieldKeys`** are the preset's columns and are saved in the order
        given.

        Every key must be one the company's export surface offers for that

        `entityType`: the system columns `id`, `createdAt`, `updatedAt`, the

        configured export-surface columns, and for `event` the financial
        overview

        columns. Child (`rowSource`) columns are not supported here.


        - An unknown key fails the whole request with `400
        UnknownExportFieldKey`;
          the error carries `unknownFieldKeys`, listing every key that was refused.
          Nothing is saved.
        - An `ownerUserId` who is not a member of the company is
          `400 ExportPresetOwnerNotMember`.
        - A `name` the owner already uses for a preset of that entity type
          (compared case-insensitively, ignoring surrounding spaces) is
          `409 ExportPresetNameTaken`; the error carries `existingPresetNames`, the
          owner's current preset names for that entity type.

        The created preset is private: only its owner (and staff) sees it, and
        the

        owner finds it in their export screen for that entity type.


        **Required permission:** `export-preset.create-for-member`
      operationId: createExportPresetForMember
      parameters:
        - $ref: '#/components/parameters/companyId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              required:
                - ownerUserId
                - entityType
                - name
                - fieldKeys
              properties:
                ownerUserId:
                  type: string
                  format: uuid
                  description: >-
                    The company member who will own the preset and see it in
                    their export screen.
                entityType:
                  type: string
                  enum:
                    - event
                    - exposure
                    - quote
                    - submission
                    - person
                    - organization
                    - policy
                  description: >-
                    The entity type whose export screen the preset belongs to,
                    in the same kebab spelling the export-runs routes use.
                name:
                  type: string
                  minLength: 1
                  maxLength: 255
                  description: >-
                    The preset's name. Surrounding spaces are trimmed. Must not
                    match (case-insensitively) a name the owner already uses for
                    this entity type.
                fieldKeys:
                  type: array
                  minItems: 1
                  description: >-
                    The preset's columns, in column order. Each key must be
                    offered by the company's export surface for `entityType`,
                    and no key may repeat.
                  items:
                    type: string
                    minLength: 1
            examples:
              underwritingView:
                summary: Save a three-column exposure preset for a member
                value:
                  ownerUserId: 3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91
                  entityType: exposure
                  name: Underwriting view
                  fieldKeys:
                    - exposureName
                    - id
                    - createdAt
      responses:
        '201':
          description: The preset was created and belongs to `ownerUserId`.
          content:
            application/json:
              schema:
                type: object
                required:
                  - id
                  - ownerUserId
                  - entityType
                  - name
                  - visibility
                  - fieldKeys
                  - createdAt
                properties:
                  id:
                    type: string
                    format: uuid
                    description: The ID of the created preset
                  ownerUserId:
                    type: string
                    format: uuid
                    description: The member who owns the preset
                  entityType:
                    type: string
                    enum:
                      - event
                      - exposure
                      - quote
                      - submission
                      - person
                      - organization
                      - policy
                  name:
                    type: string
                    description: The saved (trimmed) name
                  visibility:
                    type: string
                    enum:
                      - private
                    description: Always `private` for presets created here
                  fieldKeys:
                    type: array
                    description: The saved column order, exactly as requested
                    items:
                      type: string
                  createdAt:
                    type: string
                    format: date-time
              examples:
                created:
                  summary: A private preset created for a member
                  value:
                    id: 9b1d4e7a-2c3f-4a8b-b6d5-0e7f1a2c3d4e
                    ownerUserId: 3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91
                    entityType: exposure
                    name: Underwriting view
                    visibility: private
                    fieldKeys:
                      - exposureName
                      - id
                      - createdAt
                    createdAt: '2026-09-25T14:03:22.418Z'
        '400':
          description: Bad Request - invalid body, unknown field key, or non-member owner
          content:
            application/json:
              schema:
                type: object
                description: >
                  The standard error envelope. For `UnknownExportFieldKey` it
                  also

                  carries `unknownFieldKeys`.
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                    properties:
                      code:
                        type: string
                        description: Machine-readable error code
                        example: UnknownExportFieldKey
                      message:
                        type: string
                        description: Human-readable error message
                      userMessages:
                        type: array
                        description: Clean, verbatim-displayable messages
                        items:
                          type: string
                      details:
                        type: array
                        description: Field-level details for body validation errors
                        items:
                          type: object
                          properties:
                            field:
                              type: string
                            message:
                              type: string
                      unknownFieldKeys:
                        type: array
                        description: >-
                          Present on `UnknownExportFieldKey`: every requested
                          key the export surface does not offer.
                        items:
                          type: string
              examples:
                unknownFieldKey:
                  summary: A requested field key is not offered by the export surface
                  value:
                    error:
                      code: UnknownExportFieldKey
                      message: >-
                        Unknown export field keys for exposure: nope, alsoNope.
                        Only keys the company's exposure export surface offers
                        may be saved.
                      unknownFieldKeys:
                        - nope
                        - alsoNope
                ownerNotMember:
                  summary: The named owner is not a member of the company
                  value:
                    error:
                      code: ExportPresetOwnerNotMember
                      message: >-
                        User 3f2b8c1e-6d4a-4b7e-9a15-2c8e0f4d7b91 is not a
                        member of this company
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          description: >
            Conflict — the owner already has a preset of this entity type with
            this

            name (case-insensitive). The body carries `existingPresetNames`.
          content:
            application/json:
              schema:
                type: object
                description: The standard error envelope plus `existingPresetNames`.
                required:
                  - error
                properties:
                  error:
                    type: object
                    required:
                      - code
                      - message
                      - existingPresetNames
                    properties:
                      code:
                        type: string
                        description: Machine-readable error code
                        example: ExportPresetNameTaken
                      message:
                        type: string
                        description: Human-readable error message
                      userMessages:
                        type: array
                        description: Clean, verbatim-displayable messages
                        items:
                          type: string
                      existingPresetNames:
                        type: array
                        description: The owner's current preset names for this entity type.
                        items:
                          type: string
              examples:
                nameTaken:
                  summary: The owner already uses this name for the entity type
                  value:
                    error:
                      code: ExportPresetNameTaken
                      message: >-
                        The owner already has an export preset for exposure
                        named "Underwriting view". Existing names: underwriting
                        VIEW
                      existingPresetNames:
                        - underwriting VIEW
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - BearerAuth: []
        - ApiKeyAuth: []
components:
  parameters:
    companyId:
      name: companyId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Company identifier
  responses:
    Unauthorized:
      description: Unauthorized - Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            missingApiKey:
              summary: Missing API key
              value:
                error:
                  code: AuthenticationError
                  message: API key authentication required
                  userMessages:
                    - API key authentication required
            invalidApiKey:
              summary: >-
                Invalid API key (e.g. unknown key, or a Bearer token used
                instead of an API key)
              value:
                error:
                  code: AuthenticationError
                  message: Invalid API key
                  userMessages:
                    - Invalid API key
    Forbidden:
      description: Forbidden - Insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            insufficientPermissions:
              summary: Insufficient permissions
              value:
                error:
                  code: AuthorizationError
                  message: User is not authorized to perform the requested action
                  userMessages:
                    - User is not authorized to perform the requested action
            companyMismatch:
              summary: A valid API key naming another company in the URL
              value:
                error:
                  code: AuthorizationError
                  message: API key is not scoped to the requested company
                  userMessages:
                    - API key is not scoped to the requested company
    InternalServerError:
      description: Internal Server Error - Unexpected error occurred
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internalError:
              summary: Unexpected server error
              value:
                error:
                  code: UncaughtActionError
                  message: Uncaught error occurred in <actionName>
                  userMessages:
                    - An unexpected error occurred. Please try again later.
  schemas:
    ErrorResponse:
      type: object
      description: Standard error response for all external API endpoints
      required:
        - error
      properties:
        error:
          type: object
          required:
            - code
            - message
          properties:
            code:
              type: string
              description: Machine-readable error code
              example: VALIDATION_ERROR
            message:
              type: string
              description: Human-readable error message
              example: 'submissionId: Required field is missing'
            userMessages:
              type: array
              description: >-
                Clean, verbatim-displayable messages — one entry per failure,
                free of error-code tags, field paths, and internal noise.
                Suitable for showing to end users as-is.
              items:
                type: string
              example:
                - Exposures of type 'company' require an address
            details:
              type: array
              description: Additional details for validation errors (field-level errors)
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: The field that caused the error
                    example: submissionId
                  code:
                    type: string
                    description: Stable problem code for this individual validation failure
                    example: BLANK_LIST_ELEMENT
                  reason:
                    type: string
                    description: Stable reason the value violates its canonical contract
                    example: blank-list-element
                  expected:
                    type: string
                    description: The expected canonical value contract
                    example: nonblank trimmed string
                  message:
                    type: string
                    description: Description of the field error
                    example: Required field is missing
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key authentication. Send your raw API key as the `Authorization`
        header value with NO scheme prefix — `Authorization: YOUR-API-KEY`. Do
        NOT prefix it with `Bearer ` or `ApiKey `, and do not use an `X-API-Key`
        header; those are not accepted.
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        User-principal OAuth 2.0 Bearer authentication. Send a user-scoped Auth0
        access token (audience = the app API audience) as `Authorization: Bearer
        <jwt>`. The request resolves to the user's identity and is authorized by
        their Role on the `{companyId}` in the path — the same role-based
        permissions the web app enforces. This is the path the MCP connector
        uses to act on a user's behalf; endpoints that accept it list both
        `BearerAuth` and `ApiKeyAuth`.

````