Developers

Call Claude, GPT and Gemini from PHP

PHP can call Somnus with the built-in cURL extension and json_encode — useful for WordPress plugins and Laravel apps.

Install

bash
(no install — ext-curl)

Basic request

php
<?php
$ch = curl_init("https://gateway-production-c837.up.railway.app/v1/chat/completions");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 60,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("SOMNUS_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => '{
    "model": "claude-sonnet-5",
    "messages": [
      {"role": "user", "content": "Explain recursion in one sentence."}
    ]
  }',
]);
$data = json_decode(curl_exec($ch), true);
echo $data["choices"][0]["message"]["content"];

Streaming

php
<?php
$ch = curl_init("https://gateway-production-c837.up.railway.app/v1/chat/completions");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 60,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("SOMNUS_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => '{
    "model": "claude-sonnet-5",
    "messages": [
      {"role": "system", "content": "You are a friendly, concise assistant."},
      {"role": "user", "content": "Write a haiku about the sea."}
    ],
    "stream": true
  }',
]);
$data = json_decode(curl_exec($ch), true);
echo $data["choices"][0]["message"]["content"];

JSON output

php
<?php
$ch = curl_init("https://gateway-production-c837.up.railway.app/v1/chat/completions");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_TIMEOUT => 60,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("SOMNUS_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => '{
    "model": "claude-sonnet-5",
    "messages": [
      {"role": "system", "content": "Reply only with JSON."},
      {"role": "user", "content": "Return {\"city\": ..., \"country\": ...} for the Eiffel Tower."}
    ],
    "response_format": {"type": "json_object"}
  }',
]);
$data = json_decode(curl_exec($ch), true);
echo $data["choices"][0]["message"]["content"];

PHP notes

  • Store the key in your .env file, not in code.
  • Set CURLOPT_TIMEOUT so slow replies don't hang requests.
  • In Laravel, the Http facade works the same way.

Questions

Which models can I use?

Any of the 50+ models on Somnus — change the model string. The examples use claude-sonnet-5.

Where do I get a key?

Create an account, and your key appears in the dashboard with $5 of free credit.

Run this code with free credit

Create an account and get $5 of free API credit — enough to try every example on this page.

Get $5 free credit

Related

Browse more: Alternatives · Compare · Use cases · Developers · Solutions · Tools

WindowsStart with $5 free