TelgeaDevelopers

Users

The people in your organisation who hold a line: create them, keep their details current, and remove them when they leave.

The user object

Manage employees and contractors in your organization.

FieldTypeDescription
idrequiredstringUUID of the user. Use it to provision a plan, submit a port-in, or update the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
emailrequiredstring (email)Email address. Unique within your organization.
firstNamerequiredstringFirst name.
Anna
lastNamerequiredstringLast name.
Holm
teamIdrequiredstringUUID of the team the user belongs to, or null.
2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70
employeeIdrequiredstringYour own identifier for this person, as sent on create or update, or null.
EMP-0142
costCoderequiredstringCost center code used on invoices, or null.
CC-4100

Operations

List users

GET/v1/users
Enterprise APIPartner API

Lists all users in your organization with pagination and optional filtering.

You can filter the results by exact email address or employee ID. Use pagination parameters to control the number of results returned per page.

Requires the permission users:read on the key.

Try it in the playground → Calls run against your live organization; there is no sandbox.

Parameters

ParameterInTypeDescription
pagequeryintegerPage to return, starting at 1.
1
pageSizequeryintegerItems per page, at most 50. Defaults to 10.
10
emailquerystring (email)Filter by exact email address
employeeIdquerystringFilter by exact employee ID
EMP-0142

Responses

StatusMeaningBody
200Successfully retrieved list of usersListUsersResponse
400Request failed schema validation, or was refused by a business rulenone
401Missing or invalid API key in the X-API-Key headerUnauthorizedError
403Insufficient permissions to list usersForbiddenError
429The API key has used its request quota for the current window. `Retry-After` says how many seconds until it resets.TooManyRequestsError
500Internal server error. Contact support if this persists.InternalError

Problems this endpoint can return

This endpoint returns no domain-specific problems.

Response fields

200 ListUsersResponse

FieldTypeDescription
pagerequiredintegerThe page these items came from.
1
pageSizerequiredintegerItems per page, as requested.
50
itemsCountrequiredintegerTotal items across all pages. Divide by pageSize to get the number of pages.
142
itemsrequiredarray of UserListItemUsers on this page.
Show 7 child fields of items
FieldTypeDescription
idrequiredstringUUID of the user. Use it to provision a plan, submit a port-in, or update the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
emailrequiredstring (email)Email address. Unique within your organization.
firstNamerequiredstringFirst name.
Anna
lastNamerequiredstringLast name.
Holm
teamIdrequiredstringUUID of the team the user belongs to, or null.
2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70
employeeIdrequiredstringYour own identifier for this person, as sent on create or update, or null.
EMP-0142
costCoderequiredstringCost center code used on invoices, or null.
CC-4100
GET/v1/users

Request

curl -X GET "https://api.telgea.com/v1/users" \
  -H "x-api-key: $TELGEA_API_KEY"

Response

{
  "page": 1,
  "pageSize": 10,
  "itemsCount": 2,
  "items": [
    {
      "id": "9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01",
      "email": "[email protected]",
      "firstName": "Anna",
      "lastName": "Holm",
      "teamId": "2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70",
      "employeeId": "EMP-0142",
      "costCode": "CC-4100"
    },
    {
      "id": "3e5d1b42-7c90-4a18-b6f3-0d9e2a4c7f85",
      "email": "[email protected]",
      "firstName": "Jonas",
      "lastName": "Berg",
      "teamId": null,
      "employeeId": null,
      "costCode": null
    }
  ]
}

Create a new user

POST/v1/users
Enterprise APIPartner API

Creates a new user in your organization. Use this endpoint to onboard employees or contractors who need mobile numbers or telecommunications resources.

Once created, the user can be assigned to teams, associated with billing entities, and provisioned with SIM cards through the user-plans endpoint.

Requires the permission users:create on the key.

Try it in the playground → Calls run against your live organization; there is no sandbox.

Parameters

