# 1up Payer-to-Payer

## Overview for payers partnered with 1upHealth

Designed to meet CMS Interoperability and Prior Authorization Final Rule (CMS-0057-F) requirements and leveraging industry standards, the 1up Payer-to-Payer Data Exchange API lets you easily and securely exchange member data with other payers in a standardized format—eliminating manual processes and administrative costs.

Our FHIR®-based API allows you to share and receive health data with other payers for new and previous members who have opted into data sharing, excluding cost-sharing and remittance dollar amounts. Incorporating data from other payers gives you a complete view of your member base and supports more informed and efficient decision-making.

Payers that are partnered with 1upHealth can use the templates provided under Member education to satisfy CMS's requirement for payers to provide plain language resources to members.

## Overview for external payers

As a health plan who is not a 1up customer, you can make requests to 1up's Payer to Payer APIs to export data for members that have switched to your coverage, or have concurrent coverage with you.

Payer organizations can query 1upHealth to receive member data from our partnered payer organizations. Payers must register on the [1up Dev Portal](https://developer.console.1up.health/1up-dev-portal) and complete the identity verification process to query production data, but payers can perform test queries using a sandbox client before receiving access to production.

See [Payer network](/docs/payer-to-payer/payer-network) for a list of our partnered payer organizations.

### Quick-start `$member-match` and bulk `$export` with a sandbox client

You can test the process for creating a client, setting up access with client credentials and an authorization token, and requesting patient data with a sandbox client. The sandbox `tenant` for this process is `bison`.

1. Access the [1up Dev Portal](https://developer.console.1up.health/1up-dev-portal) login page.
2. Register for the 1up Dev Portal, complete email verification, and login.
3. Click Create a Client.
4. Select Payer claims data (CMS Payer-to-payer access).
5. Enter a Client Name and click Create.
6. Copy your new client ID and client secret from the clients table.
7. Request an authorization token by pasting the following code into a terminal. Use the copied `client_id` and `client_secret` for this request.

```curl
curl -i -X POST \
    https://gateway.1up.health/auth/realms/dev-portal/protocol/openid-connect/token \
    -H 'Content-Type: application/x-www-form-urlencoded' \
    -d 'client_id={your-id-here}' \
    -d 'client_secret={your-secret-here}' \
    -d grant_type=client_credentials \
    -d 'scope=member-match|read'
```
8. Copy the `access_token` from the successful response. You will use this token for subsequent requests.
9. Send a request for a specific member's data from a specific payer using the below request. The values listed in the request below are required, but additional data may be provided in the request.
Member match requests must contain exactly one each of the memberPatient, CoverageToMatch, and Consent parameters. The CoverageToLink parameter is optional.

```curl
curl --location 'https://gateway.1up.health/v1/bison/member-match-sandbox/$member-match' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {access_token}' \
--data '{
"resourceType": "Parameters",
"id": "member-match-in",
"parameter": [
    {
    "name": "MemberPatient",
        "resource": {
        "name": [
            {
                "given": ["Jay"],
                "family": "Young"
            }
            ],
        "birthDate": "2001-03-11"
        }
    },
{
    "name" : "CoverageToMatch",
    "resource" : {
        "identifier" : [
        {
            "value" : "17148123-47da-43a0-8401-8d5d1368db02"
        }
        ]
    }
    }
    ,
    {
    "name": "Consent",
    "resource": {
        "resourceType": "Consent",
        "id": "consent123",
        "status": "active",
        "policy": [
    {
    "uri": "http://hl7.org/fhir/us/davinci-hrex/StructureDefinition-hrex-consent.html#regular"
    }
],
"provision": {
    "type": "permit",
    "period": {
    "start": "2022-01-01",
    "end": "2035-01-31"
    }
}
    }
    }
]
}
```
10. Copy the groupId value from the successful response.
11. Send a request to bulk export the member's data using the groupId value.

```curl
curl --location 'https://gateway.1up.health/v1/bison/bulk-data/r4/Group/{groupId}/$export' \
--header 'Authorization: Bearer {access_token}'
```
12. Copy the job ID from the end of the text value in the successful response. The job ID from the example below is the number `44bb133a-2033-4ba1-a29d-f50abb99e538`.

```json
{
    "resourceType": "OperationOutcome",
    "id": "j7dl66lqv6",
    "issue": [
        {
            "severity": "information",
            "code": "informational",
            "details": {
                "text": "Asynchronous export running. Track job at https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/job/44bb133a-2033-4ba1-a29d-f50abb99e538"
            }
        }
    ]
}
```
13. Send a request to check on the status of the bulk export and return the URLs necessary for receiving the member data.

```curl
curl --location 'https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/job/{job-id}' \
--header 'Authorization: Bearer {access_token}'
```
14. Copy the url ending in .ndjson for one of the batches. From the example below, `https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Specimen_2ae9a36c.ndjson` is one of the URLs out of 6 batches.

```json
{
    "id": "44bb133a-2033-4ba1-a29d-f50abb99e538",
    "transactionTime": "2026-01-05T16:08:38.956Z",
    "request": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/Group/cmk1cuald0005l701sdo7gs8c/$export",
    "requiresAccessToken": true,
    "status": "Successful",
    "resourceCount": 31,
    "batches": {
        "running": 0,
        "complete": 6,
        "failed": 0,
        "total": 6
    },
    "lastUpdated": "2026-01-05T16:08:51.646Z",
    "output": [
        {
            "type": "Specimen",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Specimen_2ae9a36c.ndjson"
        },
        {
            "type": "Coverage",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Coverage_ff99b57c.ndjson"
        },
        {
            "type": "Patient",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Patient_797bccd4.ndjson"
        },
        {
            "type": "ExplanationOfBenefit",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/ExplanationOfBenefit_f53222ae.ndjson"
        },
        {
            "type": "Encounter",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Encounter_edd3675f.ndjson"
        },
        {
            "type": "Observation",
            "url": "https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/Observation_ac712cd2.ndjson"
        }
    ]
}
```
15. Send a request to receive the requested member data from one of the batches. The data is returned as Newline Delimited JSON (NDJSON).

```curl
curl --location 'https://gateway.1upcoredev.com/v1/bison/bulk-data/r4/$export/file/{url-ending-in-.ndjson}' \
--header 'Authorization: Bearer {access_token}'
```
16. Send requests for each of the remaining batches.