Skip to main content

Users API

Manage user profiles, company accounts, and RBAC permissions.

Overview​

The Users API provides:

  • User Profiles — Manage user information
  • Company Accounts — B2B company management
  • RBAC — Role-based access control
  • Permissions — Scope-based authorization

Base URL​

https://api.huntrecht.com/api/v1/users

Required Scopes​

ScopePermission
users:readView user profiles
users:writeModify user profiles

Get Current User​

GET /users/me

Get the authenticated user's profile.

user = client.users.get_me()

Response​

{
"id": "user_abc123",
"email": "buyer@company.com",
"first_name": "John",
"last_name": "Buyer",
"company_name": "Acme Corporation",
"role": "buyer",
"permissions": [
"orders:read",
"orders:write",
"subscriptions:read",
"credit:read"
],
"company_id": "comp_xyz789",
"shopify_customer_id": "gid://shopify/Customer/123",
"created_at": "2025-06-15T10:00:00Z",
"last_login": "2026-01-11T09:00:00Z"
}

Update User Profile​

PUT /users/me

Update the authenticated user's profile.

Request Body​

FieldTypeDescription
first_namestringFirst name
last_namestringLast name
phonestringPhone number
addressobjectAddress object
preferencesobjectUser preferences
user = client.users.update_me({
"first_name": "John",
"last_name": "Smith",
"phone": "+1-555-987-6543",
"address": {
"street": "456 New Street",
"city": "Business City",
"state": "CA",
"postal_code": "90211",
"country": "US"
},
"preferences": {
"email_notifications": true,
"sms_alerts": false
}
})

Get User by ID​

GET /users/{user_id}

Get a specific user's profile (admin only).

user = client.users.get("user_abc123")

List Users​

GET /users

List users in your organization (admin only).

Query Parameters​

ParameterTypeDescription
company_idstringFilter by company
rolestringFilter by role
statusstringFilter by status
pageintegerPage number
limitintegerResults per page
users = client.users.list(
company_id="comp_xyz789",
role="buyer",
page=1,
limit=50
)

Roles & Permissions​

Available Roles​

RoleDescriptionPermissions
super_adminFull system accessAll permissions
adminCompany adminAll company permissions
managerDepartment managerorders, payments, subscriptions
buyerStandard buyerorders, payments:read, subscriptions:read
viewerRead-only accessorders:read, subscriptions:read
accountantFinancial accesspayments, orders:read
api_clientAPI-only accessConfigurable scopes

Role Hierarchy​

super_admin
└── admin
├── manager
│ ├── buyer
│ │ └── viewer
│ └── accountant
└── api_client

Permissions Reference​

PermissionDescription
orders:readView orders
orders:writeCreate/modify orders
orders:deleteDelete/cancel orders
payments:readView payments
payments:writeProcess payments
subscriptions:readView subscriptions
subscriptions:writeManage subscriptions
credit:readView credit scores
credit:writeRequest credit assessments
kyc:readView KYC status
kyc:writeSubmit KYC documents
users:readView user profiles
users:writeManage users
storefront:readAccess storefront API
price_drops:readView price drops

Company Account​

Get Company​

GET /users/company/{company_id}

Get company details.

company = client.users.get_company("comp_xyz789")

Response​

{
"id": "comp_xyz789",
"name": "Acme Corporation",
"tax_id": "12-3456789",
"status": "verified",
"credit_limit": 50000.00,
"available_credit": 42500.00,
"subscription_tier": "standard",
"members": [
{
"user_id": "user_abc123",
"email": "buyer@company.com",
"role": "admin",
"joined_at": "2025-06-15T10:00:00Z"
}
],
"addresses": [
{
"type": "billing",
"street": "123 Business Ave",
"city": "Commerce City",
"state": "CA",
"postal_code": "90210",
"country": "US"
}
],
"bank_accounts": [
{
"id": "bank_abc123",
"bank_name": "First National Bank",
"last_four": "1234",
"verified": true
}
],
"created_at": "2025-06-15T10:00:00Z",
"shopify_company_id": "gid://shopify/Company/456"
}

Update Company​

PUT /users/company/{company_id}

Update company details (admin only).

company = client.users.update_company("comp_xyz789", {
"name": "Acme Corporation Inc.",
"billing_address": {
"street": "789 Corporate Blvd",
"city": "Finance City",
"state": "NY",
"postal_code": "10001",
"country": "US"
}
})

Invite Team Member​

POST /users/invite

Invite a new user to your company.

Request Body​

FieldTypeRequiredDescription
emailstringYesUser email
rolestringYesUser role
permissionsarrayNoAdditional permissions
invite = client.users.invite({
"email": "newmember@company.com",
"role": "buyer",
"permissions": ["orders:read", "orders:write"]
})

Response​

{
"invitation_id": "inv_abc123",
"email": "newmember@company.com",
"role": "buyer",
"status": "pending",
"expires_at": "2026-01-18T10:00:00Z",
"invitation_link": "https://huntrecht.com/join/inv_abc123"
}

Accept Invitation​

POST /users/accept-invitation

Accept a team invitation.

result = client.users.accept_invitation({
"invitation_id": "inv_abc123",
"first_name": "Jane",
"last_name": "Member"
})

Webhook Events​

EventDescription
user.createdNew user registered
user.updatedUser profile updated
user.invitedTeam invitation sent
user.joinedUser accepted invitation
user.removedUser removed from company
company.updatedCompany details updated

Error Codes​

CodeDescription
USER_NOT_FOUNDUser ID not found
COMPANY_NOT_FOUNDCompany ID not found
EMAIL_EXISTSEmail already registered
INVALID_ROLEInvalid role specified
INSUFFICIENT_PERMISSIONSCannot modify this resource

Next Steps​