Centene Provider Carrier Entity Search (PCES) API

A search-index query API over Centene carrier entities, shaped like Elasticsearch — aggregations, buckets, bounding boxes and geo coordinates across 85 schemas. Carries query and custom-query validator operations that lint a query shape before execution. OAuth client credentials with audience ewsext.

Operations 4

POST /query Send a query to Elasticsearch #
GET /custom-mapping local mapping file for PCES validations #
POST /custom-query-validator providerCarrierEntitySearchCustomQueryValidator #
POST /query-validator providerCarrierEntitySearchQueryValidator #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/centene-pces"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

centene-pces-openapi.yaml Raw ↑
openapi: 3.1.0
info:
  title: Provider Carrier Entity Search (PCES) API
  description: 'PCES Description'
  contact:
    email: provider_search_support@centene.com
  version: 0.0.6
externalDocs:
  description: Centene Search DSL Documentation
  url: https://centene-search-dsl.ckp-dev.centene.com/
servers:
  - url: https://dev-int-api-gw.centene.com/pces
    description: Dev
  - url: https://prod.api.centene.com/incoming/dev/pces
    description: Dev DMZ
  - url: https://test-int-api-gw.centene.com/pces
    description: Test
  - url: https://prod.api.centene.com/incoming/test/pces
    description: Test DMZ
  - url:  https://api-gateway-01.centene.com/pces
    description: Prod
  - url:  https://prod.api.centene.com/incoming/pces
    description: Prod DMZ
tags:
  - name: query
    description: query elasticsearch
    externalDocs:
      description: Centene Search DSL
      url: https://centene-search-dsl.ckp-dev.centene.com/
  - name: custom-mapping
    description: check local mapping
