Skip to navigation

Atoms API: audit consolidation

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.
  • 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.