API · User & Account

User & Account API

Manage your user profile, preferences, and account settings. Check listing eligibility and configure account-level behavior.

User profile

GET Get current user

/api/v1/user/me/

Returns the authenticated user's profile, preferences, organization, and listing eligibility.

Response fields

FieldTypeDescription
uidstringUser identifier (read-only)
usernamestringUsername (read-only)
emailstringEmail address (read-only)
first_namestringFirst name (writable)
last_namestringLast name (writable)
phone_numberstringPhone number (read-only)
email_verifiedbooleanWhether email is verified (read-only)
can_manage_api_environmentbooleanAPI management permissions (read-only)
preferencesobjectNested preferences (writable)
organizationobjectUser's organization or null (read-only)
listing_eligibilityobjectWhether user can list items (read-only)

PATCH Update profile

/api/v1/user/me/

Update writable fields: first_name, last_name, and preferences.

Request
curl https://app.instica.com/api/v1/user/me/ \
  -H "Authorization: Bearer YOUR_TOKEN"
Response — 200 OK
{
  "uid": "usr_abc123",
  "username": "vinyl_dealer",
  "email": "dealer@example.com",
  "first_name": "Jane",
  "last_name": "Smith",
  "phone_number": "+15551234567",
  "email_verified": true,
  "can_manage_api_environment": false,
  "preferences": {
    "preferred_name": "Jane",
    "items_per_page": 25,
    "timezone": "America/New_York",
    "measurement_system": "imperial",
    "date_format": "mdy",
    "currency_display": "USD",
    "channel_notifications_enabled": true,
    "preferred_notification_channels": [
      "email", "push"
    ]
  },
  "organization": {
    "uid": "org_xyz",
    "display_name": "Jane's Records",
    "slug": "janes-records"
  },
  "listing_eligibility": {
    "can_list_items": true,
    "error_code": null
  }
}
Update profile
curl -X PATCH \
  https://app.instica.com/api/v1/user/me/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "Jane",
    "last_name": "Smith-Jones"
  }'

Preferences

Preferences are updated via PATCH /api/v1/user/me/ as a nested object in the preferences field.

Preference fields

FieldTypeDescription
preferred_namestringDisplay name
legal_namestringLegal name
job_titlestringJob title
items_per_pageintegerPagination size (5–200)
channel_notifications_enabledbooleanEnable/disable notifications
timezonestringIANA timezone (e.g., America/New_York)
measurement_systemstringimperial or metric
date_formatstringmdy, dmy, or ymd
currency_displaystringCurrency code (e.g., USD)
preferred_notification_channelsstring[]email, push, in_app
Update preferences
curl -X PATCH \
  https://app.instica.com/api/v1/user/me/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "preferences": {
      "timezone": "America/Chicago",
      "items_per_page": 50,
      "date_format": "ymd",
      "preferred_notification_channels": [
        "email", "push", "in_app"
      ]
    }
  }'

Password management

POST Change password

/api/v1/user/password/

Change the current user's password. Requires verification of the existing password.

Request body

FieldTypeRequiredDescription
current_passwordstringYesCurrent password (write-only)
new_passwordstringYesNew password (write-only)
confirm_passwordstringYesMust match new_password (write-only)

Note: This endpoint is separate from /api/auth/password/change/. Either can be used — this one lives under the user namespace.

Request
curl -X POST \
  https://app.instica.com/api/v1/user/password/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "current_password": "OldPass123",
    "new_password": "NewSecure456",
    "confirm_password": "NewSecure456"
  }'

Listing eligibility

The listing_eligibility field in the user profile indicates whether the user can list items on marketplaces. If listing is blocked, an error code explains why.

Eligibility response

FieldTypeDescription
can_list_itemsbooleanWhether the user can list items
error_codeobject | nullBlocking reason if can_list_items is false

Error code object

FieldTypeDescription
uidstringError code identifier
slugstringMachine-readable code (e.g., no_subscription)
messagestringShort error message
descriptionstringDetailed explanation
Eligible user
{
  "can_list_items": true,
  "error_code": null
}
Blocked user
{
  "can_list_items": false,
  "error_code": {
    "uid": "err_001",
    "slug": "no_primary_address",
    "message": "Primary address required",
    "description": "Add a primary shipping address before listing items."
  }
}

Device tokens

Manage push notification device tokens for iOS and web push.

EndpointMethodDescription
/api/v1/device-tokens/register/POSTRegister a device token
/api/v1/device-tokens/GETList registered tokens
/api/v1/device-tokens/{uid}/deactivate/POSTDeactivate a token
/api/v1/device-tokens/{uid}/refresh/POSTRefresh a token
/api/v1/device-tokens/{uid}/DELETEDelete a token
Register device token
curl -X POST \
  https://app.instica.com/api/v1/device-tokens/register/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "fcm_device_token_here",
    "platform": "ios"
  }'

Support inquiries

Submit and manage support inquiries via the API.

EndpointMethodDescription
/api/v1/support/POSTSubmit a support inquiry
/api/v1/support/inquiries/GETList your inquiries
/api/v1/support/inquiries/{uid}/GETInquiry detail
Submit support inquiry
curl -X POST \
  https://app.instica.com/api/v1/support/ \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "subject": "Import issue",
    "message": "My eBay import is stuck..."
  }'