paths:
  /query:
    post:
      tags:
        - query
      summary: Send a query to Elasticsearch
      operationId: query
      parameters:
        - name: index
          in: query
          required: false
          description: query param to search the new index - carrier_entity_location_active
          schema:
            type: string
            enum:
              - cel
      requestBody:
        description: Centene Search DSL Request
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/customQuery'
                - $ref: '#/components/schemas/aggs'
            examples:
              NameMatch Query:
                description: "The nameMatch Query can be used to match against name fields in the JSON objects. The nameMatch query uses a predefined matching algorithm"
                value:
                  customQuery:
                    nameMatch:
                      field: "locations.name"
                      value: "Walgreens"
                      boost: 1
              Value Query:
                description: 'Used to apply logic that restricts a provided field in the document to an **exact** value. The Value query should only be used against fields that have an exact value representation in Elasticsearch such as fields mapped as keyword or number.'
                value:
                  customQuery:
                    value:
                      field: providerName
                      value: Allwell Behavioral Health Services
              Values Query:
                description: 'Used to apply logic that restricts a provided field in the document to an array of **exact** values. The Values query should only be used against fields that have an exact value representation in Elasticsearch such as keyword or number.'
                value:
                  customQuery:
                    values:
                      field: providerName
                      values: ["Minute Clinic", "CVS", "Walgreens"]
              Range DateTime Query:
                description: 'Used to apply logic that restricts a provided field to a given dateTime range.'
                value:
                  customQuery:
                    range:
                      field: locations.eligibleForDisplay.startDate
                      type: datetime
                      lte: '2017-01-01T12:00:00'
              Range Date Query:
                description: 'Used to apply logic that restricts a provided field to a given  date range.'
                value:
                  customQuery:
                    range:
                      field: locations.eligibleForDisplay.endDate
                      type: date
                      gt: '2017-01-01'
              Range Time Query:
                description: 'Used to apply logic that restricts a provided field to a given time range.'
                value:
                  customQuery:
                    range:
                      field: locations.providerOfficeHours.monday.search_isoClose
                      type: time
                      gt: '17:00:00'
                      lte: '19:00:00'
              Range Integer Query:
                description: 'Used to apply logic that restricts a provided field to a given numerical range.'
                value:
                  customQuery:
                    range:
                      field: locations.panelCycles.lowestAge
                      type: integer
                      gte: '2'
                      lt: '18'
              Range Text Query:
                description: 'Used to apply logic that restricts a provided field to a given text range.'
                value:
                  customQuery:
                    range:
                      field: modalities.modalityDescriptionFull
                      type: text
                      gte: a
                      lt: m
              GeoFilter Radius Query:
                description: 'Used to apply logic that restricts a provided field by a geometric-defined limit, ie radius, box, or other shape. Note that geoFilters can only be applied to fields mapped as geo_point.'
                value:
                  customQuery:
                    geoFilter:
                      field: locations.address.search_coordinates
                      radius:
                        coordinates: '40, -80'
                        distance: 200mi
              GeoFilter BoundingBox Query:
                description: 'Used to apply logic that restricts a provided field by a geometric-defined limit, ie radius, box, or other shape. Note that geoFilters can only be applied to fields mapped as geo_point.'
                value:
                  customQuery:
                    geoFilter:
                      field: locations.address.search_coordinates
                      boundingBox:
                        topLeft: '41.12, -71.34'
                        bottomRight: '41, -90'
              Exists Query:
                description: 'Only includes results which have a value for the specified field.'
                value:
                  customQuery:
                    exists:
                      field: locations.address.addressLine1
              Nested Query:
                description: 'Specifies a list where you can declare a nested path that corresponds to a list of documents on the main provider document (ie, locations is a list of locations documents for a provider), and whether to filter the API results to only include matching results for that list.'
                value:
                  customQuery:
                    nested:
                      path: locations
                      query:
                        value:
                          field: locations.name
                          value: Mercy
              Nested Query With MatchedList:
                description: 'Specifies a list where you can declare a nested path that corresponds to a list of documents on the main provider document (ie, locations is a list of locations documents for a provider), and whether to filter the API results to only include matching results for that list.'
                value:
                  customQuery:
                    nested:
                      path: locations
                      matchedList:
                        name: locationsNested
                        size: 100
                        fields:
                          - locations.name
                          - locations.locationId
                          - locations.taxIdNumber
                      query:
                        value:
                          field: locations.name
                          value: Mercy
              RelevancyByDistance Query:
                description: 'Documents will be sorted based on distance from the specified field, according to the custom parameters set.'
                value:
                  customQuery:
                    relevancyByDistance:
                      field: locations.address.search_coordinates
                      origin: '38, -90'
                      scale: 5mi
                      offset: 3mi
                      decay: 0.5
                      minDistanceScore: 1
                      query:
                        value:
                          field: locations.search_root_entityType
                          value: prac
              constantScore:
                description: "Used to apply logic that Wraps a filter query and returns every matching document with a relevance score equal to the boost parameter value"
                value:
                  customQuery:
                    constantScore:
                      boost: 2
                      query:
                        value:
                          field: locations.name
                          value: Mercy
              RequireAll Query:
                description: 'A document must match all criteria in a requireAll to show up in results.'
                value:
                  customQuery:
                    requireAll:
                      criteria:
                        - value:
                            field: carrierId
                            value: '8135'
                        - value:
                            field: entityId
                            value: '3799665'

              RequireAny Query:
                description: 'Any criteria in a requireAny Query can be true for a document in order for that document to be returned. A minimum of one of the criteria must be true.'
                value:
                  customQuery:
                    requireAny:
                      criteria:
                        - value:
                            field: carrierId
                            value: '8135'
                        - value:
                            field: entityId
                            value: '3799665'

              Exclude Query:
                description: 'An exclude query negates a query in its criteria. In other words, only documents that do not match the criteria will be returned in results.'
                value:
                  customQuery:
                    exclude:
                      criteria:
                        - value:
                            field: carrierId
                            value: '8135'

              Filter Aggregation:
                description: 'Filter Aggregations are used to insert custom query syntax at an aggregation level to limit the scope of the matching documents for that aggregation and any pipelined aggregations.'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: carrierId
                      aggType:
                        filter:
                          value:
                            field: carrierId
                            value: '71'
              Nested Aggregation:
                description: 'Nested Aggregations are used to get aggregate values about the nested path.'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: hospitalAffiliations
                      aggType:
                        nested:
                          path: hospitalAffiliations
              Values Aggregation:
                description: 'Values Aggregations are used to get aggregate values about the results of a query. And example would be the top 500 unique specialties.'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: entityId
                      aggType:
                        valuesAgg:
                          field: entityId
                          size: 10
              Min Aggregation:
                description: 'A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents, "missing filed is optional"'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: minUpdateTime
                      aggType:
                        minAgg:
                          field: updateTime
                          missing: 2022-10-06T03:47:29.193Z
              Max Aggregation:
                description: 'A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents, "missing filed is optional"'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: minUpdateTime
                      aggType:
                        maxAgg:
                          field: updateTime
                          missing: 2022-10-06T03:47:29.193Z
              Cardinality Aggregation:
                description: 'A single-value metrics aggregation that calculates an approximate count of distinct values.The precision_threshold field is optional. It allows to trade memory for accuracy, and defines a unique count below which counts are expected to be close to accurate.  Above this value, counts might become a bit more fuzzy. The maximum supported value is 40000, thresholds above this number will have the same effect as a threshold of 40000. The default value is 3000'
                value:
                  customQuery:
                    value:
                      field: entityId
                      value: 3248242
                  aggs:
                    - name: entityType
                      aggType:
                        cardinality:
                          field: search_entityTypeEntityId
                          precisionThreshold: 398
              Collapse:
                description: 'Collapse parameter collapses search results based on field values. The collapsing is done by selecting only the top sorted document per collapse key. If you need the count of hits to be accurate (approx.), then cardinality aggregation should be included for the same collapse field.'
                value:
                  customQuery:
                    value:
                      field: entityId
                      value: 3248242
                  collapse:
                    field: search_entityTypeEntityId
                  aggs:
                    - name: entityType
                      aggType:
                        cardinality:
                          field: search_entityTypeEntityId
                          precisionThreshold: 398
              Multiple Aggregations:
                description: 'You can specify more than one aggregation in the aggs array'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: entityId
                      aggType:
                        valuesAgg:
                          field: entityId
                          size: 10
                    - name: carrierId
                      aggType:
                        valuesAgg:
                          field: carrierId
                          size: 10
              Pipelined Aggregations:
                description: 'Also known as subAggregations, pipelined aggs allow you to gather aggregate data off an already aggregated data set'
                value:
                  customQuery:
                    value:
                      field: entityType
                      value: prac
                  aggs:
                    - name: locations.eligibleForDisplay
                      aggType:
                        filter:
                          value:
                            field: locations.eligibleForDisplay.eligibleIndicator
                            value: Y
                      aggs:
                        - name: locations.address
                          aggType:
                            valuesAgg:
                              field: locations.address.city
                              size: 100000000
              All Hidden Fields:
                description: The above is the JSON structure for every hidden field.  Please do not try to run it, it is not a valid query.

                value:
                  carrierEntity:
                    locations:
                      address:
                        search_coordinates: geo_point
                        practitionerOfficeHours:
                          friday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          monday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          saturday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          sunday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          thursday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          tuesday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          wednesday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                        providerOfficeHours:
                          friday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          monday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          saturday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          sunday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          thursday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          tuesday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                          wednesday:
                            search_isoClose: date (HH:mm:ss)
                            search_isoOpen: date (HH:mm:ss)
                        search_root_attributes:
                          fields:
                            name: String
                            value: String
                            value_date: date
                            value_number: long
                          name: String
                        search_root_associatedProvAttributes:
                          type: object
                          $ref: '#/components/schemas/AssociatedProvAttribute'
                        search_root_entityType: String
                        search_root_pracFullAlternateName:
                          fields:
                            nameMatch: String
                            suggest: String
                        search_root_pracFullName:
                          fields:
                            nameMatch: String
                            suggest: String
                        search_root_providerName:
                          fields:
                            nameMatch: String
                            suggest: String
                    search_entityTypeEntityId: String
                    search_id: String
                    search_pracFullAlternateName:
                      fields:
                        nameMatch: String
                        suggest: String
                    search_pracFullName:
                      fields:
                        nameMatch: String
                        suggest: String
              AlphaFilter Query:
                description: "The Alpha Filter Query can be used to Filter against name fields in the JSON objects. The Alpha Filter query uses prefix term to filter name fields by the first character, only documents that match the criteria will be returned in results."
                value:
                  customQuery:
                    alphaFilter:
                      field: "providerName"
                      value: "a"
              Prefix Query:
                description: "The Prefix Query can be used to Filter against keyword fields in the JSON objects. The Prefix query uses prefix term to filter keyword fields by the prefix characters sent in the request, only documents that match the criteria will be returned in results."
                value:
                  customQuery:
                    prefix:
                      field: "carrierId"
                      value: "18"
              Nested attribute Query Pattern Multiple Fields:
                description: "This pattern is an example of how to query a multi-field Portico UDA in the attributes arrays"
                value:
                  customQuery:
                    nested:
                      path: locations.attributes
                      query:
                        constantScore:
                          boost: 1
                          query:
                            requireAll:
                              criteria:
                                - value:
                                    field: locations.attributes.name
                                    value: Medicare Advantage Required
                                - nested:
                                    path: locations.attributes.fields
                                    query:
                                      requireAll:
                                        criteria:
                                          - value:
                                              field: locations.attributes.fields.name
                                              value: PH Chain
                                          - value:
                                              field: locations.attributes.fields.value
                                              value: 'Y'
                                - nested:
                                    path: locations.attributes.fields
                                    query:
                                      requireAll:
                                        criteria:
                                          - value:
                                              field: locations.attributes.fields.name
                                              value: PH Retail
                                          - value:
                                              field: locations.attributes.fields.value
                                              value: 'Y'
              Nested attribute Query Pattern Single Field:
                description: "This pattern is an example of how to query a multi-field Portico UDA in the attributes arrays"
                value:
                  customQuery:
                    nested:
                      path: locations.attributes
                      query:
                        constantScore:
                          boost: 1
                          query:
                            requireAll:
                              criteria:
                                - value:
                                    field: locations.attributes.name
                                    value: Medicare Advantage Required
                                - nested:
                                    path: locations.attributes.fields
                                    query:
                                      requireAll:
                                        criteria:
                                          - value:
                                              field: locations.attributes.fields.name
                                              value: PH Chain
                                          - value:
                                              field: locations.attributes.fields.value
                                              value: 'Y'
              FieldValueScore Query:
                description: "The fieldValueScore Query allows you to modify the score of documents that are retrieved by a query. This works just with float values. The only modifier value accepted is 'none'"
                value:
                  customQuery:
                    fieldValueScore:
                      "field": "locations.priScore"
                      "factor": 2
                      "modifier": "none"
                      "default": 1
        required: true
      responses:
        '200':
          description: Search accepted, executed, results returned
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CarrierEntityResults'
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                type: object
        '500':
          description: Internal Server Error
          content:
            '*/*':
              schema:
                type: string
  /custom-mapping:
    get:
      tags:
        - custom-mapping
      summary: 'local mapping file for PCES validations'
      operationId: custom-mapping
      responses:
        '200':
          description: 'responds with the local pces mapping json file'
          content:
            application/json: {}
        '400':
          description: Bad Request
          content:
            '*/*':
              schema:
                type: object
        '500':
          description: Internal Server Error
          content:
            '*/*':
              schema:
                type: string
  /custom-query-validator:
    post:
      tags:
        - custom-query-validator
      summary: providerCarrierEntitySearchCustomQueryValidator
      operationId: providerCarrierEntitySearchCustomQueryValidatorUsingPOST
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/CarrierEntityRequest'
            examples:
              query exmaple:
                description: ''
                value:
                  customQuery:
                    value:
                      field: "location.name"
                      value: "Walgreens"
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/Responses'
        '201':
          description: Created
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
  /query-validator:
    post:
      tags:
        - query-validator
      summary: providerCarrierEntitySearchQueryValidator
      operationId: providerCarrierEntitySearchQueryValidatorUsingPOST
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/CarrierEntityRequest'
            examples:
              query exmaple:
                description: ''
                value:
                  customQuery:
                    value:
                      field: "locations.name"
                      value: "Walgreens"
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Query'
        '201':
          description: Created
        '401':
          description: Unauthorized
        '403':
          description: Forbidden
        '404':
          description: Not Found
