Skip to content

Tutorials & Cookbooks ​

These practical guides bridge the gap between protocol theory and working code. Use them as starting points for your own BSP integrations.

1. Laboratory Integration (Submit Data) ​

Scenario: A clinic wants to automatically convert daily blood test results into BSP BioRecords and send them to patients' BEOs.

Step 1: Connect to the Network ​

The lab initializes their institution identity using their private key.

python
from bsp_sdk import BSPClient

lab = BSPClient(
    domain="clinic.bsp",
    private_key=LAB_PRIVATE_KEY
)

Before processing data, ensure the patient has granted you the right to submit to their BEO.

python
patient_domain = "andre.bsp"
intent = "SUBMIT_RECORD"

check = lab.access.verify_consent(
    beo_domain=patient_domain,
    intent=intent
)

if not check.valid:
    print(f"Cannot submit. Reason: {check.reason}")
    # e.g., TOKEN_REVOKED or TOKEN_EXPIRED
    return

Step 3: Map LIS Data to BSP Format ​

Convert the internal laboratory data into standardized BSP BioRecords.

python
from bsp_sdk import BioRecordBuilder

records = []
for result in internal_lis_results:
    record = BioRecordBuilder(lab) \
        .set_biomarker(result.bsp_mapping_code) \
        .set_value(result.numeric_value) \
        .set_unit(result.unit) \
        .set_collected_at(result.timestamp) \
        .build()
    records.append(record)

Step 4: Encrypt and Transmit ​

Submit the records to Arweave. The SDK automatically handles encrypting the data with the patient's public key.

python
response = lab.submit_records(
    target_beo=patient_domain,
    records=records,
    consent_token=check.token.token_id
)

print(f"Successfully secured {len(records)} records on-chain.")

2. Platform Integration (Read Data) ​

Scenario: A longevity platform wants to read a user's historical cardiovascular data to render a custom dashboard widget.

Step 1: Request Access ​

The platform prompts the user for access. This usually triggers a flow in the user's BSP wallet app.

typescript
// The platform requests a token scoping ONLY cardiovascular data
const requestUrl = platform.access.createAuthRequestUrl({
    intents: ["READ_RECORDS"],
    categories: ["BSP-CV"], // Cardiovascular focus
    durationDays: 30,       // Time-limited
    purpose: "Render the CV Health Dashboard"
});

// User clicks, approves on their device, returns an active AuthToken

Step 2: Fetch and Filter Data ​

Once authorized, query the network for the relevant records. The SDK will decrypt the response locally since it's operating on behalf of the user's explicit consent session.

typescript
const cvRecords = await platform.readRecords({
    targetBeo: "andre.bsp",
    consentToken: activeAuthToken,
    filter: {
        categories: ["BSP-CV"],
        period: {
            from: "2024-01-01T00:00:00Z",
            to: null // Up to today
        }
    }
});

Step 3: Aggregate and Render ​

Iterate over the standardized records without worrying about which lab produced them.

typescript
// All LDL-P records are standardized to nmol/L, regardless of the source.
const ldlpHistory = cvRecords
    .filter(r => r.biomarker === "BSP-CV-001")
    .map(r => ({ date: r.collected_at, value: r.value }));

renderChart(ldlpHistory);