> ## Documentation Index
> Fetch the complete documentation index at: https://developer.lemlist.com/llms.txt
> Use this file to discover all available pages before exploring further.

> Creates a People Database persona for your team.

# Create Persona

export const SnippetObjectReference = ({objectName, objectPath = null}) => {
  const lowerCaseObjectName = objectName.toLowerCase();
  if (lowerCaseObjectName === 'lead' || lowerCaseObjectName === 'leads') {
    return <Note>
        This endpoint uses the <a href={`/api-reference/objects-definitions/${objectPath}`}>{objectName} object</a>. Make sure to also check the <a href={`/api-reference/objects-definitions/${lowerCaseObjectName === 'lead' ? 'contact' : 'lead'}`}>{lowerCaseObjectName === 'lead' ? 'Contact' : 'Lead'} object</a> to understand the distinction between the two.
      </Note>;
  }
  return <Note>
      This endpoint uses the <a href={`/api-reference/objects-definitions/${objectPath}`}>{objectName} object</a>.
    </Note>;
};

<SnippetObjectReference objectName="Persona" objectPath="persona" />

<Note>
  `name`, `filters` and `mode` are all required. The name must be unique within your team — a duplicate answers `409`. Only the `leads` mode is accepted today; `companies` answers `400` with the code `PEOPLE_DATABASE_PERSONA_MODE_NOT_SUPPORTED`.

  Filters carry no `type` property — it is derived from `filterId` server-side. Use [Get Database Filters](/api-reference/endpoints/people-database/get-database-filters) to discover which `filterId` values you can use. Filters that require a plan your team does not have are dropped silently.
</Note>

<Note>
  The response contains only the created id. The stored `name` and `filters` are sanitized and plan-gated server-side, so echoing the request payload back would misreport what was persisted — call [List personas](/api-reference/endpoints/people-database/list-personas) to read the stored persona.
</Note>

<Warning>
  This endpoint is in closed beta. It answers `403` with the code `BETA_NOT_ENABLED` unless the personas beta is enabled for your team.
</Warning>


## OpenAPI

