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

# Search partners

> Return the partners matching a filter, with the total number of matches.
            
A filter has two levels. The entries of `and` are combined with `and`, and an entry is either a single condition or an `or` group of conditions.
A group holds conditions only, so there is no third level. A filter carries at most 20 conditions in total, and a larger request is refused rather than trimmed.
            
A condition names a field, an operator and a value. Set `isCustomProperty` to `true` when the name is one of the workspace's own partner properties: static fields and custom properties are separate sets, so the same name can exist in both. Names are matched without regard to case.
            
## Operators
            
| Operator | Value |
|---|---|
| `Eq`, `Neq` | a single value |
| `In`, `Nin` | an array of values, which must not be empty |
| `Contains`, `NotContains` | a text value matched as a substring |
| `Gt`, `Gte`, `Lt`, `Lte` | a single value |
| `Between` | an object holding `from` and `to`, both included |
| `Empty`, `NotEmpty` | no value at all |
            
## Fields
            
| Field | Type | Operators |
|---|---|---|
| `name` | text | `Eq`, `Neq`, `In`, `Contains`, `NotContains` |
| `status` | `Active`, `Prospect`, `Rejected`, `Applicant`, `Inactive`, `Onboarding` | `Eq`, `Neq`, `In`, `Nin` |
| `onboardingStatus` | `NotOnboarded`, `InProgress`, `Completed` | `Eq`, `Neq`, `In`, `Nin` |
| `source` | `ManuallyAdded`, `SignupForm` | `Eq`, `Neq`, `In`, `Nin` |
| `partnerTypeId` | number | `Eq`, `Neq`, `In`, `Nin` |
| `groupId` | number | `Eq`, `Neq`, `In`, `Nin`, `Empty`, `NotEmpty` |
| `referralCode` | text | `Eq`, `Neq`, `In` |
| `currency` | text | `Eq`, `Neq`, `In` |
| `language` | text | `Eq`, `Neq`, `In` |
| `sinceDate` | date | `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte`, `Between`, `Empty`, `NotEmpty` |
| `creationDate` | date | `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte`, `Between` |
| `mainContactEmail` | text | `Eq`, `Neq`, `In`, `Contains` |
| `programId` | number | `Eq`, `In`, `Nin` |
| `partnerLevelId` | number | `Eq`, `In`, `Nin` |
| `qualifyingLevelId` | number | `Eq`, `In`, `Nin` |
| `onboardingStageId` | number | `Eq`, `In`, `Nin` |
| `prospectionStageId` | number | `Eq`, `In`, `Nin`, `Empty`, `NotEmpty` |
            
A custom property accepts the operators that suit its own type. A date is written as an ISO 8601 string, for example `2025-01-31`.
            
## Refusals
            
Every condition is checked before any data is read, and a filter that cannot be applied refuses the whole request: no partner is returned.
The `metadata` of the error lists one entry per problem under `errors`, each with the JSON path of the offending value, a code and a message.
When a name was not recognised, `metadata` also lists the names that may be used under `staticFields` and `customProperties`.



## OpenAPI

````yaml /openapi.json post /v3/partners/search
openapi: 3.0.1
info:
  title: Kiflo Public API v3
  description: "The Kiflo API allows you to have control over your integration and create the best experiences.\r\n\r\n***\r\n\r\n## Format\r\n\r\nThe API follows the REST standard using JSON to format requests and responses.  \r\nDecimals are formatted using invariant culture, ie: using \".\" (dot) as a decimal sperator and no thousands separator.  \r\nDates are formatted using ISO standards, in UTC format, including the timezone. Ex:  2015-03-25T12:00:00Z\r\n\r\n***\r\n\r\n## Security\r\n\r\nThe API is secured using an API token.\r\n\r\n**How to generate an API Access Token**  \r\n 1. Open your [account settings page](https://app.kiflo.com/account/integration)\r\n 2. Go to the \"API Access Token\" section\r\n 3. Click \"Add\" button\r\n 4. Choose a name that will be used to identify the token and click \"Add\"\r\n 4. Copy the generate token\r\n   \r\n> **Note:** For security reason, the generated API Access Token won't be visible after you close the settings page. Be sure to copy the generated token otherwise you won't be able to get it later.\r\n  \r\n**How to authenticate on the API**  \r\n  \r\nTo authenticate on the API, send the generated token in the Authorization header using the Bearer scheme:  \r\n`Authorization: Bearer #YOUR_GENERATED_TOKEN_HERE#`\r\n"
  version: v3
