{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/recruitmcp-com/json-schema/recruitmcp-com-people-search-page-schema.json",
  "title": "PeopleSearchPage",
  "x-generated": "2026-10-31",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/recruitmcp-com-openapi.json#/components/schemas/PeopleSearchPage",
  "type": "object",
  "properties": {
    "object": {
      "type": "string",
      "enum": [
        "people_page"
      ]
    },
    "query_key": {
      "type": "string",
      "description": "Stable id of this filter set. A lead is charged once per workspace."
    },
    "total_elements": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Estimate from the index before the location post-filter. Profiles dropped for location are counted in omitted.outside_geo and are not subtracted here."
    },
    "data": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/PersonStub"
      }
    },
    "next_cursor": {
      "type": [
        "string",
        "null"
      ],
      "description": "Pass this back as cursor to continue. Null when nothing remains."
    },
    "omitted": {
      "type": "object",
      "properties": {
        "suppressed": {
          "type": "integer",
          "description": "Always removed."
        },
        "already_seen": {
          "type": "integer",
          "description": "Removed because exclude_seen was true."
        },
        "unpaid": {
          "type": "integer",
          "description": "Not returned, because the balance ran out. Not charged. Continue with next_cursor."
        },
        "cap": {
          "type": "integer",
          "description": "Not returned, because the key or customer daily credit cap was reached. Not charged. Continue with next_cursor after resets_at."
        },
        "outside_geo": {
          "type": "integer",
          "description": "Removed because the location is outside a requested place. Not charged."
        },
        "seniority": {
          "type": "integer",
          "description": "Removed because the title does not match seniority 310 (CXO). Not charged."
        }
      }
    },
    "applied_filters": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/AppliedFilter"
      },
      "description": "Each filter as sent to the person index, plus suppression and exclude_seen."
    },
    "ignored_fields": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/IgnoredField"
      },
      "description": "Always empty: unsupported filters are refused with unsupported_filter."
    },
    "cost": {
      "$ref": "#/$defs/Cost"
    },
    "partial": {
      "type": "boolean",
      "description": "Present and true when the time budget ended before limit was reached. data holds the profiles that arrived, only those are charged, and next_cursor continues the rest, which keep loading in the background."
    }
  },
  "required": [
    "query_key",
    "data",
    "next_cursor",
    "applied_filters",
    "ignored_fields",
    "cost"
  ],
  "$defs": {
    "AppliedFilter": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string"
        },
        "effect": {
          "type": "string",
          "enum": [
            "hard_filter",
            "search_order",
            "exclusion",
            "result_filter"
          ]
        },
        "detail": {
          "type": "string"
        }
      },
      "required": [
        "field",
        "effect",
        "detail"
      ]
    },
    "Cost": {
      "type": "object",
      "properties": {
        "credits": {
          "type": "integer",
          "description": "Credits charged by this call. Whole credits. 0 on an idempotent replay, where the body also has replayed: true and the header Idempotent-Replayed: true."
        },
        "cached_items": {
          "type": "integer",
          "description": "Items read from cache. On a replay, the value of the first response."
        },
        "live_items": {
          "type": "integer",
          "description": "Items fetched live by this call. 0 on a replay."
        },
        "upstream_calls": {
          "type": "integer",
          "description": "Index calls made by this call. 0 on a replay."
        }
      },
      "required": [
        "credits"
      ]
    },
    "IgnoredField": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        }
      },
      "required": [
        "field",
        "reason"
      ]
    },
    "PersonStub": {
      "type": "object",
      "properties": {
        "profile_id": {
          "type": "string",
          "description": "Search id for this person, an opaque string. GET /v1/people/{profile_id} also accepts the alternate id."
        },
        "alternate_id": {
          "type": [
            "string",
            "null"
          ],
          "description": "The other profile id for the same person. Null until the person has been enriched and both ids are known."
        },
        "full_name": {
          "type": [
            "string",
            "null"
          ]
        },
        "location": {
          "type": [
            "string",
            "null"
          ]
        },
        "profile_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "photo": {
          "type": [
            "string",
            "null"
          ],
          "description": "Profile photo on this API, /v1/media/{token}. The token expires after 7 days; a later response signs a new one. Null when there is no photo."
        },
        "current_positions": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "company_name": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "company_id": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "company_url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "current": {
                "type": "boolean"
              },
              "description": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "The role description as written on the profile."
              },
              "started_on": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "year": {
                    "type": "integer"
                  },
                  "month": {
                    "type": "integer"
                  },
                  "text": {
                    "type": "string"
                  }
                },
                "description": "Start of this role, for example { year: 2020, month: 1, text: \"2020-01\" }. Keys can be missing."
              },
              "tenure_at_position": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "numYears": {
                    "type": "integer"
                  },
                  "numMonths": {
                    "type": "integer"
                  }
                },
                "description": "Time in this role, for example { numYears: 2, numMonths: 7 }. A key whose value is 0 is left out, so { numYears: 4 } means 4 years and 0 months. Null when neither is known."
              },
              "tenure_at_company": {
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "numYears": {
                    "type": "integer"
                  },
                  "numMonths": {
                    "type": "integer"
                  }
                },
                "description": "Time at this company, same shape as tenure_at_position: a key whose value is 0 is left out."
              }
            }
          }
        },
        "identity_key": {
          "type": [
            "string",
            "null"
          ]
        },
        "already_seen": {
          "type": "boolean",
          "description": "True when the person is in your seen register."
        }
      },
      "required": [
        "profile_id"
      ]
    }
  }
}