careful-honey-27437
06/10/2025, 10:18 PMbrief-egg-61061
06/10/2025, 10:18 PMbrief-egg-61061
06/10/2025, 10:18 PMtypescript import { Configuration, IdentityApi } from '@ory/client' async function createIdentityIfNotExists(email: string) { // Initialize the Ory client const ory = new IdentityApi( new Configuration({ basePath: '<https://your-project.projects.oryapis.com>', // Replace with your Ory Network project URL }) ) try { // Attempt to create the identity const response = await ory.createIdentityRaw({ createIdentityBody: { schema_id: "<preset://email>", traits: { email: email } } }) console.log('Identity created successfully:', response.data) return { success: true, identity: response.data } } catch (error) { // Check if the error is because the identity already exists if (error.response && error.response.status === 409) { // 409 Conflict status indicates the identity already exists console.log('An account with this email already exists') return { success: false, error: 'Identity already exists' } } else if (error.response && error.response.status === 400) { // Check for specific error message ID that indicates duplicate identity const errorData = error.response.data if (errorData.error && (errorData.error.id === '4000007' || errorData.error.id === '4000027')) { console.log('An account with this identifier already exists') return { success: false, error: 'Identity already exists' } } return { success: false, error: 'Invalid request' } } // Handle other errors console.error('Error creating identity:', error) return { success: false, error: 'Unknown error' } } } // Usage createIdentityIfNotExists('<mailto:user@example.com|user@example.com>') .then(result => console.log(result)) .catch(err => console.error('Error in function:', err))
This example: 1. Initializes the Ory Identity API client 2. Attempts to create an identity with the provided email 3. Handles specific error cases: - 409 Conflict status code which indicates the identity already exists - 400 Bad Request with specific error IDs (4000007 or 4000027) that indicate duplicate identifiers The error IDs come from Ory's UI message codes that specifically indicate when an account with the same identifier already exists [Ory Docs - UI Messages](https://www.ory.sh/docs/kratos/concepts/ui-messages#an-account-with-the-same-identifier-email-phone-username--exists-already-4000007). Note that the exact structure of the error response may vary depending on your Ory configuration, so you might need to adjust the error handling logic accordingly.careful-honey-27437
06/10/2025, 10:20 PMbrief-egg-61061
06/10/2025, 10:20 PMbrief-egg-61061
06/10/2025, 10:21 PMerror.response
object is undefined. This is a common issue when working with API error responses. Based on the error structure you're seeing ({"response": {}, "name": "ResponseError"}
), it appears the error object doesn't have the expected properties we were checking for in the previous example. Here's an updated example that handles this specific error structure: typescript import { Configuration, IdentityApi } from '@ory/client' async function createIdentityIfNotExists(email: string) { // Initialize the Ory client const ory = new IdentityApi( new Configuration({ basePath: '<https://your-project.projects.oryapis.com>', // Replace with your Ory Network project URL }) ) try { // Attempt to create the identity const response = await ory.createIdentityRaw({ createIdentityBody: { schema_id: "<preset://email>", traits: { email: email } } }) console.log('Identity created successfully:', response.data) return { success: true, identity: response.data } } catch (error) { console.log('Error details:', JSON.stringify(error, null, 2)) // Check if error is a ResponseError with a name property if (error.name === 'ResponseError') { // For conflict errors (identity already exists) if (error.message && error.message.includes('409')) { console.log('An account with this email already exists') return { success: false, error: 'Identity already exists' } } // For validation errors if (error.message && error.message.includes('400')) { console.log('Invalid request or duplicate identity') return { success: false, error: 'Invalid request or duplicate identity' } } } // Handle other errors console.error('Error creating identity:', error) return { success: false, error: 'Unknown error', details: error } } }
The key differences in this updated approach: 1. We're checking error.name === 'ResponseError'
instead of relying on error.response
2. We're examining the error message string for status codes like '409' or '400' 3. I've added more detailed error logging to help diagnose the issue For more robust error handling, you might want to look at the error handling examples in Ory's documentation for [Bring-your-own-UI integration basics](https://www.ory.sh/docs/kratos/bring-your-own-ui/custom-ui-basic-integration#error-handling), which shows different levels of error handling in Ory. If you're still having issues, I recommend logging the complete error object to understand its structure better, then adapting your error handling accordingly.careful-honey-27437
06/12/2025, 1:07 AMbrief-egg-61061
06/12/2025, 1:07 AMbrief-egg-61061
06/12/2025, 1:07 AMcreateIdentityRaw
method. However, based on the API documentation, the successful response (HTTP 201) returns an object representing an Ory identity, which includes fields such as id
, schema_id
, traits
, credentials
, and others. The structure of this object is described in the API response schema for the create identity endpoint, but the precise TypeScript type or interface name used in the SDK is not provided in the available documentation [Kratos API Reference – createIdentity](https://www.ory.sh/docs/kratos/reference/api) [Ory API Reference – createIdentity](https://www.ory.sh/docs/reference/api). If you need the exact TypeScript type, you may need to refer to the SDK source code or its generated types.