ParameterInTypeDescription
idempotency-keyheaderstringA value unique to this request, of 1 to 255 printable ASCII characters — a UUID is the usual choice. Retry with the same key within 24 hours and you get the original response back, even if it was a failure, and nothing is done twice. Send a new key whenever you change the request. Keys are private to your API key and organisation.
0b7e4f1c-6a2d-4c9e-8f35-d1a7b2c93e60

Request body

FieldTypeDescription
emailrequiredstring (email)Email address of the new user. Unique within your organization.
firstNamerequiredstringFirst name
Anna
lastNamerequiredstringLast name
Holm
teamIdstring (uuid)Team to assign the user to. Omitted, the user joins the default team, Unassigned.
2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70
costCodestringCost center code for billing purposes
CC-4100
employeeIdstringExternal employee identifier
EMP-0142

Responses

StatusMeaningBody
200User created successfully. Returns the created user object including the auto-generated user ID.CreateUserResponse
400Request failed schema validation, or was refused by a business rulenone
401Missing or invalid API key in the X-API-Key headerUnauthorizedError
403Insufficient permissions to create usersForbiddenError
404`teamId` names no team in your organizationNotFoundError
409No user was created: another user already holds this email address.ConflictError
429The API key has used its request quota for the current window. `Retry-After` says how many seconds until it resets.TooManyRequestsError
500Internal server error. Contact support if this persists.InternalError

Problems this endpoint can return

StatusProblemWhen
409Email address not availableA user is created, or an email is changed, to an address another user already holds.
Response fields

200 CreateUserResponse

FieldTypeDescription
idrequiredstringUUID of the created user. Use it to provision a plan, submit a port-in, or update the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
emailrequiredstring (email)Email address as stored.
firstNamerequiredstringFirst name as stored.
Anna
lastNamerequiredstringLast name as stored.
Holm
POST/v1/users

Request

curl -X POST "https://api.telgea.com/v1/users" \
  -H "x-api-key: $TELGEA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]",
  "firstName": "Anna",
  "lastName": "Holm",
  "teamId": "2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70",
  "costCode": "CC-4100",
  "employeeId": "EMP-0142"
}'

Response

{
  "id": "9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01",
  "email": "[email protected]",
  "firstName": "Anna",
  "lastName": "Holm"
}

Update a user

PATCH/v1/users/{userId}
Enterprise APIPartner API

Updates an existing user's information. All fields are optional - only provide the fields you want to update.

You can update basic information like name, as well as organizational assignments like team membership, cost center codes, and employee IDs.

Requires the permission users:update on the key.

Try it in the playground → Calls run against your live organization; there is no sandbox.

Parameters

ParameterInTypeDescription
userIdrequiredpathstring (uuid)UUID of the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
idempotency-keyheaderstringA value unique to this request, of 1 to 255 printable ASCII characters — a UUID is the usual choice. Retry with the same key within 24 hours and you get the original response back, even if it was a failure, and nothing is done twice. Send a new key whenever you change the request. Keys are private to your API key and organisation.
0b7e4f1c-6a2d-4c9e-8f35-d1a7b2c93e60

Request body

FieldTypeDescription
emailstring (email)Email address
firstNamestringFirst name
Anna
lastNamestringLast name
Holm
teamIdstring (uuid)Team to assign the user to. null moves the user to the default team, Unassigned.
2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70
costCodestringCost center code for billing purposes (null to remove)
CC-4100
employeeIdstringExternal employee identifier (null to remove)
EMP-0142

Responses

StatusMeaningBody
204User updated successfully. No content returned.none
400Request failed schema validation, or was refused by a business rulenone
401Missing or invalid API key in the X-API-Key headerUnauthorizedError
403Insufficient permissions to update usersForbiddenError
404User not found, or `teamId` names no team in your organizationNotFoundError
409No change was made: another user already holds this email address.ConflictError
429The API key has used its request quota for the current window. `Retry-After` says how many seconds until it resets.TooManyRequestsError
500Internal server error. Contact support if this persists.InternalError

