| Crates.io | releasy-client |
| lib.rs | releasy-client |
| version | 0.1.1 |
| created_at | 2026-01-03 15:34:46.860084+00 |
| updated_at | 2026-01-03 15:34:46.860084+00 |
| description | Rust client for the Releasy release management API |
| homepage | |
| repository | https://github.com/releasyhq/releasy-client-rs.git |
| max_upload_size | |
| id | 2020349 |
| size | 106,775 |
Rust client for the Releasy release management API. It is a small,
blocking HTTP client built on ureq with typed request/response models.
use releasy_client::{Auth, Client, ReleaseListQuery, Result};
fn main() -> Result<()> {
// Base URL should point at your Releasy instance (e.g. https://api.releasyhq.com)
let client = Client::new("https://api.releasyhq.com", Auth::ApiKey("your-key".into()))?;
let releases = client.list_releases(&ReleaseListQuery {
product: Some("demo-app".into()),
include_artifacts: Some(true),
..Default::default()
})?;
println!("found {} releases", releases.releases.len());
Ok(())
}
Auth::ApiKey: supply the x-releasy-api-key header for end-user actions.Auth::AdminKey: supply the x-releasy-admin-key header for admin-only
endpoints (creating customers, keys, releases, etc.).Auth::OperatorJwt: supply a bearer token when acting as an operator.Auth::None: for unauthenticated endpoints (mainly tests).client.auth_introspect()?client.create_release(&ReleaseCreateRequest { ... })?register_release_artifact, then
presign_release_artifact_upload, then upload_presigned_artifact.publish_release / unpublish_release.client.list_customers(&AdminCustomerListQuery { ... })?get_customer / update_customerlist_users, create_user, get_user, patch_userreplace_groups, reset_credentialsadmin_create_customer_with_idempotency or
create_user_with_idempotency.health_check, live_check, ready_check.use releasy_client::{
AdminCreateCustomerRequest, AdminCustomerListQuery, Auth, Client, Result,
};
fn main() -> Result<()> {
let client = Client::new("https://api.releasyhq.com", Auth::AdminKey("admin-key".into()))?;
let customer = client.admin_create_customer_with_idempotency(
&AdminCreateCustomerRequest {
name: "Acme".into(),
plan: Some("pro".into()),
},
Some("idem-123"),
)?;
let customers = client.list_customers(&AdminCustomerListQuery {
name: Some("Acme".into()),
..Default::default()
})?;
println!("created {}, total {}", customer.id, customers.customers.len());
Ok(())
}
use releasy_client::{
Auth, Client, ResetCredentialsRequest, Result, UserCreateRequest, UserGroupsReplaceRequest,
UserListQuery,
};
fn main() -> Result<()> {
let client = Client::new("https://api.releasyhq.com", Auth::AdminKey("admin-key".into()))?;
let user = client.create_user_with_idempotency(
&UserCreateRequest {
email: "alice@example.com".into(),
customer_id: "cust-1".into(),
display_name: Some("Alice".into()),
groups: Some(vec!["platform_admin".into()]),
metadata: None,
status: Some("active".into()),
},
Some("idem-user-1"),
)?;
let users = client.list_users(&UserListQuery {
customer_id: Some("cust-1".into()),
..Default::default()
})?;
client.replace_groups(
&user.id,
&UserGroupsReplaceRequest {
groups: vec!["platform_support".into()],
},
)?;
client.reset_credentials(
&user.id,
&ResetCredentialsRequest {
send_email: Some(true),
},
)?;
println!("users in customer: {}", users.users.len());
Ok(())
}
All fallible methods return releasy_client::Result<T>. On non-success
status codes you receive Error::Api { status, error, body }, which may
carry the parsed ErrorBody. For admin user endpoints, you can also parse
EnterpriseErrorBody via error.enterprise_error(). Transport issues (I/O,
TLS, etc.) surface as Error::Transport.
MSRV is Rust 1.85 (edition 2024). The crate is tested on stable.
Ensure the just command runner is installed. Helpful tasks:
just fmt — format the workspace.just pre-commit — fmt + clippy (deny warnings) + tests.cargo test — run the integration tests.Licensed under the Apache License, Version 2.0. See LICENSE for details.