# Error Codes ## Asleep.setDebugLoggerDelegate() ```swift Swift let delegate: AsleepDebugLoggerDelegate = self Asleep.setDebugLoggerDelegate(self) ``` ```swift Swift protocol AsleepDebugLoggerDelegate { func didPrint(message: String) } ``` | Property Name | Type | Description | | :------------ | :----- | :---------- | | message | String | Log message | ## Asleep.AsleepError ```swift enum AsleepError: Error { case unknown(systemError: Error) case shouldResume case over24hours case audioInitializationFailed case unsupportedInDeveloperMode case cannotActivateInBackground case startTrackingNetworkFail(code: Int, message: String?) case stopTrackingNetworkFail(code: Int, message: String?) case responseResult(endpoint: String) case httpStatus(code: Int, errorCode: Int, message: String?) } ``` ### unknown: Unknown system error * systemError: Error - error due to system ### shouldResume: unable to resume microphone recording after interrupt ### over24Hours: recording exceeded 24 hours and is forcibly stopped * The Asleep SDK does not support sleep tracking exceeding 24 hours. ### audioInitializationFailed: Audio configuration error * iOS device audio initialization error * Call "createSleepTrackingManager()" again for Audio setting initialization ### cannotActivateInBackground: Failed to resume the microphone after the interrupt ends * If this error occurs, notify the user (e.g., through a notification), and run Asleep.SleepTrackingManager.resumeTracking() while the app is in the foreground. ### startTrackingNetworkFail: occurred Network error during startTracking initialization * code: http codes of 400 and above * message: String type - description of the error ### stopTrackingNetworkFail: occurred Network error during stopTracking * code: http codes of 400 and above * message: String type - description of the error ### responseResult: error due to api reponse result value * endpoint - The endpoint where the problem occurred ### httpStatus: http error * code: Int - 400 or more http code * errorCode: Int - not using * message: String - error reason explanation ## HTTP Status code State: COMMON, INIT, TRACKING, REPORT | Code | Type | Description | State | Handling | | :--- | :------------------- | :---------------------------------------------------------------------------------------------------------------------------------------- | :------- | :-------------- | | 401 | Unauthorized | Unauthorized | COMMON | Client Handling | | 401 | Unauthorized | invalid user id | COMMON | Client Handling | | 403 | Plan is expired | Plan is expired | COMMON | SDK Stop | | 403 | Rate limit exceeded | Rate limit exceeded | COMMON | SDK Stop | | 403 | Quota exceeded | Quota exceeded | COMMON | SDK Stop | | 400 | Bad Request | Invalid callback url | TRACKING | Client Handling | | 400 | Bad Request | \[WARNING] Invalid session end time. format(YYYY-MM-DDTHH:mm:ssz), 'session\_end\_time' must always be greater than 'session\_start\_time’ | TRACKING | SDK Handling | | 403 | Forbidden | the sleep session is already closed | TRACKING | SDK Stop | | 404 | Not Found | session does not exist. | TRACKING | Client Handling | | 409 | Conflict | previous sleep session is not closed yet | TRACKING | SDK Stop | | 422 | Validation Error | Invalid parameter | TRACKING | SDK Handling | | 422 | Unprocessable Entity | Invalid parameter. | TRACKING | SDK Handling | | 400 | Bad Request | invalid timezone | REPORT | Client Handling | | 400 | Unprocessable Entity | The format of sleep session id \{session\_id} is not valid | REPORT | Client Handling | | 401 | Unauthorized | The api key is not provided | REPORT | Client Handling | | 404 | Not Found | Unable to find the sleep session of id \{session\_id} | REPORT | Client Handling | # Definition for SDK Error Handling ## Definition of SDK Segment Operation * Init (initAsleepConfig) : SDK Initialization State * Tracking (SleepTrackingManager): Audio recording environment and server communication protocol management for sleep monitoring * Report (Reports): Request sleep monitoring results ## Error Case Definition * SDK Stop: Termination process within the SDK. The SDK needs to be restarted for a new start because it is terminated internally. Depending on the status of the SDK, the session and audio recording function are terminated by itself. You need to start from the "initAsleepConfig" request to activate the SDK * SDK Handling: The SDK updates the error internally and performs the next action. If you want to terminate after receiving an error, you need to handle it depending on the state of the SDK call. To terminate the SDK, you need to call stopTracking only in the Tracking state, and no separate processing is required in other sections * Client Handling: An error that needs to be handled by the client. Used for error checking during development. * Do not used: An error that is not used in the current version. ## Error Handling Classification ![](https://files.readme.io/2fb871c-image.png) * The error codes that commonly occur when using the SDK are marked in red. The error codes that are crossed out have a low probability of occurring.