Get started
Updated
Quickstart
Create an API key, send your first request to the helping.io API, and read the reply. Five minutes, any language.
Before you begin
Section titled “Before you begin”- A payment card. Starting your plan opens a checkout page that asks for one.
- The owner role in your organization. Only the organization’s owner can start the plan. Signing up creates an organization with you as its owner; if you were invited to someone else’s organization, ask its owner to start the plan.
Make your first request
Section titled “Make your first request”-
Create an account and start your plan.
Sign up at app.helping.io, then open the link in the verification email. The app then asks you to start your plan. Your first plan begins with a 14-day free trial: you enter a card on Stripe’s checkout page, and the plan is charged when the trial ends unless you cancel first. Pricing is on helping.io.
-
Add credits.
Requests are paid for in credits, and a request with no credits behind it is refused before it runs. Leave Add credits now checked when you start your plan to buy them at the same checkout, or add them later from Settings → Billing. See Credits and billing.
-
Create an API key.
Open Settings → API Keys in the app and create a key. Owners and admins of the organization can create keys. The full secret, which starts with
sk_, is shown once and cannot be recovered afterwards. Store it somewhere safe; if you lose it, rotate the key. See API keys.Terminal window export HELPINGIO_API_KEY="sk_…" -
Send a request.
Point any Responses API client at
https://api.helping.io/v1.Terminal window curl https://api.helping.io/v1/responses \-H "Authorization: Bearer $HELPINGIO_API_KEY" \-H "Content-Type: application/json" \-d '{"model": "anthropic/claude-sonnet-5","input": "Say hello in exactly 3 words."}'Terminal window npm install openaiimport OpenAI from "openai";const client = new OpenAI({baseURL: "https://api.helping.io/v1",apiKey: process.env.HELPINGIO_API_KEY,});const response = await client.responses.create({model: "anthropic/claude-sonnet-5",input: "Say hello in exactly 3 words.",});console.log(response.id);console.log(response.output_text);Terminal window pip install openaiimport osfrom openai import OpenAIclient = OpenAI(base_url="https://api.helping.io/v1",api_key=os.environ["HELPINGIO_API_KEY"],)response = client.responses.create(model="anthropic/claude-sonnet-5",input="Say hello in exactly 3 words.",)print(response.id)print(response.output_text)If the request is refused, see If your first request fails.
-
Read the reply.
The response object’s
outputholds the assistant’s message, andusageholds the tokens you were charged for. The SDKs also give you the reply’s text on its own asoutput_text. The model writes a new reply each time, so your text will differ from the one below.{"background": false,"completed_at": 1767225600,"conversation": null,"created_at": 1767225600,"error": null,"frequency_penalty": 0.0,"id": "resp_ZXhhbXBsZS9yZXNwL2ZpcnN0LXR1cm4AAAAAAAAAAAAAAAAAAAAAAA","incomplete_details": null,"instructions": null,"max_output_tokens": null,"max_tool_calls": null,"metadata": null,"model": "anthropic/claude-sonnet-5","object": "response","output": [{"content": [{"annotations": [],"logprobs": [],"text": "Hello there, friend.","type": "output_text"}],"id": "msg_00000000000000000000000000000001","role": "assistant","status": "completed","type": "message"}],"parallel_tool_calls": true,"presence_penalty": 0.0,"previous_response_id": null,"prompt_cache_key": null,"reasoning": null,"safety_identifier": null,"service_tier": "default","status": "completed","store": true,"temperature": 1.0,"text": {"format": {"type": "text"}},"tool_choice": "auto","tools": [],"top_logprobs": 0,"top_p": 1.0,"truncation": "disabled","usage": {"input_tokens": 100,"input_tokens_details": {"cache_write_tokens": 0,"cached_tokens": 0},"output_tokens": 20,"output_tokens_details": {"reasoning_tokens": 0},"total_tokens": 120}} -
Continue the conversation.
Send the next turn with
previous_response_idset to theidof the response you just got. You send only the new turn: the API keeps the conversation history.Set
RESPONSE_IDto theidfrom the reply in step 4. It starts withresp_.Terminal window curl https://api.helping.io/v1/responses \-H "Authorization: Bearer $HELPINGIO_API_KEY" \-H "Content-Type: application/json" \-d '{"previous_response_id": "'"$RESPONSE_ID"'","input": "And again."}'Add this to the end of the script from step 4:
const next = await client.responses.create({previous_response_id: response.id,input: "And again.",});console.log(next.output_text);Add this to the end of the script from step 4:
next_response = client.responses.create(previous_response_id=response.id,input="And again.",)print(next_response.output_text)
If your first request fails
Section titled “If your first request fails”These are the refusals a new account most often meets. None of them creates or charges anything, and retrying without the fix gets the same answer.
| Status | code | Meaning |
|---|---|---|
401 | invalid_api_key | The Authorization header is missing, malformed, or names a key that is not usable; check the key. |
402 | payment_method_required | The organization has no payment method on file, so no request can be served; add one in the billing settings. |
429 | insufficient_quota | The organization has no active plan, or no credit balance to pay for the request; the message says which. |
invalid_api_key: check thatHELPINGIO_API_KEYholds the whole secret you copied when you created the key, and that the key is not revoked. A lost secret cannot be shown again; rotate the key or create a new one.payment_method_required: the organization’s owner adds a card in Settings → Billing: Start a plan if there is no plan yet, otherwise Manage billing.insufficient_quota: the message says whether the organization has no active plan or no credit balance. The owner starts the plan, or buys credits, in Settings → Billing.
Every other code is on Errors.
Where next
Section titled “Where next”- Create a response covers every request field and how input becomes a turn.
- Streaming for tokens as they arrive.
- Function calling to give the model tools your code executes.
- Errors and Rate limits, before you ship.