The npm package remains the first-class JavaScript and TypeScript SDK, and this repository now also includes official first-party client sources for other languages. Every client maps to the same REST API under:
https://api.chefuinc.com/api
Official client sources:
clients/python
clients/go
clients/java
clients/csharp
clients/php
clients/ruby
clients/curl
The OpenAPI contract remains the source of truth:
openapi/chefu-academy-api.openapi.yaml
Catalog endpoints use a CheFu Academy developer API key:
Authorization: Bearer chf_publicId_secretUser/developer account endpoints use the Firebase ID token returned by
POST /auth/login:
Authorization: Bearer <idToken>Use API keys for:
GET /coursesGET /courses/searchGET /courses/featuredGET /videosGET /videos/search
Use user auth tokens for:
POST /keys/createGET /keys/listPOST /keys/revoke
List endpoints accept:
limit: maximum items to returncursor: thenextCursorvalue from the previous response
Example:
GET /courses?limit=20&cursor=20These clients are source-ready in this repo and ship in the npm package. npm, Go, PyPI, NuGet, Packagist, RubyGems, and Maven Central packages are available now.
Current registry status:
| Language | Package | Status |
|---|---|---|
| JavaScript/TypeScript | chefu-academy-sdk@1.0.10 |
Published to npm |
| Go | github.com/CheFu-code/chefu-academy-sdk/clients/go@v0.1.0 |
Published by Git tag and visible on the Go proxy |
| Python | chefu-academy@0.1.1 |
Ready for the next PyPI release |
| Java | com.chefuinc:chefu-academy:0.1.0 |
Published to Maven Central |
| C#/.NET | CheFu.Academy@0.1.0 |
Published to NuGet |
| PHP | chefu/academy@0.1.0 |
Published to Packagist |
| Ruby | chefu_academy@0.1.0 |
Published to RubyGems |
pip install chefu-academyFor the Python terminal CLI:
pipx install chefu-academy
chefu-academy login
chefu-academy keys create --name "Local development"
chefu-academy keys listfrom chefu_academy import CheFuAcademy
client = CheFuAcademy(api_key="chf_publicId_secret")
print(client.courses.list(limit=5))go get github.com/CheFu-code/chefu-academy-sdk/clients/go@v0.1.0client := chefuacademy.NewClient(chefuacademy.Config{
APIKey: "chf_publicId_secret",
})
courses, err := client.ListCourses(context.Background(), chefuacademy.ListOptions{Limit: 5})<dependency>
<groupId>com.chefuinc</groupId>
<artifactId>chefu-academy</artifactId>
<version>0.1.0</version>
</dependency>CheFuAcademyClient client = CheFuAcademyClient.withApiKey("chf_publicId_secret");
JsonNode courses = client.listCourses(Map.of("limit", 5));dotnet add package CheFu.Academy --version 0.1.0var client = new CheFuAcademyClient(apiKey: "chf_publicId_secret");
var courses = await client.ListCoursesAsync(new Dictionary<string, object?>
{
["limit"] = 5,
});composer require chefu/academy$client = new \CheFu\Academy\CheFuAcademyClient(apiKey: 'chf_publicId_secret');
$courses = $client->listCourses(['limit' => 5]);gem install chefu_academy -v 0.1.0client = CheFuAcademy::Client.new(api_key: 'chf_publicId_secret')
courses = client.list_courses(limit: 5)export CHEFU_API_KEY="chf_publicId_secret"
clients/curl/chefu-academy.sh courses list 5You can generate more clients from the OpenAPI file with OpenAPI Generator:
npx @openapitools/openapi-generator-cli generate \
-i openapi/chefu-academy-api.openapi.yaml \
-g python \
-o generated/pythonUseful generator names for future SDKs:
kotlin
swift5
rust
dart
Generated clients are a good start for additional ecosystems, but keep the OpenAPI contract as the source of truth and review generated code before publishing a production package.
Each example reads CHEFU_API_KEY from the environment.
export CHEFU_API_KEY="chf_publicId_secret"Simple HTTP examples are still included in this repository:
examples/curl/quickstart.shexamples/python/chefu_academy_quickstart.pyexamples/go/quickstart.goexamples/java/CheFuAcademyQuickstart.javaexamples/csharp/Program.csexamples/php/quickstart.phpexamples/ruby/quickstart.rb
All examples call GET /courses?limit=5 and print course titles.
Any language can call the API with these pieces:
- Base URL:
https://api.chefuinc.com/api - Header:
Authorization: Bearer <api key> - JSON parsing
- Non-2xx error handling
Example response shape:
{
"courses": [
{
"id": "course-id",
"courseTitle": "Intro to JavaScript"
}
],
"nextCursor": null,
"total": 1
}Each official SDK keeps the same concepts as the TypeScript SDK:
client.courses.list()client.courses.search()client.videos.list()client.auth.login()client.keys.create()