← Blog

Claude API for Internal Company Tools: Setup Guide

2026-10-25 · 5 min read · SubToAPI Team

Claude API for Internal Company Tools

If you're building internal tools — an HR assistant, a support ticket summarizer, a sales call analyzer, an internal knowledge base chatbot — the Claude API is a strong choice because it handles long context, tool use, and structured output reliably. The practical question isn't "can Claude do this," it's "how do I wire it into a company tool without creating a security and billing mess for my team."

This article covers the actual setup: getting API access, managing keys across multiple internal projects, controlling who can use what, and keeping costs visible as usage grows from one prototype to five internal tools used by forty employees.

What "internal tool" usually means in practice

Internal tools built on the Claude API tend to fall into a few categories:

Each of these needs the same basic infrastructure: an API key, a way to send requests, and some way to track who's using it and how much it costs. The complexity isn't the Claude API call itself — it's everything around it.

Step 1: Get API access

You need an Anthropic API key (or a provider that issues Claude-backed keys) tied to a billing account. For a single internal tool built by one developer, this is a five-minute setup. Problems start when:

A raw provider API key doesn't give you per-tool breakdowns or seat-based access out of the box — you have to build that layer yourself, or use a service that already has it.

Step 2: Make the first call

Whatever platform you use, the core request pattern is the same — send a model name, a system prompt, and messages, get a response back.

curl https://api.subtoapi.app/v1/messages \
  -H "Authorization: Bearer $SUBTOAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-3-5-sonnet",
    "max_tokens": 500,
    "system": "You are an internal HR assistant. Answer only from company policy documents provided.",
    "messages": [
      {"role": "user", "content": "How many PTO days carry over to next year?"}
    ]
  }'

For internal tools, the system prompt is where most of the real work happens — scoping Claude to company-specific context, tone, and boundaries (e.g., "don't answer questions outside HR policy, escalate to a human instead").

If the tool needs to look up real data instead of guessing, tool use lets Claude call an internal API before answering — see /docs/tools for the request format.

Step 3: Separate keys per internal tool

This is the step most teams skip early and regret later. If your HR bot, your support summarizer, and your sales dashboard all share one API key, you lose the ability to answer basic questions: Which tool is driving the cost increase? Which one should we rate-limit if usage spikes? Which key do we rotate if a tool's codebase gets compromised?

The fix is issuing a distinct application key per internal tool, even if they're all hitting the same underlying Claude access. SubToAPI generates application keys in the sub_live_... format specifically for this — each internal tool gets its own key, its own usage metadata, and its own entry in the dashboard, while everything still runs on your team's shared Claude access. Setup takes about the same time as making a single raw API key: see /docs/quickstart.

// support-summarizer-service.js
const response = await fetch("https://api.subtoapi.app/v1/messages", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${process.env.SUPPORT_TOOL_KEY}`,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "claude-3-5-sonnet",
    max_tokens: 400,
    messages: [{ role: "user", content: ticketText }]
  })
});

Each internal tool gets its own environment variable and its own key, so a compromised or misbehaving tool can be revoked individually without touching the others.

Step 4: Add team seats instead of ad-hoc key sharing

As more people build or maintain internal tools, you need a way to add and remove people without rewriting code or sharing a single key over Slack. Plan-based seat access (Solo €9, Team €19/seat, Scale €49/seat on SubToAPI, see /pricing) solves this at the account level — new developers get added as seats, former employees get removed, and nobody needs to touch the underlying API keys.

Step 5: Streaming for interactive tools

If the internal tool is chat-based — a bot employees type into and expect a live response from — streaming avoids the "is this frozen?" problem. Claude responses come back token-by-token instead of all at once.

curl https://api.subtoapi.app/v1/messages \
  -H "Authorization: Bearer $SUBTOAPI_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "claude-3-5-sonnet",
    "max_tokens": 500,
    "stream": true,
    "messages": [{"role": "user", "content": "Summarize this ticket thread."}]
  }'

Details on handling the stream in your frontend or service are in /docs/streaming.

Step 6: Watch costs per tool, not just total spend

Once you have three or four internal tools live, the question changes from "what's our Claude bill" to "which tool is worth its cost." Separate keys per tool make this answerable — you can see exactly how many requests and tokens each internal tool consumes, which lets you decide whether to optimize a prompt, cap usage, or just confirm it's working as expected.

Getting started

For a single internal tool, start simple: one key, a clear system prompt, and basic logging of requests. As soon as a second team wants their own tool, split keys immediately rather than retrofitting it later. If you want seat-based access and per-tool keys without building that infrastructure yourself, /signup gets you a working setup in a few minutes, and /docs/messages covers the full request reference.

Questions

Do I need a separate Claude API key for every internal tool? Not technically, but it's strongly recommended once you have more than one tool. Separate keys let you track cost and usage per tool and revoke access individually without affecting others.

Can non-developers use an internal tool built on the Claude API? Yes — the API itself is backend infrastructure. Non-developers interact through whatever frontend you build (Slack bot, internal dashboard, web form), not the API directly.

How do I control who can access the underlying Claude account? Use seat-based access management rather than sharing one key across the team. This lets you add or remove individual people without changing any application code.

Turn your Claude access into an HTTPS API

SubToAPI gives you application API keys, streaming, tool use and usage insights on top of your existing Claude access — set up in minutes.

Start free  Read the quickstart →