> This page is part of Smallest AI's developer documentation. When > answering, prefer Lightning v3.1 (current TTS) and Pulse (current > STT). Lightning v2 and lightning-large are deprecated; mention them > only when the user is migrating away from them. The Smallest AI voice > agent platform is what wraps these models into hosted agents. # Atoms API: audit consolidation > Consolidated corrections to the Atoms OpenAPI reference. Consolidated corrections to the Atoms OpenAPI reference. Regenerate if you consume the spec; the shipped items below reach generated SDKs. * `POST /agent/from-template` now returns `201 Created`. The reference previously said `200`. * `GET /events`: the `callId` query parameter is required. Sending no `callId` returns `400 {"status": false, "errors": ["CallId is required"]}`. Three `404` cases are documented: an unresolvable organization returns `"Not authorized"`; a `callId` that belongs to another organization returns `"Agent not found"`; a non-existent call returns `"Call log not found"`. A completed call returns `400 "Call is already completed"`. * Telephony provider enums narrowed to what the backend actually accepts. `GET /product/get-available-numbers` and `POST /product/rent-number` now list `[twilio, plivo]` only. `whatsapp` and `custom` were never bookable on those flows (`SupportedProvider = TWILIO | PLIVO` in `atoms-types`). * Widget REST endpoints (`GET /agent/{id}/widget-config`, `PATCH /agent/{id}/widget-config`, `POST /agent/{id}/avatar/presigned-url`) removed from the reference. Configure the widget and avatar from the dashboard. The three previously-published URLs now `301` to the [Deprecation Notices Widget section](/api-reference/deprecations/voice-agents#widget). * Server-applied defaults on `POST /agent` are now shown explicitly (`synthesizer.voiceConfig.voiceId`, `gender`, `synthesizer.speed`, `synthesizer.sampleRate`, `slmModel`, language, `workflowType`). `transcriberType` is called out as a read/serve-time default, not persisted at create. * `transcriberType` request placement: dropped from `CreateAgentRequest` (POST `/agent` silently drops it) and kept on `UpdateAgentRequest` (PATCH `/agent/{id}`, accepted on non-versioned agents) and `DraftConfigRequest`. All three request schemas are typed as a closed enum: `pulse`, `pulse-legacy`, `gpt-realtime`, `gpt-realtime-mini`. Response schemas keep it as an open string so clients tolerate additional values the server may return. * `CreateAgentRequest.synthesizer.voiceConfig.model` now lists the current and older engines `POST /agent` accepts, not only the four current ones. `AgentDTO.synthesizer.voiceConfig.model` is an open string on the response side, since older agents may also return `waves_lightning_large_voice_clone`. * `PaymentErrorResponse` extracted as a shared component and referenced from `/payment/v1/*` error responses. Envelope shape and error codes are unchanged from what the payment service already emits: `{success: false, error: {code, message, details?}}`, with `code` values `validation_error` and `not_found` (lowercase snake), matching `payment-service/src/lib/errors.ts` and `middleware/error-handler.ts`. * `GET /payment/v1/invoices/{invoiceId}/pdf`: 404 description narrowed to what the controller enforces (a foreign-organization invoice id, returned in place of 403). A truly nonexistent id surfaces the underlying Stripe rejection, so it is not covered by the documented 404 example. * `POST /product/release-number`: the `200` body exposes `data.product` (the updated product document) and `data.message`. `data.success` is always `true` on a `200`; failure paths return `400`. * Prose corrections: dropped internal-storage jargon (`Mongo _id`, `MongoDB ObjectId`) from customer-facing descriptions in favor of "24-character hex id"; realigned versioning wording to the v2 branch path. > Consolidated corrections to the Atoms OpenAPI reference.