> ## Documentation Index
> Fetch the complete documentation index at: https://developers.askparable.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Rust SDK

> Install the Rust client, authenticate, and call the API.

The Rust client is `parable-web-api-sdk`. It covers every endpoint in the
[API Reference](/api-reference/overview). Calls are async.

<Info>
  Your Parable representative will confirm crate access if the package is
  not public yet.
</Info>

## Install

```toml theme={null}
[dependencies]
parable-web-api-sdk = "1"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
```

## Import and authenticate

Create a client with your workspace API token. See
[Authentication](/getting-started/authentication) if you do not have one.

```rust theme={null}
use parable_web_api_sdk::{ClientConfig, WebApiSdk};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let token = std::env::var("PARABLE_API_TOKEN")?;
    let sdk = WebApiSdk::new(ClientConfig::with_base_url(
        "https://api.askparable.com",
        Some(token),
        None,
    ))?;

    Ok(())
}
```

The client sends `Authorization: Bearer ...` on every call.

## Read

Who you are, then the connectors configured in your workspace:

```rust theme={null}
let me = sdk.users.me(None).await?;
println!("{} {}", me.name, me.email);

let connectors = sdk.vendors.tenant_connector_instances(None).await?;
for connector in connectors {
    println!("{:?} {:?}", connector.name, connector.connection_status);
}
```

## Update

Enable a tap. Replace the id with one from your workspace.

```rust theme={null}
use parable_web_api_sdk::types::UpdateTenantConnectorTapInput;

let tap_id = "018f2a3b-9c4d-7e5f-8a6b-1c2d3e4f5a6b".parse()?;
let tap = sdk
    .tenant_connector_taps
    .update_tenant_connector_tap(
        tap_id,
        UpdateTenantConnectorTapInput {
            enabled: Some(true),
            name: None,
            description: None,
            output_schema: None,
            config: None,
            canonical_person_source: None,
        },
        None,
    )
    .await?;

println!("{:?} {:?}", tap.id, tap.enabled);
```

Omitted fields (`None`) are left unchanged. To disable the tap, pass
`enabled: Some(false)`.

<Tip>
  This SDK maps directly to API names. Groups in the
  [API Reference](/api-reference/overview) are namespaces
  (`sdk.users`, `sdk.vendors`); operation names are snake\_case methods
  (`me`, `tenant_connector_instances`). If an endpoint is in that spec,
  it is on this client.
</Tip>