Problems this endpoint can return

StatusProblemWhen
409Email address not availableA user is created, or an email is changed, to an address another user already holds.
404User not foundA request names a user that your organization does not have.
PATCH/v1/users/{userId}

Request

curl -X PATCH "https://api.telgea.com/v1/users/9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01" \
  -H "x-api-key: $TELGEA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "[email protected]",
  "firstName": "Anna",
  "lastName": "Holm-Jensen",
  "teamId": "2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70",
  "costCode": "CC-4100",
  "employeeId": "EMP-0142"
}'

Response

{
  "type": "https://developer.telgea.com/errors/http/BAD_REQUEST",
  "title": "Bad request",
  "status": 400,
  "detail": "This request was refused, and no more specific code describes why.",
  "code": "BAD_REQUEST",
  "requestId": "req_123"
}

Delete a user

DELETE/v1/users/{userId}
Enterprise APIPartner API

Permanently deletes a user from your organization.

Important Restrictions: - Cannot delete users with active phone numbers (must terminate user plan first) - Cannot delete admin users - Cannot delete yourself

Before deleting, ensure the user's local number is in SUSPENDED, DEACTIVATED state, or doesn't exist.

Requires the permission users:delete on the key.

Try it in the playground → Calls run against your live organization; there is no sandbox.

Parameters

ParameterInTypeDescription
userIdrequiredpathstring (uuid)UUID of the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
idempotency-keyheaderstringA value unique to this request, of 1 to 255 printable ASCII characters — a UUID is the usual choice. Retry with the same key within 24 hours and you get the original response back, even if it was a failure, and nothing is done twice. Send a new key whenever you change the request. Keys are private to your API key and organisation.
0b7e4f1c-6a2d-4c9e-8f35-d1a7b2c93e60

Responses

StatusMeaningBody
204User deleted successfully. No content returned.none
400Cannot delete user with active phone numbersnone
401Missing or invalid API key in the X-API-Key headerUnauthorizedError
403Insufficient permissions, or attempting to delete self or admin userForbiddenError
404User not foundNotFoundError
429The API key has used its request quota for the current window. `Retry-After` says how many seconds until it resets.TooManyRequestsError
500Internal server error. Contact support if this persists.InternalError

Problems this endpoint can return

StatusProblemWhen
404User not foundA request names a user that your organization does not have.
DELETE/v1/users/{userId}

Request

curl -X DELETE "https://api.telgea.com/v1/users/9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01" \
  -H "x-api-key: $TELGEA_API_KEY"

Response

{
  "type": "https://developer.telgea.com/errors/http/BAD_REQUEST",
  "title": "Bad request",
  "status": 400,
  "detail": "This request was refused, and no more specific code describes why.",
  "code": "BAD_REQUEST",
  "requestId": "req_123"
}

Get a user's cost threshold and spend

GET/v1/users/{userId}/cost-thresholds/{usageType}
Enterprise APIPartner API

Where a user stands against their cost threshold on one usage type: the threshold in force for them (their own, else their team's, else the organization's), their spend this month against it, and whether the usage is paused for crossing it.

The spend is converted into the threshold's currency at the day's exchange rate, so it is approximate; usage already under way may take it past the threshold before it ends.

Thresholds are set with PUT /v1/cost-thresholds. A usage type with no threshold support yet answers 422.

Scope: users:read.

Requires the permission users:read on the key.

Try it in the playground → Calls run against your live organization; there is no sandbox.

Parameters

ParameterInTypeDescription
userIdrequiredpathstring (uuid)UUID of the user.
9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01
usageTyperequiredpathenumThe usage type the threshold is on. `VOICE` is international calling: reaching it pauses international calls and SMS on the person's lines, where their market offers the pause. Other types answer `422` until the platform can enforce them.
VOICE

Responses

