Skip to content
Home / Docs / Auth

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"}'

Last updated October 29, 2026 Was this page helpful? Tell us →