# kcode-audio-ingress
`kcode-audio-ingress` provides durable, automatic audio transcription. It
retains complete caller-owned WAV bytes, delegates the in-memory transcription
pipeline to `kcode-audio-transcribe`, persists progress and the canonical
transcript, and recovers interrupted work after restart.
```rust,no_run
use chrono::Utc;
use kcode_audio_ingress::{AudioIngress, AudioInput};
use kcode_audio_transcribe::AudioTranscriber;
async fn accept(
transcriber: AudioTranscriber,
wav_bytes: Vec<u8>,
) -> Result<(), kcode_audio_ingress::Error> {
let ingress = AudioIngress::open("./audio-ingress", transcriber).await?;
let submission = ingress
.submit(AudioInput {
bytes: wav_bytes,
recorded_at: Utc::now(),
original_filename: Some("recording.wav".into()),
})
.await?;
println!("{}", submission.recording_id);
Ok(())
}
```
The public boundary is deliberately small: `open`, `submit`, `status`, and
manual `retry`. Processing starts automatically. Retry policy is fixed at five
full-job attempts, and the library imposes no configurable storage or input
size limit.
The library owns every path beneath its configured persistence root. It does
not provide HTTP routes, multipart parsing, streaming submission, transcript
delivery, or application-specific memory ingress.
See [Documentation.md](Documentation.md) for the complete API and
[Specification.md](Specification.md) for behavioral guarantees.