nylas-api

Crates.ionylas-api
lib.rsnylas-api
version0.1.1
created_at2025-12-27 22:23:49.690335+00
updated_at2025-12-28 07:08:47.438342+00
descriptionAPI resource implementations for Nylas SDK
homepage
repositoryhttps://github.com/mqasimca/nylas-rust
max_upload_size
id2007928
size238,437
Qasim (mqasimca)

documentation

README

nylas-api

API resource implementations for the Nylas API v3.

This crate provides resource-specific API clients for all Nylas resources, including messages, events, calendars, contacts, and more.

Features

  • ✅ Complete coverage of Nylas API v3 resources
  • ✅ Type-safe API clients
  • ✅ Automatic pagination
  • ✅ Query parameter builders
  • ✅ Multipart file uploads
  • ✅ Webhook signature verification

Usage

Add this to your Cargo.toml:

[dependencies]
nylas-api = "0.1"
nylas-types = "0.1"
tokio = { version = "1.35", features = ["full"] }

Example

use nylas_api::resources::Messages;
use nylas_core::http::{HttpClient, HttpConfig};
use nylas_types::{GrantId, MessageQueryParams};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Setup HTTP client
    let config = HttpConfig::builder("api_key").build()?;
    let http = HttpClient::new(config)?;

    // Create resource client
    let messages = Messages::new(http);
    let grant_id = GrantId::new("grant_123");

    // List messages with filters
    let params = MessageQueryParams::builder()
        .subject("invoice")
        .unread(true)
        .limit(50)
        .build();

    let results = messages.list(&grant_id, Some(params)).await?;
    println!("Found {} messages", results.len());

    Ok(())
}

Supported Resources

Email

  • Messages - Send, receive, update, delete emails
  • Drafts - Create and manage draft messages
  • Threads - Email conversation threading
  • Folders - Manage folders and labels

Calendar

  • Events - Create, update, delete calendar events
  • Calendars - Manage calendars
  • Availability - Check free/busy status

Contacts

  • Contacts - Full CRUD operations for contacts

Authentication & Management

  • Grants - Manage authentication grants
  • Webhooks - Setup and verify webhooks

Files

  • Attachments - Upload and download file attachments

Resource Clients

Messages

use nylas_api::resources::Messages;
use nylas_types::SendMessageRequest;

let messages = Messages::new(http);

// Send an email
let request = SendMessageRequest::builder()
    .to("recipient@example.com")
    .subject("Hello")
    .body("Message content")
    .build();

let sent = messages.send(&grant_id, request).await?;

Events

use nylas_api::resources::Events;
use nylas_types::CreateEventRequest;

let events = Events::new(http);

let request = CreateEventRequest::builder()
    .title("Team Meeting")
    .when(when)
    .build();

let event = events.create(&grant_id, "calendar_id", request).await?;

Calendars

use nylas_api::resources::Calendars;

let calendars = Calendars::new(http);

// List all calendars
let all_calendars = calendars.list(&grant_id).await?;

// Check availability
let availability = calendars.availability(&grant_id, params).await?;

Webhooks

use nylas_api::resources::Webhooks;
use nylas_types::CreateWebhookRequest;

let webhooks = Webhooks::new(http);

let request = CreateWebhookRequest::builder()
    .trigger_types(vec!["message.created"])
    .webhook_url("https://example.com/webhook")
    .build();

let webhook = webhooks.create(request).await?;

Pagination

All list operations support automatic pagination:

// Get first page
let first_page = messages.list(&grant_id, None).await?;

// Use iterator for all pages
let mut pages = messages.pages(&grant_id, None);
while let Some(page) = pages.next_page().await? {
    for message in page.data {
        println!("Message: {}", message.id);
    }
}

Query Parameters

Use builder patterns for complex queries:

use nylas_types::MessageQueryParams;

let params = MessageQueryParams::builder()
    .subject("invoice")
    .from("billing@company.com")
    .unread(true)
    .has_attachment(true)
    .received_after(timestamp)
    .limit(100)
    .build();

Documentation

License

MIT

Commit count: 0

cargo fmt