C SDK
Official C client — build from GitHub Release v1.0.0.
On this page
- Build and link
- Quickstart
- caedral_chat_completions_create(client, request)
- Streaming (callback)
- caedral_models_list(client)
- caedral_usage_get(client)
- caedral_embeddings_create(client, request)
- caedral_images_generate(client, request)
- caedral_audio_generate(client, request)
- caedral_rerank_create(client, request)
- Errors and memory
Official C client (static library libcaedral.a). Prefer TypeScript, Python, Go, or n8n for most integrations; use C for native / embedded workloads.
Build and link
# Dependencies: C11 compiler, libcurl dev headersgit clone https://github.com/trycaedral/caedral-c.gitcd caedral-cgit checkout v1.0.0make # Link your program:gcc -o myapp myapp.c -I./include -L./build -lcaedral -lcurlQuickstart
#include "caedral.h"#include <stdio.h>#include <stdlib.h> int main(void) { caedral_client_t *client = caedral_client_new("cd_live_...", "http://localhost:5001"); if (client == NULL) { fprintf(stderr, "%s\n", caedral_get_last_error()); return 1; } caedral_chat_request_t *req = caedral_chat_request_new("anthropic/claude-haiku-4.5"); caedral_chat_request_add_message(req, "user", "Hello!"); caedral_response_t *resp = caedral_chat_completions_create(client, req); if (resp == NULL) { fprintf(stderr, "%s\n", caedral_get_last_error()); return 1; } char *content = caedral_chat_response_get_content(resp); printf("%s\n", content); caedral_free(content); caedral_response_free(resp); caedral_chat_request_free(req); caedral_client_free(client); return 0;}caedral_chat_completions_create(client, request)
Create a non-streaming chat completion. Returns caedral_response_t* on success, NULL on failure (check caedral_get_last_error()).
Streaming (callback)
int on_chunk(const caedral_stream_chunk_t *chunk, void *user_data) { printf("%s\n", chunk->json); return 0; /* return non-zero to abort */} caedral_chat_completions_create_stream(client, req, on_chunk, NULL);caedral_models_list(client)
caedral_response_t *resp = caedral_models_list(client);const char *body = caedral_response_body(resp);caedral_response_free(resp);caedral_usage_get(client)
caedral_response_t *resp = caedral_usage_get(client);caedral_embeddings_create(client, request)
caedral_embedding_request_t *req = caedral_embedding_request_new("caedral-embed", "Hello world");caedral_response_t *resp = caedral_embeddings_create(client, req);caedral_embedding_request_free(req);caedral_images_generate(client, request)
caedral_image_request_t *req = caedral_image_request_new("A sunset over mountains");caedral_response_t *resp = caedral_images_generate(client, req);caedral_image_request_free(req);caedral_audio_generate(client, request)
caedral_audio_request_t *req = caedral_audio_request_new("Welcome to Caedral.");req->voice = "alloy";caedral_response_t *resp = caedral_audio_generate(client, req);caedral_audio_request_free(req);caedral_rerank_create(client, request)
char *docs[] = {"API draws from subscription pools.", "Semantic cache hits bill at half price."};caedral_rerank_request_t *req = caedral_rerank_request_new("How does billing work?", docs, 2);req->top_n = 2;caedral_response_t *resp = caedral_rerank_create(client, req);caedral_rerank_request_free(req);Errors and memory
if (resp == NULL) { fprintf(stderr, "status=%d type=%s msg=%s\n", caedral_get_last_status_code(), caedral_get_last_error_type(), caedral_get_last_error());} /* Free with matching *_free() or caedral_free() for helper strings */