A free-tier, OpenAI-compatible reasoning model broke 3 assumptions before I got one Anthropic SDK call working. Exact errors and one-line fi
---
title: 3 Assumptions That Broke Before I Got gpt-oss-120b Working Through the Anthropic SDK
published: true
tags: python, api, llm, anthropic
description: A free-tier, OpenAI-compatible reasoning model broke 3 assumptions before I got one Anthropic SDK call working. Exact errors and one-line fi
---
I signed up for a free-tier LLM API, hit a credit-card prompt before I'd made a single call, and assumed it meant I was about to get billed. I was wrong about that one. I was not wrong that the SDK code I wrote next would break twice before I got a real response back.
**TL;DR: Sakura AI Engine's free tier (3,000 chat completions/month, hosting OpenAI's open-weight `gpt-oss-120b`) broke 3 assumptions in a row: that a credit-card prompt on a free plan means billing, that Anthropic's Python SDK authenticates the same way against every compatible endpoint, and that `content[0]` in a response is always the text you asked for. Only the last two are real bugs. Both have a one-line fix once you know they exist.**
Sakura Internet, a Japanese cloud provider, opened a free tier for an API called "AI Engine": 3,000 chat completions and 50 audio-related requests per month, hosting `gpt-oss-120b` (OpenAI's open-weight model) behind both an OpenAI-compatible endpoint and an Anthropic-Messages-API-compatible endpoint. Sign-up asked for 5 things in order: a member ID, a project, a phone number verified by SMS, a credit card, and finally an account token in the form `<UUID>:<secret>`, shown exactly once.
The credit card step made me stop. A "free" plan asking for a card reads like a billing trap. It isn't, in this case — the free "foundation model" plan only rate-limits you past 3,000 requests/month, and a separate pay-as-you-go plan is the only one that meters and bills overage. The two plans don't auto-convert into each other; the card is identity verification, not a billing trigger. That part turned out to be a non-issue. What actually blocked me was the code.
The OpenAI-compatible endpoint worked on the first try:
from openai import OpenAI
client = OpenAI(
api_key="<UUID>:<secret>",
base_url="https://api.ai.sakura.ad.jp/v1",
)
resp = client.chat.completions.create(
model="gpt-oss-120b",
messages=[{"role": "user