Skip to main content

openrouter_rs/api/
mod.rs

1//! # OpenRouter API Endpoints
2//!
3//! This module contains the typed request/response implementations behind the
4//! domain clients exposed from [`crate::client::OpenRouterClient`].
5//!
6//! Canonical domain mapping:
7//!
8//! - `client.chat()` -> [`chat`]
9//! - `client.responses()` -> [`responses`]
10//! - `client.messages()` -> [`messages`]
11//! - `client.models()` -> [`models`], [`embeddings`], [`discovery`]
12//! - `client.management()` -> [`api_keys`], [`auth`], [`credits`], [`generation`], [`guardrails`]
13//! - `client.legacy()` -> [`legacy`] (feature `legacy-completions`)
14//!
15//! Endpoint families currently implemented here:
16//!
17//! - chat completions and multimodal content
18//! - Responses API
19//! - Anthropic-compatible Messages API
20//! - model discovery, providers, user model filters, model counts, and ZDR endpoints
21//! - embeddings
22//! - API-key and auth-code flows
23//! - credits, Coinbase charge creation, generation lookup, and activity
24//! - guardrails and guardrail assignments
25//! - structured API error payloads
26//!
27//! ## Quick Examples
28//!
29//! ### Chat
30//! ```no_run
31//! use openrouter_rs::{
32//!     OpenRouterClient,
33//!     api::chat::{ChatCompletionRequest, Message},
34//!     types::Role,
35//! };
36//!
37//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
38//! let client = OpenRouterClient::builder().api_key("your_key").build()?;
39//! let request = ChatCompletionRequest::builder()
40//!     .model("google/gemini-2.5-flash")
41//!     .messages(vec![Message::new(Role::User, "Hello!")])
42//!     .build()?;
43//! let response = client.chat().create(&request).await?;
44//! println!("{:?}", response.choices[0].content());
45//! # Ok(())
46//! # }
47//! ```
48//!
49//! ### Responses
50//! ```no_run
51//! use openrouter_rs::{OpenRouterClient, api::responses::ResponsesRequest};
52//! use serde_json::json;
53//!
54//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
55//! let client = OpenRouterClient::builder().api_key("your_key").build()?;
56//! let request = ResponsesRequest::builder()
57//!     .model("openai/gpt-5")
58//!     .input(json!([{ "role": "user", "content": "Say hello." }]))
59//!     .build()?;
60//! let response = client.responses().create(&request).await?;
61//! println!("{:?}", response.id);
62//! # Ok(())
63//! # }
64//! ```
65//!
66//! ### Discovery
67//! ```no_run
68//! use openrouter_rs::{OpenRouterClient, types::ModelCategory};
69//!
70//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
71//! let client = OpenRouterClient::builder().api_key("your_key").build()?;
72//! let models = client.models().list_by_category(ModelCategory::Programming).await?;
73//! println!("Found {} models", models.len());
74//! # Ok(())
75//! # }
76//! ```
77//!
78//! ## Error Handling
79//!
80//! All endpoint methods return `Result<_, OpenRouterError>`:
81//!
82//! ```no_run
83//! use openrouter_rs::{
84//!     OpenRouterClient,
85//!     api::chat::{ChatCompletionRequest, Message},
86//!     error::OpenRouterError,
87//!     types::Role,
88//! };
89//!
90//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
91//! let client = OpenRouterClient::builder().api_key("your_key").build()?;
92//! let request = ChatCompletionRequest::builder()
93//!     .model("google/gemini-2.5-flash")
94//!     .messages(vec![Message::new(Role::User, "Hello!")])
95//!     .build()?;
96//!
97//! match client.chat().create(&request).await {
98//!     Ok(response) => println!("Success: {:?}", response),
99//!     Err(OpenRouterError::Api(api_error)) if api_error.is_retryable() => {
100//!         println!("Retryable API error: {}", api_error.message);
101//!     }
102//!     Err(err) => println!("Other error: {}", err),
103//! }
104//! # Ok(())
105//! # }
106//! ```
107
108pub mod api_keys;
109pub mod auth;
110pub mod chat;
111pub mod credits;
112pub mod discovery;
113pub mod embeddings;
114pub mod errors;
115pub mod generation;
116pub mod guardrails;
117pub mod messages;
118pub mod models;
119pub mod responses;
120
121#[cfg(feature = "legacy-completions")]
122pub mod legacy;