Luna SaludReferencia de la APILuna Salud

Reagendar una cita

POST/appointments/{id}/reschedule

Mueve una cita de su organización a una nueva hora de inicio, la asigna a otro profesional de salud, o ambas cosas. Envíe startTime, staffId o ambos. La cita conserva su ID y su duración. Debe estar en PENDING o CONFIRMED, ser presencial, tener un solo profesional y no haber comenzado. El nuevo horario debe ser futuro, estar dentro de la disponibilidad del profesional y estar libre; use GET /availability para encontrar horarios disponibles. Un nuevo profesional debe ofrecer el servicio de la cita. Los recordatorios pendientes se mueven a la nueva hora, se notifica a los profesionales y se envía un webhook appointment.updated. Al paciente solo se le notifica cuando notifyPatient es true y la cita está en CONFIRMED, según la configuración de notificaciones de cambios de cita de su clínica (correo, WhatsApp, SMS), y entonces también recibe los recordatorios habituales de su clínica para la nueva hora; por defecto no se le envía nada. Reagendar al horario y profesional que la cita ya tiene la devuelve sin cambios, así que los reintentos son seguros. Requiere una clave de API con permiso de escritura.

Ejemplos de código

Node.js

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

async function llamarApi() {
  const claveApi = 'YOUR_API_KEY';
  const url = `https://account.lunahealth.app/api/appointments/{id}/reschedule`;
  const requestBody = {
    // Agregue sus datos del cuerpo de la solicitud aquí
  };

  try {
    const response = await fetch(url, {
      method: 'POST',
      headers: {
        'Authorization': `Bearer ${claveApi}`,
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(requestBody)
    });
    
    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 al llamar a la API:', error);
    throw error;
  }
}

llamarApi();

Python

import requests

def llamarApi():
    claveApi = 'YOUR_API_KEY'
    
    url = 'https://account.lunahealth.app/api/appointments/{id}/reschedule'
    
    headers = {
        'Authorization': f'Bearer {claveApi}',
        'Content-Type': 'application/json'
    }
    
    params = {

    }
    
    # Agregue sus datos del cuerpo de la solicitud aquí
    request_body = {}
        try:
        response = requests.post(
            url,
            headers=headers,
            params=params,
            json=request_body
        )
        response.raise_for_status()
        
        data = response.json()
        print(data)
        return data
    except requests.exceptions.RequestException as e:
        print(f'Error al llamar a la API: {e}')
        raise

llamarApi()

Parámetros

NombreUbicaciónTipoRequeridoDescripción
idpathstringSíIdentificador único

Cuerpo de la solicitud

Requerido

Campos de la solicitud

NombreTipoRequeridoDescripción
startTimestring (date-time)NoHora de inicio en ISO 8601 con desfase UTC, por ejemplo un start_time de GET /availability
staffIdstringNoID del profesional de salud que atenderá al paciente
notifyPatientbooleanNoEnvía al paciente un mensaje de cancelación según la configuración de cancelaciones de su clínica. Por defecto es false.

Ejemplo de solicitud

{
  "startTime": "2025-01-01T00:00:00Z",
  "staffId": "string",
  "notifyPatient": true
}

Respuestas

EstadoDescripción
200Respuesta exitosa
400Datos de entrada no válidos
401Autorización no proporcionada
403Acceso insuficiente
500Error interno del servidor

200 — Respuesta exitosa

Campos de la respuesta

NombreTipoRequeridoDescripción
idstringSí—
statusstringSí—
typestringSí—
titlestringnullSí—
descriptionstringnullSí—
start_timestringSí—
end_timestringSí—
telemedicinebooleanSí—
created_atstringSí—
updated_atstringSí—
patientobject | nullSí—
staffsarray<object>Sí—
serviceobject | nullSí—
locationobject | nullSí—

Ejemplo de respuesta

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

400 — Datos de entrada no válidos

Campos de la respuesta

NombreTipoRequeridoDescripción
messagestringSíThe error message
codestringSíThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Ejemplo de respuesta

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

401 — Autorización no proporcionada

Campos de la respuesta

NombreTipoRequeridoDescripción
messagestringSíThe error message
codestringSíThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Ejemplo de respuesta

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

403 — Acceso insuficiente

Campos de la respuesta

NombreTipoRequeridoDescripción
messagestringSíThe error message
codestringSíThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Ejemplo de respuesta

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

500 — Error interno del servidor

Campos de la respuesta

NombreTipoRequeridoDescripción
messagestringSíThe error message
codestringSíThe error code
issuesarray<object>NoAn array of issues that were responsible for the error

Ejemplo de respuesta

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