> ## Documentation Index
> Fetch the complete documentation index at: https://docs.slng.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# {Tech: Europe} London AI Hackathon

> Build voice AI projects with SLNG at the {Tech: Europe} London AI Hackathon — get free credits, sample code, and on-site help from the SLNG team.

Welcome to the [\{Tech: Europe} London AI Hackathon](https://luma.com/londonhack)! We brought voice AI APIs and Lego boxes. You bring the ideas.

The SLNG team is here all weekend. Come find us.

<CardGroup cols={2}>
  <Frame>
    <img src="https://mintcdn.com/slng/yKR_v7GVtDCxdQJf/images/hackathon/isma.jpg?fit=max&auto=format&n=yKR_v7GVtDCxdQJf&q=85&s=19c32b13986b02cbb82ca4df10908864" alt="Ismael Ordaz, SLNG.ai founder" style={{ borderRadius: '50%', width: '120px' }} width="800" height="800" data-path="images/hackathon/isma.jpg" />
  </Frame>

  <Frame>
    <img src="https://mintcdn.com/slng/5RFs26y3zdh5eBhK/images/hackathon/nico.jpg?fit=max&auto=format&n=5RFs26y3zdh5eBhK&q=85&s=8330488fbd01a92eef1e0d9903752d01" alt="Nicolas Grenié, SLNG.ai DevRel" style={{ borderRadius: '50%', width: '120px' }} width="400" height="400" data-path="images/hackathon/nico.jpg" />
  </Frame>
</CardGroup>

Look for [**Ismael Ordaz**](https://www.linkedin.com/in/ismaelordaz/) (founder) and [**Nicolas Grenié**](https://www.linkedin.com/in/nicolasgrenie/) (DevRel). We're happy to help you build.

## What is SLNG?

SLNG is one platform for real-time speech. Text-to-Speech, Speech-to-Text, and Voice Agents, all under 200ms.

We aggregate providers like Deepgram, Rime, Cartesia, and Kugel behind a single endpoint. You switch models by changing the URL, not your code.

Underneath, an execution layer caches and routes each turn to cut latency and cost. See [the execution layer](/execution-layer).

<CardGroup cols={3}>
  <Card title="Text-to-Speech" icon="audio-lines" href="/examples/tts-http">
    Text in, audio out. Multiple voices and languages.
  </Card>

  <Card title="Speech-to-Text" icon="ear" href="/examples/stt-http">
    Transcribe audio files or live streams.
  </Card>

  <Card title="Voice Agents" icon="bot" href="/voice-agents">
    Full voice agents that make and receive phone calls.
  </Card>
</CardGroup>

## Fastest start: let your coding agent build it

Using Claude Code or another coding agent this weekend? Install the SLNG skills pack and your agent can set up your key, synthesize speech, transcribe audio, and build voice agents on its own.

```bash theme={null}
npx skills add slng-ai/skills
```

Then ask your agent to build. Prefer to wire it up yourself? Do it the old way below.

<Card title="SLNG agent skills" icon="sparkles" href="/sdks/skills">
  See what each skill teaches your agent to do.
</Card>

## Building in n8n?

We just shipped an n8n community node for this hackathon. It drops SLNG into any workflow: generate speech, transcribe audio, and dispatch outbound voice-agent calls. A trigger node also lets a voice agent call your workflow as a tool mid-call.

Install it from your n8n instance under **Settings → Community Nodes** using the package name `n8n-nodes-slng`.

See the [n8n node page](/sdks/n8n) for the actions and trigger, or the [GitHub repo](https://github.com/slng-ai/n8n-nodes-slng) for workflow templates.

## The old way, write code

<Steps>
  <Step title="Create an account">
    Sign up at [app.slng.ai](https://app.slng.ai). It takes less than a minute.
  </Step>

  <Step title="Generate an SLNG key">
    Go to the [API Keys](https://app.slng.ai/api-keys) page in your dashboard and create a new key. Copy it somewhere safe. You won't be able to see it again.

    Every `SLNG_API_KEY` placeholder in the snippets below is the key you just copied.
  </Step>

  <Step title="Test it">
    Run this in your terminal to make sure everything works:

    ```bash theme={null}
    curl https://api.slng.ai/v1/bridges/unmute/tts/slng/deepgram/aura:2-en \
      -H "Authorization: Bearer SLNG_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"text": "Hello from London!"}' \
      --output hello.wav
    ```

    You should get a `hello.wav` audio file. If you hear "Hello from London!", you're all set.
  </Step>
</Steps>

## Start building

<Tabs>
  <Tab title="Text-to-Speech">
    Send text, get audio back.

    <CodeGroup>
      ```bash cURL theme={null}
      # Change this to swap models (e.g. slng/rime/arcana:3-en, slng/rime/arcana:3-es)
      MODEL="slng/deepgram/aura:2-en"

      curl "https://api.slng.ai/v1/bridges/unmute/tts/${MODEL}" \
        -H "Authorization: Bearer SLNG_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "text": "Hello from London!"
        }' \
        --output hello.wav
      ```

      ```javascript JavaScript theme={null}
      // Change this to swap models (e.g. "slng/rime/arcana:3-en", "slng/rime/arcana:3-es")
      const model = "slng/deepgram/aura:2-en";

      const response = await fetch(
        `https://api.slng.ai/v1/bridges/unmute/tts/${model}`,
        {
          method: "POST",
          headers: {
            Authorization: "Bearer SLNG_API_KEY",
            "Content-Type": "application/json",
          },
          body: JSON.stringify({
            text: "Hello from London!",
          }),
        },
      );

      const audioData = await response.arrayBuffer();
      // Play or save audioData
      ```

      ```python Python theme={null}
      import requests

      # Change this to swap models (e.g. "slng/rime/arcana:3-en", "slng/rime/arcana:3-es")
      model = "slng/deepgram/aura:2-en"

      response = requests.post(
          f"https://api.slng.ai/v1/bridges/unmute/tts/{model}",
          headers={
              "Authorization": "Bearer SLNG_API_KEY",
              "Content-Type": "application/json",
          },
          json={"text": "Hello from London!"},
      )

      with open("hello.wav", "wb") as f:
          f.write(response.content)
      ```
    </CodeGroup>

    Pick a different voice by adding `"voice": "aura-2-theia-en"` to the request body. See [all available voices](/voices/deepgram-aura).

    ### Other languages

    Switch the model in the URL. The rest of the code is identical. Spanish via Rime Arcana v3:

    ```bash theme={null}
    curl https://api.slng.ai/v1/bridges/unmute/tts/slng/rime/arcana:3-es \
      -H "Authorization: Bearer SLNG_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"text": "¡Hola desde Londres!"}' \
      --output hola.wav
    ```

    * **Spanish, Hindi, English** (HTTP): `slng/rime/arcana:3-es`, `slng/rime/arcana:3-hi`, `slng/rime/arcana:3-en`
    * **French** (WebSocket only): [Cartesia Sonic 3](/api-reference/tts/cartesia-sonic-3/cartesia-sonic-3-ws) or [Kugel](/voices/kugel)

    See the [Models page](/models) for the full language matrix.
  </Tab>

  <Tab title="Speech-to-Text">
    Upload an audio file and get a transcription back.

    <CodeGroup>
      ```bash cURL theme={null}
      # Change this to swap models (e.g. slng/deepgram/nova:3-multi for multilingual, soniox/soniox:latest)
      MODEL="slng/deepgram/nova:3-en"

      curl "https://api.slng.ai/v1/bridges/unmute/stt/${MODEL}" \
        -H "Authorization: Bearer SLNG_API_KEY" \
        -F "audio=@recording.wav"
      ```

      ```javascript JavaScript theme={null}
      // Change this to swap models (e.g. "slng/deepgram/nova:3-multi" for multilingual, "soniox/soniox:latest")
      const model = "slng/deepgram/nova:3-en";

      const formData = new FormData();
      formData.append("audio", audioFile);

      const response = await fetch(
        `https://api.slng.ai/v1/bridges/unmute/stt/${model}`,
        {
          method: "POST",
          headers: {
            Authorization: "Bearer SLNG_API_KEY",
          },
          body: formData,
        },
      );

      const result = await response.json();
      console.log(result.results.channels[0].alternatives[0].transcript);
      ```

      ```python Python theme={null}
      import requests

      # Change this to swap models (e.g. "slng/deepgram/nova:3-multi" for multilingual, "soniox/soniox:latest")
      model = "slng/deepgram/nova:3-en"

      with open("recording.wav", "rb") as audio_file:
          response = requests.post(
              f"https://api.slng.ai/v1/bridges/unmute/stt/{model}",
              headers={"Authorization": "Bearer SLNG_API_KEY"},
              files={"audio": audio_file},
          )

      result = response.json()
      print(result["results"]["channels"][0]["alternatives"][0]["transcript"])
      ```
    </CodeGroup>

    Transcribing French, Spanish, or mixed-language audio? Switch the model to `slng/deepgram/nova:3-multi`. Same code, auto-detects across 10+ languages.

    Need real-time transcription? Check out the [WebSocket STT examples](/examples/stt-websocket).
  </Tab>

  <Tab title="Voice Agents">
    Voice Agents pair an LLM with STT and TTS so you get a full conversational agent that can take and make phone calls or run in a browser. Create one through the [Agent Studio UI](https://app.slng.ai/agent-studio/new) or via the API.

    You pick the models, write a system prompt, and optionally add tools (webhooks to your backend, hangup, human transfer, date/time lookup). The agent handles the rest.

    <CodeGroup>
      ```bash cURL theme={null}
      curl -X POST https://api.agents.slng.ai/v1/agents \
        -H "Authorization: Bearer SLNG_API_KEY" \
        -H "Content-Type: application/json" \
        -d '{
          "name": "Hackathon Demo Agent",
          "system_prompt": "You are a helpful assistant at a hackathon. Keep responses short, one or two sentences. Be friendly and direct.",
          "greeting": "Hey! I am your hackathon assistant. What can I help you with?",
          "language": "en",
          "models": {
            "stt": "slng/deepgram/nova:3-en",
            "llm": "groq/openai/gpt-oss-120b",
            "tts": "slng/deepgram/aura:2-en",
            "tts_voice": "aura-2-thalia-en"
          },
          "tools": [
            {
              "type": "template",
              "id": "hangup-tool",
              "template": "hangup",
              "execution_policy": {
                "pre_action_message": { "enabled": true, "text": "Good luck with your project!" }
              }
            }
          ],
          "region": "eu-central",
          "slng_api_key": "SLNG_API_KEY"
        }'
      ```

      ```javascript JavaScript theme={null}
      const resp = await fetch("https://api.agents.slng.ai/v1/agents", {
        method: "POST",
        headers: {
          Authorization: "Bearer SLNG_API_KEY",
          "Content-Type": "application/json",
        },
        body: JSON.stringify({
          name: "Hackathon Demo Agent",
          system_prompt:
            "You are a helpful assistant at a hackathon. Keep responses short, one or two sentences. Be friendly and direct.",
          greeting: "Hey! I am your hackathon assistant. What can I help you with?",
          language: "en",
          region: "eu-central",
          models: {
            stt: "slng/deepgram/nova:3-en",
            llm: "groq/openai/gpt-oss-120b",
            tts: "slng/deepgram/aura:2-en",
            tts_voice: "aura-2-thalia-en",
          },
          tools: [
            {
              type: "template",
              id: "hangup-tool",
              template: "hangup",
              execution_policy: {
                pre_action_message: { enabled: true, text: "Good luck with your project!" },
              },
            },
          ],
          slng_api_key: "SLNG_API_KEY",
        }),
      });

      const agent = await resp.json();
      console.log("Agent created:", agent.id);

      // Test it in the browser with a web session
      const session = await fetch(
        `https://api.agents.slng.ai/v1/agents/${agent.id}/web-sessions`,
        {
          method: "POST",
          headers: {
            Authorization: "Bearer SLNG_API_KEY",
            "Content-Type": "application/json",
          },
          body: JSON.stringify({}),
        },
      ).then((r) => r.json());

      // Use the returned browser session credentials in your frontend client
      ```
    </CodeGroup>

    You can also skip the API and build your agent visually in [Agent Studio](https://app.slng.ai/agent-studio/new), then test it right in the browser.

    Want to go further? Add [webhook tools](/examples/agents-config#webhook-tools) to connect your agent to external APIs, or use [template variables](/examples/agents-config#template-variables) to make prompts dynamic. See the full [Voice Agents guide](/voice-agents).
  </Tab>

  <Tab title="Unified API">
    All the TTS and STT examples above go through the Unified API. One endpoint covers every provider, and you swap a model by changing the URL. Handy when you want to try multiple providers without writing a different integration for each one.

    ```
    https://api.slng.ai/v1/bridges/unmute/{stt|tts}/{provider}/{model}:{variant}
    ```

    The `bridges/unmute/` path segment is the legacy route name. Same endpoint, same Unified API. Works over both HTTP and WebSocket on the same URL.

    Need fine-grained control over a specific provider's features? [Call each model directly](/protocols).

    See the full [Unified API documentation](/execution-layer/unified-api).
  </Tab>
</Tabs>

## Add it to your existing agent

Already built on LiveKit or Pipecat? Swap in SLNG by changing one model string. Same pipeline, any provider behind one key.

<CardGroup cols={2}>
  <Card title="LiveKit plugin" icon="https://mintcdn.com/slng/LujG4G8gXFrAV3XP/images/providers/livekit.svg?fit=max&auto=format&n=LujG4G8gXFrAV3XP&q=85&s=5ae1614bbad360d24b36276e04bbc0ea" href="/agents/livekit-plugin" width="256" height="256" data-path="images/providers/livekit.svg">
    `livekit-plugins-slng` adds STT and TTS adapters for LiveKit Agents.
  </Card>

  <Card title="Pipecat plugin" icon="https://mintcdn.com/slng/HUXme6ATYhzzt7mD/images/providers/pipecat.svg?fit=max&auto=format&n=HUXme6ATYhzzt7mD&q=85&s=f0ff456ad8aa57cfedc6291d915bd330" href="/agents/pipecat-plugin" width="80" height="80" data-path="images/providers/pipecat.svg">
    `pipecat-slng` routes your Pipecat pipeline through the SLNG gateway.
  </Card>
</CardGroup>

On a custom stack? Point it at the [drop-in gateway](/integrations/gateway) and keep your code.

## Try it live

Not ready to write code? Try the demos in your browser. Drop in your SLNG key and go.

<CardGroup cols={2}>
  <Card title="Live TTS demo" icon="play" href="https://examples-gbcy.onrender.com">
    Type something and hear it back. Try different models and voices.
  </Card>

  <Card title="Live STT demo" icon="mic" href="https://slng-stt-demo.onrender.com">
    Speak into your mic and watch the transcription stream in.
  </Card>
</CardGroup>

Source code: [github.com/slng-ai/examples](https://github.com/slng-ai/examples)

## What we want you to build

Build whatever you want with voice and speech AI. A few starting points:

<CardGroup cols={2}>
  <Card title="Voice assistants" icon="headset">
    An agent that books appointments, handles support, tutors students. Pick a task and nail it.
  </Card>

  <Card title="Accessibility tools" icon="eye">
    Speech interfaces, screen readers, audio descriptions. Make something more people can use.
  </Card>

  <Card title="Creative audio apps" icon="music">
    Podcasts, storytelling, audio games, voice-driven art. Surprise us.
  </Card>

  <Card title="Real-time transcription" icon="captions">
    Live captioning, meeting notes, multilingual translation. Turn speech into something useful.
  </Card>
</CardGroup>

## Prizes

Best overall project wins a Lego set. Demo what you built and impress the judges.

<CardGroup cols={3}>
  <Card>
    <Frame>
      <img src="https://mintcdn.com/slng/E_F8ktbPGAb6Y0BY/images/hackathon/lego_1.png?fit=max&auto=format&n=E_F8ktbPGAb6Y0BY&q=85&s=5c06718fe048f9209be0699780d0c20f" alt="Lego Piranha plant set" width="926" height="1600" data-path="images/hackathon/lego_1.png" />
    </Frame>
  </Card>

  <Card>
    <Frame>
      <img src="https://mintcdn.com/slng/E_F8ktbPGAb6Y0BY/images/hackathon/lego_2.png?fit=max&auto=format&n=E_F8ktbPGAb6Y0BY&q=85&s=d8d4b23191cbb7de37715413e4613304" alt="Lego Gameboy" width="873" height="873" data-path="images/hackathon/lego_2.png" />
    </Frame>
  </Card>

  <Card>
    <Frame>
      <img src="https://mintcdn.com/slng/l5MAQJSaqdsQLSjj/images/hackathon/lego_3.png?fit=max&auto=format&n=l5MAQJSaqdsQLSjj&q=85&s=f852d08f811c64b612b36aac2946e0f3" alt="Lego Pokémon Eevee set" width="1307" height="1600" data-path="images/hackathon/lego_3.png" />
    </Frame>
  </Card>
</CardGroup>

## FAQ

<AccordionGroup>
  <Accordion title="How much API credit do I get?">
    €4 in free credits when you sign up. That covers roughly 80 hours of audio generation or transcription, so you won't run out this weekend.
  </Accordion>

  <Accordion title="What if I run out of credits?">
    Come find us at the event. We'll top you up.
  </Accordion>

  <Accordion title="Do my credits expire?">
    Nope. Keep building after the hackathon, polish your project, start a new one. They're yours.
  </Accordion>

  <Accordion title="Which models should I use?">
    For most projects, start with:

    * **English TTS**: `slng/deepgram/aura:2-en` — low latency
    * **English STT**: `slng/deepgram/nova:3-en` — high accuracy
    * **Spanish or Hindi TTS**: `slng/rime/arcana:3-es`, `slng/rime/arcana:3-hi`
    * **French TTS** (WebSocket only): [Cartesia Sonic 3](/api-reference/tts/cartesia-sonic-3/cartesia-sonic-3-ws) or [Kugel](/voices/kugel)
    * **Multilingual STT**: `slng/deepgram/nova:3-multi` — auto-detects 10+ languages

    Full catalog on the [Models page](/models).
  </Accordion>

  <Accordion title="Can I use SLNG with my favorite framework?">
    Yes. It's standard HTTP and WebSocket, so it works with anything. The Unified API follows the same URL pattern for every provider, so you can drop SLNG into an existing voice pipeline without rewriting your integration.
  </Accordion>

  <Accordion title="Do I need a paid account?">
    No. Sign up at [app.slng.ai](https://app.slng.ai) and you're good to go. The free tier covers the whole hackathon.
  </Accordion>

  <Accordion title="Where can I get help?">
    Find us at the event, we're around all weekend. You can also check the [full docs](/).
  </Accordion>
</AccordionGroup>
