Developer documentation
The REST API and MCP server let you read and manage company, member, lead, class, attendance, invoice, messaging, and automation data. They are free on every plan.
Get an API key
Owners and users with the required privileges can create keys at API Access. A key is shown once; choose scopes, set an optional expiry, and revoke it there. High-risk scopes are unchecked by default.
Authentication
Send the key in the Bearer authorization header.
curl -H "Authorization: Bearer us_YOUR_API_KEY" https://users.solutions/api/v1/accountBase URL: https://users.solutions/api/v1
Scopes
| Scope | Access | Required users.solutions privilege | Enabled by default |
|---|---|---|---|
attendance:read | Read attendance | Privilege 3 | Yes |
attendance:write | Record attendance | Privilege 5 | Yes |
automations:read | Read automations | Privilege 35 | Yes |
automations:write | Enable or disable automations | Privilege 35 | Yes |
classes:read | Read classes, rooms, and teachers | Privilege 3 | Yes |
classes:write | Manage classes | Privilege 18 | Yes |
company:read | Read company | None | Yes |
company:write | Edit company | Privilege 1 | Yes |
delete | Delete or deactivate records | Privilege 2 or 4 | No |
fields:read | Read member fields | Privilege 3 | Yes |
fields:write | Create and edit member fields | Privilege 2 | Yes |
invoices:read | Read invoices | Privilege 15 | Yes |
invoices:write | Create and manage invoices | Privilege 7 | Yes |
leads:read | Read leads | Privilege 34 | Yes |
leads:write | Create and edit leads | Privilege 34 | Yes |
members:read | Read members | Privilege 3 | Yes |
members:write | Create and edit members | Privilege 4 | Yes |
messages:read | Read message logs | Privilege 16 | Yes |
messages:send | Send messages | Privilege 16 | No |
payments:write | Mark invoices paid | Privilege 8 | No |
Safety and limits
- Write operations that change data use preview/confirm where supported.
- Use
Idempotency-Keyfor safe retries of supported writes. - Rate limit: 60 requests per minute per API key.
- Daily cap: 200 confirmed messages per company.
- API requests are audit-logged without request or response bodies.
- Human-only actions not in the API: API-key management, billing or plan changes, payment-method entry, payouts, credentials or 2FA, ownership changes, granting privilege 1, and company deletion. Billing and plan changes must be completed by the owner in the browser.
Pagination and errors
List endpoints use limit and cursor where documented. Responses include next_cursor when another page is available. Errors use an error object; validation details may also be returned in errors.
{
"error": {
"code": "validation_error",
"message": "The request could not be processed."
},
"errors": { "name": "This field is required." }
}REST endpoint reference
Generated from the current OpenAPI document at request time. See OpenAPI 3.1 JSON.
Attendance
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /attendance | List attendance records | attendance:read |
| POST | /attendance | Record attendance idempotently | attendance:write |
Automations
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /automations | List company automations with step summaries | automations:read |
| GET | /automations/{id} | Get an automation and its latest 20 runs | automations:read |
| POST | /automations/{id}/disable | Disable an automation | automations:write |
| POST | /automations/{id}/enable | Enable an automation | automations:write |
Classes
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /classes | List company classes with schedule and enrolled members | classes:read |
| POST | /classes | Create a class | classes:write |
| GET | /classes/{id} | Get a class with days, times, room, teacher, and enrolled members | classes:read |
| PATCH | /classes/{id} | Update a class | classes:write |
| POST | /classes/{id}/members | Enroll a member in a class | classes:write |
| DELETE | /classes/{id}/members/{member_id} | Preview or confirm class unenrollment | classes:write |
Company
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /company | Read the key's company | company:read |
| PATCH | /company | Update editable company contact fields | company:write |
Fields
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /fields | List member fields | fields:read |
| POST | /fields | Create a member field | fields:write |
| DELETE | /fields/{id} | Deactivate a member field after confirmation | fields:write + delete |
| PATCH | /fields/{id} | Update a member field | fields:write |
Invoices
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /auto-invoices | List company automatic invoice rules | invoices:read |
| GET | /invoice-categories | List active invoice categories | invoices:read |
| GET | /invoices | List invoices | invoices:read |
| POST | /invoices | Create an invoice | invoices:write |
| DELETE | /invoices/{id} | Preview or confirm invoice deletion | invoices:write + delete |
| GET | /invoices/{id} | Get an invoice with its web and pay URLs | invoices:read |
| POST | /invoices/{id}/mark-paid | Preview or confirm a manual mark-paid update | payments:write |
| POST | /invoices/{id}/send | Preview or confirm an invoice reminder | messages:send |
Leads
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /leads | List leads | leads:read |
| POST | /leads | Create a lead | leads:write |
| GET | /leads/{id} | Get a lead and recent activity | leads:read |
| PATCH | /leads/{id} | Update lead contact fields, stage, and tags | leads:write |
| POST | /leads/{id}/notes | Add a lead note | leads:write |
Members
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /member-form | Get standard and custom member fields | members:read |
| GET | /members | List members | members:read |
| POST | /members | Create a member | members:write |
| DELETE | /members/{id} | Deactivate a member after confirmation | members:write + delete |
| GET | /members/{id} | Get a member and custom field values | members:read |
| PATCH | /members/{id} | Update a member | members:write |
Messages
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /messages | Read SMS and email usage logs | messages:read |
| POST | /messages/email | Preview or send email to members and leads | messages:send |
| POST | /messages/sms | Preview or send SMS to members and leads | messages:send |
OpenAPI
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /openapi.json | Get this OpenAPI document | Public |
Rooms
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /rooms | List active company rooms | classes:read |
Teachers
| Method | Path | Summary | Scope |
|---|---|---|---|
| GET | /teachers | List company teachers | members:read |
MCP
MCP URL: https://users.solutions/mcp
Available tools: get_company, update_company, get_member_form, list_members, search_members, get_member, create_member, update_member, delete_member, list_fields, create_field, update_field, delete_field, list_leads, search_leads, get_lead, create_lead, update_lead, add_lead_note, list_classes, get_class, create_class, update_class, enroll_member, unenroll_member, list_rooms, list_teachers, list_attendance, mark_attendance, list_invoices, get_invoice, create_invoice, send_invoice, mark_invoice_paid, delete_invoice, list_invoice_categories, list_auto_invoices, send_email, send_sms, list_messages, list_automations, get_automation, enable_automation, disable_automation.
Cursor
{
"mcpServers" : {
"users-solutions" : {
"headers" : {
"Authorization" : "Bearer us_YOUR_API_KEY"
},
"url" : "https://users.solutions/mcp"
}
}
}
Claude Code
claude mcp add --transport http users-solutions https://users.solutions/mcp --header "Authorization: Bearer us_YOUR_API_KEY"Syntax: Claude Code MCP documentation.
Claude Desktop
Using the mcp-remote stdio bridge:
{
"mcpServers" : {
"users-solutions" : {
"args" : [
"-y",
"mcp-remote",
"https://users.solutions/mcp",
"--header",
"Authorization: Bearer us_YOUR_API_KEY"
],
"command" : "npx"
}
}
}
To connect from ChatGPT or claude.ai, add this MCP URL as a custom connector, then sign in to approve access. OAuth does not require an API key.