Auth API
POST /v1/auth/change-password
Change Password
Change password for an authenticated user without invalidating the current session.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Request body (ChangePasswordRequest)
| Field | Type | Required | Description |
|---|---|---|---|
current_password |
string | yes | (max 255, min 8) |
new_password |
string | yes | (max 255, min 8) |
Response 200 (PasswordResetActionResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/change-password" \
-H "Authorization: Bearer $PINBRIDGE_JWT" \
-H "Content-Type: application/json" \
-d '{"current_password": "correct-horse-battery-staple", "new_password": "a-new-long-passphrase"}'
GET /v1/auth/email/change/confirm
Confirm Primary Email Change
Consume an old-email approval link and switch the primary email.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
token |
query | yes | string |
Response 200 (PrimaryEmailChangeActionResponse)
curl -X GET "https://api.pinbridge.io/v1/auth/email/change/confirm?token=$TOKEN"
POST /v1/auth/email/change/request
Request Primary Email Change
Send an old-email approval link for changing the primary login email.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Request body (PrimaryEmailChangeRequest)
| Field | Type | Required | Description |
|---|---|---|---|
new_email |
string | yes |
Response 200 (PrimaryEmailChangeRequestResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/email/change/request" \
-H "Authorization: Bearer $PINBRIDGE_JWT" \
-H "Content-Type: application/json" \
-d '{"new_email": "jane@example.com"}'
GET /v1/auth/email/verify
Verify Email
Consume an email verification token.
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
token |
query | yes | string |
Response 200 (EmailVerificationActionResponse)
curl -X GET "https://api.pinbridge.io/v1/auth/email/verify?token=$TOKEN"
POST /v1/auth/email/verify/request
Request Email Verification
Send a fresh verification email for the authenticated user.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Response 200 (EmailVerificationActionResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/email/verify/request" \
-H "Authorization: Bearer $PINBRIDGE_JWT"
POST /v1/auth/forgot-password
Forgot Password
Issue a short-lived password reset token and send reset email.
Request body (ForgotPasswordRequest)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | yes |
Response 200 (PasswordResetActionResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/forgot-password" \
-H "Content-Type: application/json" \
-d '{"email": "jane@example.com"}'
POST /v1/auth/login
Login
Authenticate with email/password and return bearer token.
Request body (LoginRequest)
| Field | Type | Required | Description |
|---|---|---|---|
email |
string | yes | |
password |
string | yes | (max 255, min 8) |
timezone |
string? | no | Browser IANA timezone used for first-login timezone backfill |
invite_token |
string? | no | Optional organization invitation token to accept during login. |
Response 200 (AuthResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{"email": "jane@example.com", "password": "correct-horse-battery-staple"}'
GET /v1/auth/me
Me
Return current user and workspace for JWT-authenticated sessions.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Response 200 (MeResponse)
curl -X GET "https://api.pinbridge.io/v1/auth/me" \
-H "Authorization: Bearer $PINBRIDGE_JWT"
GET /v1/auth/profile
Get Profile
Get billing/invoice profile fields for the current authenticated user.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Response 200 (ProfileResponse)
curl -X GET "https://api.pinbridge.io/v1/auth/profile" \
-H "Authorization: Bearer $PINBRIDGE_JWT"
PUT /v1/auth/profile
Update Profile
Update billing/invoice profile fields for the current authenticated user.
Auth: BearerAuth with a user session token (JWT). API keys are rejected.
Request body (ProfileUpdateRequest)
| Field | Type | Required | Description |
|---|---|---|---|
full_name |
string? | no | |
workspace_name |
string? | no | |
company_name |
string? | no | |
company_website |
string? | no | |
billing_email |
string? | no | |
billing_phone |
string? | no | |
tax_id |
string? | no | |
address_line1 |
string? | no | |
address_line2 |
string? | no | |
address_city |
string? | no | |
address_state |
string? | no | |
address_postal_code |
string? | no | |
address_country |
string? | no |
Response 200 (ProfileResponse)
curl -X PUT "https://api.pinbridge.io/v1/auth/profile" \
-H "Authorization: Bearer $PINBRIDGE_JWT" \
-H "Content-Type: application/json" \
-d '{"full_name": "Jane Doe"}'
POST /v1/auth/register
Register
Register a new user and create production project for their organization.
Request body (RegisterRequest)
| Field | Type | Required | Description |
|---|---|---|---|
full_name |
string | yes | (max 255, min 1) |
email |
string | yes | |
password |
string | yes | (max 255, min 8) |
workspace_name |
string? | no | |
timezone |
string? | no | Default IANA timezone for the user/workspace (e.g. America/New_York) |
next_path |
string? | no | Optional relative path to preserve through signup and email verification flows. |
marketing_attribution |
RegisterMarketingAttribution? | no | Optional marketing attribution metadata captured at signup. |
invite_token |
string? | no | Optional organization invitation token to accept during registration. |
Response 201 (AuthResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/register" \
-H "Content-Type: application/json" \
-d '{"full_name": "Jane Doe", "email": "jane@example.com", "password": "correct-horse-battery-staple"}'
POST /v1/auth/reset-password
Reset Password
Reset a user’s password from a valid single-use token.
Request body (ResetPasswordRequest)
| Field | Type | Required | Description |
|---|---|---|---|
token |
string | yes | (max 512, min 20) |
password |
string | yes | (max 255, min 8) |
Response 200 (PasswordResetActionResponse)
curl -X POST "https://api.pinbridge.io/v1/auth/reset-password" \
-H "Content-Type: application/json" \
-d '{"token": "token-from-the-email-link", "password": "correct-horse-battery-staple"}'