````yaml post /database/personas
openapi: 3.0.0
info:
  title: lemlist API
  version: 1.0.0
  description: >-
    Welcome to the lemlist Developer Documentation.


    lemlist is very customizable and open. You'll find on this page all the API
    and integration you can do with lemlist.


    # Rate Limit


    lemlist's API rate limits requests in order to prevent abuse and overload of
    our services.  

    Rate limits are applied on all routes and per API key performing the
    request.  

    The rate limits are **20** requests per **2** seconds.  

    The response provides any information you may need about it:


    | Header | Description |

    | --- | --- |

    | Retry-After | The number of seconds in which you can retry |

    | X-RateLimit-Limit | The maximum requests in that time |

    | X-RateLimit-Remaining | The number of remaining requests you can make |

    | X-RateLimit-Reset | The date when the rate limit will reset |


    _Example of values for the rate limit headers_


    ``` json

    {
        "Retry-After": 2,
        "X-RateLimit-Limit": 20,
        "X-RateLimit-Remaining": 7,
        "X-RateLimit-Reset" : "Tue Feb 16 2021 09:02:42 GMT+0100 (Central European Standard Time)"
    }

     ```

    # Definitions


    ## Team


    A team is the entity of lemlist that can handle users and billing.


    ## Credits


    Credits are the coins a team uses to enrich emails, LinkedIn URLs, etc. via
    the enrich route. Each enrichment feature needs a certain amount of credits
    to run.


    ## User


    You use a user account to connect to lemlist and send messages via the
    connected emails or LinkedIn account.


    ## Campaign


    A campaign is the entity to automate outreach. A campaign has multiple
    sequences composed of steps.


    ## Lead


    A lead is a person that you try to contact via a campaign.


    ## Activity


    An activity is the history of all the steps.


    ## Unsubscribe


    An unsubscribe occurs when a person decides they don't want to receive
    emails from you anymore.


    # Authentication


    All API routes use the dedicated subdomain `api.lemlist.com`.


    lemlist uses API keys to allow access to the API. You can get your lemlist
    API key at our [integration
    page](https://app.lemlist.com/settings/integrations).


    You need to add the `Authorization` header using the `Basic` authentication
    type. `login:password` **where the login is always empty and the password is
    the API key**.


    ⚠️ **Don't forget to add the semicolon (**`:`**) before your API key in curl
    command.**


    > To authorize, use this code: 
      

    ``` shell

    curl https://api.lemlist.com/api/team \
      --user ":YourApiKey"

     ```

    **Make sure to replace** **`YourApiKey`** **with your API key.**


    # Give feedback


    If you want to report a bug, ask for data, or share with us a use case,
    please fill this [form](https://lemlist.typeform.com/to/mfVlkyGf). It will
    help us centralize your needs!
servers:
  - url: https://api.lemlist.com/api
security:
  - basicAuth: []
paths:
  /database/personas:
    post:
      tags:
        - People Database
      summary: Create Persona
      description: >-
        Creates a persona for your team from a name and a set of People Database
        filters.


        Use [Get Database
        Filters](/api-reference/endpoints/people-database/get-database-filters)
        to discover the valid `filterId` values. Filters carry no `type`
        property: it is derived from `filterId` server-side. Filters that
        require a plan your team does not have are dropped silently, so the
        persona is stored with the subset your plan allows.


        Only the created id is returned. The stored `name` and `filters` are
        sanitized and plan-gated server-side, so echoing the request payload
        back would misreport what was persisted; call [List
        Personas](/api-reference/endpoints/people-database/list-personas) to
        read the stored persona.


        This endpoint is in closed beta and answers `403` unless the beta is
        enabled for your team.
      operationId: createPersona
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - filters
                - mode
              properties:
                name:
                  type: string
                  minLength: 1
                  description: Display name. Non-empty, and unique within your team.
                  example: SaaS founders
                filters:
                  type: array
                  description: People Database filters defining the persona
                  items:
                    $ref: '#/components/schemas/PersonaFilter'
                mode:
                  type: string
                  description: >-
                    Search mode the filters target. Only `leads` is accepted
                    today.
                  enum:
                    - leads
                    - companies
                  example: leads
            example:
              name: SaaS founders
              mode: leads
              filters:
                - filterId: currentTitle
                  in:
                    - Founder
                  out: []
                - filterId: country
                  in:
                    - France
                  out: []
      responses:
        '201':
          description: Persona created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaCreateResponse'
              example:
                data:
                  _id: pdp_ExAmPlE1234567890a
        '400':
          description: Validation error - invalid name, mode, or filters
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaError'
              examples:
                invalidName:
                  value:
                    error: >-
                      Parameter "name" must be a non-empty string; provide the
                      persona display name
                    code: PEOPLE_DATABASE_PERSONA_API_INVALID_NAME
                invalidFilters:
                  value:
                    error: >-
                      Parameter "filters" must be an array of { filterId, in?,
                      out?, exactMatch? } objects; call GET
                      /api/database/filters for the valid filter ids
                    code: PEOPLE_DATABASE_PERSONA_API_INVALID_FILTERS
                modeNotSupported:
                  value:
                    error: >-
                      User personas support only the "leads" mode for now;
                      create or update the persona in leads mode
                    code: PEOPLE_DATABASE_PERSONA_MODE_NOT_SUPPORTED
                unknownFilter:
                  value:
                    error: You have no valid filters with the current search mode
                    code: SEARCH_FILTERS_INVALID
        '401':
          description: Unauthorized - invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaError'
              example:
                error: Route unauthorized
                code: ROUTE_UNAUTHORIZED
        '403':
          description: The personas beta is not enabled for your team
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaError'
              example:
                error: Beta is not enabled
                code: BETA_NOT_ENABLED
        '409':
          description: A persona with this name already exists for your team
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaError'
              example:
                error: >-
                  A persona with this name already exists for the team; choose a
                  different name
                code: PEOPLE_DATABASE_PERSONA_NAME_ALREADY_EXISTS
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaError'
              example:
                error: Internal error
                code: INTERNAL_ERROR
components:
  schemas:
    PersonaFilter:
      type: object
      description: >-
        One People Database filter of a persona. `in` includes matching values,
        `out` excludes them. There is no `type` property: it is derived from
        `filterId` server-side.
      required:
        - filterId
      properties:
        filterId:
          type: string
          description: >-
            People Database filter identifier. Use [Get Database
            Filters](/api-reference/endpoints/people-database/get-database-filters)
            to discover the valid ids.
          example: currentTitle
        in:
          type: array
          description: Values to include
          items:
            type: string
          example:
            - Founder
        out:
          type: array
          description: Values to exclude
          items:
            type: string
          example: []
        exactMatch:
          type: boolean
          description: Exact-match toggle, for the text filters that support it
    PersonaCreateResponse:
      type: object
      properties:
        data:
          type: object
          properties:
            _id:
              type: string
              description: Id of the created persona
              example: pdp_ExAmPlE1234567890a
    PersonaError:
      type: object
      description: Error envelope returned by the persona endpoints.
      properties:
        error:
          type: string
          description: Human-readable explanation of the failure
        code:
          type: string
          description: Machine-readable error code, stable across releases
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic

````