Inviting a developer
Click Invite Member and enter an email address. Open Wearables creates the invitation and queues an email with a link to create the account. Invitation links expire after the number of days set inINVITATION_EXPIRE_DAYS (default 7).
Email delivery
Invitation emails are sent either through any SMTP server or through Resend. Without one of them, invitations are still created but no email goes out. IfSMTP_HOST is set, SMTP is used; otherwise Resend.
These variables apply to both:
EMAIL_FROM_ADDRESS- sender address. Your email provider has to accept it as a sender (for Resend, it must belong to a verified domain).EMAIL_FROM_NAME- display name of the sender.FRONTEND_URL- public URL of the developer portal. It is used to build the acceptance link inside the email, so with the defaulthttp://localhost:3000the link only works on your machine.
SMTP
Works with any provider that offers SMTP: Google Workspace, Microsoft 365, Amazon SES, Mailgun, Postmark, SendGrid, your own relay, and so on.SMTP_HOST- SMTP server hostname. Setting it switches delivery to SMTP.SMTP_PORT- default587.SMTP_USERNAME,SMTP_PASSWORD- credentials. Leave both empty for a server that doesn’t require authentication, e.g. a relay that allows your server by IP address (a Postfix container next to the backend, a Microsoft 365 connector, Google Workspace SMTP relay).SMTP_SECURITY-starttls(default, usually port 587),sslfor implicit TLS (usually port 465), ornonefor an unencrypted connection, e.g. a local Mailpit on port 1025. Withnone,SMTP_USERNAMEandSMTP_PASSWORDmust be empty: Open Wearables won’t send credentials over an unencrypted connection and skips sending with a warning instead. Withstarttlsandssl, the server certificate is verified.
Resend
RESEND_API_KEY- API key from the Resend dashboard. For local testing you can setEMAIL_FROM_ADDRESS=onboarding@resend.dev, which Resend allows only for sending to your own account email.
Delivery and retries
Delivery is handled by a Celery task, so the worker must be running. Failed sends are retried up toEMAIL_MAX_RETRIES times (default 5), after which the invitation is marked failed and can be re-sent from the developer portal.
If neither
SMTP_HOST nor RESEND_API_KEY is set, or EMAIL_FROM_ADDRESS or EMAIL_FROM_NAME is missing, the invitation stays pending and the backend logs a warning instead of sending. EMAIL_FROM_NAME defaults to “Open Wearables”. Use Copy invite link on the pending invitation and share the link manually.Pending Invitations
Invitations that have not been accepted yet appear in a table with the email, sent date, expiry date, and delivery status. For each one you can:- Copy invite link - copy the acceptance URL to share it manually.
- Resend invitation - generates a new link, extends the expiry, and sends the email again. The previous link stops working.
- Revoke invitation - invalidate the link. The invitee can no longer join with it.
Developers
The Developers table lists every account with access to the deployment, with name, email, ID, and creation date. Copy ID copies the developer UUID, which is useful when reading audit fields such as the creator of an API key. Remove team member deletes the account. This cannot be undone.Access model
Open Wearables has a single permission level for developer accounts.- Every developer account is an administrator of the deployment. There are no roles. All developers see the same settings and can perform the same actions.
- There is no self-registration. The first account is seeded from
ADMIN_EMAILandADMIN_PASSWORDon first startup. Every further account can only be created through an invitation sent by an existing developer. - Any developer can invite new team members, revoke pending invitations, and remove other developers.
- API keys and SDK application credentials belong to the deployment, not to the developer who created them. See Credentials.
One developer managing keys, invitations, or team members created by another developer is the intended behavior of this model, not a vulnerability.

