0.1.1. We are iterating quickly, so pin your SDK version and expect breaking changes between versions until the API settles.
The SDKs cover the core operations: ingest, getTask, pollTask, listAssets, getAsset, deleteAsset, search. Method names follow the naming convention of each language.
TypeScript
@sf-voice/media — Node.js, Bun, Deno, browserElixir
:sf_voice — Req-based, returns {:ok, _} or {:error, _}Go
sfvoice — idiomatic Go with context.ContextRust
sf_voice_media — async with tokio, builder patternJava
sh.sf-voice:sf-voice-media-java — synchronous, Java 17+Kotlin
sh.sf-voice:sf-voice-media-kotlin — coroutine-native with KtorAuthentication
SDKs send your API key as theX-API-Key request header. Keep it in an environment variable and avoid committing it to source control.
Error handling
SDKs use three error categories:| Error | When it’s thrown |
|---|---|
| API error | The server returned a non-2xx response. Carries code, message, and status. |
| Request timeout | A single HTTP request exceeded the configured timeout. |
| Poll timeout | pollTask ran out of time before the task reached ready or failed. |
| Code | Meaning |
|---|---|
unauthorized | Invalid or missing API key. |
not_found | Asset or task ID doesn’t exist. |
bucket_not_connected | S3 source used before bucket is configured. |
s3_access_denied | SDK can’t read from the specified S3 key. |
unsupported_format | File type isn’t supported for indexing. |
file_too_large | Upload exceeds the size limit. |
rate_limited | Too many requests. Back off and retry. |

