{"openapi":"3.1.0","$schema":"https://json-schema.org/draft/2020-12/schema","info":{"title":"SDK API V1","version":"v1"},"paths":{"/api/sdk/v1/sign_ins/{sign_in_id}/authenticate":{"post":{"summary":"authenticate a sign-in session","tags":["SDK Authentications"],"description":"No sign-in session found with the provided SID","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"successfully authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"jwt":{"type":"string","description":"JWT token for API calls (includes user claims)"},"refresh_token":{"type":"string","description":"Token to refresh access tokens"}}}}}},"401":{"description":"unauthorized - invalid password or account locked","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","enum":["invalid_password","account_locked"]}}}}}},"422":{"description":"unprocessable - account unconfirmed, validation error, or sign-in already processed","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","enum":["account_unconfirmed","unprocessable_content","sign_in_already_processed"]},"errors":{"type":"array","items":{"type":"string"}}}}}}},"404":{"description":"sign-in not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"sign_in_not_found"}}}}}},"424":{"description":"missing required fields"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","example":"secure_password123","description":"User password for authentication"},"code":{"type":"string","example":"5125","description":"Magic link code for authentication"},"captcha_token":{"type":"string","description":"Captcha verification token from the client-side captcha widget"}},"oneOf":[{"required":["password"]},{"required":["code"]}],"additionalProperties":false}}}}}},"/api/sdk/v1/sign_ins/{id}/brand_connect":{"post":{"summary":"connect user to brand","tags":["SDK Brand Connect"],"security":[{"sdk_token":[]}],"description":"Connects the authenticated user to the current brand","parameters":[{"name":"id","in":"path","description":"id of the sign_in session","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"connected"},"422":{"description":"unprocessable entity - not authenticated"},"404":{"description":"not found"}}}},"/api/sdk/v1/sign_ins/resend_confirmation":{"post":{"summary":"resend confirmation email","tags":["SDK Confirmations"],"description":"Resends the account confirmation email to an unconfirmed user.\n\n**Flow:**\n1. User attempts to sign in but receives `account_unconfirmed` from `POST /sign_ins`\n2. Client calls this endpoint with the same email to trigger a fresh confirmation email\n3. User clicks the link in the email to confirm the account\n\n**Throttling:**\n- A confirmation email can be resent at most once every 60 seconds per email\n- Additionally rate limited to 5 requests per 5 minutes per email\n","security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"confirmation email sent","content":{"application/json":{"schema":{"type":"object","properties":{"enable_resend_after":{"type":"integer","example":60,"description":"Seconds the client should wait before allowing another resend request"}}}}}},"404":{"description":"account not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_not_found"}}}}}},"422":{"description":"account already confirmed","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_already_confirmed"}}}}}},"429":{"description":"confirmation recently sent","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"confirmation_recently_sent"},"enable_resend_after":{"type":"integer","example":30,"description":"Seconds remaining before another resend request will be accepted"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the unconfirmed account"},"return_to":{"type":"string","format":"uri","example":"h96app://login","description":"SDK redirect URI to return to after the user confirms their account. Must match an allowed redirect URI of the SDK client. When provided, the confirmation link redirects back to the SDK with an auth_payload."},"captcha_token":{"type":"string","description":"Captcha verification token from the client-side captcha widget (required when captcha is enabled for the login feature)"}},"required":["email"]}}}}}},"/api/sdk/v1/sign_ins/resend_invitation":{"post":{"summary":"resend invitation email","tags":["SDK Invitations"],"description":"Resends the invitation email to a user who was invited but has not yet accepted it.\n\n**When to use:**\n1. User attempts to sign in and receives `account_unconfirmed` with `login_type: \"invited\"` from `POST /sign_ins`\n2. Client calls this endpoint to send a fresh invitation email\n3. User clicks the link in the email to set a password and accept the invitation\n\n**Optional redirect:** Pass `return_to` with an SDK redirect URI to redirect the user\ninto your application's invitation flow instead of the default Unidy page.\nWhen the user opens the invitation email link, they are redirected to your `return_to`\nURL with `invitation_token` and `sign_in_id` query params. Use those to validate the\ntoken (`GET /sign_ins/{sign_in_id}/invitation`) and accept it\n(`PATCH /sign_ins/{sign_in_id}/invitation`).\n\n**Throttling:**\n- An invitation email can be resent at most once every 60 seconds per email\n- Additionally rate limited to 5 requests per 5 minutes per email\n","security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"invitation email sent","content":{"application/json":{"schema":{"type":"object","properties":{"enable_resend_after":{"type":"integer","example":60,"description":"Seconds the client should wait before allowing another resend request"}}}}}},"404":{"description":"account not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_not_found"}}}}}},"422":{"description":"account not invited","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_not_invited"}}}}}},"429":{"description":"invitation recently sent","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invitation_recently_sent"},"enable_resend_after":{"type":"integer","example":30,"description":"Seconds remaining before another resend request will be accepted"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","description":"Email address of the invited account"},"return_to":{"type":"string","format":"uri","example":"h96app://login","description":"SDK redirect URI for the invitation flow. Must match an allowed redirect URI of the SDK client. When provided, opening the invitation email link redirects to this URL with `invitation_token` and `sign_in_id` query params for use with GET/PATCH `/sign_ins/{sign_in_id}/invitation`."},"captcha_token":{"type":"string","description":"Captcha verification token from the client-side captcha widget (required when captcha is enabled for the login feature)"}},"required":["email"]}}}}}},"/api/sdk/v1/sign_ins/{sign_in_id}/invitation":{"get":{"summary":"validate invitation token","tags":["SDK Invitations"],"description":"Validates an invitation token before showing the set-password form.\n\n**Usage:**\nCall this endpoint when the user lands on your page from the invitation email link\n(`?invitation_token=...\u0026sign_in_id=...`) to verify the token is still usable before\nrendering the form, so the user sees a proper error instead of a failing submit.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}},{"name":"invitation_token","in":"query","required":true,"description":"Invitation token from the email link","schema":{"type":"string"}}],"responses":{"200":{"description":"token is valid","content":{"application/json":{"schema":{"type":"object","properties":{"valid":{"type":"boolean","example":true}}}}}},"404":{"description":"invitation token missing, unknown or bound to another user, or unknown sign-in","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_invitation_token","description":"invitation_token_missing, invalid_invitation_token or sign_in_not_found"}}}}}},"422":{"description":"invitation expired or already accepted, or sign-in expired","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invitation_token_expired","description":"invitation_token_expired, invitation_already_accepted, sign_in_expired or sign_in_already_processed"}}}}}}}},"patch":{"summary":"accept invitation","tags":["SDK Invitations"],"description":"Accepts an invitation by setting the initial password and signs the user in.\n\n**Usage:**\n1. User lands on your page from the invitation email link with `invitation_token` and `sign_in_id` query params\n2. Optionally validate the token via `GET /sign_ins/{sign_in_id}/invitation`\n3. Submit the new password to this endpoint\n4. On success the user is signed in immediately - the response contains a JWT and refresh token\n\nPassword rules follow the brand's password requirements; violations are returned as\nfield-level `error_details` with the `password_too_weak` identifier.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"invitation accepted, user signed in","content":{"application/json":{"schema":{"type":"object","properties":{"jwt":{"type":"string","description":"JWT id token for the signed-in user"},"refresh_token":{"type":"string","description":"Refresh token for the SDK session"}}}}}},"404":{"description":"invitation token missing, unknown or bound to another user, or unknown sign-in","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_invitation_token","description":"invitation_token_missing, invalid_invitation_token or sign_in_not_found"}}}}}},"422":{"description":"password too weak, invitation expired or already accepted, or sign-in expired or already processed","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"password_too_weak","description":"One of: `password_too_weak` (with field-level `error_details`), `invitation_token_expired`, `invitation_already_accepted`, `sign_in_expired`, `sign_in_already_processed`"},"error_details":{"type":"object","example":{"password":["min_length","number"]},"description":"Present only for password_too_weak - field-level validation errors"}}}}}},"424":{"description":"user not connected to the brand","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"brand_connection_required","description":"brand_connection_required: the user has not connected their account to this brand yet. Prompt the user to connect via the brand-connect flow, then retry authentication using the `sid` in `meta`."},"meta":{"type":"object","properties":{"sid":{"type":"string","description":"Sign-in session ID to use for the retry"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"invitation_token":{"type":"string","description":"Invitation token from the email link"},"password":{"type":"string","description":"Initial password for the invited account"},"password_confirmation":{"type":"string","description":"Confirmation of the initial password"}},"required":["invitation_token","password","password_confirmation"]}}}}}},"/api/sdk/v1/jump_to/service/{id}":{"parameters":[{"name":"id","in":"path","description":"OAuth Application ID","required":true,"schema":{"type":"integer"}}],"post":{"summary":"create service jump-to token","tags":["SDK JumpTo"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"201":{"description":"created"},"401":{"description":"unauthorized - missing or invalid id_token"},"404":{"description":"not found - user or application not found"},"422":{"description":"unprocessable entity - invalid_redirect_uri or invalid_scope"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"redirect_uri":{"type":"string","format":"uri","example":"https://example.com/callback","description":"OAuth redirect URI (optional, defaults to application redirect_uri)"},"scopes":{"type":"array","items":{"type":"string"},"example":["openid","profile"],"description":"OAuth scopes (optional, defaults to [\"openid\"])"},"skip_oauth_authorization":{"type":"boolean","example":false,"description":"Skip OAuth authorization step (optional, defaults to false)"}},"required":[],"additionalProperties":false}}}}}},"/api/sdk/v1/jump_to/unidy":{"post":{"summary":"create unidy jump-to token","tags":["SDK JumpTo"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"201":{"description":"created"},"401":{"description":"unauthorized - missing or invalid id_token"},"422":{"description":"unprocessable entity - invalid_path"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"path":{"type":"string","example":"/subscriptions","description":"Path to redirect to in Unidy (must start with \"/\")"}},"required":["path"],"additionalProperties":false}}}}}},"/api/sdk/v1/sign_ins/{sign_in_id}/send_magic_code":{"post":{"summary":"send magic code for passwordless authentication","tags":["SDK Magic Codes"],"description":"No sign-in session found with the provided SID","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"magic code sent successfully","content":{"application/json":{"schema":{"type":"object","properties":{"enable_resend_after":{"type":"integer","description":"Unix timestamp when a new code can be requested"}}}}}},"422":{"description":"sign-in already authenticated","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"sign_in_already_processed"},"enable_resend_after":{"type":"integer","description":"Unix timestamp when a new code can be requested"}}}}}},"401":{"description":"unauthorized - account locked"},"404":{"description":"sign-in not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"sign_in_not_found"}}}}}}}}},"/api/sdk/v1/newsletters/newsletter_subscription/login_email":{"post":{"summary":"login email","tags":["SDK Newsletter Subscriptions"],"description":"Sends a login email to an existing newsletter subscriber. The email contains a magic link\nthat allows the subscriber to manage their subscription preferences.\n\nThis endpoint is useful for:\n- Allowing subscribers to update their preferences without creating an account\n- Providing a passwordless authentication flow for newsletter management\n- Re-sending access links to subscribers who lost their original confirmation email\n\n**Rate Limiting:** This endpoint may be rate-limited to prevent abuse.\n","security":[{"sdk_token":[]}],"parameters":[],"responses":{"204":{"description":"no content"},"404":{"description":"not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"not_found"}}}}}},"403":{"description":"redirect_uri not allowed","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"origin_not_allowed"}}}}}},"422":{"description":"missing redirect_uri","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"missing_redirect_uri"}}}}}},"401":{"description":"unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"missing_api_key"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"user@example.com"},"redirect_uri":{"type":"string","format":"uri","example":"https://example.com/callback"}},"required":["email","redirect_uri"]}}}}}},"/api/sdk/v1/newsletters/newsletter_subscription":{"get":{"summary":"list newsletter subscriptions","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"X-Preference-Token","in":"header","required":false,"description":"Preference token for newsletter subscription authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with preference token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/newsletter_subscriptions"}}}},"401":{"description":"unauthorized"}}},"post":{"summary":"create newsletter subscription","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"201":{"description":"created with email only"},"422":{"description":"user validation error with machine-readable details"},"207":{"description":"multi-status"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","format":"email","example":"user@gmail.com","description":"Subscribers email address"},"additional_fields":{"type":"object","properties":{"first_name":{"type":["string","null"],"example":"Herrman"},"last_name":{"type":["string","null"],"example":"Mueller"},"salutation":{"type":["string","null"],"example":"mr","enum":["mr","mrs","mx",null]},"phone_number":{"type":["string","null"],"example":"+49123456789"},"date_of_birth":{"type":["string","null"],"format":"date","example":"1991-06-10"},"company_name":{"type":["string","null"],"example":"Unidy"},"address_line_1":{"type":["string","null"],"example":"Jakob-Kaiser-Str 70a"},"address_line_2":{"type":["string","null"],"example":"5 OG"},"city":{"type":["string","null"],"example":"Hamburg"},"postal_code":{"type":["string","null"],"example":"AA0A 0AA"},"country_code":{"type":["string","null"],"example":"GB","description":"codes follow ISO 3166"},"preferred_language":{"type":["string","null"],"example":"de"},"custom_attributes":{"type":["object","null"],"description":"Object containing key-value pairs where keys are the custom attribute names.The allowed value depends on the custom attribute type.","additionalProperties":true,"example":{"custom_attribute_name":"value","another_custom_attribute_name":12}}},"description":"Additional fields to create the user with","additionalProperties":false},"newsletter_subscriptions":{"type":"array","minItems":1,"items":{"type":"object","properties":{"newsletter_internal_name":{"type":"string","example":"newsletter_internal_name","description":"Unique identifier of the newsletter"},"preference_identifiers":{"type":"array","items":{"type":"string","example":"newsletter_preference_identifier","description":"Newsletter preference identifier"},"example":["newsletter_preference_identifier"],"uniqueItems":true}},"required":["newsletter_internal_name"]}},"redirect_to_after_confirmation":{"type":"string","format":"uri"},"captcha_token":{"type":"string","description":"Captcha verification token from the client-side captcha widget"}},"required":["email","newsletter_subscriptions"]}}}}}},"/api/sdk/v1/newsletters/{internal_name}/newsletter_subscription":{"parameters":[{"name":"internal_name","in":"path","description":"internal name of the newsletter","required":true,"schema":{"type":"string"}}],"get":{"summary":"show newsletter subscription","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"X-Preference-Token","in":"header","required":false,"description":"Preference token for newsletter subscription authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with preference token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/newsletter_subscription"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}},"patch":{"summary":"update newsletter subscription","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"X-Preference-Token","in":"header","required":false,"description":"Preference token for newsletter subscription authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/newsletter_subscription"}}}},"403":{"description":"subscription not confirmed"},"422":{"description":"preferences not found"},"401":{"description":"unauthorized"},"404":{"description":"not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"preference_identifiers":{"type":"array","items":{"type":"string","example":"newsletter_preference_identifier","description":"Newsletter preference identifier"},"example":["newsletter_preference_identifier"],"uniqueItems":true}},"required":["preference_identifiers"]}}}}},"delete":{"summary":"destroy newsletter subscription","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"X-Preference-Token","in":"header","required":false,"description":"Preference token for newsletter subscription authentication","schema":{"type":"string"}}],"responses":{"204":{"description":"no content with preference token"},"401":{"description":"unauthorized"},"404":{"description":"not found"},"422":{"description":"unprocessable entity"}}}},"/api/sdk/v1/newsletters/{internal_name}/newsletter_subscription/resend_doi":{"parameters":[{"name":"internal_name","in":"path","description":"internal name of the newsletter","required":true,"schema":{"type":"string"}}],"post":{"summary":"resend doi","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":false,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"X-Preference-Token","in":"header","required":false,"description":"Preference token for newsletter subscription authentication","schema":{"type":"string"}}],"responses":{"204":{"description":"no content"},"422":{"description":"failed to resend"},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}},"/api/sdk/v1/newsletters":{"get":{"summary":"list newsletters","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"responses":{"200":{"description":"successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/newsletters"}}}},"401":{"description":"unauthorized"}}}},"/api/sdk/v1/newsletters/{internal_name}":{"get":{"summary":"show newsletter","tags":["SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"internal_name","in":"path","description":"internal name of the newsletter","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/newsletter"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}},"/api/sdk/v1/newsletter_subscriptions":{"post":{"summary":"create newsletter subscription","tags":["Legacy SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[],"responses":{"201":{"description":"created"},"422":{"description":"unprocessable entity"},"207":{"description":"multi-status"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"email":{"type":"string","format":"email","example":"user@gmail.com","description":"Subscribers email address"},"additional_fields":{"type":"object","properties":{"first_name":{"type":["string","null"],"example":"Herrman"},"last_name":{"type":["string","null"],"example":"Mueller"},"salutation":{"type":["string","null"],"example":"mr","enum":["mr","mrs","mx",null]},"phone_number":{"type":["string","null"],"example":"+49123456789"},"date_of_birth":{"type":["string","null"],"format":"date","example":"1991-06-10"},"company_name":{"type":["string","null"],"example":"Unidy"},"address_line_1":{"type":["string","null"],"example":"Jakob-Kaiser-Str 70a"},"address_line_2":{"type":["string","null"],"example":"5 OG"},"city":{"type":["string","null"],"example":"Hamburg"},"postal_code":{"type":["string","null"],"example":"AA0A 0AA"},"country_code":{"type":["string","null"],"example":"GB","description":"codes follow ISO 3166"},"preferred_language":{"type":["string","null"],"example":"de"},"custom_attributes":{"type":["object","null"],"description":"Object containing key-value pairs where keys are the custom attribute names.The allowed value depends on the custom attribute type.","additionalProperties":true,"example":{"custom_attribute_name":"value","another_custom_attribute_name":12}}},"description":"Additional fields to create the user with","additionalProperties":false},"newsletter_subscriptions":{"type":"array","minItems":1,"items":{"type":"object","properties":{"newsletter_internal_name":{"type":"string","example":"newsletter_internal_name","description":"Unique identifier of the newsletter"},"preference_identifiers":{"type":"array","items":{"type":"string","example":"newsletter_preference_identifier","description":"Newsletter preference identifier"},"example":["newsletter_preference_identifier"],"uniqueItems":true}},"required":["newsletter_internal_name"]}},"redirect_to_after_confirmation":{"type":"string","format":"uri"},"captcha_token":{"type":"string","description":"Captcha verification token from the client-side captcha widget"}},"required":["email","newsletter_subscriptions"]}}}}}},"/api/sdk/v1/newsletters/{internal_name}/resend_doi":{"post":{"summary":"resend doi","tags":["Legacy SDK Newsletter Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"internal_name","in":"path","description":"internal name of the newsletter","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"no content"},"404":{"description":"not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]}}}}}},"/api/sdk/v1/oauth/{id}/consent":{"get":{"summary":"check consent status","tags":["SDK OAuth"],"description":"Get OAuth application info, consent status, and required/missing fields","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"UID of the OAuth application","schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"example":{"has_consent":false,"required_fields":[],"missing_fields":[],"needs_authentication_confirmation":false,"has_passkeys":false,"application":{"uid":"staticUid0000000000000000000000000000000000","name":"Ex labore illo voluptatibus.","description":"I need to go take a shower so I can't tell if I'm crying or not","scopes":[{"scope":"openid","name":"ID"},{"scope":"profile","name":"Profil"},{"scope":"email","name":"Deine E-Mail-Adresse"}],"logo_url":"/assets/default_app_icon.svg","connect_uri":"https://example.com"}},"schema":{"type":"object","properties":{"has_consent":{"type":"boolean"},"required_fields":{"type":"array","items":{"type":"string"}},"missing_fields":{"type":"array","items":{"type":"string"}},"application":{"type":"object","properties":{"uid":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"scopes":{"type":"array","items":{"type":"object","properties":{"scope":{"type":"string"},"name":{"type":"string"}}}},"logo_url":{"type":"string","nullable":true},"connect_uri":{"type":"string","nullable":true}}}}}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}},"post":{"summary":"grant consent","tags":["SDK OAuth"],"description":"Grant consent for an OAuth application. Returns a connect token.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"UID of the OAuth application","schema":{"type":"string"}}],"responses":{"201":{"description":"consent granted","content":{"application/json":{"example":{"token":"staticto-ken0-0000-0000-000000000000"},"schema":{"type":"object","properties":{"token":{"type":"string","description":"OneTimeLoginToken for connecting"}}}}}},"422":{"description":"missing required fields","content":{"application/json":{"example":{"error_identifier":"missing_required_fields","error_details":{"missing_fields":["first_name"]}},"schema":{"type":"object","properties":{"error_identifier":{"type":"string"},"error_details":{"type":"object","properties":{"missing_fields":{"type":"array","items":{"type":"string"}}}}}}}}}}},"patch":{"summary":"update user data","tags":["SDK OAuth"],"description":"Update user profile data and return consent status","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"UID of the OAuth application","schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"example":{"has_consent":false,"required_fields":[],"missing_fields":[],"needs_authentication_confirmation":false,"has_passkeys":false,"application":{"uid":"staticUid0000000000000000000000000000000000","name":"Asperiores excepturi unde perspiciatis.","description":"Dead on the inside, dead on the outside","scopes":[{"scope":"openid","name":"ID"},{"scope":"profile","name":"Profil"},{"scope":"email","name":"Deine E-Mail-Adresse"}],"logo_url":"/assets/default_app_icon.svg","connect_uri":"https://example.com"}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"user_updates":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"custom_attributes":{"type":"object","additionalProperties":true}}}}}}}}}},"/api/sdk/v1/oauth/{id}/connect":{"post":{"summary":"connect to OAuth application","tags":["SDK OAuth"],"description":"Get a OneTimeLoginToken to connect to the OAuth application. Requires consent and all required fields. If the application requires authentication confirmation, a password or passkey credential must be provided.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"description":"UID of the OAuth application","schema":{"type":"string"}}],"responses":{"201":{"description":"successful","content":{"application/json":{"example":{"token":"staticto-ken0-0000-0000-000000000000"},"schema":{"type":"object","properties":{"token":{"type":"string","description":"OneTimeLoginToken for connecting"}}}}}},"401":{"description":"authentication failed","content":{"application/json":{"example":{"error_identifier":"account_locked"},"schema":{"type":"object","properties":{"error_identifier":{"type":"string"}}}}}},"422":{"description":"consent not granted","content":{"application/json":{"example":{"error_identifier":"consent_not_granted","has_consent":false,"required_fields":[],"missing_fields":[],"needs_authentication_confirmation":false,"has_passkeys":false,"application":{"uid":"staticUid0000000000000000000000000000000000","name":"Dicta autem repellat temporibus.","description":"I don't understand how people live. It's amazing to me that people wake up every morning and say: 'Yeah, another day, let's do it.' How do people do it? I don't know how","scopes":[{"scope":"openid","name":"ID"},{"scope":"profile","name":"Profil"},{"scope":"email","name":"Deine E-Mail-Adresse"}],"logo_url":"/assets/default_app_icon.svg","connect_uri":"https://example.com"}},"schema":{"type":"object","properties":{"error_identifier":{"type":"string"},"error_details":{"type":"object"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"password":{"type":"string","description":"User password for re-authentication"},"passkey_credential":{"type":"object","description":"WebAuthn passkey credential for re-authentication"},"scopes":{"type":"array","items":{"type":"string"},"description":"Custom scopes"},"redirect_uri":{"type":"string","description":"Custom redirect URI"}}}}}}}},"/api/sdk/v1/oauth/{oauth_id}/passkey_challenge":{"post":{"summary":"create passkey challenge","tags":["SDK OAuth"],"description":"Generate a WebAuthn challenge for passkey-based re-authentication during OAuth connect","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"oauth_id","in":"path","required":true,"description":"UID of the OAuth application","schema":{"type":"string"}}],"responses":{"200":{"description":"challenge created","content":{"application/json":{"example":{"challenge":"staticChallenge0000000000000000000000000000","timeout":120000,"extensions":{},"allowCredentials":[{"type":"public-key","id":"static00-Uuid-0000-0000-000000000000"}],"rpId":"11adams.test","userVerification":"required"},"schema":{"type":"object","properties":{"challenge":{"type":"string"},"timeout":{"type":"integer"},"allowCredentials":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"id":{"type":"string"}}}},"userVerification":{"type":"string"}}}}}},"422":{"description":"no passkeys registered","content":{"application/json":{"example":{"error_identifier":"no_passkeys_registered"},"schema":{"type":"object","properties":{"error_identifier":{"type":"string"}}}}}}}}},"/api/sdk/v1/sign_ins/auth/omniauth/{provider}":{"get":{"summary":"start omniauth sign in","tags":["SDK Omniauth SignIns"],"security":[],"parameters":[{"name":"User-Agent","in":"header","schema":{"type":"string"}},{"name":"provider","in":"path","required":true,"description":"The authentication provider (e.g., google, facebook, linkedin)","schema":{"type":"string"}},{"name":"sdk_redirect_uri","in":"query","required":true,"description":"The URI to redirect to after the authentication process is complete.","schema":{"type":"string"}}],"responses":{"302":{"description":"found"}}}},"/api/sdk/v1/sign_ins/{sign_in_id}/password_reset/send":{"post":{"summary":"send password reset email","tags":["SDK Password Resets"],"description":"No sign-in session found with the provided SID","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"password reset email sent"},"422":{"description":"invalid return_to URL","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_return_to"}}}}}},"404":{"description":"sign-in not found","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"sign_in_not_found"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"return_to":{"type":"string","format":"uri","example":"h96app://login","description":"URI to redirect user after password reset. Must match an SDK client allowed redirect URI."}},"required":["return_to"]}}}}}},"/api/sdk/v1/sign_ins/{sign_in_id}/password_reset":{"get":{"summary":"validate password reset token","tags":["SDK Password Resets"],"description":"The reset token has expired","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}},{"name":"token","in":"query","required":true,"description":"Password reset token from the email link","schema":{"type":"string"}}],"responses":{"200":{"description":"token is valid"},"404":{"description":"token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_reset_token"}}}}}},"422":{"description":"token expired","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"reset_token_expired"}}}}}}}},"patch":{"summary":"reset password with token","tags":["SDK Password Resets"],"description":"The new password does not meet requirements or confirmation does not match","security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"The SID (session ID) of the sign-in session","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"password reset successful"},"404":{"description":"token invalid","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_reset_token"}}}}}},"422":{"description":"invalid password","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"invalid_password"},"error_details":{"type":"object","description":"Detailed validation errors","additionalProperties":{"type":"array","items":{"type":"string"}}}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","description":"Password reset token from email"},"password":{"type":"string","description":"New password"},"password_confirmation":{"type":"string","description":"Password confirmation (must match password)"}},"required":["token","password","password_confirmation"]}}}}}},"/api/sdk/v1/profile":{"get":{"summary":"get user profile","tags":["SDK Profile"],"description":"Retrieves the authenticated user's profile information.\n\n**Required Headers:**\n- `Authorization`: Bearer token with SDK API key\n- `X-ID-Token`: JWT ID token obtained from authentication\n\n**Localization:**\nPass `?lang=xx` query parameter to get localized field labels and error messages.\nSupported locales depend on brand configuration.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"JWT ID token obtained from authentication endpoint","schema":{"type":"string"}},{"name":"lang","in":"query","required":false,"description":"Locale for response (e.g., \"en\", \"de\")","schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/profile"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}},"patch":{"summary":"update profile","tags":["SDK Profile"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with partial validation - ignores required field not in request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/update_profile"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"422":{"description":"fails without partial validation when required field is too short"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"brand":{"type":"string","example":"mybrand","description":"Change the user in a brand context, in a multi brand scenario. If this paremeter is not supplied brand will\n        be determined by host and if that is not possible it will fall back to default brand.\n        This determines for example, which branding is used for outgoing emails. !!"},"first_name":{"type":["string","null"],"example":"Herrman"},"last_name":{"type":["string","null"],"example":"Mueller"},"salutation":{"type":["string","null"],"example":"mr","enum":["mr","mrs","mx",null]},"phone_number":{"type":["string","null"],"example":"+49123456789"},"date_of_birth":{"type":["string","null"],"format":"date","example":"1991-06-10"},"company_name":{"type":["string","null"],"example":"Unidy"},"address_line_1":{"type":["string","null"],"example":"Jakob-Kaiser-Str 70a"},"address_line_2":{"type":["string","null"],"example":"5 OG"},"city":{"type":["string","null"],"example":"Hamburg"},"postal_code":{"type":["string","null"],"example":"AA0A 0AA"},"country_code":{"type":["string","null"],"example":"GB","description":"codes follow ISO 3166"},"preferred_language":{"type":["string","null"],"example":"de"}},"required":[]}}}}}},"/api/sdk/v1/registration/internal_matching/config":{"get":{"summary":"get internal matching config","tags":["SDK Registration Internal Matching"],"description":"Returns the internal matching plugin configuration for the current brand.","security":[{"sdk_token":[]}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"enabled":true,"matching_attribute":{"name":"unidy_id","label":"UNIDY ID","format":"string"},"additional_fields":[]}}}}}}},"/api/sdk/v1/registration/internal_matching/check":{"post":{"summary":"check for matching user","tags":["SDK Registration Internal Matching"],"description":"Checks if a registering user matches an existing user based on the configured matching attribute.\nIf a match is found, returns a masked preview of the matched user.\n","security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"match found","content":{"application/json":{"example":{"matching_status":"found","matching_user_id":1,"matched_user_preview":{"email_masked":"o***********2@example.com","created_at":"2023-01-15T10:30:00.000Z"}}}}},"422":{"description":"no match found","content":{"application/json":{"example":{"error_identifier":"internal_matching_match_not_found"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_matching_check"}}}}}},"/api/sdk/v1/registration/internal_matching/confirm":{"post":{"summary":"confirm matching user","tags":["SDK Registration Internal Matching"],"description":"Confirms that the registering user wants to take over the matched existing account.\nThe matching_user_id must match the user found during the check step.\n","security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"confirmed","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":"confirmed","matching_user_preview":{"email_masked":"y*************3@example.com","created_at":"2023-01-15T10:30:00.000Z"}}}}},"403":{"description":"user mismatch","content":{"application/json":{"example":{"error_identifier":"matching_user_mismatch"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/internal_matching_confirm"}}}}}},"/api/sdk/v1/registration/internal_matching/skip":{"post":{"summary":"skip matching","tags":["SDK Registration Internal Matching"],"description":"Skips the internal matching step and continues registration without account takeover.","security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"skipped","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":"skipped","matching_user_preview":null}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rid":{"type":"string","description":"Registration flow ID"}},"required":["rid"]}}}}}},"/api/sdk/v1/registration/passkey/new":{"get":{"summary":"get passkey creation options","tags":["SDK Registration Passkeys"],"description":"Returns WebAuthn creation options for registering a passkey during the registration flow.\nThe registration flow must have an email set before requesting passkey options.\nThe challenge is stored in an encrypted cookie for subsequent verification.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":true,"description":"Registration flow ID","schema":{"type":"string"}}],"responses":{"200":{"description":"success - returns WebAuthn creation options","content":{"application/json":{"example":{"challenge":"staticChallenge0000000000000000000000000000","timeout":120000,"extensions":{},"rp":{"name":"unidy","id":"example.com"},"user":{"name":"test@example.com","id":"staticOpaqueId000000000000000000000000000000000000000000000000000000000000000000000000","displayName":"test@example.com"},"pubKeyCredParams":[{"type":"public-key","alg":-7},{"type":"public-key","alg":-257},{"type":"public-key","alg":-37}],"authenticatorSelection":{"authenticatorAttachment":"platform","userVerification":"required"},"excludeCredentials":[]}}}},"422":{"description":"unprocessable entity - expired","content":{"application/json":{"example":{"error_identifier":"registration_expired"}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}}}}},"/api/sdk/v1/registration/passkey":{"post":{"summary":"verify and store passkey credential","tags":["SDK Registration Passkeys"],"description":"Verifies a WebAuthn credential response and stores the passkey data on the registration flow.\nRequires a prior call to `GET /registration/passkey/new` to obtain the creation options\nand set the challenge cookie.\n\n**Flow:**\n1. Call `GET /registration/passkey/new` to get WebAuthn creation options\n2. Use the options to create a credential in the browser via `navigator.credentials.create()`\n3. Send the credential response to this endpoint along with an optional passkey name\n","security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":true,"description":"Registration flow ID","schema":{"type":"string"}}],"responses":{"400":{"description":"bad request - missing challenge or credential","content":{"application/json":{"example":{"error_identifier":"bad_request"}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"publicKeyCredential":{"type":"string","description":"JSON-encoded WebAuthn credential response from navigator.credentials.create()"},"passkey_name":{"type":"string","description":"Optional human-readable name for the passkey (defaults to \"Passkey\")"}},"required":["publicKeyCredential"]}}}}},"delete":{"summary":"clear passkey from registration flow","tags":["SDK Registration Passkeys"],"description":"Removes the stored passkey data from the registration flow, allowing the user\nto choose a different authentication method or re-register a passkey.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":true,"description":"Registration flow ID","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":null,"matching_user_preview":null}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}}}}},"/api/sdk/v1/registration":{"get":{"summary":"show registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":null,"matching_user_preview":null}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}}}},"post":{"summary":"create registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"User-Agent","in":"header","required":false,"schema":{"type":"string"}}],"responses":{"201":{"description":"created","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":null,"newsletter_preferences":{},"registration_profile_data":{},"social_provider":null,"status":{},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":null,"matching_user_preview":null}}}},"422":{"description":"unprocessable entity","content":{"application/json":{"example":{"error_identifier":"unprocessable_content","error_details":{"errors":["The property '#/' did not contain a required property of 'registration_url'"]}}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/create_registration"}}}}},"patch":{"summary":"update registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":false,"matching_status":null,"matching_user_preview":null}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}},"422":{"description":"unprocessable entity - invalid email format","content":{"application/json":{"example":{"error_identifier":"invalid_record","meta":{"errors":["Email is invalid"]}}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/update_registration"}}}}},"delete":{"summary":"destroy registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"success":true}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}}}}},"/api/sdk/v1/registration/finalize":{"post":{"summary":"finalize registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":true,"expired":false,"can_finalize":true,"has_passkey":false,"email_verified":false,"matching_status":null,"matching_user_preview":null}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}},"422":{"description":"unprocessable entity - expired","content":{"application/json":{"example":{"error_identifier":"registration_expired","meta":{"email_missing":true,"auth_method_missing":true}}}}}}}},"/api/sdk/v1/registration/social":{"get":{"summary":"social registration","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"User-Agent","in":"header","required":false,"schema":{"type":"string"}},{"name":"provider","in":"query","required":true,"description":"OAuth provider name (e.g., google_oauth2, google)","schema":{"type":"string"}},{"name":"redirect_uri","in":"query","required":false,"description":"URI to redirect to after OAuth callback. Defaults to referer or /","schema":{"type":"string"}}],"responses":{"302":{"description":"redirect"},"422":{"description":"unprocessable entity","content":{"application/json":{"example":{"error":"invalid_provider"}}}}}}},"/api/sdk/v1/registration/email_verification/send_code":{"post":{"summary":"send email verification code","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"success":true,"enable_resend_after":29000}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}},"422":{"description":"unprocessable entity - no email","content":{"application/json":{"example":{"error_identifier":"email_required"}}}}}}},"/api/sdk/v1/registration/email_verification/verify":{"post":{"summary":"verify email code","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[{"name":"rid","in":"query","required":false,"description":"Registration flow ID. If not provided, will use registration_rid cookie.","schema":{"type":"string"}}],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"rid":"staticRid000000000000000","email":"user@example.com","newsletter_preferences":{"_clear":true},"registration_profile_data":{"source":"factory"},"social_provider":null,"status":{"initialized":true,"email_verified":true},"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","expires_at":"2023-01-15T10:30:00.000Z","has_password":null,"expired":false,"can_finalize":false,"has_passkey":false,"email_verified":true,"matching_status":null,"matching_user_preview":null}}}},"404":{"description":"not found","content":{"application/json":{"example":{"error_identifier":"registration_not_found"}}}},"422":{"description":"unprocessable entity - invalid code","content":{"application/json":{"example":{"error_identifier":"unprocessable_content","error_details":{"errors":["The property '#/code' value \"invalid\" did not match the regex '^\\d{4}$'"]}}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/verify_email"}}}}}},"/api/sdk/v1/registration/resume":{"post":{"summary":"send resume link","tags":["SDK Registrations"],"security":[{"sdk_token":[]}],"parameters":[],"responses":{"200":{"description":"success","content":{"application/json":{"example":{"success":true}}}},"404":{"description":"not found - no registration flow for email","content":{"application/json":{"example":{"error_identifier":"registration_flow_not_found"}}}},"422":{"description":"unprocessable entity - email required","content":{"application/json":{"example":{"error_identifier":"email_required"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/send_resume_link"}}}}}},"/api/sdk/v1/registration/resume/{token}":{"get":{"summary":"process resume link","tags":["SDK Registrations"],"parameters":[{"name":"token","in":"path","required":true,"description":"Signed token from resume link email","schema":{"type":"string"}}],"responses":{"302":{"description":"redirect with error - invalid token"}}}},"/api/sdk/v1/service_connections":{"get":{"summary":"list connected services","tags":["SDK Service Connections"],"description":"Returns a list of services (OAuth applications) the authenticated user is connected to.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"JWT ID token obtained from authentication endpoint","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with no connections","content":{"application/json":{"example":[{"id":"staticOpaqueId00000000000000000000000000000","name":"Reiciendis aliquam non molestiae.","description":"Dead on the inside, dead on the outside","logo_url":null,"connected_at":"2023-01-15T10:30:00.000Z"}]}}},"401":{"description":"unauthorized - invalid id token"},"404":{"description":"not found - user does not exist"}}}},"/api/sdk/v1/service_connections/{client_id}":{"delete":{"summary":"disconnect a service","tags":["SDK Service Connections"],"description":"Revokes the OAuth connection between the authenticated user and the specified service (by client_id). Deletes all access grants and tokens for that application.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"JWT ID token obtained from authentication endpoint","schema":{"type":"string"}},{"name":"client_id","in":"path","required":true,"description":"The OAuth application client_id (uid) of the service to disconnect","schema":{"type":"string"}}],"responses":{"204":{"description":"successful - service disconnected"},"404":{"description":"application not found"},"401":{"description":"unauthorized - missing id token"}}}},"/api/sdk/v1/sign_ins":{"post":{"summary":"create sign_in","tags":["SDK SignIns"],"security":[{"sdk_token":[]}],"description":"Creates a new sign-in session for the given email address.","parameters":[{"name":"User-Agent","in":"header","schema":{"type":"string"}}],"responses":{"201":{"description":"created"},"401":{"description":"account locked","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_locked"}}}}}},"404":{"description":"not found"},"422":{"description":"account unconfirmed","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string","example":"account_unconfirmed"},"login_type":{"type":"string","enum":["unconfirmed","invited"],"example":"unconfirmed","description":"`unconfirmed` — user registered but has not confirmed their email; `invited` — user was invited but has not set a password yet"}}}}}}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"},"sendMagicCode":{"type":"boolean"}},"required":["email"]}}}}}},"/api/sdk/v1/sign_ins/{id}/sign_out":{"post":{"summary":"Sign out","tags":["SDK SignIns"],"security":[{"sdk_token":[]}],"parameters":[{"name":"User-Agent","in":"header","schema":{"type":"string"}},{"name":"X-ID-Token","in":"header","description":"The JWT ID token","schema":{"type":"string"}},{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Signed out successfully"},"401":{"description":"Unauthorized"},"404":{"description":"Sign in not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"global_logout":{"type":"boolean","example":false,"nullable":true}}}}}}}},"/api/sdk/v1/sign_ins/{id}/update_required_fields":{"patch":{"summary":"Update required fields","tags":["SDK SignIns"],"security":[{"sdk_token":[]}],"parameters":[{"name":"User-Agent","in":"header","schema":{"type":"string"}},{"name":"id","in":"path","description":"Sign-in session ID (sid)","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Required fields updated successfully"},"404":{"description":"Sign in not found"},"424":{"description":"Missing required fields"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"user":{"type":"object","properties":{"first_name":{"type":"string","example":"John"},"last_name":{"type":"string","example":"Doe"}}}},"required":["user"]}}}}}},"/api/sdk/v1/sign_ins/signed_in":{"get":{"summary":"Signed In","tags":["SDK SignIns"],"security":[{"sdk_token":[]}],"parameters":[{"name":"User-Agent","in":"header","schema":{"type":"string"}}],"responses":{"201":{"description":"Sign in created","content":{"application/json":{"schema":{"type":"object","properties":{"jwt":{"type":"string"}},"required":["jwt"]}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error_identifier":{"type":"string"},"error_details":{"type":"object"},"meta":{"type":"object"}},"required":["error_identifier"]}}}}}}},"/api/sdk/v1/subscriptions":{"get":{"summary":"list subscriptions","tags":["SDK Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Items per page (max 250)","schema":{"type":"integer"}},{"name":"order_by","in":"query","required":false,"description":"Field to order by (starts_at, ends_at, title, created_at)","schema":{"type":"string"}},{"name":"order_direction","in":"query","required":false,"enum":["asc","desc"],"description":"Order direction:\n * `asc` \n * `desc` \n ","schema":{"type":"string"}},{"name":"service_id","in":"query","required":false,"description":"Filter by service ID","schema":{"type":"integer"}},{"name":"state","in":"query","required":false,"description":"Filter by state","schema":{"type":"string"}},{"name":"payment_state","in":"query","required":false,"description":"Filter by payment state","schema":{"type":"string"}},{"name":"venue","in":"query","required":false,"description":"Filter by venue","schema":{"type":"string"}},{"name":"text","in":"query","required":false,"description":"Filter by text","schema":{"type":"string"}},{"name":"title","in":"query","required":false,"description":"Filter by title","schema":{"type":"string"}},{"name":"reference","in":"query","required":false,"description":"Filter by reference","schema":{"type":"string"}},{"name":"starts_at","in":"query","required":false,"description":"Filter by starts_at (ISO8601)","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"Filter by ends_at (ISO8601)","schema":{"type":"string"}},{"name":"subscription_category_id","in":"query","required":false,"description":"Filter by subscription category ID","schema":{"type":"string"}},{"name":"next_payment_at","in":"query","required":false,"description":"Filter by next_payment_at (ISO8601)","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with filtering","content":{"application/json":{"example":{"meta":{"count":1,"page":1,"limit":50,"last":1,"prev":null,"next":null},"results":[{"id":"static00-Uuid-0000-0000-000000000000","title":"Unique Test Subscription","text":"factory test text which descirbes the subscription","payment_frequency":"yearly","metadata":null,"wallet_export":null,"state":"active","reference":"987654321","payment_state":"payed","currency":"EUR","button_cta_url":null,"subscription_category_id":"static00-Uuid-0000-0000-000000000000","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","next_payment_at":"2023-01-15T10:30:00.000Z","price":100.99,"exportable_to_wallet":false,"user_id":"static00-Uuid-0000-0000-000000000000"}]}}}},"401":{"description":"unauthorized"}}}},"/api/sdk/v1/subscriptions/{id}":{"get":{"summary":"show subscription","tags":["SDK Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","description":"id of the subscription","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"example":{"id":"static00-Uuid-0000-0000-000000000000","title":"factory title","text":"factory test text which descirbes the subscription","payment_frequency":"yearly","metadata":null,"wallet_export":null,"state":"active","reference":"987654321","payment_state":"payed","currency":"EUR","button_cta_url":null,"subscription_category_id":"static00-Uuid-0000-0000-000000000000","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","next_payment_at":"2023-01-15T10:30:00.000Z","price":100.99,"exportable_to_wallet":false,"user_id":"static00-Uuid-0000-0000-000000000000"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}},"/api/sdk/v1/ticket_transfers":{"get":{"summary":"list pending ticket transfers","description":"Lists the pending, unexpired ticket transfers addressed to (incoming) and sent by (outgoing) the authenticated user.","tags":["SDK Ticket Transfers"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ticket_transfers"}}}},"401":{"description":"unauthorized"}}}},"/api/sdk/v1/tickets/{ticket_id}/transfer":{"parameters":[{"name":"ticket_id","in":"path","description":"Unidy ID of the ticket to transfer","required":true,"schema":{"type":"string"}}],"post":{"summary":"create ticket transfer","description":"Sends a transfer offer for a ticket owned by the authenticated user. The recipient is notified by email and invited to Unidy if they have no account yet.","tags":["SDK Ticket Transfers"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"201":{"description":"created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ticket_transfer"}}}},"422":{"description":"unprocessable entity"},"404":{"description":"ticket not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"properties":{"recipient_email":{"type":"string","format":"email","example":"recipient@example.com","description":"Email address of the person the ticket is transferred to. Recipients without a Unidy account are invited."}},"required":["recipient_email"]}}}}}},"/api/sdk/v1/ticket_transfers/{token}/accept":{"parameters":[{"name":"token","in":"path","description":"Token of the transfer","required":true,"schema":{"type":"string"}}],"post":{"summary":"accept ticket transfer","description":"Accepts a pending transfer addressed to the authenticated user; the ticket moves to them.","tags":["SDK Ticket Transfers"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ticket_transfer"}}}},"403":{"description":"recipient mismatch"}}}},"/api/sdk/v1/ticket_transfers/{token}/decline":{"parameters":[{"name":"token","in":"path","description":"Token of the transfer","required":true,"schema":{"type":"string"}}],"post":{"summary":"decline ticket transfer","description":"Declines a pending transfer addressed to the authenticated user; the ticket stays with the owner.","tags":["SDK Ticket Transfers"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"declined","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ticket_transfer"}}}}}}},"/api/sdk/v1/ticket_transfers/{token}/cancel":{"parameters":[{"name":"token","in":"path","description":"Token of the transfer","required":true,"schema":{"type":"string"}}],"post":{"summary":"cancel ticket transfer","description":"Cancels a pending transfer previously sent by the authenticated user.","tags":["SDK Ticket Transfers"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}}],"responses":{"200":{"description":"canceled","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ticket_transfer"}}}},"403":{"description":"not the sender"}}}},"/api/sdk/v1/tickets/{ticket_id}/exports/pdf":{"get":{"summary":"export ticket as pdf","tags":["SDK Tickets"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"ticket_id","in":"path","description":"id of the ticket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/pdf":{"schema":{"type":"string","format":"binary","description":"PDF file"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"403":{"description":"forbidden - ticket not exportable"}}}},"/api/sdk/v1/tickets/{ticket_id}/exports/pkpass":{"get":{"summary":"export ticket as pkpass","tags":["SDK Tickets"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"ticket_id","in":"path","description":"id of the ticket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"Apple Wallet pass file (.pkpass)"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"403":{"description":"forbidden - ticket not exportable"}}}},"/api/sdk/v1/subscriptions/{subscription_id}/exports/pdf":{"get":{"summary":"export subscription as pdf","tags":["SDK Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"subscription_id","in":"path","description":"id of the subscription","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/pdf":{"schema":{"type":"string","format":"binary","description":"PDF file"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"403":{"description":"forbidden - subscription not exportable"}}}},"/api/sdk/v1/subscriptions/{subscription_id}/exports/pkpass":{"get":{"summary":"export subscription as pkpass","tags":["SDK Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"subscription_id","in":"path","description":"id of the subscription","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"Apple Wallet pass file (.pkpass)"}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"403":{"description":"forbidden - subscription not exportable"}}}},"/api/sdk/v1/tickets/{ticket_id}/export_link":{"post":{"summary":"generate export link for ticket","tags":["SDK Tickets"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"ticket_id","in":"path","description":"id of the ticket","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"created","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Signed URL for downloading the export, suffixed with the format extension"},"expires_in":{"type":"integer","description":"Seconds until the URL expires"}},"required":["url","expires_in"]}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"},"422":{"description":"invalid format"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","enum":["pdf","pkpass"],"description":"Export format"}},"required":["format"]}}}}}},"/api/sdk/v1/subscriptions/{subscription_id}/export_link":{"post":{"summary":"generate export link for subscription","tags":["SDK Subscriptions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"subscription_id","in":"path","description":"id of the subscription","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"created","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"Signed URL for downloading the export, suffixed with the format extension"},"expires_in":{"type":"integer","description":"Seconds until the URL expires"}},"required":["url","expires_in"]}}}},"404":{"description":"not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"format":{"type":"string","enum":["pdf","pkpass"],"description":"Export format"}},"required":["format"]}}}}}},"/api/sdk/v1/ticketables/{token}":{"get":{"summary":"download export via signed token","tags":["SDK Exports"],"parameters":[{"name":"token","in":"path","description":"Signed JWT token for export","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful - PKPass","content":{"application/pdf":{"schema":{"type":"string","format":"binary","description":"PDF file"}},"application/octet-stream":{"schema":{"type":"string","format":"binary","description":"Apple Wallet pass file (.pkpass)"}}}},"401":{"description":"invalid or expired token"}}}},"/api/sdk/v1/tickets":{"get":{"summary":"list tickets","tags":["SDK Tickets"],"description":"Lists the authenticated user's tickets. Responses include a nullable `holder_id` (unidy_id of the user the ticket is transferred to) next to `user_id` (the owner). With the `enable_ticket_transfers` brand config enabled, results are scoped to the tickets the user currently holds: owned tickets not transferred away, plus tickets transferred to them.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Items per page (max 250)","schema":{"type":"integer"}},{"name":"order_by","in":"query","required":false,"description":"Field to order by (starts_at, ends_at, reference, created_at)","schema":{"type":"string"}},{"name":"order_direction","in":"query","required":false,"enum":["asc","desc"],"description":"Order direction:\n * `asc` \n * `desc` \n ","schema":{"type":"string"}},{"name":"service_id","in":"query","required":false,"description":"Filter by service ID","schema":{"type":"integer"}},{"name":"state","in":"query","required":false,"description":"Filter by state","schema":{"type":"string"}},{"name":"payment_state","in":"query","required":false,"description":"Filter by payment state","schema":{"type":"string"}},{"name":"venue","in":"query","required":false,"description":"Filter by venue","schema":{"type":"string"}},{"name":"text","in":"query","required":false,"description":"Filter by text","schema":{"type":"string"}},{"name":"title","in":"query","required":false,"description":"Filter by title","schema":{"type":"string"}},{"name":"reference","in":"query","required":false,"description":"Filter by reference","schema":{"type":"string"}},{"name":"starts_at","in":"query","required":false,"description":"Filter by starts_at (ISO8601)","schema":{"type":"string"}},{"name":"ends_at","in":"query","required":false,"description":"Filter by ends_at (ISO8601)","schema":{"type":"string"}},{"name":"ticket_category_id","in":"query","required":false,"description":"Filter by ticket category ID","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with filtering","content":{"application/json":{"example":{"meta":{"count":1,"page":1,"limit":50,"last":1,"prev":null,"next":null},"results":[{"id":"static00-Uuid-0000-0000-000000000000","title":"Unique Test Ticket","text":"factory test text which descirbes the subscription","reference":"987654321","metadata":null,"wallet_export":null,"state":"active","payment_state":"payed","button_cta_url":"https://google.de","info_banner":null,"seating":"factory seating","venue":"factory venue","currency":"EUR","ticket_category_id":"static00-Uuid-0000-0000-000000000000","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","price":100.99,"user_id":"static00-Uuid-0000-0000-000000000000","holder_id":null,"exportable_to_wallet":false}]}}}},"401":{"description":"unauthorized"}}}},"/api/sdk/v1/tickets/{id}":{"get":{"summary":"show ticket","tags":["SDK Tickets"],"description":"Shows a single ticket accessible to the authenticated user. The response includes a nullable `holder_id` (unidy_id of the user the ticket is transferred to) next to `user_id` (the owner). With the `enable_ticket_transfers` brand config enabled, tickets held by the user (owned and not transferred away, or transferred to them) are accessible.","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","description":"id of the ticket","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"example":{"id":"static00-Uuid-0000-0000-000000000000","title":"factory title","text":"factory test text which descirbes the subscription","reference":"987654321","metadata":null,"wallet_export":null,"state":"active","payment_state":"payed","button_cta_url":"https://google.de","info_banner":null,"seating":"factory seating","venue":"factory venue","currency":"EUR","ticket_category_id":"static00-Uuid-0000-0000-000000000000","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","price":100.99,"user_id":"static00-Uuid-0000-0000-000000000000","holder_id":null,"exportable_to_wallet":false}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}},"/api/sdk/v1/sign_ins/{sign_in_id}/refresh_token":{"post":{"summary":"refresh token","tags":["SDK Tokens"],"security":[{"sdk_token":[]}],"parameters":[{"name":"sign_in_id","in":"path","description":"id of the sign_in session","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"created"},"401":{"description":"unauthorized"},"404":{"description":"not found"}},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"refresh_token":{"type":"string","description":"The refresh token"}},"required":["refresh_token"]}}}}}},"/api/sdk/v1/transactions":{"get":{"summary":"list transactions","tags":["SDK Transactions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"page","in":"query","required":false,"description":"Page number","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Items per page (max 250)","schema":{"type":"integer"}},{"name":"order_by","in":"query","required":false,"description":"Field to order by (placed_at, created_at, total)","schema":{"type":"string"}},{"name":"order_direction","in":"query","required":false,"enum":["asc","desc"],"description":"Order direction:\n * `asc` \n * `desc` \n ","schema":{"type":"string"}},{"name":"state","in":"query","required":false,"description":"Filter by state","schema":{"type":"string"}},{"name":"financial_status","in":"query","required":false,"description":"Filter by financial status","schema":{"type":"string"}},{"name":"order_type","in":"query","required":false,"description":"Filter by order type","schema":{"type":"string"}},{"name":"source_platform","in":"query","required":false,"description":"Filter by source platform","schema":{"type":"string"}},{"name":"placed_at","in":"query","required":false,"description":"Filter by placed_at (ISO8601)","schema":{"type":"string"}},{"name":"external_id","in":"query","required":false,"description":"Filter by external ID","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with filtering","content":{"application/json":{"example":{"meta":{"count":1,"page":1,"limit":50,"last":1,"prev":null,"next":null},"results":[{"id":"static00-Uuid-0000-0000-000000000000","user_id":"static00-Uuid-0000-0000-000000000000","transaction_category_id":"static00-Uuid-0000-0000-000000000000","external_id":"EXT-12345","reference":"ncaezn0ioo","source_platform":"shopify","order_type":null,"state":"partially_paid","financial_status":null,"fulfillment_status":null,"currency":"EUR","payment_method":null,"payment_provider_ref":null,"coupon_code":null,"invoice_number":null,"prices_include_tax":false,"tax_exempt":false,"tags":[],"cancel_reason":null,"customer_note":null,"staff_note":null,"source_channel_id":null,"platform_metadata":null,"placed_at":"2023-01-15T10:30:00.000Z","cancelled_at":null,"completed_at":null,"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","total":99.99,"subtotal":null,"total_discount":null,"total_paid":null,"total_refunded":null,"total_shipping":null,"total_tax":null,"exchange_rate":null,"billing_address":null,"shipping_address":null,"line_items":[]}]}}}},"401":{"description":"unauthorized"}}}},"/api/sdk/v1/transactions/{id}":{"get":{"summary":"show transaction","tags":["SDK Transactions"],"security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"ID Token for user authentication","schema":{"type":"string"}},{"name":"id","in":"path","description":"id of the transaction","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful","content":{"application/json":{"example":{"id":"static00-Uuid-0000-0000-000000000000","user_id":"static00-Uuid-0000-0000-000000000000","transaction_category_id":"static00-Uuid-0000-0000-000000000000","external_id":"p2ct9szcst","reference":"xe7fvkp6if","source_platform":"shopify","order_type":null,"state":"refunded","financial_status":null,"fulfillment_status":null,"currency":"EUR","payment_method":null,"payment_provider_ref":null,"coupon_code":null,"invoice_number":null,"prices_include_tax":false,"tax_exempt":false,"tags":[],"cancel_reason":null,"customer_note":null,"staff_note":null,"source_channel_id":null,"platform_metadata":null,"placed_at":"2023-01-15T10:30:00.000Z","cancelled_at":null,"completed_at":null,"created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","total":99.99,"subtotal":null,"total_discount":null,"total_paid":null,"total_refunded":null,"total_shipping":null,"total_tax":null,"exchange_rate":null,"billing_address":null,"shipping_address":null,"line_items":[]}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}},"/api/sdk/v1/user":{"get":{"summary":"get user with relations","tags":["SDK Users"],"description":"Retrieves the authenticated user's data with optional relation preloading.\n\n**Preloading Relations:**\nUse the `preload` parameter to include related data in the response:\n- `tickets`: User's event tickets\n- `subscriptions`: User's subscriptions (season tickets, memberships)\n- `newsletter_subscriptions`: User's newsletter subscriptions\n\n**Filtering:**\nWhen preloading relations, you can filter results using JSON filter parameters:\n- `ticket_filter`: Filter tickets by `category_id`, `event_date`, etc.\n- `subscription_filter`: Filter subscriptions by `category_id`, `status`, etc.\n- `newsletter_subscription_filter`: Filter by `internal_name` or `confirmed` status\n\n**Example filter:**\n```\n?preload[]=tickets\u0026ticket_filter={\"category_id\":123}\n```\n\n**Limits:**\nEach relation is limited to 101 items maximum for performance.\n","security":[{"sdk_token":[]}],"parameters":[{"name":"X-ID-Token","in":"header","required":true,"description":"JWT ID token obtained from authentication endpoint","schema":{"type":"string"}},{"name":"preload","in":"query","required":false,"description":"Relations to include in response","items":{"type":"string","enum":["tickets","subscriptions","newsletter_subscriptions"]},"style":"form","explode":true,"schema":{"type":"array"}},{"name":"ticket_filter","in":"query","required":false,"description":"JSON object with ticket filter criteria (e.g., {\"category_id\": 123})","schema":{"type":"string"}},{"name":"subscription_filter","in":"query","required":false,"description":"JSON object with subscription filter criteria","schema":{"type":"string"}},{"name":"newsletter_subscription_filter","in":"query","required":false,"description":"JSON object with newsletter subscription filter criteria (e.g., {\"internal_name\": \"weekly\", \"confirmed\": true})","schema":{"type":"string"}}],"responses":{"200":{"description":"successful with preload","content":{"application/json":{"example":{"id":"static00-Uuid-0000-0000-000000000000","email":"user@example.com","first_name":"Raditz","last_name":"Dionysus","salutation":"mr","phone_number":"+494066969123","company_name":"McClure, Schuster and Dibbert","address_line_1":"2989 Glory Skyway","address_line_2":"Apt. 820","city":"Braunbury","postal_code":"15593-5191","country_code":"DE","preferred_language":null,"role":"user","verified":true,"date_of_birth":"1987-11-23","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","verified_at":"2023-01-15T10:30:00.000Z","custom_attributes":{},"tickets":[{"id":"static00-Uuid-0000-0000-000000000000","title":"factory title","text":"factory test text which descirbes the subscription","reference":"987654321","metadata":null,"wallet_export":null,"state":"active","payment_state":"payed","button_cta_url":"https://google.de","info_banner":null,"seating":"factory seating","venue":"factory venue","currency":"EUR","ticket_category_id":"static00-Uuid-0000-0000-000000000000","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","price":100.99,"user_id":"static00-Uuid-0000-0000-000000000000","holder_id":null,"exportable_to_wallet":false}],"subscriptions":[{"id":"static00-Uuid-0000-0000-000000000000","title":"factory title","text":"factory test text which descirbes the subscription","payment_frequency":"yearly","metadata":null,"wallet_export":null,"state":"active","reference":"987654321","payment_state":"payed","currency":"EUR","button_cta_url":null,"subscription_category_id":"static00-Uuid-0000-0000-000000000000","created_at":"2023-01-15T10:30:00.000Z","updated_at":"2023-01-15T10:30:00.000Z","starts_at":"2023-01-15T10:30:00.000Z","ends_at":"2023-01-15T10:30:00.000Z","next_payment_at":"2023-01-15T10:30:00.000Z","price":100.99,"exportable_to_wallet":false,"user_id":"static00-Uuid-0000-0000-000000000000"}]}}}},"401":{"description":"unauthorized"},"404":{"description":"not found"}}}}},"components":{"securitySchemes":{"sdk_token":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"profile":{"type":"object","properties":{"salutation":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"radio_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"checked":{"type":"boolean"}}}}}},"first_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"last_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"phone_number":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"date_of_birth":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"company_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"address_line_1":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"address_line_2":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"city":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"postal_code":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"country_code":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}},"email":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"preferred_language":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"custom_attributes":{"type":"object","additionalProperties":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"readonly":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}},"radio_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"checked":{"type":"boolean"}}}}}}}}},"update_profile":{"type":"object","properties":{"salutation":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"radio_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"checked":{"type":"boolean"}}}}}},"first_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"last_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"phone_number":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"date_of_birth":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"company_name":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"address_line_1":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"address_line_2":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"city":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"postal_code":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"country_code":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}}}},"email":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"preferred_language":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"}}},"custom_attributes":{"type":"object","additionalProperties":{"type":"object","properties":{"value":{"type":["string","null"]},"type":{"type":"string"},"required":{"type":"boolean"},"label":{"type":"string"},"attr_name":{"type":"string"},"readonly":{"type":"boolean"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}}}},"radio_options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"checked":{"type":"boolean"}}}}}}}}},"newsletter":{"type":"object","properties":{"id":{"type":"integer","example":1},"internal_name":{"type":"string","example":"newsletter_internal_name"},"default":{"type":"boolean","example":false},"position":{"type":"integer","example":0},"opt_in_type":{"type":"string","example":"doi"},"title":{"type":"string","example":"Newsletter title"},"description":{"type":["string","null"],"example":"Newsletter description"},"created_at":{"type":"string","example":"2020-01-01T00:00:00Z","format":"date-time"},"updated_at":{"type":"string","example":"2020-01-01T00:00:00Z","format":"date-time"},"preference_groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Preference group name"},"position":{"type":"integer","example":0},"flat":{"type":"boolean","example":false},"preferences":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Preference name"},"description":{"type":["string","null"],"example":"Preference description"},"plugin_identifier":{"type":["string","null"],"example":"preference_identifier"},"position":{"type":"integer","example":0},"default":{"type":"boolean","example":false},"hidden":{"type":"boolean","example":false}}}}}}}}},"newsletters":{"type":"object","properties":{"newsletters":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"internal_name":{"type":"string","example":"newsletter_internal_name"},"default":{"type":"boolean","example":false},"position":{"type":"integer","example":0},"opt_in_type":{"type":"string","example":"doi"},"title":{"type":"string","example":"Newsletter title"},"description":{"type":["string","null"],"example":"Newsletter description"},"created_at":{"type":"string","example":"2020-01-01T00:00:00Z","format":"date-time"},"updated_at":{"type":"string","example":"2020-01-01T00:00:00Z","format":"date-time"},"preference_groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Preference group name"},"position":{"type":"integer","example":0},"flat":{"type":"boolean","example":false},"preferences":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Preference name"},"description":{"type":["string","null"],"example":"Preference description"},"plugin_identifier":{"type":["string","null"],"example":"preference_identifier"},"position":{"type":"integer","example":0},"default":{"type":"boolean","example":false},"hidden":{"type":"boolean","example":false}}}}}}}}}}}},"newsletter_subscription":{"type":"object","properties":{"id":{"type":"integer","example":1},"email":{"type":"string","example":"user@gmail.com"},"preference_token":{"type":"string","example":"se7xZa1mzpClveAQPZwANr123","description":"Unique newsletter subscription token"},"preference_identifiers":{"type":"array","items":{"type":"string","example":"newsletter_preference_identifier","description":"Newsletter preference identifier"},"example":["newsletter_preference_identifier"],"uniqueItems":true,"description":"Newsletter preferences"},"confirmed_at":{"type":["string",null],"example":"2020-01-01T00:00:00Z","description":"Date and time when the subscription was confirmed","format":"date-time"},"newsletter_internal_name":{"type":"string","example":"newsletter_internal_name","description":"Unique identifier of the newsletter"}},"required":["id","email","preference_identifiers","newsletter_internal_name"]},"newsletter_subscriptions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","example":1},"email":{"type":"string","example":"user@gmail.com"},"preference_token":{"type":"string","example":"se7xZa1mzpClveAQPZwANr123","description":"Unique newsletter subscription token"},"preference_identifiers":{"type":"array","items":{"type":"string","example":"newsletter_preference_identifier","description":"Newsletter preference identifier"},"example":["newsletter_preference_identifier"],"uniqueItems":true,"description":"Newsletter preferences"},"confirmed_at":{"type":["string",null],"example":"2020-01-01T00:00:00Z","description":"Date and time when the subscription was confirmed","format":"date-time"},"newsletter_internal_name":{"type":"string","example":"newsletter_internal_name","description":"Unique identifier of the newsletter"}},"required":["id","email","preference_identifiers","newsletter_internal_name"]}},"create_registration":{"type":"object","properties":{"registration_url":{"type":"string","format":"uri","example":"https://example.com/registration"},"brand_id":{"type":"integer","example":1,"description":"Brand ID to associate with the registration flow. If not provided, will use Current.brand when finalizing."},"email":{"type":"string","format":"email","example":"user@example.com"},"password":{"type":"string","example":"secure_password123","description":"User password"},"passwordless_flag":{"type":"boolean","example":true,"description":"Flag to indicate passwordless magic link flow"},"registration_profile_data":{"type":"object","properties":{"first_name":{"type":["string","null"],"example":"Herrman"},"last_name":{"type":["string","null"],"example":"Mueller"},"salutation":{"type":["string","null"],"example":"mr","enum":["mr","mrs","mx",null]},"phone_number":{"type":["string","null"],"example":"+49123456789"},"date_of_birth":{"type":["string","null"],"format":"date","example":"1991-06-10"},"company_name":{"type":["string","null"],"example":"Unidy"},"address_line_1":{"type":["string","null"],"example":"Jakob-Kaiser-Str 70a"},"address_line_2":{"type":["string","null"],"example":"5 OG"},"city":{"type":["string","null"],"example":"Hamburg"},"postal_code":{"type":["string","null"],"example":"AA0A 0AA"},"country_code":{"type":["string","null"],"example":"GB","description":"codes follow ISO 3166"},"preferred_language":{"type":["string","null"],"example":"de"},"custom_attributes":{"type":"object","description":"Object containing key-value pairs where keys are the custom attribute names.","properties":{"_clear":{"type":"object","description":"Object with custom attribute keys, values must be true to clear previously set custom attributes","additionalProperties":{"type":"boolean","example":true}}},"additionalProperties":true},"_clear":{"type":"object","description":"Object with same keys as registration_profile_data, values must be true to clear previously set data","properties":{"first_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"last_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"salutation":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"phone_number":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"date_of_birth":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"company_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"address_line_1":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"address_line_2":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"city":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"postal_code":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"country_code":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"preferred_language":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"custom_attributes":{"type":"boolean","example":true,"description":"Set to true to clear all custom attributes"}},"additionalProperties":false}},"additionalProperties":false},"newsletter_preferences":{"type":"object","description":"Newsletter preferences in format {main: [daily], other: []}","properties":{"_clear":{"type":"object","description":"Object with newsletter category keys, values must be true to clear previously set preferences for that category","additionalProperties":{"type":"boolean","example":true}}},"additionalProperties":{"type":"array","items":{"type":"string"}}}},"required":["registration_url"],"additionalProperties":false},"update_registration":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"user@example.com"},"password":{"type":"string","example":"secure_password123","description":"User password"},"passwordless_flag":{"type":"boolean","example":true,"description":"Flag to indicate passwordless magic link flow"},"registration_profile_data":{"type":"object","properties":{"first_name":{"type":["string","null"],"example":"Herrman"},"last_name":{"type":["string","null"],"example":"Mueller"},"salutation":{"type":["string","null"],"example":"mr","enum":["mr","mrs","mx",null]},"phone_number":{"type":["string","null"],"example":"+49123456789"},"date_of_birth":{"type":["string","null"],"format":"date","example":"1991-06-10"},"company_name":{"type":["string","null"],"example":"Unidy"},"address_line_1":{"type":["string","null"],"example":"Jakob-Kaiser-Str 70a"},"address_line_2":{"type":["string","null"],"example":"5 OG"},"city":{"type":["string","null"],"example":"Hamburg"},"postal_code":{"type":["string","null"],"example":"AA0A 0AA"},"country_code":{"type":["string","null"],"example":"GB","description":"codes follow ISO 3166"},"preferred_language":{"type":["string","null"],"example":"de"},"custom_attributes":{"type":"object","description":"Object containing key-value pairs where keys are the custom attribute names.","properties":{"_clear":{"type":"object","description":"Object with custom attribute keys, values must be true to clear previously set custom attributes","additionalProperties":{"type":"boolean","example":true}}},"additionalProperties":true},"_clear":{"type":"object","description":"Object with same keys as registration_profile_data, values must be true to clear previously set data","properties":{"first_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"last_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"salutation":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"phone_number":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"date_of_birth":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"company_name":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"address_line_1":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"address_line_2":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"city":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"postal_code":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"country_code":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"preferred_language":{"type":"boolean","example":true,"description":"Set to true to clear this field"},"custom_attributes":{"type":"boolean","example":true,"description":"Set to true to clear all custom attributes"}},"additionalProperties":false}},"additionalProperties":false},"newsletter_preferences":{"type":"object","description":"Newsletter preferences in format {main: [daily], other: []}","properties":{"_clear":{"type":"object","description":"Object with newsletter category keys, values must be true to clear previously set preferences for that category","additionalProperties":{"type":"boolean","example":true}}},"additionalProperties":{"type":"array","items":{"type":"string"}}}},"additionalProperties":false},"verify_email":{"type":"object","properties":{"code":{"type":"string","pattern":"^\\d{4}$","example":"1234","description":"The 4-digit verification code sent to the email"}},"required":["code"],"additionalProperties":false},"send_resume_link":{"type":"object","properties":{"email":{"type":"string","format":"email","example":"user@example.com","description":"Email address to send the resume link to"}},"required":["email"],"additionalProperties":false},"internal_matching_check":{"type":"object","properties":{"matching_value":{"type":"string","description":"The value to match (e.g., unidy_id, email, custom attribute)"},"matching_additional_attributes":{"type":"object","description":"Additional attributes for matching verification","additionalProperties":{"type":"string"}}},"required":["matching_value"],"additionalProperties":false},"internal_matching_confirm":{"type":"object","properties":{"matching_user_id":{"type":"integer","description":"The ID of the matched user to confirm takeover for"}},"required":["matching_user_id"],"additionalProperties":false},"ticket_transfer":{"type":"object","properties":{"token":{"type":"string","example":"wbHdSbTvxCFxwG6GbQAECGJq","description":"Identifier of the transfer, used for accept/decline/cancel"},"status":{"type":"string","enum":["pending","accepted","canceled","declined","expired","reverted"],"example":"pending"},"recipient_email":{"type":"string","format":"email","example":"recipient@example.com"},"sender_email":{"type":"string","format":"email","example":"owner@example.com"},"expires_at":{"type":"string","format":"date-time","description":"When the pending offer expires"},"created_at":{"type":"string","format":"date-time"},"ticket":{"type":"object","description":"The transferred ticket (same shape as GET /api/sdk/v1/tickets/:id)"}}},"ticket_transfers":{"type":"object","properties":{"incoming":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","example":"wbHdSbTvxCFxwG6GbQAECGJq","description":"Identifier of the transfer, used for accept/decline/cancel"},"status":{"type":"string","enum":["pending","accepted","canceled","declined","expired","reverted"],"example":"pending"},"recipient_email":{"type":"string","format":"email","example":"recipient@example.com"},"sender_email":{"type":"string","format":"email","example":"owner@example.com"},"expires_at":{"type":"string","format":"date-time","description":"When the pending offer expires"},"created_at":{"type":"string","format":"date-time"},"ticket":{"type":"object","description":"The transferred ticket (same shape as GET /api/sdk/v1/tickets/:id)"}}},"description":"Pending transfers addressed to the authenticated user"},"outgoing":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","example":"wbHdSbTvxCFxwG6GbQAECGJq","description":"Identifier of the transfer, used for accept/decline/cancel"},"status":{"type":"string","enum":["pending","accepted","canceled","declined","expired","reverted"],"example":"pending"},"recipient_email":{"type":"string","format":"email","example":"recipient@example.com"},"sender_email":{"type":"string","format":"email","example":"owner@example.com"},"expires_at":{"type":"string","format":"date-time","description":"When the pending offer expires"},"created_at":{"type":"string","format":"date-time"},"ticket":{"type":"object","description":"The transferred ticket (same shape as GET /api/sdk/v1/tickets/:id)"}}},"description":"Pending transfers sent by the authenticated user"}}}}}}