Luna SaludAPI ReferenceLuna Salud

List appointments

GET/appointments

Retrieves a paginated list of appointments for your organization. Supports filtering by date range, status, and patient.

Code samples

Node.js

const fetch = require('node-fetch');

async function callApi() {
  const apiKey = 'YOUR_API_KEY';
  const from = 'your-from';
  const to = 'your-to';
  const status = 'your-status';
  const patientId = 'your-patientId';
  const rowsPerPage = 'your-rowsPerPage';
  const page = 'your-page';
  const sortDir = 'your-sortDir';

const queryString = new URLSearchParams({
    from: from,
    to: to,
    status: status,
    patientId: patientId,
    rowsPerPage: rowsPerPage,
    page: page,
    sortDir: sortDir
  }).toString();

  const url = `https://account.lunahealth.app/api/appointments` + (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/appointments'
    
    headers = {
        'Authorization': f'Bearer {api_key}',
        'Content-Type': 'application/json'
    }
    
    params = {
    'from': 'your-from',
    'to': 'your-to',
    'status': 'your-status',
    'patientId': 'your-patientId',
    '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

NameInTypeRequiredDescription
fromquerystring (date-time)No
toquerystring (date-time)No
statusquerystringNo
patientIdquerystringNo
rowsPerPagequerynumberNo
pagequerynumberNo
sortDirquerystringNo

Responses

StatusDescription
200Successful response
400Invalid input data
401Authorization not provided
403Insufficient access
404Not found
500Internal server error

200 — Successful response

Response fields

NameTypeRequiredDescription
itemsarray<object>Yes
metaobjectYes

Example response

{
  "items": [
    {
      "id": "string",
      "status": "NEW",
      "type": "APPOINTMENT",
      "title": "string",
      "description": "string",
      "start_time": "string",
      "end_time": "string",
      "telemedicine": true,
      "created_at": "string",
      "updated_at": "string",
      "patient": {
        "id": "string",
        "first_name": "string",
        "last_name": "string",
        "email": "string"
      },
      "staffs": [
        {
          "id": "string",
          "first_name": "string",
          "last_name": "string"
        }
      ],
      "service": {
        "id": "string",
        "name": "string"
      },
      "location": {
        "id": "string",
        "name": "string"
      }
    }
  ],
  "meta": {
    "totalRowCount": 0,
    "page": 0,
    "rowsPerPage": 0
  }
}

400 — Invalid input data

Response fields

NameTypeRequiredDescription
messagestringYesThe error message
codestringYesThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Example response

{
  "code": "BAD_REQUEST",
  "message": "Invalid input data",
  "issues": []
}

401 — Authorization not provided

Response fields

NameTypeRequiredDescription
messagestringYesThe error message
codestringYesThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Example response

{
  "code": "UNAUTHORIZED",
  "message": "Authorization not provided",
  "issues": []
}

403 — Insufficient access

Response fields

NameTypeRequiredDescription
messagestringYesThe error message
codestringYesThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Example response

{
  "code": "FORBIDDEN",
  "message": "Insufficient access",
  "issues": []
}

404 — Not found

Response fields

NameTypeRequiredDescription
messagestringYesThe error message
codestringYesThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Example response

{
  "code": "NOT_FOUND",
  "message": "Not found",
  "issues": []
}

500 — Internal server error

Response fields

NameTypeRequiredDescription
messagestringYesThe error message
codestringYesThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Example response

{
  "code": "INTERNAL_SERVER_ERROR",
  "message": "Internal server error",
  "issues": []
}