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

# Schnellstart: Senden Sie Ihre erste SMS, Anruf oder E-Mail

> Senden Sie Ihre erste SMS, Sprachanruf oder E-Mail über Orbit in unter fünf Minuten mit der API oder einem SDK, mit Copy-Paste-Snippets in jeder Sprache.

# Schnellstart

## Schritt 1: Konto erstellen

Registrieren Sie sich unter [orbit.devotel.io/signup](https://orbit.devotel.io/signup). Das Dashboard leitet Sie automatisch zu Ihrer regionsbezogenen URL weiter. Keine Kreditkarte erforderlich — die Verifizierung Ihrer E-Mail ist alles, was nötig ist, um die Sandbox im nächsten Schritt freizuschalten.

## Schritt 2: Sandbox-API-Schlüssel erhalten

Navigieren Sie zu **Settings > API Keys**, erstellen Sie einen neuen Schlüssel und setzen Sie dessen Modus auf **Test**. Sandbox-Schlüssel haben das Präfix `dv_test_sk_`, funktionieren sofort ohne KYC- oder Genehmigungsschritt und kosten **0 \$** — jeder Sandbox-Versand wird intern simuliert und erreicht nie einen echten Netzbetreiber oder berührt Stripe. Bewahren Sie den Schlüssel nur serverseitig auf.

(Live-Schlüssel haben das Präfix `dv_live_sk_` und berechnen echten Traffic — siehe [Schritt 5: Live gehen](#step-5-go-live), sobald Sie für Produktionsnummern bereit sind.)

## Schritt 3: Ihre erste Nachricht senden (Sandbox)

Die gleiche Endpunkt-Form `/messages/<channel>` funktioniert über SMS, WhatsApp, E-Mail, RCS, Viber und die anderen Messaging-Kanäle — wählen Sie den Kanal, den Sie zuerst integrieren. Sprache ist separat: Führen Sie Anrufe mit `POST /voice/calls` aus (siehe das Voice-Beispiel unten). Verwenden Sie unten Ihren `dv_test_sk_`-Schlüssel aus Schritt 2 als `$ORBIT_API_KEY` — der Versand ist kostenlos und sofort, ohne Risiko für Live-Traffic.

### cURL

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/messages/sms \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155552671",
    "from": "+14155551234",
    "body": "Hello from Orbit!"
  }'
```

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/messages/whatsapp \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155552671",
    "type": "template",
    "template": {
      "name": "hello_world",
      "language": { "code": "en" }
    }
  }'
```

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/messages/email \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "user@example.com",
    "from": "hello@yourdomain.com",
    "subject": "Welcome",
    "html": "<h1>Welcome to Acme</h1>"
  }'
```

### Node.js SDK

`@devotel-orbit/node` ersetzt diese drei curl-Aufrufe durch typisierte Methoden — vollständige Referenz unter [Node.js SDK](/sdks/node).

```typescript theme={null}
import { Orbit } from '@devotel-orbit/node';

const orbit = new Orbit({
  apiKey: process.env.ORBIT_API_KEY!,
});

// SMS
await orbit.messages.send({
  channel: 'sms',
  to: '+14155552671',
  body: 'Hello from Orbit!',
});

// WhatsApp template
await orbit.messages.sendWhatsApp({
  to: '+14155552671',
  type: 'template',
  template: {
    name: 'hello_world',
    language: { code: 'en' },
  },
});

// Email
await orbit.messages.sendEmail({
  to: 'user@example.com',
  from: 'hello@yourdomain.com',
  subject: 'Welcome',
  html: '<h1>Welcome to Acme</h1>',
});
```

### Python SDK

```bash theme={null}
# Not yet on PyPI — install from the workspace package:
#   pip install ./packages/sdk-python
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```python theme={null}
from orbit_sdk import OrbitClient, OrbitError

client = OrbitClient.from_env()

try:
    result = client.messages.send_sms(
        to="+14155552671",
        body="Hello from Orbit!",
    )
    print("queued:", result["data"]["id"])
except OrbitError as exc:
    print("send failed:", exc.code, exc.message)
```

<Note>
  Das Python SDK hat Kernumfang und ist unveröffentlicht — SMS-, WhatsApp- und E-Mail-Versand funktionieren heute; tiefere Bereiche (Sprachaufzeichnungen, Konferenzen, IVR, Dialer) sind absichtlich außer Umfang. Verwenden Sie dafür das Node SDK oben oder rufen Sie die REST API direkt über den niederschwelligen `client.request(method, path, ...)` Escape-Hatch auf — siehe [SDK-Umfang nach Sprache](/sdks#python-core-scope-not-full-parity).
</Note>

### Go SDK

```bash theme={null}
# Not yet on a public module proxy — go get the workspace module path:
#   go get github.com/devotel/orbit-go
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```go theme={null}
// go.mod: require github.com/devotel/orbit-go (module path, not yet on a public proxy)
package main

import (
	"context"
	"fmt"
	"os"
	"time"

	"github.com/devotel/orbit-go/orbit"
)

func main() {
	client, err := orbit.NewClient(os.Getenv("ORBIT_API_KEY"))
	if err != nil {
		panic(err)
	}

	ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
	defer cancel()

	resp, err := client.Messages().SendSMS(ctx, orbit.SendSMSInput{
		To:   "+14155552671",
		Body: "Hello from Orbit!",
	})
	if err != nil {
		panic(err)
	}
	fmt.Println("queued:", resp.Data.ID)
}
```

<Note>
  Das Go SDK hat Kernumfang und ist unveröffentlicht — `client.Messages()` + `client.Voice()` funktionieren heute; Sprachkonferenzen/IVR/Dialer/Aufzeichnungen sind außer Umfang. Verwenden Sie dafür das Node SDK oder den niederschwelligen `client.Request(ctx, method, path, ...)` Escape-Hatch — siehe [SDK-Umfang nach Sprache](/sdks#go-core-scope-not-full-parity).
</Note>

### Ruby SDK

```bash theme={null}
# Not yet on RubyGems — add the workspace path to your Gemfile:
#   gem "orbit_sdk", path: "packages/sdk-ruby"
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```ruby theme={null}
require "orbit_sdk"

client = OrbitSdk::Client.from_env
begin
  result = client.messages.send_sms(
    to: "+14155552671",
    body: "Hello from Orbit!",
  )
  puts "queued: #{result.dig("data", "id")}"
rescue OrbitSdk::OrbitError => e
  warn "send failed: #{e.code} — #{e.message}"
end
```

<Note>
  Das Ruby SDK hat Kernumfang und ist unveröffentlicht — `client.messages` + `client.voice` Versand funktionieren heute; Aufzeichnungen/Transkripte/Konferenzen/IVR/Dialer sind außer Umfang. Verwenden Sie dafür das Node SDK oder den niederschwelligen `client.request(method, path, **opts)` Escape-Hatch — siehe [SDK-Umfang nach Sprache](/sdks#ruby-core-scope-not-full-parity).
</Note>

### PHP SDK

```bash theme={null}
# Not yet on Packagist — vendor the SDK from the monorepo or call the
# REST API directly. Setup lives on the PHP SDK page:
#   https://orbit.devotel.io/sdks/php
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```php theme={null}
<?php
use Devotel\Orbit\Errors\OrbitError;
use Devotel\Orbit\OrbitClient;

try {
    $client = OrbitClient::fromEnv();
    $result = $client->messages->sendSms(
        to: '+14155552671',
        body: 'Hello from Orbit!',
    );
    printf("queued: %s\n", $result['data']['id'] ?? '?');
} catch (OrbitError $e) {
    fwrite(STDERR, "send failed: {$e->errorCode} — {$e->getMessage()}\n");
}
```

<Note>
  Das PHP SDK hat Kernumfang und ist unveröffentlicht — `$client->messages` + `$client->voice` Versand funktionieren heute; Konferenzen, IVR, Dialer, SIP-Trunks und Aufzeichnungen sind außer Umfang. Verwenden Sie dafür das Node SDK oder den niederschwelligen `OrbitClient::request(method: ..., path: ..., ...)` Escape-Hatch — siehe [SDK-Umfang nach Sprache](/sdks#php-core-scope-not-full-parity).
</Note>

### Java SDK

```bash theme={null}
# Not yet on Maven Central — build + depend on the workspace module:
#   mvn -f packages/sdk-java/pom.xml install
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```java theme={null}
import io.devotel.orbit.OrbitClient;
import io.devotel.orbit.errors.OrbitError;

import java.util.Map;

OrbitClient client = OrbitClient.fromEnv();
try {
    Map<String, Object> result = client.messages.sendSms(
        "+14155552671",
        "Hello from Orbit!"
    );
    System.out.println("queued: " + result.get("data"));
} catch (OrbitError e) {
    System.err.println("send failed: " + e.getCode() + " — " + e.getMessage());
}
```

<Note>
  Das Java SDK hat Kernumfang und ist unveröffentlicht — `client.messages` + `client.voice` Versand funktionieren heute; Aufzeichnungen/Transkripte/Konferenzen/IVR/Dialer und WhatsApp-Template-Komponenten sind außer Umfang. Verwenden Sie dafür das Node SDK oder den niederschwelligen `client.request(method, path, ...)` Escape-Hatch — siehe [SDK-Umfang nach Sprache](/sdks#java-core-scope-not-full-parity).
</Note>

### C# SDK

```bash theme={null}
# Not yet on NuGet — add the workspace project reference:
#   dotnet add reference packages/sdk-csharp
export ORBIT_API_KEY=dv_test_sk_your_key_here
```

```csharp theme={null}
// xmlns/pep: the .NET client ships as Orbit.Sdk in the monorepo.
using Orbit.Sdk;
using Orbit.Sdk.Errors;

try
{
    var client = OrbitClient.FromEnv();
    var result = await client.Messages.SendSmsAsync(
        "+14155552671",
        "Hello from Orbit!"
    );
    if (result.TryGetProperty("data", out var data) &&
        data.TryGetProperty("id", out var id))
        Console.WriteLine($"queued: {id.GetString()}");
}
catch (OrbitError e)
{
    Console.Error.WriteLine($"send failed: {e.Code} — {e.Message}");
}
```

<Note>
  Das .NET SDK hat Kernumfang und ist unveröffentlicht — `client.Messages` + `client.Voice` Versand funktionieren heute; Aufzeichnungen/Transkripte/Konferenzen/IVR/Dialer sind außer Umfang. Verwenden Sie dafür das Node SDK oder den niederschwelligen `client.RequestAsync(method, path, ...)` Escape-Hatch — siehe [SDK-Umfang nach Sprache](/sdks#net-core-scope-not-full-parity).
</Note>

### Voice

#### cURL

Führen Sie einen Anruf mit `POST /voice/calls` aus:

```bash theme={null}
curl -X POST https://api.orbit.devotel.io/api/v1/voice/calls \
  -H "X-API-Key: $ORBIT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": "+14155552671",
    "from": "+14155551234",
    "agent_id": "agt_support_bot"
  }'
```

#### Node.js SDK

```typescript theme={null}
const call = await orbit.voice.calls.create({
  to: '+14155552671',
  from: '+14155551234',
  agent_id: 'agt_support_bot',
});
```

<Note>
  Die anderen sechs SDKs (Python, Go, Ruby, PHP, Java, C#) decken `POST /voice/calls` in ihrem Kernumfang ab — siehe die sprachbezogenen Abschnitte oben. Sprachaufzeichnungen, Transkripte, Konferenzen, IVR und Dialer sind für diese SDKs außer Umfang; verwenden Sie das Node SDK oder die REST API direkt über den jeweiligen niederschwelligen `request(...)` Escape-Hatch der Sprache — siehe [SDK-Umfang nach Sprache](/sdks).
</Note>

> Beginnen Sie mit Sprache von Null? Folgen Sie dem dedizierten [Voice Quickstart](/voice/quickstart) — er deckt das Bereitstellen einer Nummer, das Konfigurieren eines Agenten mit System-Prompt, Browser-Mikrofon-Tests und SSE-Ereignis-Abonnement ab, alles in unter 5 Minuten.

> Ersetzen Sie `$ORBIT_API_KEY` durch den Schlüssel aus Schritt 2 (oder exportieren Sie ihn in Ihrer Shell). Fügen Sie Ihren Schlüssel nicht direkt in geteilte Snippets ein.

## Schritt 4: Antwort prüfen

```json theme={null}
{
  "data": {
    "id": "msg_abc123",
    "status": "queued",
    "channel": "sms"
  },
  "meta": {
    "request_id": "req_xyz789",
    "timestamp": "2026-03-08T00:00:00Z"
  }
}
```

Herzlichen Glückwunsch — Sie haben Ihre erste Nachricht mit Orbit kostenlos in unter 5 Minuten gesendet. Ein Sandbox-Versand behält seinen ehrlichen `test_sent`-Status, statt zu `delivered`/`failed` hochgestuft zu werden — um ein bestimmtes Zustellungsbeleg-Ergebnis (delivered, undelivered, expired und 7 weitere) auf Abruf auszulösen, senden Sie an eine Empfängernummer mit der passenden letzten Ziffer; siehe [Sandbox Magic Numbers](/sandbox/magic-numbers). Verbinden Sie als Nächstes einen Zustellungs-Webhook: siehe [Webhooks](/webhooks/overview).

## Schritt 5: Live gehen

Sandbox-Traffic erreicht nie einen echten Netzbetreiber, also ist es der schnellste Weg, Ihre Integration zu bauen und zu testen — aber live zu gehen erfordert noch zwei Dinge:

1. **KYC-Verifizierung.** Reichen Sie Ihre Geschäftsdokumente unter **Settings > KYC** ein. Sobald ein Administrator Ihre Organisation genehmigt, ist der Live-Versand freigeschaltet — aber Orbit ist Pay-as-you-go ohne automatisches Testguthaben, also bleibt Ihr Live-Guthaben **0 \$**, bis Sie unter **Settings > Billing** Geld hinzufügen. SMS (US oder international), WhatsApp und Sprache erfordern alle sowohl genehmigtes KYC als auch ein finanziertes Guthaben, bevor sie senden.
2. **10DLC-Registrierung für US-SMS.** Der Versand von SMS an US-Nummern über Live-Traffic erfordert zusätzlich eine 10DLC-Marken- + Kampagnen-Registrierung — ein weiterer Compliance-Schritt, der auf KYC aufbaut, kein Ersatz dafür. Siehe [Sender ID Registration](/compliance/sender-id-registration).

Sobald KYC genehmigt ist, erstellen Sie unter **Settings > API Keys** einen Live-Schlüssel (Präfix `dv_live_sk_`) und ersetzen damit den `dv_test_sk_`-Schlüssel, den Sie oben verwendet haben — die Anfrageform ändert sich nicht.
