Luna Health API / API Reference / List patients List patients GET /patients
Retrieves a paginated list of patients in your organization, with optional filtering by active status and a search query over name. Read-only; supports sorting and pagination. Staff accounts are never returned.
Code samples Node.js const fetch = require('node-fetch');
async function callApi() {
const apiKey = 'YOUR_API_KEY';
const active = 'your-active';
const query = 'your-query';
const rowsPerPage = 'your-rowsPerPage';
const page = 'your-page';
const sortDir = 'your-sortDir';
const queryString = new URLSearchParams({
active: active,
query: query,
rowsPerPage: rowsPerPage,
page: page,
sortDir: sortDir
}).toString();
const url = `https://account.lunahealth.app/api/patients` + (queryString ? `?${queryString}` : '');
try {
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error(`API error: ${response.status}`);
}
const data = await response.json();
console.log(data);
return data;
} catch (error) {
console.error('Error calling API:', error);
throw error;
}
}
callApi();Python import requests
def call_api():
api_key = 'YOUR_API_KEY'
url = 'https://account.lunahealth.app/api/patients'
headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
params = {
'active': 'your-active',
'query': 'your-query',
'rowsPerPage': 'your-rowsPerPage',
'page': 'your-page',
'sortDir': 'your-sortDir'
}
try:
response = requests.get(
url,
headers=headers,
params=params
)
response.raise_for_status()
data = response.json()
print(data)
return data
except requests.exceptions.RequestException as e:
print(f'Error calling API: {e}')
raise
call_api()Parameters Name In Type Required Description activequery boolean No — queryquery string No — rowsPerPagequery number No — pagequery number No — sortDirquery string No —
Responses Status Description 200Successful response 400Invalid input data 401Authorization not provided 403Insufficient access 404Not found 500Internal server error
200 — Successful responseResponse fields Name Type Required Description itemsarray<object> Yes — metaobject Yes —
Example response {
"items": [
{
"id": "string",
"first_name": "string",
"last_name": "string",
"email": "string",
"type": "STAFF"
}
],
"meta": {
"totalRowCount": 0,
"page": 0,
"rowsPerPage": 0
}
}400 — Invalid input dataResponse fields Name Type Required Description messagestring Yes The error message codestring Yes The error code issuesarray<object> No An array of issues that were responsible for the error
Example response {
"code": "BAD_REQUEST",
"message": "Invalid input data",
"issues": []
}401 — Authorization not providedResponse fields Name Type Required Description messagestring Yes The error message codestring Yes The error code issuesarray<object> No An array of issues that were responsible for the error
Example response {
"code": "UNAUTHORIZED",
"message": "Authorization not provided",
"issues": []
}403 — Insufficient accessResponse fields Name Type Required Description messagestring Yes The error message codestring Yes The error code issuesarray<object> No An array of issues that were responsible for the error
Example response {
"code": "FORBIDDEN",
"message": "Insufficient access",
"issues": []
}404 — Not foundResponse fields Name Type Required Description messagestring Yes The error message codestring Yes The error code issuesarray<object> No An array of issues that were responsible for the error
Example response {
"code": "NOT_FOUND",
"message": "Not found",
"issues": []
}500 — Internal server errorResponse fields Name Type Required Description messagestring Yes The error message codestring Yes The error code issuesarray<object> No An array of issues that were responsible for the error
Example response {
"code": "INTERNAL_SERVER_ERROR",
"message": "Internal server error",
"issues": []
}Open in interactive reference →