components:
  schemas:
    customQuery:
      description: 'The Custom Query object is where a user can define the query they want to run on the data. There are "building block" queries outlined in the DSL to allow a user to construct a query specific to their needs.'
      type: object
      properties:
        customQuery:
          type: object
          oneOf:
            - $ref: '#/components/schemas/value'
            - $ref: '#/components/schemas/values'
            - $ref: '#/components/schemas/range'
            - $ref: '#/components/schemas/geoFilter'
            - $ref: '#/components/schemas/nameMatch'
            - $ref: '#/components/schemas/exists'
            - $ref: '#/components/schemas/nested'
            - $ref: '#/components/schemas/relevancyByDistance'
            - $ref: '#/components/schemas/requireAll'
            - $ref: '#/components/schemas/requireAny'
            - $ref: '#/components/schemas/exclude'
            - $ref: '#/components/schemas/constantScore'
            - $ref: '#/components/schemas/alphaFilter'
            - $ref: '#/components/schemas/prefix'
    #generated schemas
    aggs:
      description: 'The Aggregations object is where a user can request aggregate data about the query results. For example, a user could ask for an aggregation on locations.address.state to get a list of all states represented in the result data. There are different types of aggregations that can be used, and aggregations can be pipelined off of each other. Currently, an aggregation needs an accompanying customQuery to return results.'
      type: object
      required:
        - name
        - aggType
      properties:
        name:
          type: string
        aggType:
          $ref: '#/components/schemas/aggType'
        aggs:
          type: array
          items:
            $ref: '#/components/schemas/aggs'
    aggType:
      description: 'The aggType object contains the actual type of aggregation which will be like valuesAgg or filter or nested.'
      type: object
      oneOf:
        - $ref: '#/components/schemas/FilterAggregation'
        - $ref: '#/components/schemas/ValuesAggregation'
        - $ref: '#/components/schemas/NestedAggregation'
        - $ref: '#/components/schemas/MinAggregation'
        - $ref: '#/components/schemas/MaxAggregation'
    ValuesAggregation:
      description: 'Value Aggregations are used to get aggregate values about the results of a query. And example would be the top 500 unique specialties.'
      type: object
      properties:
        valuesAgg:
          type: object
          required:
            - field
          properties:
            field:
              type: string
            size:
              type: integer
              format: int32
    MinAggregation:
      description: 'A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.'
      type: object
      properties:
        minAgg:
          type: object
          required:
            - field
          properties:
            field:
              type: string
            missing:
              type: string
    MaxAggregation:
      description: 'A single-value metrics aggregation that keeps track and returns the minimum value among numeric values extracted from the aggregated documents.'
      type: object
      properties:
        maxAgg:
          type: object
          required:
            - field
          properties:
            field:
              type: string
            missing:
              type: string
    FilterAggregation:
      description: 'Filter Aggregations are used to insert custom query syntax at an aggregation level to limit the scope of the matching documents for that aggregation and any pipelined aggregations.'
      type: object
      properties:
        filter:
          type: object
          allOf:
            - $ref: '#/components/schemas/Condition'
    Condit

# --- truncated at 32 KB (70 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/centene/refs/heads/main/openapi/centene-pces-openapi.yaml