Record a meeting and retrieve its outputs
This is the shortest supported path from a meeting in your product to generated documents in your storage. The OAuth client secret and service access token stay in your backend. Your browser receives only a short-lived upload instruction.
Examples use Rust because it is the first released server SDK. TypeScript and Python will be added as tabs on this page, not as separate guides.
Before you start
Ask your Revero organisation administrator for a client id and client secret with these scopes:
meetings:writeto create meetings;recordings:writeto prepare and complete recordings; andmeetings:readto read meetings, operations and outputs.
Store both values as backend-only secrets. Choose the base URL for the Revero environment your organisation has been provisioned in; never guess one from a browser URL.
1. Create the backend client
The client exchanges your credentials through OAuth Client Credentials and caches the short-lived service token. Do not add a token route to your frontend.
Rust
2. Create the meeting
external_id is your stable identifier. Reusing it returns the same meeting,
which makes a lost response safe to replay. output_profiles names the
documents you need. Put authoritative facts that generation must not reinterpret
in locked_context.
Rust
External ids are unique inside your Revero organisation, not globally.
3. Prepare browser upload
Prepare one recording from your backend. Return only the upload object and
the recording id to the browser. Preserve the method, URL and headers exactly;
they are one short-lived instruction, not fields to reinterpret.
Rust
The ready-made React component and headless alternative are shown in Record from a browser.
4. Upload directly, then complete from the backend
The browser sends the audio straight to the provided URL with the provided
method and headers. Once that upload succeeds, call complete from your
backend with an idempotency key that you persist with the command.
Rust
If the network drops before you see the response, replay with the same key.
Revero returns the same operation and does not start duplicate work. Use a new
key only after a terminal failure explicitly says retryable: true.
5. Wait for authoritative operation state
Operations and meetings are authoritative; webhooks only reduce how long you
wait before reading them. Every wait must have a deadline. The SDK honours
Retry-After on 429, applies bounded backoff between other non-terminal
reads, and returns the last typed operation when the deadline expires.
Rust
Branch on stable error and failure codes, never on their human-readable messages.
6. Retrieve and store outputs
List the meeting outputs and fetch the completed ones. The returned content is your application data: copy it into the long-term storage and access-control model you promise your users. Revero’s temporary copy follows your organisation’s configured retention policy.
Rust
7. Verify webhooks and reconcile
Verify Flyt-Signature against the raw request bytes before parsing JSON.
Reject timestamps more than five minutes from your clock and accept any valid
v1 signature during secret rotation. Deduplicate on the envelope id, also
sent as Flyt-Event-Id; delivery is at-least-once and unordered.
Rust
Return 2xx quickly. Revero retries 429, 5xx and timeouts, does not follow
redirects, and permanently stops on other 4xx responses.
Give this task to a coding agent
Copy the prompt below into an agent working in your Rust/Axum and Next.js/React repository. It deliberately names the source of truth and the complete outcome.
The Revero release harness runs this prompt against clean Axum and Next.js fixtures and compiles the result against the packed package candidates. A prose review is not considered verification.