StatusMeaningBody
200The user's threshold, spend and pause on the usage type.UserCostThresholdResponse
400Request failed schema validation, or was refused by a business rulenone
401Missing or invalid API key in the X-API-Key headerUnauthorizedError
403Insufficient permissions to view usersForbiddenError
404No user in your organization has this id, so nothing was read or changed.NotFoundError
422No threshold can stand on this usage type yet, so nothing was read or changed.UnprocessableEntityError
429The API key has used its request quota for the current window. `Retry-After` says how many seconds until it resets.TooManyRequestsError
500Internal server error. Contact support if this persists.InternalError

Problems this endpoint can return

StatusProblemWhen
404User not foundA cost threshold is listed, set, removed or read for a user id your organization does not hold.
422Usage type not supportedA cost threshold is set, removed or read on a usage type the platform cannot yet enforce.
Response fields

200 UserCostThresholdResponse

FieldTypeDescription
thresholdrequiredCostThreshold or nullThe threshold in force for the user: their own, else their team's, else the organization's. Null when none is set.
Show 10 child fields of threshold
FieldTypeDescription
idrequiredstringUUID of the threshold.
5d0b2c1e-7f3a-4b6c-9e8d-2a1f0c3b4d5e
usageTyperequiredenum
DATAVOICESMSMMS
The usage type the threshold is on. `VOICE` is international calling: reaching it pauses international calls and SMS on the person's lines, where their market offers the pause. Other types answer `422` until the platform can enforce them.
VOICE
scoperequiredenum
organizationteamuser
Whose threshold this is: the organization's default, a team's, or one user's own.
team
teamIdrequiredstringThe team, for a team threshold.
2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70
userIdrequiredstringThe user, for a user threshold.
null
maxAmountrequirednumberWhat one person may spend on the usage type per month, in `currency`.
50
currencyrequiredstringISO 4217 code of the threshold's money: the team's cost-center currency, else the organization's primary.
EUR
periodrequiredenum
monthly
The period the spend is counted in. Always the calendar month.
monthly
validFromrequiredstringWhen the threshold opens (ISO 8601). A threshold lowered below someone's spend opens next month.
2026-10-01T00:00:00.000Z
validTorequiredstringWhen the threshold closes (ISO 8601), or null while it stands.
null
spendrequiredCostSpend or nullTheir spend this month against it. Null when no threshold is in force, or the spend could not be converted.
Show 3 child fields of spend
FieldTypeDescription
amountrequirednumberThe user's spend on the usage type this month, in `currency`.
12.4
currencyrequiredstringISO 4217 code: the threshold's money.
EUR
periodStartrequiredstringStart of the month the spend is counted in (ISO 8601).
2026-10-01T00:00:00.000Z
pausedUntilrequiredstringWhile the usage is paused on their lines for crossing the threshold: when the pause lifts (ISO 8601). Null otherwise.
null
GET/v1/users/{userId}/cost-thresholds/{usageType}

Request

curl -X GET "https://api.telgea.com/v1/users/9c1f2a6e-3b7d-4e0a-8f21-5d6c7b8a9e01/cost-thresholds/VOICE" \
  -H "x-api-key: $TELGEA_API_KEY"

Response

{
  "threshold": {
    "id": "5d0b2c1e-7f3a-4b6c-9e8d-2a1f0c3b4d5e",
    "usageType": "VOICE",
    "scope": "team",
    "teamId": "2f6b0d3a-8c1e-4a7f-9b2d-1e3c4d5f6a70",
    "userId": null,
    "maxAmount": 50,
    "currency": "EUR",
    "period": "monthly",
    "validFrom": "2026-10-01T00:00:00.000Z",
    "validTo": null
  },
  "spend": {
    "amount": 12.4,
    "currency": "EUR",
    "periodStart": "2026-10-01T00:00:00.000Z"
  },
  "pausedUntil": null
}
Need the raw schema? OpenAPI JSON