Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/custom-commands/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ with the following sub-clients:
| `client.inboxes` | `agentmail_sdk::api::InboxesClient` | inboxes operations |
| `client.accounts` | `agentmail_sdk::api::AccountsClient2` | accounts operations |
| `client.api_keys` | `agentmail_sdk::api::ApiKeysClient2` | api_keys operations |
| `client.calendar` | `agentmail_sdk::api::CalendarClient` | calendar operations |
| `client.drafts` | `agentmail_sdk::api::DraftsClient2` | drafts operations |
| `client.events` | `agentmail_sdk::api::EventsClient` | events operations |
| `client.lists` | `agentmail_sdk::api::ListsClient2` | lists operations |
Expand Down
8 changes: 7 additions & 1 deletion .fern/replay.lock
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,13 @@ generations:
cli_version: unknown
generator_versions:
fernapi/fern-cli-generator: 0.38.10
current_generation: c2dac7d33a1b45c1144403af99c98aedb4d428f6
- commit_sha: 71e33be5100ac2b6124ea0b07124c9947f0b8b50
tree_hash: ec5bc6f7a1e2dfd2a9be164896c2ba66a82a2d81
timestamp: 2026-10-06T05:27:23.180Z
cli_version: unknown
generator_versions:
fernapi/fern-cli-generator: 0.38.10
current_generation: 71e33be5100ac2b6124ea0b07124c9947f0b8b50
patches:
- id: patch-bf63549e
content_hash: sha256:a660ef1be2e6211b2d9aee152022a339ffd879d56f0e8b0b557ce0fb5e4d9b5c
Expand Down
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "agentmail-cli"
version = "1.8.0"
version = "1.9.0"
edition = "2021"
description = "Command-line interface for the AgentMail API. Send, receive, reply, and manage threaded email conversations from your terminal."
license = "MIT"
Expand Down
2 changes: 1 addition & 1 deletion agentmail-sdk/src/api/resources/agent/agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ impl AgentClient {
///
/// A 6-digit OTP is sent to the human's email for verification.
///
/// `human_email` is optional. Without it, the inbox can receive email but cannot send to anyone until a human is attached with the attach human endpoint. There is also no way to recover the API key, so store it durably. Calling sign-up again without `human_email` creates a new organization, which needs a different `username`: the original username stays with the lost organization's inbox.
/// `human_email` is optional. Without it, the inbox can receive email but cannot send to anyone until a human is attached with the attach human endpoint or, for a US-region inbox, claims it in the AgentMail Console with the API key (see [How do I claim my agent's inbox?](https://docs.agentmail.to/knowledge-base/claiming-agent-inbox)). There is also no way to recover the API key, so store it durably. Calling sign-up again without `human_email` creates a new organization, which needs a different `username`: the original username stays with the lost organization's inbox.
///
/// This endpoint is idempotent. Calling it again with the same `human_email` will rotate the API key and resend the OTP if expired.
///
Expand Down
30 changes: 19 additions & 11 deletions agentmail-sdk/src/api/resources/apps/apps.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ impl AppsClient {
///
/// # Arguments
///
/// * `category` - Only apps in this category. A filtered page can hold fewer than `limit` apps while more remain, so page until `next_page_token` is absent. A `page_token` works only with the `category` it was returned for.
/// * `options` - Additional request options such as headers, timeout, etc.
///
/// # Returns
Expand Down Expand Up @@ -59,6 +60,7 @@ impl AppsClient {
QueryBuilder::new()
.serialize("limit", request.limit.clone())
.serialize("page_token", request.page_token.clone())
.serialize("category", request.category.clone())
.build(),
options,
)
Expand Down Expand Up @@ -119,13 +121,15 @@ impl AppsClient {
.await
}

/// Gets one app by ID. An app in the catalog returns its full entry.
/// Gets one app by ID or slug. A catalog app returns its full entry.
/// A registered app that the catalog does not list returns its ID and
/// name only, without `updated_at`, so anyone holding its ID can still look
/// it up. List Apps and Search Apps show catalog entries only.
/// it up; a slug finds catalog apps only. List Apps and Search Apps show
/// catalog entries only.
///
/// # Arguments
///
/// * `app_id` - ID of app, or the `slug` of an app in the catalog. A slug ignores case, spaces and punctuation.
/// * `options` - Additional request options such as headers, timeout, etc.
///
/// # Returns
Expand All @@ -144,18 +148,18 @@ impl AppsClient {
/// ..Default::default()
/// };
/// let client = AgentmailClient::new(config).expect("Failed to build client");
/// client.apps.get(&AppID("app_id".to_string()), None).await;
/// client.apps.get(&"app_id".to_string(), None).await;
/// }
/// ```
pub async fn get(
&self,
app_id: &AppId,
app_id: &str,
options: Option<RequestOptions>,
) -> Result<App, ApiError> {
self.http_client
.execute_request(
Method::GET,
&format!("v0/apps/{}", app_id.0),
&format!("v0/apps/{}", app_id),
None,
None,
options,
Expand All @@ -167,6 +171,7 @@ impl AppsClient {
///
/// # Arguments
///
/// * `app_id` - ID of app, or the `slug` of an app in the catalog. A slug ignores case, spaces and punctuation.
/// * `options` - Additional request options such as headers, timeout, etc.
///
/// # Returns
Expand All @@ -188,7 +193,7 @@ impl AppsClient {
/// client
/// .apps
/// .list_accounts(
/// &AppID("app_id".to_string()),
/// &"app_id".to_string(),
/// &ListAccountsQueryRequest {
/// ..Default::default()
/// },
Expand All @@ -199,14 +204,14 @@ impl AppsClient {
/// ```
pub async fn list_accounts(
&self,
app_id: &AppId,
app_id: &str,
request: &ListAccountsQueryRequest,
options: Option<RequestOptions>,
) -> Result<ListAppAccountsResponse, ApiError> {
self.http_client
.execute_request(
Method::GET,
&format!("v0/apps/{}/accounts", app_id.0),
&format!("v0/apps/{}/accounts", app_id),
None,
QueryBuilder::new()
.serialize("limit", request.limit.clone())
Expand All @@ -220,12 +225,15 @@ impl AppsClient {
/// Starts signing an inbox in to an app. Returns a single-use `magic_url`,
/// valid for five minutes, to open in the client that will hold the sign-in;
/// the client enrolls as the inbox and continues to the app.
/// An app in the catalog can be named by its `slug`, as in
/// `POST /v0/apps/firecrawl/connect`.
/// A `404` names the missing resource: `App` or `Inbox`.
/// A `403` `AppSignupLimitError` means the app accepts no more sign-ups from
/// your organization; sign in with an inbox that already has an account there.
///
/// # Arguments
///
/// * `app_id` - ID of app, or the `slug` of an app in the catalog. A slug ignores case, spaces and punctuation.
/// * `options` - Additional request options such as headers, timeout, etc.
///
/// # Returns
Expand All @@ -247,7 +255,7 @@ impl AppsClient {
/// client
/// .apps
/// .connect(
/// &AppID("app_id".to_string()),
/// &"app_id".to_string(),
/// &ConnectAppBody {
/// ..Default::default()
/// },
Expand All @@ -258,14 +266,14 @@ impl AppsClient {
/// ```
pub async fn connect(
&self,
app_id: &AppId,
app_id: &str,
request: &ConnectAppBody,
options: Option<RequestOptions>,
) -> Result<ConnectAccepted, ApiError> {
self.http_client
.execute_request(
Method::POST,
&format!("v0/apps/{}/connect", app_id.0),
&format!("v0/apps/{}/connect", app_id),
Some(serde_json::to_value(request).map_err(ApiError::Serialization)?),
None,
options,
Expand Down
Loading
Loading