solarOS Organization API

Organization API

Complete a Service Appointment

Transitions an in-progress appointment to COMPLETED. The optional body accepts completedAt and notes.

/api/v1/service-appointments/{id}/complete

Transitions an in-progress appointment to COMPLETED. The optional body accepts completedAt and notes.

Complete a Service Appointment. Use an organization API key with service_appointments:complete. Check the response envelope and meta.requestId before triggering dependent workflow steps.

Required scopes

service_appointments:completeIdempotency-Key required

Parameters

NameInTypeDescription
idrequiredpathstringService Appointment identifier returned by the Organization API.

Request body

object
FieldTypeDescription
completedAtstring | nullOptional unless marked required.
notesstring | nullOptional unless marked required.
reasonCUSTOMER_REQUEST | TECH_UNAVAILABLE | WEATHER | RESCHEDULED | NO_SHOW | OTHEROptional unless marked required.
completeserviceappointmentRequest
{
  "completedAt": "2026-08-13T20:05:00Z",
  "notes": "Work completed."
}

Responses

200

Complete action envelope

#/components/schemas/OrgApiActionEnvelope

401

Missing or invalid organization API key

#/components/schemas/OrgApiError

402

Organization billing access or an endpoint-specific business quota denied the request

#/components/schemas/OrgApiError

403

Missing required scope: service_appointments:complete

#/components/schemas/OrgApiError

429

Rate limit exceeded

#/components/schemas/OrgApiError

Errors

401 Missing or invalid organization API key402 Organization billing access or an endpoint-specific business quota denied the request403 Missing required scope: service_appointments:complete429 Rate limit exceeded

Static examples

curl -X POST "$SOLAROS_BASE_URL/api/v1/service-appointments/$SOLAROS_SERVICE_APPOINTMENT/complete" \
  -H "Authorization: Bearer $SOLAROS_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $SOLAROS_IDEMPOTENCY_KEY" \
  --data '{"completedAt":"2026-08-13T20:05:00Z","notes":"Work completed."}'