servers: []
security: []
paths:
  /v3/partners/search:
    post:
      tags:
        - Partners
      summary: Search partners
      description: "Return the partners matching a filter, with the total number of matches.\r\n            \r\nA filter has two levels. The entries of `and` are combined with `and`, and an entry is either a single condition or an `or` group of conditions.\r\nA group holds conditions only, so there is no third level. A filter carries at most 20 conditions in total, and a larger request is refused rather than trimmed.\r\n            \r\nA condition names a field, an operator and a value. Set `isCustomProperty` to `true` when the name is one of the workspace's own partner properties: static fields and custom properties are separate sets, so the same name can exist in both. Names are matched without regard to case.\r\n            \r\n## Operators\r\n            \r\n| Operator | Value |\r\n|---|---|\r\n| `Eq`, `Neq` | a single value |\r\n| `In`, `Nin` | an array of values, which must not be empty |\r\n| `Contains`, `NotContains` | a text value matched as a substring |\r\n| `Gt`, `Gte`, `Lt`, `Lte` | a single value |\r\n| `Between` | an object holding `from` and `to`, both included |\r\n| `Empty`, `NotEmpty` | no value at all |\r\n            \r\n## Fields\r\n            \r\n| Field | Type | Operators |\r\n|---|---|---|\r\n| `name` | text | `Eq`, `Neq`, `In`, `Contains`, `NotContains` |\r\n| `status` | `Active`, `Prospect`, `Rejected`, `Applicant`, `Inactive`, `Onboarding` | `Eq`, `Neq`, `In`, `Nin` |\r\n| `onboardingStatus` | `NotOnboarded`, `InProgress`, `Completed` | `Eq`, `Neq`, `In`, `Nin` |\r\n| `source` | `ManuallyAdded`, `SignupForm` | `Eq`, `Neq`, `In`, `Nin` |\r\n| `partnerTypeId` | number | `Eq`, `Neq`, `In`, `Nin` |\r\n| `groupId` | number | `Eq`, `Neq`, `In`, `Nin`, `Empty`, `NotEmpty` |\r\n| `referralCode` | text | `Eq`, `Neq`, `In` |\r\n| `currency` | text | `Eq`, `Neq`, `In` |\r\n| `language` | text | `Eq`, `Neq`, `In` |\r\n| `sinceDate` | date | `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte`, `Between`, `Empty`, `NotEmpty` |\r\n| `creationDate` | date | `Eq`, `Neq`, `Gt`, `Gte`, `Lt`, `Lte`, `Between` |\r\n| `mainContactEmail` | text | `Eq`, `Neq`, `In`, `Contains` |\r\n| `programId` | number | `Eq`, `In`, `Nin` |\r\n| `partnerLevelId` | number | `Eq`, `In`, `Nin` |\r\n| `qualifyingLevelId` | number | `Eq`, `In`, `Nin` |\r\n| `onboardingStageId` | number | `Eq`, `In`, `Nin` |\r\n| `prospectionStageId` | number | `Eq`, `In`, `Nin`, `Empty`, `NotEmpty` |\r\n            \r\nA custom property accepts the operators that suit its own type. A date is written as an ISO 8601 string, for example `2025-01-31`.\r\n            \r\n## Refusals\r\n            \r\nEvery condition is checked before any data is read, and a filter that cannot be applied refuses the whole request: no partner is returned.\r\nThe `metadata` of the error lists one entry per problem under `errors`, each with the JSON path of the offending value, a code and a message.\r\nWhen a name was not recognised, `metadata` also lists the names that may be used under `staticFields` and `customProperties`."
      requestBody:
        content:
          application/json-patch+json:
            schema:
              $ref: '#/components/schemas/SearchRequestDto'
          application/json:
            schema:
              $ref: '#/components/schemas/SearchRequestDto'
          text/json:
            schema:
              $ref: '#/components/schemas/SearchRequestDto'
          application/*+json:
            schema:
              $ref: '#/components/schemas/SearchRequestDto'
      responses:
        '200':
          description: Partners returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PartnerListResponseDto'
        '400':
          description: >-
            The filter cannot be applied, or more than 1000 partners were asked
            for
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                errorCode: Transactions.InvalidCustomerIdentifier
                errorMessage: You must specify one customer identifier
      security:
        - oauth2:
            - McpOrApi
            - Partner.View
components:
  schemas:
    SearchRequestDto:
      type: object
      properties:
        filters:
          $ref: '#/components/schemas/FilterDto'
        offset:
          type: integer
          description: The cursor used in pagination.
          format: int32
        limit:
          type: integer
          description: The maximum number of items to be returned.
          format: int32
      additionalProperties: false
      description: >-
        The body of a search: the filter to apply and where in the result set to
        read from.
    PartnerListResponseDto:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/PartnerDto'
          nullable: true
        paginationSkipCount:
          type: integer
          format: int32
        totalCount:
          type: integer
          description: >-
            Gets or sets the total number of items that could be returned by
            this command (without pagination).
          format: int32
      additionalProperties: false
    ErrorResponse:
      type: object
      properties:
        errorCode:
          type: string
          nullable: true
        errorMessage:
          type: string
          nullable: true
        metadata:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
      additionalProperties: false
    FilterDto:
      type: object
      properties:
        and:
          type: array
          items:
            $ref: '#/components/schemas/FilterItemDto'
          description: The first level.
          nullable: true
      additionalProperties: false
      description: A filter of two levels.
    PartnerDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
          nullable: true
        groupId:
          type: integer
          format: int32
          nullable: true
        onboardingStatus:
          $ref: '#/components/schemas/OnboardingStatus'
        status:
          $ref: '#/components/schemas/PartnerStatus'
        source:
          $ref: '#/components/schemas/PartnerSource'
        company:
          $ref: '#/components/schemas/CompanyDto'
        mainContact:
          $ref: '#/components/schemas/UserPartnerDto'
        onboardingStage:
          $ref: '#/components/schemas/OnboardingStageDto'
        onboardingStages:
          type: array
          items:
            $ref: '#/components/schemas/OnboardingStageDto'
          nullable: true
        levels:
          type: array
          items:
            $ref: '#/components/schemas/ProgramLevelPartialDto'
          nullable: true
        sinceDate:
          type: string
          format: date-time
          nullable: true
        partnerTypeId:
          type: integer
          format: int32
          nullable: true
        partnerTypeName:
          type: string
          nullable: true
        properties:
          type: object
          additionalProperties:
            nullable: true
          nullable: true
        ownerUserId:
          type: integer
          format: int32
          nullable: true
        owner:
          $ref: '#/components/schemas/UserDto'
        referralCode:
          type: string
          nullable: true
        paypalEmail:
          type: string
          nullable: true
        currency:
          type: string
          nullable: true
        payoutProvider:
          $ref: '#/components/schemas/PayoutProviderDto'
        language:
          type: string
          nullable: true
      additionalProperties: false
    FilterItemDto:
      type: object
      properties:
        or:
          type: array
          items:
            $ref: '#/components/schemas/FilterConditionDto'
          description: Conditions combined with `or`.
          nullable: true
        field:
          type: string
          description: The name of the field to filter on, matched without regard to case.
          nullable: true
        isCustomProperty:
          type: boolean
          description: >-
            Whether
            Resels.Backend.Api.Public.Model.Filters.FilterConditionDto.Field
            names a custom property of the workspace instead of a static field.
        operator:
          $ref: '#/components/schemas/FilterOperator'
        value:
          description: The value to compare against.
          nullable: true
      additionalProperties: false
      description: An entry of a filter's first level.
    OnboardingStatus:
      enum:
        - Unknown
        - NotOnboarded
        - InProgress
        - Completed
      type: string
    PartnerStatus:
      enum:
        - Unknown
        - Active
        - Prospect
        - Rejected
        - Applicant
        - Inactive
        - Onboarding
      type: string
    PartnerSource:
      enum:
        - Unknown
        - ManuallyAdded
        - SignupForm
      type: string
    CompanyDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
          nullable: true
        websiteUrls:
          type: array
          items:
            type: string
          nullable: true
      additionalProperties: false
    UserPartnerDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        email:
          type: string
          nullable: true
        firstname:
          type: string
          nullable: true
        lastname:
          type: string
          nullable: true
        jobTitle:
          type: string
          nullable: true
        phoneNumber:
          type: string
          nullable: true
        linkedInProfileUrl:
          type: string
          nullable: true
        creationDate:
          type: string
          format: date-time
        isMainContact:
          type: boolean
      additionalProperties: false
    OnboardingStageDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        order:
          type: integer
          format: int32
        onboardingPipelineId:
          type: integer
          format: int32
        onboardingPipelineName:
          type: string
          nullable: true
      additionalProperties: false
    ProgramLevelPartialDto:
      type: object
      properties:
        programLevelId:
          type: integer
          format: int32
        programLevelName:
          type: string
          nullable: true
        programId:
          type: integer
          format: int32
        programName:
          type: string
          nullable: true
      additionalProperties: false
    UserDto:
      type: object
      properties:
        id:
          type: integer
          format: int32
        email:
          type: string
          nullable: true
        firstName:
          type: string
          nullable: true
        lastName:
          type: string
          nullable: true
      additionalProperties: false
    PayoutProviderDto:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/PayoutProviderType'
        details:
          $ref: '#/components/schemas/PayoutProviderDetailsDto'
      additionalProperties: false
    FilterConditionDto:
      type: object
      properties:
        field:
          type: string
          description: The name of the field to filter on, matched without regard to case.
          nullable: true
        isCustomProperty:
          type: boolean
          description: >-
            Whether
            Resels.Backend.Api.Public.Model.Filters.FilterConditionDto.Field
            names a custom property of the workspace instead of a static field.
        operator:
          $ref: '#/components/schemas/FilterOperator'
        value:
          description: The value to compare against.
          nullable: true
      additionalProperties: false
      description: >-
        A condition on a single field: which field, how to compare it, and what
        to compare it against.
    FilterOperator:
      enum:
        - Unknown
        - Eq
        - Neq
        - In
        - Nin
        - Contains
        - NotContains
        - Gt
        - Gte
        - Lt
        - Lte
        - Between
        - Empty
        - NotEmpty
      type: string
      description: >-
        The comparison a
        Resels.Backend.Api.Public.Model.Filters.FilterConditionDto applies
        between a field and a value.
    PayoutProviderType:
      enum:
        - Unknown
        - Paypal
        - Wise
        - Stripe
        - Payoneer
        - Chargebee
      type: string
    PayoutProviderDetailsDto:
      type: object
      additionalProperties: false

````