> For the complete documentation index, see [llms.txt](https://docs-vnext.kiflo.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-vnext.kiflo.com/developers/api-reference/partners/search-partners.md).

# 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`.

```json
{"openapi":"3.0.1","info":{"title":"Kiflo Public API v3","version":"v3"},"security":[{"oauth2":["McpOrApi","Partner.View"]}],"components":{"securitySchemes":{},"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."},"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."},"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."},"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."},"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},"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},"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},"PayoutProviderType":{"enum":["Unknown","Paypal","Wise","Stripe","Payoneer","Chargebee"],"type":"string"},"PayoutProviderDetailsDto":{"type":"object","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}}},"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"}}}}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs-vnext.kiflo.com/developers/api-reference/partners/search-partners.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
