Keep your OpenAI client
Chat completions with streaming and tool calls, embeddings and model listing follow the OpenAI API. Change the base URL and the key, and existing code runs.
Goshen runs open-weight models on GPUs in Quebec, Canada, behind an OpenAI-compatible API. Fine-tune them on your own data. We keep token counts for invoicing, never your prompts.
$ curl https://api.vpcloud.ca/v1/chat/completions \ -H "Authorization: Bearer $GOSHEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model": "qwen3-14b", "stream": true, "messages": [{"role": "user", "content": "Summarize this ticket in one line."}]}' data: {"choices":[{"delta":{"content":"Customer"}}]} data: {"choices":[{"delta":{"content":" was charged twice"}}]} data: {"choices":[{"delta":{"content":" and wants a refund."}}]} data: [DONE]
Chat completions with streaming and tool calls, embeddings and model listing follow the OpenAI API. Change the base URL and the key, and existing code runs.
Qwen3-14B for chat and Qwen3-Embedding-0.6B for embeddings, both under the Apache 2.0 licence, served with vLLM on NVIDIA A100 80 GB GPUs.
Prompts and completions pass through memory on the way to the model and back. They are never written to the database, logs or disk. An automated test sends marked text through every API path and checks the database and logs for it.
The API, the database, the GPUs and the encrypted backups run on servers we rent from Hyperstack in its CANADA-1 region in Quebec, Canada. Hyperstack is run by NexGen Cloud, a company headquartered in the United Kingdom. Your data stays on its servers in Quebec. No US analytics, error tracking or CDN sits in the path of your requests.
Upload a JSONL file of chat examples and start a LoRA job from the API or the dashboard. Progress and loss appear as it trains, and the result is a model you call by name. Training runs on a different GPU from the one that serves requests.
Each training file is encrypted with its own key. Deleting it removes the file and the key. Deleting a model unloads it and removes its adapter from the GPU server. Encrypted backups age out after 14 days.
Every account starts with an organization of its own and a Default project. Add projects, and invite people with single-use links that expire after 7 days. Goshen sends no email, so you pass the link on yourself. Each person has one role across the organization: viewer, member, admin or owner.
A key works in its own project, and another project's resources answer 404, even in the same organization. Limit a key to some services or make it read-only. A key acts with its creator's current role and stops working when they leave.
Each project has quotas, checked before anything is created, and each key has rate limits reported in x-ratelimit headers. Write to us to raise either.
The dashboard shows usage per service and inference tokens per day. The audit log records who created keys, uploaded or deleted files, started jobs, deleted models and changed members, with no request content. Read it in the dashboard or with GET /v1/audit_log.
What Goshen stores when you use it, and for how long. The privacy page has the rest, including account data.
Every route takes an API key as a Bearer token. Full reference in the docs.
Planned, not built. Nothing here is available today, and none of it has a date.
Object storage with buckets and access keys per project, block volumes, and managed Postgres databases.
Deploy apps from a container image or a git repository, with replicas, environment variables, secrets and custom domains with TLS.
Batch inference, dedicated endpoints for a single project, GPU jobs, notebooks and more open-weight models.
APIs for DNS zones and records, secrets and encryption keys, plus service accounts and audit log exports.
No card, no self-serve billing in this first version.
Contact us for pricing at michael@goshen.fyi.
Usage is metered per token and invoiced monthly. New accounts are switched on once invoicing details are in place.
Get an API key